[MOB-2] Job Manager (#1114)
* add job manager modal and button * cleanup directories and add card to debug screen * expo sdk 49 * update pods * updated native android files * updated native ios files * pods being cringe * update hermes * podfile * big update packages * fix and upgrade animations to reanimated 3 * nice types moti * clean imports * upgrade react-hook-form (fix type) * move stuff to sd/client and some organization * camel case * i liek switch * Merge iconImg & circleIcon props * wip * copy changes to mobile * move job context and job progress to client and also use it on mobile * pnpm-lock * (wip) - make job swipeable + styling * job progress bar and more style tweaks * no spring animation on progress bar pls * new loading animation * padding and pnpm lock * indeterminate progress bar * cleanup & update packages etc * leave some todos for future * fix types * monorepo types :) --------- Co-authored-by: Oscar Beaumont <oscar@otbeaumont.me>
@@ -42,7 +42,7 @@ export function lockAppTheme(themeType: AppThemeType) {
|
||||
return invoke()<null>("lock_app_theme", { themeType })
|
||||
}
|
||||
|
||||
export type RevealItem = { Location: { id: number } } | { FilePath: { id: number } }
|
||||
export type AppThemeType = "Auto" | "Light" | "Dark"
|
||||
export type OpenFilePathResult = { t: "NoLibrary" } | { t: "NoFile"; c: number } | { t: "OpenError"; c: [number, string] } | { t: "AllGood"; c: number } | { t: "Internal"; c: string }
|
||||
export type RevealItem = { Location: { id: number } } | { FilePath: { id: number } }
|
||||
export type OpenWithApplication = { url: string; name: string }
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
"react": "18.2.0",
|
||||
"react-burger-menu": "^3.0.9",
|
||||
"react-dom": "^18.2.0",
|
||||
"react-hook-form": "^7.43.9",
|
||||
"react-hook-form": "~7.45.2",
|
||||
"react-tsparticles": "^2.10.1",
|
||||
"reading-time": "^1.5.0",
|
||||
"rehype-autolink-headings": "^6.1.1",
|
||||
@@ -45,7 +45,7 @@
|
||||
"three": "^0.154",
|
||||
"tsparticles": "^2.9.3",
|
||||
"uuid": "^9.0.0",
|
||||
"zod": "^3.21.4"
|
||||
"zod": "~3.22.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@sd/config": "workspace:*",
|
||||
|
||||
77
apps/mobile/.gitignore
vendored
@@ -1,55 +1,34 @@
|
||||
# OSX
|
||||
#
|
||||
.DS_Store
|
||||
|
||||
# Xcode
|
||||
#
|
||||
build/
|
||||
*.pbxuser
|
||||
!default.pbxuser
|
||||
*.mode1v3
|
||||
!default.mode1v3
|
||||
*.mode2v3
|
||||
!default.mode2v3
|
||||
*.perspectivev3
|
||||
!default.perspectivev3
|
||||
xcuserdata
|
||||
*.xccheckout
|
||||
*.moved-aside
|
||||
DerivedData
|
||||
*.hmap
|
||||
*.ipa
|
||||
*.xcuserstate
|
||||
project.xcworkspace
|
||||
|
||||
# Android/IntelliJ
|
||||
#
|
||||
build/
|
||||
.idea
|
||||
.gradle
|
||||
local.properties
|
||||
*.iml
|
||||
*.hprof
|
||||
.cxx/
|
||||
*.keystore
|
||||
!debug.keystore
|
||||
|
||||
# node.js
|
||||
#
|
||||
# dependencies
|
||||
node_modules/
|
||||
npm-debug.log
|
||||
yarn-error.log
|
||||
|
||||
# Bundle artifacts
|
||||
*.jsbundle
|
||||
|
||||
# CocoaPods
|
||||
/ios/Pods/
|
||||
|
||||
# Temporary files created by Metro to check the health of the file watcher
|
||||
.metro-health-check*
|
||||
|
||||
# Expo
|
||||
.expo/
|
||||
dist/
|
||||
web-build/
|
||||
dist/
|
||||
|
||||
# Native
|
||||
*.orig.*
|
||||
*.jks
|
||||
*.p8
|
||||
*.p12
|
||||
*.key
|
||||
*.mobileprovision
|
||||
|
||||
# Metro
|
||||
.metro-health-check*
|
||||
|
||||
# debug
|
||||
npm-debug.*
|
||||
yarn-debug.*
|
||||
yarn-error.*
|
||||
|
||||
# macOS
|
||||
.DS_Store
|
||||
*.pem
|
||||
|
||||
# local env files
|
||||
.env*.local
|
||||
|
||||
# typescript
|
||||
*.tsbuildinfo
|
||||
|
||||
2
apps/mobile/android/.gitignore
vendored
@@ -12,4 +12,4 @@ local.properties
|
||||
*.hprof
|
||||
|
||||
# Bundle artifacts
|
||||
*.jsbundle
|
||||
*.jsbundle
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
apply plugin: "com.android.application"
|
||||
apply plugin: "com.facebook.react"
|
||||
|
||||
import com.android.build.OutputFile
|
||||
|
||||
// SPACEDRIVE CODE
|
||||
|
||||
apply plugin: 'org.mozilla.rust-android-gradle.rust-android'
|
||||
@@ -33,16 +31,7 @@ tasks.whenTaskAdded { task ->
|
||||
}
|
||||
|
||||
// END SPACEDRIVE CODE
|
||||
|
||||
def projectRoot = rootDir.getAbsoluteFile().getParentFile().getAbsolutePath()
|
||||
def expoDebuggableVariants = ['debug']
|
||||
// Override `debuggableVariants` for expo-updates debugging
|
||||
if (System.getenv('EX_UPDATES_NATIVE_DEBUG') == "1") {
|
||||
react {
|
||||
expoDebuggableVariants = []
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* This is the configuration block to customize your React Native Android app.
|
||||
@@ -52,17 +41,20 @@ react {
|
||||
entryFile = file(["node", "-e", "require('expo/scripts/resolveAppEntry')", projectRoot, "android", "absolute"].execute(null, rootDir).text.trim())
|
||||
reactNativeDir = new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()
|
||||
hermesCommand = new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + "/sdks/hermesc/%OS-BIN%/hermesc"
|
||||
debuggableVariants = expoDebuggableVariants
|
||||
codegenDir = new File(["node", "--print", "require.resolve('@react-native/codegen/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()
|
||||
|
||||
// Use Expo CLI to bundle the app, this ensures the Metro config
|
||||
// works correctly with Expo projects.
|
||||
cliFile = new File(["node", "--print", "require.resolve('@expo/cli')"].execute(null, rootDir).text.trim())
|
||||
bundleCommand = "export:embed"
|
||||
|
||||
/* Folders */
|
||||
// The root of your project, i.e. where "package.json" lives. Default is '..'
|
||||
// root = file("../")
|
||||
// The folder where the react-native NPM package is. Default is ../node_modules/react-native
|
||||
// reactNativeDir = file("../node_modules/react-native")
|
||||
// The folder where the react-native Codegen package is. Default is ../node_modules/react-native-codegen
|
||||
// codegenDir = file("../node_modules/react-native-codegen")
|
||||
// The cli.js file which is the React Native CLI entrypoint. Default is ../node_modules/react-native/cli.js
|
||||
// cliFile = file("../node_modules/react-native/cli.js")
|
||||
// The folder where the react-native Codegen package is. Default is ../node_modules/@react-native/codegen
|
||||
// codegenDir = file("../node_modules/@react-native/codegen")
|
||||
|
||||
/* Variants */
|
||||
// The list of variants to that are debuggable. For those we're going to
|
||||
@@ -73,9 +65,7 @@ react {
|
||||
/* Bundling */
|
||||
// A list containing the node command and its flags. Default is just 'node'.
|
||||
// nodeExecutableAndArgs = ["node"]
|
||||
//
|
||||
// The command to run when bundling. By default is 'bundle'
|
||||
// bundleCommand = "ram-bundle"
|
||||
|
||||
//
|
||||
// The path to the CLI configuration file. Default is empty.
|
||||
// bundleConfig = file(../rn-cli.config.js)
|
||||
@@ -98,19 +88,6 @@ react {
|
||||
// hermesFlags = ["-O", "-output-source-map"]
|
||||
}
|
||||
|
||||
// Override `hermesEnabled` by `expo.jsEngine`
|
||||
ext {
|
||||
hermesEnabled = (findProperty('expo.jsEngine') ?: "hermes") == "hermes"
|
||||
}
|
||||
|
||||
/**
|
||||
* Set this to true to create four separate APKs instead of one,
|
||||
* one for each native architecture. This is useful if you don't
|
||||
* use App Bundles (https://developer.android.com/guide/app-bundle/)
|
||||
* and want to have separate APKs to upload to the Play Store.
|
||||
*/
|
||||
def enableSeparateBuildPerCPUArchitecture = false
|
||||
|
||||
/**
|
||||
* Set this to true to Run Proguard on Release builds to minify the Java bytecode.
|
||||
*/
|
||||
@@ -129,37 +106,20 @@ def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInRelea
|
||||
*/
|
||||
def jscFlavor = 'org.webkit:android-jsc:+'
|
||||
|
||||
/**
|
||||
* Private function to get the list of Native Architectures you want to build.
|
||||
* This reads the value from reactNativeArchitectures in your gradle.properties
|
||||
* file and works together with the --active-arch-only flag of react-native run-android.
|
||||
*/
|
||||
def reactNativeArchitectures() {
|
||||
def value = project.getProperties().get("reactNativeArchitectures")
|
||||
return value ? value.split(",") : ["armeabi-v7a", "x86", "x86_64", "arm64-v8a"]
|
||||
}
|
||||
|
||||
android {
|
||||
ndkVersion rootProject.ext.ndkVersion
|
||||
|
||||
compileSdkVersion rootProject.ext.compileSdkVersion
|
||||
|
||||
namespace 'com.spacedrive.app'
|
||||
namespace "com.spacedrive"
|
||||
defaultConfig {
|
||||
applicationId 'com.spacedrive.app'
|
||||
minSdkVersion rootProject.ext.minSdkVersion
|
||||
targetSdkVersion rootProject.ext.targetSdkVersion
|
||||
versionCode 1
|
||||
versionName "0.0.1"
|
||||
}
|
||||
|
||||
splits {
|
||||
abi {
|
||||
reset()
|
||||
enable enableSeparateBuildPerCPUArchitecture
|
||||
universalApk false // If true, also generate a universal APK
|
||||
include (*reactNativeArchitectures())
|
||||
}
|
||||
buildConfigField("boolean", "REACT_NATIVE_UNSTABLE_USE_RUNTIME_SCHEDULER_ALWAYS", (findProperty("reactNative.unstable_useRuntimeSchedulerAlways") ?: true).toString())
|
||||
}
|
||||
signingConfigs {
|
||||
debug {
|
||||
@@ -177,26 +137,11 @@ android {
|
||||
// Caution! In production, you need to generate your own keystore file.
|
||||
// see https://reactnative.dev/docs/signed-apk-android.
|
||||
signingConfig signingConfigs.debug
|
||||
shrinkResources (findProperty('android.enableShrinkResourcesInReleaseBuilds')?.toBoolean() ?: false)
|
||||
minifyEnabled enableProguardInReleaseBuilds
|
||||
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
|
||||
}
|
||||
}
|
||||
|
||||
// applicationVariants are e.g. debug, release
|
||||
applicationVariants.all { variant ->
|
||||
variant.outputs.each { output ->
|
||||
// For each separate APK per architecture, set a unique version code as described here:
|
||||
// https://developer.android.com/studio/build/configure-apk-splits.html
|
||||
// Example: versionCode 1 will generate 1001 for armeabi-v7a, 1002 for x86, etc.
|
||||
def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4]
|
||||
def abi = output.getFilter(OutputFile.ABI)
|
||||
if (abi != null) { // null for the universal-debug, universal-release variants
|
||||
output.versionCodeOverride =
|
||||
defaultConfig.versionCode * 1000 + versionCodes.get(abi)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Apply static values from `gradle.properties` to the `android.packagingOptions`
|
||||
@@ -248,8 +193,6 @@ dependencies {
|
||||
}
|
||||
}
|
||||
|
||||
implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.0.0")
|
||||
|
||||
debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}")
|
||||
debugImplementation("com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}") {
|
||||
exclude group:'com.squareup.okhttp3', module:'okhttp'
|
||||
|
||||
2
apps/mobile/android/app/proguard-rules.pro
vendored
@@ -11,4 +11,4 @@
|
||||
-keep class com.swmansion.reanimated.** { *; }
|
||||
-keep class com.facebook.react.turbomodule.** { *; }
|
||||
|
||||
# Add any project specific keep options here:
|
||||
# Add any project specific keep options here:
|
||||
|
||||
@@ -72,4 +72,4 @@ public class ReactNativeFlipper {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,11 +14,10 @@
|
||||
</intent>
|
||||
</queries>
|
||||
<application android:name=".MainApplication" android:label="@string/app_name"
|
||||
android:icon="@mipmap/ic_launcher" android:roundIcon="@mipmap/ic_launcher_round"
|
||||
android:allowBackup="true" android:theme="@style/AppTheme" android:usesCleartextTraffic="true"
|
||||
android:icon="@mipmap/ic_launcher" android:allowBackup="true" android:theme="@style/AppTheme"
|
||||
android:requestLegacyExternalStorage="true">
|
||||
<meta-data android:name="expo.modules.updates.ENABLED" android:value="false" />
|
||||
<meta-data android:name="expo.modules.updates.EXPO_SDK_VERSION" android:value="48.0.0" />
|
||||
<meta-data android:name="expo.modules.updates.EXPO_SDK_VERSION" android:value="49.0.0" />
|
||||
<meta-data android:name="expo.modules.updates.EXPO_UPDATES_CHECK_ON_LAUNCH"
|
||||
android:value="ALWAYS" />
|
||||
<meta-data android:name="expo.modules.updates.EXPO_UPDATES_LAUNCH_WAIT_MS" android:value="0" />
|
||||
|
||||
@@ -40,10 +40,7 @@ public class MainActivity extends ReactActivity {
|
||||
this,
|
||||
getMainComponentName(),
|
||||
// If you opted-in for the New Architecture, we enable the Fabric Renderer.
|
||||
DefaultNewArchitectureEntryPoint.getFabricEnabled(), // fabricEnabled
|
||||
// If you opted-in for the New Architecture, we enable Concurrent React (i.e. React 18).
|
||||
DefaultNewArchitectureEntryPoint.getConcurrentReactEnabled() // concurrentRootEnabled
|
||||
));
|
||||
DefaultNewArchitectureEntryPoint.getFabricEnabled()));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -65,4 +62,4 @@ public class MainActivity extends ReactActivity {
|
||||
// because it's doing more than {@link Activity#moveTaskToBack} in fact.
|
||||
super.invokeDefaultOnBackPressed();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ import com.facebook.react.PackageList;
|
||||
import com.facebook.react.ReactApplication;
|
||||
import com.facebook.react.ReactNativeHost;
|
||||
import com.facebook.react.ReactPackage;
|
||||
import com.facebook.react.config.ReactFeatureFlags;
|
||||
import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint;
|
||||
import com.facebook.react.defaults.DefaultReactNativeHost;
|
||||
import com.facebook.soloader.SoLoader;
|
||||
@@ -37,7 +38,7 @@ public class MainApplication extends Application implements ReactApplication {
|
||||
|
||||
@Override
|
||||
protected String getJSMainModuleName() {
|
||||
return "index";
|
||||
return ".expo/.virtual-metro-entry";
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -60,6 +61,9 @@ public class MainApplication extends Application implements ReactApplication {
|
||||
public void onCreate() {
|
||||
super.onCreate();
|
||||
SoLoader.init(this, /* native exopackage */ false);
|
||||
if (!BuildConfig.REACT_NATIVE_UNSTABLE_USE_RUNTIME_SCHEDULER_ALWAYS) {
|
||||
ReactFeatureFlags.unstable_useRuntimeSchedulerAlways = false;
|
||||
}
|
||||
if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
|
||||
// If you opted-in for the New Architecture, we load the native entry point for this app.
|
||||
DefaultNewArchitectureEntryPoint.load();
|
||||
@@ -73,4 +77,4 @@ public class MainApplication extends Application implements ReactApplication {
|
||||
super.onConfigurationChanged(newConfig);
|
||||
ApplicationLifecycleDispatcher.onConfigurationChanged(this, newConfig);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 78 KiB |
|
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 78 KiB |
|
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 78 KiB |
|
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 78 KiB |
|
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 78 KiB |
@@ -20,7 +20,7 @@
|
||||
android:insetBottom="@dimen/abc_edit_text_inset_bottom_material">
|
||||
|
||||
<selector>
|
||||
<!--
|
||||
<!--
|
||||
This file is a copy of abc_edit_text_material (https://bit.ly/3k8fX7I).
|
||||
The item below with state_pressed="false" and state_focused="false" causes a NullPointerException.
|
||||
NullPointerException:tempt to invoke virtual method 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable$ConstantState.newDrawable(android.content.res.Resources)'
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:drawable="@color/splashscreen_background" />
|
||||
<item android:drawable="@color/splashscreen_background"/>
|
||||
</layer-list>
|
||||
@@ -1,5 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@color/iconBackground"/>
|
||||
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
|
||||
</adaptive-icon>
|
||||
@@ -1,5 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@color/iconBackground"/>
|
||||
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
|
||||
</adaptive-icon>
|
||||
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 5.1 KiB |
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 5.1 KiB |
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 5.8 KiB |
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 3.2 KiB |
|
Before Width: | Height: | Size: 6.5 KiB After Width: | Height: | Size: 7.9 KiB |
|
Before Width: | Height: | Size: 6.5 KiB After Width: | Height: | Size: 7.9 KiB |
|
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 9.1 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 26 KiB |
@@ -1,6 +1,6 @@
|
||||
<resources>
|
||||
<color name="splashscreen_background">#000000</color>
|
||||
<color name="iconBackground">#ffffff</color>
|
||||
<color name="iconBackground">#FFFFFF</color>
|
||||
<color name="colorPrimary">#023c69</color>
|
||||
<color name="colorPrimaryDark">#000000</color>
|
||||
</resources>
|
||||
@@ -1,3 +1,5 @@
|
||||
<resources>
|
||||
<string name="app_name">Spacedrive</string>
|
||||
<string name="expo_splash_screen_resize_mode" translatable="false">contain</string>
|
||||
<string name="expo_splash_screen_status_bar_translucent" translatable="false">false</string>
|
||||
</resources>
|
||||
@@ -1,20 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
*
|
||||
* <p>This source code is licensed under the MIT license found in the LICENSE file in the root
|
||||
* directory of this source tree.
|
||||
*/
|
||||
package com.spacedrive.app;
|
||||
|
||||
import android.content.Context;
|
||||
import com.facebook.react.ReactInstanceManager;
|
||||
|
||||
/**
|
||||
* Class responsible of loading Flipper inside your React Native application. This is the release
|
||||
* flavor of it so it's empty as we don't want to load Flipper.
|
||||
*/
|
||||
public class ReactNativeFlipper {
|
||||
public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) {
|
||||
// Do nothing as we don't want to initialize Flipper on Release.
|
||||
}
|
||||
}
|
||||
@@ -6,9 +6,7 @@ buildscript {
|
||||
minSdkVersion = Integer.parseInt(findProperty('android.minSdkVersion') ?: '21')
|
||||
compileSdkVersion = Integer.parseInt(findProperty('android.compileSdkVersion') ?: '33')
|
||||
targetSdkVersion = Integer.parseInt(findProperty('android.targetSdkVersion') ?: '33')
|
||||
if (findProperty('android.kotlinVersion')) {
|
||||
kotlinVersion = findProperty('android.kotlinVersion')
|
||||
}
|
||||
kotlinVersion = findProperty('android.kotlinVersion') ?: '1.8.10'
|
||||
frescoVersion = findProperty('expo.frescoVersion') ?: '2.5.0'
|
||||
|
||||
// We use NDK 23 which has both M1 support and is the side-by-side NDK version from AGP.
|
||||
@@ -23,7 +21,7 @@ buildscript {
|
||||
}
|
||||
}
|
||||
dependencies {
|
||||
classpath('com.android.tools.build:gradle:7.4.1')
|
||||
classpath('com.android.tools.build:gradle:7.4.2')
|
||||
classpath('com.facebook.react:react-native-gradle-plugin')
|
||||
// Spacedrive -- Rust plugin.
|
||||
classpath('org.mozilla.rust-android-gradle:plugin:0.9.3')
|
||||
|
||||
@@ -26,7 +26,7 @@ android.useAndroidX=true
|
||||
android.enableJetifier=true
|
||||
|
||||
# Version of flipper SDK to use with React Native
|
||||
FLIPPER_VERSION=0.125.0
|
||||
FLIPPER_VERSION=0.182.0
|
||||
|
||||
# Use this property to specify which architecture you want to build.
|
||||
# You can also override it from the CLI using
|
||||
@@ -40,9 +40,9 @@ reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64
|
||||
# are providing them.
|
||||
newArchEnabled=false
|
||||
|
||||
# The hosted JavaScript engine
|
||||
# Supported values: expo.jsEngine = "hermes" | "jsc"
|
||||
expo.jsEngine=hermes
|
||||
# Use this property to enable or disable the Hermes JS engine.
|
||||
# If set to false, you will be using JSC instead.
|
||||
hermesEnabled=true
|
||||
|
||||
# Enable GIF support in React Native images (~200 B increase)
|
||||
expo.gif.enabled=true
|
||||
@@ -50,4 +50,9 @@ expo.gif.enabled=true
|
||||
expo.webp.enabled=true
|
||||
# Enable animated webp support (~3.4 MB increase)
|
||||
# Disabled by default because iOS doesn't support animated webp
|
||||
expo.webp.animated=false
|
||||
expo.webp.animated=false
|
||||
|
||||
# Enable network inspector
|
||||
EX_DEV_CLIENT_NETWORK_INSPECTOR=true
|
||||
|
||||
expo.jsEngine=hermes
|
||||
@@ -1,5 +1,6 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-all.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.1-all.zip
|
||||
networkTimeout=10000
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
zipStorePath=wrapper/dists
|
||||
|
||||
2
apps/mobile/android/gradlew
vendored
@@ -237,4 +237,4 @@ eval "set -- $(
|
||||
tr '\n' ' '
|
||||
)" '"$@"'
|
||||
|
||||
exec "$JAVACMD" "$@"
|
||||
exec "$JAVACMD" "$@"
|
||||
|
||||
2
apps/mobile/android/gradlew.bat
vendored
@@ -88,4 +88,4 @@ exit /b %EXIT_CODE%
|
||||
:mainEnd
|
||||
if "%OS%"=="Windows_NT" endlocal
|
||||
|
||||
:omega
|
||||
:omega
|
||||
|
||||
@@ -7,4 +7,4 @@ apply from: new File(["node", "--print", "require.resolve('@react-native-communi
|
||||
applyNativeModulesSettingsGradle(settings)
|
||||
|
||||
include ':app'
|
||||
includeBuild(new File(["node", "--print", "require.resolve('react-native-gradle-plugin/package.json')"].execute(null, rootDir).text.trim()).getParentFile())
|
||||
includeBuild(new File(["node", "--print", "require.resolve('@react-native/gradle-plugin/package.json')"].execute(null, rootDir).text.trim()).getParentFile())
|
||||
|
||||
@@ -9,15 +9,23 @@
|
||||
"scheme": "spacedrive",
|
||||
"platforms": ["ios", "android"],
|
||||
"userInterfaceStyle": "automatic",
|
||||
"icon": "./assets/icon.png",
|
||||
"updates": {
|
||||
"enabled": false,
|
||||
"fallbackToCacheTimeout": 0
|
||||
},
|
||||
"assetBundlePatterns": ["**/*"],
|
||||
"ios": {
|
||||
"supportsTablet": false
|
||||
"supportsTablet": false,
|
||||
"bundleIdentifier": "com.spacedrive.app"
|
||||
},
|
||||
"android": {
|
||||
"package": "com.spacedrive.app"
|
||||
},
|
||||
"splash": {
|
||||
"image": "./assets/splash.png",
|
||||
"backgroundColor": "#000000"
|
||||
},
|
||||
"android": {},
|
||||
"privacy": "hidden"
|
||||
}
|
||||
}
|
||||
|
||||
BIN
apps/mobile/assets/icon.png
Normal file
|
After Width: | Height: | Size: 380 KiB |
BIN
apps/mobile/assets/splash.png
Normal file
|
After Width: | Height: | Size: 81 KiB |
@@ -1 +1,11 @@
|
||||
export NODE_BINARY=$(command -v node)
|
||||
# This `.xcode.env` file is versioned and is used to source the environment
|
||||
# used when running script phases inside Xcode.
|
||||
# To customize your local environment, you can create an `.xcode.env.local`
|
||||
# file that is not versioned.
|
||||
|
||||
# NODE_BINARY variable contains the PATH to the node executable.
|
||||
#
|
||||
# Customize the NODE_BINARY variable here.
|
||||
# For example, to use nvm with brew, add the following line
|
||||
# . "$(brew --prefix nvm)/nvm.sh" --no-use
|
||||
export NODE_BINARY=$(command -v node)
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
require File.join(File.dirname(`node --print "require.resolve('expo/package.json')"`), "scripts/autolinking")
|
||||
require File.join(File.dirname(`node --print "require.resolve('react-native/package.json')"`), "scripts/react_native_pods")
|
||||
require File.join(File.dirname(`node --print "require.resolve('@react-native-community/cli-platform-ios/package.json')"`), "native_modules")
|
||||
|
||||
require 'json'
|
||||
podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {}
|
||||
|
||||
ENV['RCT_NEW_ARCH_ENABLED'] = podfile_properties['newArchEnabled'] == 'true' ? '1' : '0'
|
||||
ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']
|
||||
|
||||
platform :ios, podfile_properties['ios.deploymentTarget']
|
||||
install! 'cocoapods',
|
||||
@@ -61,8 +61,6 @@ target 'Spacedrive' do
|
||||
react_native_post_install(
|
||||
installer,
|
||||
config[:reactNativePath],
|
||||
# Set `mac_catalyst_enabled` to `true` in order to apply patches
|
||||
# necessary for Mac Catalyst builds
|
||||
:mac_catalyst_enabled => false
|
||||
)
|
||||
__apply_Xcode_12_5_M1_post_install_workaround(installer)
|
||||
|
||||
@@ -1,45 +1,49 @@
|
||||
PODS:
|
||||
- boost (1.76.0)
|
||||
- DoubleConversion (1.1.6)
|
||||
- EXApplication (5.1.1):
|
||||
- EXApplication (5.3.0):
|
||||
- ExpoModulesCore
|
||||
- EXConstants (14.2.1):
|
||||
- EXConstants (14.4.2):
|
||||
- ExpoModulesCore
|
||||
- EXFileSystem (15.2.2):
|
||||
- EXFileSystem (15.4.3):
|
||||
- ExpoModulesCore
|
||||
- EXFont (11.1.1):
|
||||
- EXFont (11.4.0):
|
||||
- ExpoModulesCore
|
||||
- EXMediaLibrary (15.2.3):
|
||||
- EXMediaLibrary (15.4.1):
|
||||
- ExpoModulesCore
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- React-Core
|
||||
- Expo (48.0.19):
|
||||
- Expo (49.0.8):
|
||||
- ExpoModulesCore
|
||||
- ExpoKeepAwake (12.0.1):
|
||||
- ExpoKeepAwake (12.3.0):
|
||||
- ExpoModulesCore
|
||||
- ExpoModulesCore (1.2.7):
|
||||
- ExpoModulesCore (1.5.10):
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- React-Core
|
||||
- React-NativeModulesApple
|
||||
- React-RCTAppDelegate
|
||||
- ReactCommon/turbomodule/core
|
||||
- EXSplashScreen (0.18.2):
|
||||
- EXSplashScreen (0.20.4):
|
||||
- ExpoModulesCore
|
||||
- React-Core
|
||||
- FBLazyVector (0.71.3)
|
||||
- FBReactNativeSpec (0.71.3):
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- RCTRequired (= 0.71.3)
|
||||
- RCTTypeSafety (= 0.71.3)
|
||||
- React-Core (= 0.71.3)
|
||||
- React-jsi (= 0.71.3)
|
||||
- ReactCommon/turbomodule/core (= 0.71.3)
|
||||
- React-Core
|
||||
- FBLazyVector (0.72.3)
|
||||
- FBReactNativeSpec (0.72.3):
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- RCTRequired (= 0.72.3)
|
||||
- RCTTypeSafety (= 0.72.3)
|
||||
- React-Core (= 0.72.3)
|
||||
- React-jsi (= 0.72.3)
|
||||
- ReactCommon/turbomodule/core (= 0.72.3)
|
||||
- fmt (6.2.1)
|
||||
- glog (0.3.5)
|
||||
- hermes-engine (0.71.3):
|
||||
- hermes-engine/Pre-built (= 0.71.3)
|
||||
- hermes-engine/Pre-built (0.71.3)
|
||||
- hermes-engine (0.72.3):
|
||||
- hermes-engine/Pre-built (= 0.72.3)
|
||||
- hermes-engine/Pre-built (0.72.3)
|
||||
- libevent (2.1.12)
|
||||
- lottie-ios (3.4.4)
|
||||
- lottie-react-native (5.1.4):
|
||||
- lottie-ios (~> 3.4.0)
|
||||
- lottie-ios (4.2.0)
|
||||
- lottie-react-native (6.2.0):
|
||||
- lottie-ios (~> 4.2.0)
|
||||
- React-Core
|
||||
- RCT-Folly (2021.07.22.00):
|
||||
- boost
|
||||
@@ -58,27 +62,29 @@ PODS:
|
||||
- fmt (~> 6.2.1)
|
||||
- glog
|
||||
- libevent
|
||||
- RCTRequired (0.71.3)
|
||||
- RCTTypeSafety (0.71.3):
|
||||
- FBLazyVector (= 0.71.3)
|
||||
- RCTRequired (= 0.71.3)
|
||||
- React-Core (= 0.71.3)
|
||||
- React (0.71.3):
|
||||
- React-Core (= 0.71.3)
|
||||
- React-Core/DevSupport (= 0.71.3)
|
||||
- React-Core/RCTWebSocket (= 0.71.3)
|
||||
- React-RCTActionSheet (= 0.71.3)
|
||||
- React-RCTAnimation (= 0.71.3)
|
||||
- React-RCTBlob (= 0.71.3)
|
||||
- React-RCTImage (= 0.71.3)
|
||||
- React-RCTLinking (= 0.71.3)
|
||||
- React-RCTNetwork (= 0.71.3)
|
||||
- React-RCTSettings (= 0.71.3)
|
||||
- React-RCTText (= 0.71.3)
|
||||
- React-RCTVibration (= 0.71.3)
|
||||
- React-callinvoker (0.71.3)
|
||||
- React-Codegen (0.71.3):
|
||||
- RCTRequired (0.72.3)
|
||||
- RCTTypeSafety (0.72.3):
|
||||
- FBLazyVector (= 0.72.3)
|
||||
- RCTRequired (= 0.72.3)
|
||||
- React-Core (= 0.72.3)
|
||||
- React (0.72.3):
|
||||
- React-Core (= 0.72.3)
|
||||
- React-Core/DevSupport (= 0.72.3)
|
||||
- React-Core/RCTWebSocket (= 0.72.3)
|
||||
- React-RCTActionSheet (= 0.72.3)
|
||||
- React-RCTAnimation (= 0.72.3)
|
||||
- React-RCTBlob (= 0.72.3)
|
||||
- React-RCTImage (= 0.72.3)
|
||||
- React-RCTLinking (= 0.72.3)
|
||||
- React-RCTNetwork (= 0.72.3)
|
||||
- React-RCTSettings (= 0.72.3)
|
||||
- React-RCTText (= 0.72.3)
|
||||
- React-RCTVibration (= 0.72.3)
|
||||
- React-callinvoker (0.72.3)
|
||||
- React-Codegen (0.72.3):
|
||||
- DoubleConversion
|
||||
- FBReactNativeSpec
|
||||
- glog
|
||||
- hermes-engine
|
||||
- RCT-Folly
|
||||
- RCTRequired
|
||||
@@ -86,319 +92,388 @@ PODS:
|
||||
- React-Core
|
||||
- React-jsi
|
||||
- React-jsiexecutor
|
||||
- React-NativeModulesApple
|
||||
- React-rncore
|
||||
- ReactCommon/turbomodule/bridging
|
||||
- ReactCommon/turbomodule/core
|
||||
- React-Core (0.71.3):
|
||||
- React-Core (0.72.3):
|
||||
- glog
|
||||
- hermes-engine
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- React-Core/Default (= 0.71.3)
|
||||
- React-cxxreact (= 0.71.3)
|
||||
- React-Core/Default (= 0.72.3)
|
||||
- React-cxxreact
|
||||
- React-hermes
|
||||
- React-jsi (= 0.71.3)
|
||||
- React-jsiexecutor (= 0.71.3)
|
||||
- React-perflogger (= 0.71.3)
|
||||
- React-jsi
|
||||
- React-jsiexecutor
|
||||
- React-perflogger
|
||||
- React-runtimeexecutor
|
||||
- React-utils
|
||||
- SocketRocket (= 0.6.1)
|
||||
- Yoga
|
||||
- React-Core/CoreModulesHeaders (0.71.3):
|
||||
- React-Core/CoreModulesHeaders (0.72.3):
|
||||
- glog
|
||||
- hermes-engine
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.71.3)
|
||||
- React-cxxreact
|
||||
- React-hermes
|
||||
- React-jsi (= 0.71.3)
|
||||
- React-jsiexecutor (= 0.71.3)
|
||||
- React-perflogger (= 0.71.3)
|
||||
- React-jsi
|
||||
- React-jsiexecutor
|
||||
- React-perflogger
|
||||
- React-runtimeexecutor
|
||||
- React-utils
|
||||
- SocketRocket (= 0.6.1)
|
||||
- Yoga
|
||||
- React-Core/Default (0.71.3):
|
||||
- React-Core/Default (0.72.3):
|
||||
- glog
|
||||
- hermes-engine
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- React-cxxreact (= 0.71.3)
|
||||
- React-cxxreact
|
||||
- React-hermes
|
||||
- React-jsi (= 0.71.3)
|
||||
- React-jsiexecutor (= 0.71.3)
|
||||
- React-perflogger (= 0.71.3)
|
||||
- React-jsi
|
||||
- React-jsiexecutor
|
||||
- React-perflogger
|
||||
- React-runtimeexecutor
|
||||
- React-utils
|
||||
- SocketRocket (= 0.6.1)
|
||||
- Yoga
|
||||
- React-Core/DevSupport (0.71.3):
|
||||
- React-Core/DevSupport (0.72.3):
|
||||
- glog
|
||||
- hermes-engine
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- React-Core/Default (= 0.71.3)
|
||||
- React-Core/RCTWebSocket (= 0.71.3)
|
||||
- React-cxxreact (= 0.71.3)
|
||||
- React-Core/Default (= 0.72.3)
|
||||
- React-Core/RCTWebSocket (= 0.72.3)
|
||||
- React-cxxreact
|
||||
- React-hermes
|
||||
- React-jsi (= 0.71.3)
|
||||
- React-jsiexecutor (= 0.71.3)
|
||||
- React-jsinspector (= 0.71.3)
|
||||
- React-perflogger (= 0.71.3)
|
||||
- React-jsi
|
||||
- React-jsiexecutor
|
||||
- React-jsinspector (= 0.72.3)
|
||||
- React-perflogger
|
||||
- React-runtimeexecutor
|
||||
- React-utils
|
||||
- SocketRocket (= 0.6.1)
|
||||
- Yoga
|
||||
- React-Core/RCTActionSheetHeaders (0.71.3):
|
||||
- React-Core/RCTActionSheetHeaders (0.72.3):
|
||||
- glog
|
||||
- hermes-engine
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.71.3)
|
||||
- React-cxxreact
|
||||
- React-hermes
|
||||
- React-jsi (= 0.71.3)
|
||||
- React-jsiexecutor (= 0.71.3)
|
||||
- React-perflogger (= 0.71.3)
|
||||
- React-jsi
|
||||
- React-jsiexecutor
|
||||
- React-perflogger
|
||||
- React-runtimeexecutor
|
||||
- React-utils
|
||||
- SocketRocket (= 0.6.1)
|
||||
- Yoga
|
||||
- React-Core/RCTAnimationHeaders (0.71.3):
|
||||
- React-Core/RCTAnimationHeaders (0.72.3):
|
||||
- glog
|
||||
- hermes-engine
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.71.3)
|
||||
- React-cxxreact
|
||||
- React-hermes
|
||||
- React-jsi (= 0.71.3)
|
||||
- React-jsiexecutor (= 0.71.3)
|
||||
- React-perflogger (= 0.71.3)
|
||||
- React-jsi
|
||||
- React-jsiexecutor
|
||||
- React-perflogger
|
||||
- React-runtimeexecutor
|
||||
- React-utils
|
||||
- SocketRocket (= 0.6.1)
|
||||
- Yoga
|
||||
- React-Core/RCTBlobHeaders (0.71.3):
|
||||
- React-Core/RCTBlobHeaders (0.72.3):
|
||||
- glog
|
||||
- hermes-engine
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.71.3)
|
||||
- React-cxxreact
|
||||
- React-hermes
|
||||
- React-jsi (= 0.71.3)
|
||||
- React-jsiexecutor (= 0.71.3)
|
||||
- React-perflogger (= 0.71.3)
|
||||
- React-jsi
|
||||
- React-jsiexecutor
|
||||
- React-perflogger
|
||||
- React-runtimeexecutor
|
||||
- React-utils
|
||||
- SocketRocket (= 0.6.1)
|
||||
- Yoga
|
||||
- React-Core/RCTImageHeaders (0.71.3):
|
||||
- React-Core/RCTImageHeaders (0.72.3):
|
||||
- glog
|
||||
- hermes-engine
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.71.3)
|
||||
- React-cxxreact
|
||||
- React-hermes
|
||||
- React-jsi (= 0.71.3)
|
||||
- React-jsiexecutor (= 0.71.3)
|
||||
- React-perflogger (= 0.71.3)
|
||||
- React-jsi
|
||||
- React-jsiexecutor
|
||||
- React-perflogger
|
||||
- React-runtimeexecutor
|
||||
- React-utils
|
||||
- SocketRocket (= 0.6.1)
|
||||
- Yoga
|
||||
- React-Core/RCTLinkingHeaders (0.71.3):
|
||||
- React-Core/RCTLinkingHeaders (0.72.3):
|
||||
- glog
|
||||
- hermes-engine
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.71.3)
|
||||
- React-cxxreact
|
||||
- React-hermes
|
||||
- React-jsi (= 0.71.3)
|
||||
- React-jsiexecutor (= 0.71.3)
|
||||
- React-perflogger (= 0.71.3)
|
||||
- React-jsi
|
||||
- React-jsiexecutor
|
||||
- React-perflogger
|
||||
- React-runtimeexecutor
|
||||
- React-utils
|
||||
- SocketRocket (= 0.6.1)
|
||||
- Yoga
|
||||
- React-Core/RCTNetworkHeaders (0.71.3):
|
||||
- React-Core/RCTNetworkHeaders (0.72.3):
|
||||
- glog
|
||||
- hermes-engine
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.71.3)
|
||||
- React-cxxreact
|
||||
- React-hermes
|
||||
- React-jsi (= 0.71.3)
|
||||
- React-jsiexecutor (= 0.71.3)
|
||||
- React-perflogger (= 0.71.3)
|
||||
- React-jsi
|
||||
- React-jsiexecutor
|
||||
- React-perflogger
|
||||
- React-runtimeexecutor
|
||||
- React-utils
|
||||
- SocketRocket (= 0.6.1)
|
||||
- Yoga
|
||||
- React-Core/RCTSettingsHeaders (0.71.3):
|
||||
- React-Core/RCTSettingsHeaders (0.72.3):
|
||||
- glog
|
||||
- hermes-engine
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.71.3)
|
||||
- React-cxxreact
|
||||
- React-hermes
|
||||
- React-jsi (= 0.71.3)
|
||||
- React-jsiexecutor (= 0.71.3)
|
||||
- React-perflogger (= 0.71.3)
|
||||
- React-jsi
|
||||
- React-jsiexecutor
|
||||
- React-perflogger
|
||||
- React-runtimeexecutor
|
||||
- React-utils
|
||||
- SocketRocket (= 0.6.1)
|
||||
- Yoga
|
||||
- React-Core/RCTTextHeaders (0.71.3):
|
||||
- React-Core/RCTTextHeaders (0.72.3):
|
||||
- glog
|
||||
- hermes-engine
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.71.3)
|
||||
- React-cxxreact
|
||||
- React-hermes
|
||||
- React-jsi (= 0.71.3)
|
||||
- React-jsiexecutor (= 0.71.3)
|
||||
- React-perflogger (= 0.71.3)
|
||||
- React-jsi
|
||||
- React-jsiexecutor
|
||||
- React-perflogger
|
||||
- React-runtimeexecutor
|
||||
- React-utils
|
||||
- SocketRocket (= 0.6.1)
|
||||
- Yoga
|
||||
- React-Core/RCTVibrationHeaders (0.71.3):
|
||||
- React-Core/RCTVibrationHeaders (0.72.3):
|
||||
- glog
|
||||
- hermes-engine
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.71.3)
|
||||
- React-cxxreact
|
||||
- React-hermes
|
||||
- React-jsi (= 0.71.3)
|
||||
- React-jsiexecutor (= 0.71.3)
|
||||
- React-perflogger (= 0.71.3)
|
||||
- React-jsi
|
||||
- React-jsiexecutor
|
||||
- React-perflogger
|
||||
- React-runtimeexecutor
|
||||
- React-utils
|
||||
- SocketRocket (= 0.6.1)
|
||||
- Yoga
|
||||
- React-Core/RCTWebSocket (0.71.3):
|
||||
- React-Core/RCTWebSocket (0.72.3):
|
||||
- glog
|
||||
- hermes-engine
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- React-Core/Default (= 0.71.3)
|
||||
- React-cxxreact (= 0.71.3)
|
||||
- React-Core/Default (= 0.72.3)
|
||||
- React-cxxreact
|
||||
- React-hermes
|
||||
- React-jsi (= 0.71.3)
|
||||
- React-jsiexecutor (= 0.71.3)
|
||||
- React-perflogger (= 0.71.3)
|
||||
- React-jsi
|
||||
- React-jsiexecutor
|
||||
- React-perflogger
|
||||
- React-runtimeexecutor
|
||||
- React-utils
|
||||
- SocketRocket (= 0.6.1)
|
||||
- Yoga
|
||||
- React-CoreModules (0.71.3):
|
||||
- React-CoreModules (0.72.3):
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- RCTTypeSafety (= 0.71.3)
|
||||
- React-Codegen (= 0.71.3)
|
||||
- React-Core/CoreModulesHeaders (= 0.71.3)
|
||||
- React-jsi (= 0.71.3)
|
||||
- RCTTypeSafety (= 0.72.3)
|
||||
- React-Codegen (= 0.72.3)
|
||||
- React-Core/CoreModulesHeaders (= 0.72.3)
|
||||
- React-jsi (= 0.72.3)
|
||||
- React-RCTBlob
|
||||
- React-RCTImage (= 0.71.3)
|
||||
- ReactCommon/turbomodule/core (= 0.71.3)
|
||||
- React-cxxreact (0.71.3):
|
||||
- React-RCTImage (= 0.72.3)
|
||||
- ReactCommon/turbomodule/core (= 0.72.3)
|
||||
- SocketRocket (= 0.6.1)
|
||||
- React-cxxreact (0.72.3):
|
||||
- boost (= 1.76.0)
|
||||
- DoubleConversion
|
||||
- glog
|
||||
- hermes-engine
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- React-callinvoker (= 0.71.3)
|
||||
- React-jsi (= 0.71.3)
|
||||
- React-jsinspector (= 0.71.3)
|
||||
- React-logger (= 0.71.3)
|
||||
- React-perflogger (= 0.71.3)
|
||||
- React-runtimeexecutor (= 0.71.3)
|
||||
- React-hermes (0.71.3):
|
||||
- React-callinvoker (= 0.72.3)
|
||||
- React-debug (= 0.72.3)
|
||||
- React-jsi (= 0.72.3)
|
||||
- React-jsinspector (= 0.72.3)
|
||||
- React-logger (= 0.72.3)
|
||||
- React-perflogger (= 0.72.3)
|
||||
- React-runtimeexecutor (= 0.72.3)
|
||||
- React-debug (0.72.3)
|
||||
- React-hermes (0.72.3):
|
||||
- DoubleConversion
|
||||
- glog
|
||||
- hermes-engine
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- RCT-Folly/Futures (= 2021.07.22.00)
|
||||
- React-cxxreact (= 0.71.3)
|
||||
- React-cxxreact (= 0.72.3)
|
||||
- React-jsi
|
||||
- React-jsiexecutor (= 0.71.3)
|
||||
- React-jsinspector (= 0.71.3)
|
||||
- React-perflogger (= 0.71.3)
|
||||
- React-jsi (0.71.3):
|
||||
- React-jsiexecutor (= 0.72.3)
|
||||
- React-jsinspector (= 0.72.3)
|
||||
- React-perflogger (= 0.72.3)
|
||||
- React-jsi (0.72.3):
|
||||
- boost (= 1.76.0)
|
||||
- DoubleConversion
|
||||
- glog
|
||||
- hermes-engine
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- React-jsiexecutor (0.71.3):
|
||||
- React-jsiexecutor (0.72.3):
|
||||
- DoubleConversion
|
||||
- glog
|
||||
- hermes-engine
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- React-cxxreact (= 0.71.3)
|
||||
- React-jsi (= 0.71.3)
|
||||
- React-perflogger (= 0.71.3)
|
||||
- React-jsinspector (0.71.3)
|
||||
- React-logger (0.71.3):
|
||||
- React-cxxreact (= 0.72.3)
|
||||
- React-jsi (= 0.72.3)
|
||||
- React-perflogger (= 0.72.3)
|
||||
- React-jsinspector (0.72.3)
|
||||
- React-logger (0.72.3):
|
||||
- glog
|
||||
- react-native-document-picker (8.2.1):
|
||||
- react-native-document-picker (9.0.1):
|
||||
- React-Core
|
||||
- react-native-safe-area-context (4.5.1):
|
||||
- react-native-safe-area-context (4.7.1):
|
||||
- React-Core
|
||||
- React-NativeModulesApple (0.72.3):
|
||||
- hermes-engine
|
||||
- React-callinvoker
|
||||
- React-Core
|
||||
- React-cxxreact
|
||||
- React-jsi
|
||||
- React-runtimeexecutor
|
||||
- ReactCommon/turbomodule/bridging
|
||||
- ReactCommon/turbomodule/core
|
||||
- React-perflogger (0.72.3)
|
||||
- React-RCTActionSheet (0.72.3):
|
||||
- React-Core/RCTActionSheetHeaders (= 0.72.3)
|
||||
- React-RCTAnimation (0.72.3):
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- RCTTypeSafety (= 0.72.3)
|
||||
- React-Codegen (= 0.72.3)
|
||||
- React-Core/RCTAnimationHeaders (= 0.72.3)
|
||||
- React-jsi (= 0.72.3)
|
||||
- ReactCommon/turbomodule/core (= 0.72.3)
|
||||
- React-RCTAppDelegate (0.72.3):
|
||||
- RCT-Folly
|
||||
- RCTRequired
|
||||
- RCTTypeSafety
|
||||
- React-Core
|
||||
- React-CoreModules
|
||||
- React-hermes
|
||||
- React-NativeModulesApple
|
||||
- React-RCTImage
|
||||
- React-RCTNetwork
|
||||
- React-runtimescheduler
|
||||
- ReactCommon/turbomodule/core
|
||||
- React-perflogger (0.71.3)
|
||||
- React-RCTActionSheet (0.71.3):
|
||||
- React-Core/RCTActionSheetHeaders (= 0.71.3)
|
||||
- React-RCTAnimation (0.71.3):
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- RCTTypeSafety (= 0.71.3)
|
||||
- React-Codegen (= 0.71.3)
|
||||
- React-Core/RCTAnimationHeaders (= 0.71.3)
|
||||
- React-jsi (= 0.71.3)
|
||||
- ReactCommon/turbomodule/core (= 0.71.3)
|
||||
- React-RCTAppDelegate (0.71.3):
|
||||
- RCT-Folly
|
||||
- RCTRequired
|
||||
- RCTTypeSafety
|
||||
- React-Core
|
||||
- ReactCommon/turbomodule/core
|
||||
- React-RCTBlob (0.71.3):
|
||||
- React-RCTBlob (0.72.3):
|
||||
- hermes-engine
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- React-Codegen (= 0.71.3)
|
||||
- React-Core/RCTBlobHeaders (= 0.71.3)
|
||||
- React-Core/RCTWebSocket (= 0.71.3)
|
||||
- React-jsi (= 0.71.3)
|
||||
- React-RCTNetwork (= 0.71.3)
|
||||
- ReactCommon/turbomodule/core (= 0.71.3)
|
||||
- React-RCTImage (0.71.3):
|
||||
- React-Codegen (= 0.72.3)
|
||||
- React-Core/RCTBlobHeaders (= 0.72.3)
|
||||
- React-Core/RCTWebSocket (= 0.72.3)
|
||||
- React-jsi (= 0.72.3)
|
||||
- React-RCTNetwork (= 0.72.3)
|
||||
- ReactCommon/turbomodule/core (= 0.72.3)
|
||||
- React-RCTImage (0.72.3):
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- RCTTypeSafety (= 0.71.3)
|
||||
- React-Codegen (= 0.71.3)
|
||||
- React-Core/RCTImageHeaders (= 0.71.3)
|
||||
- React-jsi (= 0.71.3)
|
||||
- React-RCTNetwork (= 0.71.3)
|
||||
- ReactCommon/turbomodule/core (= 0.71.3)
|
||||
- React-RCTLinking (0.71.3):
|
||||
- React-Codegen (= 0.71.3)
|
||||
- React-Core/RCTLinkingHeaders (= 0.71.3)
|
||||
- React-jsi (= 0.71.3)
|
||||
- ReactCommon/turbomodule/core (= 0.71.3)
|
||||
- React-RCTNetwork (0.71.3):
|
||||
- RCTTypeSafety (= 0.72.3)
|
||||
- React-Codegen (= 0.72.3)
|
||||
- React-Core/RCTImageHeaders (= 0.72.3)
|
||||
- React-jsi (= 0.72.3)
|
||||
- React-RCTNetwork (= 0.72.3)
|
||||
- ReactCommon/turbomodule/core (= 0.72.3)
|
||||
- React-RCTLinking (0.72.3):
|
||||
- React-Codegen (= 0.72.3)
|
||||
- React-Core/RCTLinkingHeaders (= 0.72.3)
|
||||
- React-jsi (= 0.72.3)
|
||||
- ReactCommon/turbomodule/core (= 0.72.3)
|
||||
- React-RCTNetwork (0.72.3):
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- RCTTypeSafety (= 0.71.3)
|
||||
- React-Codegen (= 0.71.3)
|
||||
- React-Core/RCTNetworkHeaders (= 0.71.3)
|
||||
- React-jsi (= 0.71.3)
|
||||
- ReactCommon/turbomodule/core (= 0.71.3)
|
||||
- React-RCTSettings (0.71.3):
|
||||
- RCTTypeSafety (= 0.72.3)
|
||||
- React-Codegen (= 0.72.3)
|
||||
- React-Core/RCTNetworkHeaders (= 0.72.3)
|
||||
- React-jsi (= 0.72.3)
|
||||
- ReactCommon/turbomodule/core (= 0.72.3)
|
||||
- React-RCTSettings (0.72.3):
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- RCTTypeSafety (= 0.71.3)
|
||||
- React-Codegen (= 0.71.3)
|
||||
- React-Core/RCTSettingsHeaders (= 0.71.3)
|
||||
- React-jsi (= 0.71.3)
|
||||
- ReactCommon/turbomodule/core (= 0.71.3)
|
||||
- React-RCTText (0.71.3):
|
||||
- React-Core/RCTTextHeaders (= 0.71.3)
|
||||
- React-RCTVibration (0.71.3):
|
||||
- RCTTypeSafety (= 0.72.3)
|
||||
- React-Codegen (= 0.72.3)
|
||||
- React-Core/RCTSettingsHeaders (= 0.72.3)
|
||||
- React-jsi (= 0.72.3)
|
||||
- ReactCommon/turbomodule/core (= 0.72.3)
|
||||
- React-RCTText (0.72.3):
|
||||
- React-Core/RCTTextHeaders (= 0.72.3)
|
||||
- React-RCTVibration (0.72.3):
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- React-Codegen (= 0.71.3)
|
||||
- React-Core/RCTVibrationHeaders (= 0.71.3)
|
||||
- React-jsi (= 0.71.3)
|
||||
- ReactCommon/turbomodule/core (= 0.71.3)
|
||||
- React-runtimeexecutor (0.71.3):
|
||||
- React-jsi (= 0.71.3)
|
||||
- ReactCommon/turbomodule/bridging (0.71.3):
|
||||
- React-Codegen (= 0.72.3)
|
||||
- React-Core/RCTVibrationHeaders (= 0.72.3)
|
||||
- React-jsi (= 0.72.3)
|
||||
- ReactCommon/turbomodule/core (= 0.72.3)
|
||||
- React-rncore (0.72.3)
|
||||
- React-runtimeexecutor (0.72.3):
|
||||
- React-jsi (= 0.72.3)
|
||||
- React-runtimescheduler (0.72.3):
|
||||
- glog
|
||||
- hermes-engine
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- React-callinvoker
|
||||
- React-debug
|
||||
- React-jsi
|
||||
- React-runtimeexecutor
|
||||
- React-utils (0.72.3):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- React-debug
|
||||
- ReactCommon/turbomodule/bridging (0.72.3):
|
||||
- DoubleConversion
|
||||
- glog
|
||||
- hermes-engine
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- React-callinvoker (= 0.71.3)
|
||||
- React-Core (= 0.71.3)
|
||||
- React-cxxreact (= 0.71.3)
|
||||
- React-jsi (= 0.71.3)
|
||||
- React-logger (= 0.71.3)
|
||||
- React-perflogger (= 0.71.3)
|
||||
- ReactCommon/turbomodule/core (0.71.3):
|
||||
- React-callinvoker (= 0.72.3)
|
||||
- React-cxxreact (= 0.72.3)
|
||||
- React-jsi (= 0.72.3)
|
||||
- React-logger (= 0.72.3)
|
||||
- React-perflogger (= 0.72.3)
|
||||
- ReactCommon/turbomodule/core (0.72.3):
|
||||
- DoubleConversion
|
||||
- glog
|
||||
- hermes-engine
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- React-callinvoker (= 0.71.3)
|
||||
- React-Core (= 0.71.3)
|
||||
- React-cxxreact (= 0.71.3)
|
||||
- React-jsi (= 0.71.3)
|
||||
- React-logger (= 0.71.3)
|
||||
- React-perflogger (= 0.71.3)
|
||||
- RNCAsyncStorage (1.17.12):
|
||||
- React-callinvoker (= 0.72.3)
|
||||
- React-cxxreact (= 0.72.3)
|
||||
- React-jsi (= 0.72.3)
|
||||
- React-logger (= 0.72.3)
|
||||
- React-perflogger (= 0.72.3)
|
||||
- RNCAsyncStorage (1.18.2):
|
||||
- React-Core
|
||||
- RNCMaskedView (0.2.8):
|
||||
- RNCMaskedView (0.2.9):
|
||||
- React-Core
|
||||
- RNFlashList (1.4.2):
|
||||
- RNFlashList (1.5.0):
|
||||
- React-Core
|
||||
- RNFS (2.20.0):
|
||||
- React-Core
|
||||
- RNGestureHandler (2.9.0):
|
||||
- RNGestureHandler (2.12.1):
|
||||
- React-Core
|
||||
- RNReanimated (2.14.4):
|
||||
- RNReanimated (3.4.2):
|
||||
- DoubleConversion
|
||||
- FBLazyVector
|
||||
- FBReactNativeSpec
|
||||
- glog
|
||||
- hermes-engine
|
||||
- RCT-Folly
|
||||
- RCTRequired
|
||||
- RCTTypeSafety
|
||||
@@ -408,11 +483,13 @@ PODS:
|
||||
- React-Core/RCTWebSocket
|
||||
- React-CoreModules
|
||||
- React-cxxreact
|
||||
- React-hermes
|
||||
- React-jsi
|
||||
- React-jsiexecutor
|
||||
- React-jsinspector
|
||||
- React-RCTActionSheet
|
||||
- React-RCTAnimation
|
||||
- React-RCTAppDelegate
|
||||
- React-RCTBlob
|
||||
- React-RCTImage
|
||||
- React-RCTLinking
|
||||
@@ -421,11 +498,12 @@ PODS:
|
||||
- React-RCTText
|
||||
- ReactCommon/turbomodule/core
|
||||
- Yoga
|
||||
- RNScreens (3.20.0):
|
||||
- RNScreens (3.23.0):
|
||||
- React-Core
|
||||
- React-RCTImage
|
||||
- RNSVG (13.4.0):
|
||||
- RNSVG (13.10.0):
|
||||
- React-Core
|
||||
- SocketRocket (0.6.1)
|
||||
- Yoga (1.14.0)
|
||||
|
||||
DEPENDENCIES:
|
||||
@@ -456,6 +534,7 @@ DEPENDENCIES:
|
||||
- React-Core/RCTWebSocket (from `../../../node_modules/react-native/`)
|
||||
- React-CoreModules (from `../../../node_modules/react-native/React/CoreModules`)
|
||||
- React-cxxreact (from `../../../node_modules/react-native/ReactCommon/cxxreact`)
|
||||
- React-debug (from `../../../node_modules/react-native/ReactCommon/react/debug`)
|
||||
- React-hermes (from `../../../node_modules/react-native/ReactCommon/hermes`)
|
||||
- React-jsi (from `../../../node_modules/react-native/ReactCommon/jsi`)
|
||||
- React-jsiexecutor (from `../../../node_modules/react-native/ReactCommon/jsiexecutor`)
|
||||
@@ -463,6 +542,7 @@ DEPENDENCIES:
|
||||
- React-logger (from `../../../node_modules/react-native/ReactCommon/logger`)
|
||||
- react-native-document-picker (from `../../../node_modules/react-native-document-picker`)
|
||||
- react-native-safe-area-context (from `../../../node_modules/react-native-safe-area-context`)
|
||||
- React-NativeModulesApple (from `../../../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios`)
|
||||
- React-perflogger (from `../../../node_modules/react-native/ReactCommon/reactperflogger`)
|
||||
- React-RCTActionSheet (from `../../../node_modules/react-native/Libraries/ActionSheetIOS`)
|
||||
- React-RCTAnimation (from `../../../node_modules/react-native/Libraries/NativeAnimation`)
|
||||
@@ -474,7 +554,10 @@ DEPENDENCIES:
|
||||
- React-RCTSettings (from `../../../node_modules/react-native/Libraries/Settings`)
|
||||
- React-RCTText (from `../../../node_modules/react-native/Libraries/Text`)
|
||||
- React-RCTVibration (from `../../../node_modules/react-native/Libraries/Vibration`)
|
||||
- React-rncore (from `../../../node_modules/react-native/ReactCommon`)
|
||||
- React-runtimeexecutor (from `../../../node_modules/react-native/ReactCommon/runtimeexecutor`)
|
||||
- React-runtimescheduler (from `../../../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler`)
|
||||
- React-utils (from `../../../node_modules/react-native/ReactCommon/react/utils`)
|
||||
- ReactCommon/turbomodule/core (from `../../../node_modules/react-native/ReactCommon`)
|
||||
- "RNCAsyncStorage (from `../../../node_modules/@react-native-async-storage/async-storage`)"
|
||||
- "RNCMaskedView (from `../../../node_modules/@react-native-masked-view/masked-view`)"
|
||||
@@ -491,6 +574,7 @@ SPEC REPOS:
|
||||
- fmt
|
||||
- libevent
|
||||
- lottie-ios
|
||||
- SocketRocket
|
||||
|
||||
EXTERNAL SOURCES:
|
||||
boost:
|
||||
@@ -523,6 +607,7 @@ EXTERNAL SOURCES:
|
||||
:podspec: "../../../node_modules/react-native/third-party-podspecs/glog.podspec"
|
||||
hermes-engine:
|
||||
:podspec: "../../../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec"
|
||||
:tag: hermes-2023-03-20-RNv0.72.0-49794cfc7c81fb8f69fd60c3bbf85a7480cc5a77
|
||||
lottie-react-native:
|
||||
:path: "../../../node_modules/lottie-react-native"
|
||||
RCT-Folly:
|
||||
@@ -543,6 +628,8 @@ EXTERNAL SOURCES:
|
||||
:path: "../../../node_modules/react-native/React/CoreModules"
|
||||
React-cxxreact:
|
||||
:path: "../../../node_modules/react-native/ReactCommon/cxxreact"
|
||||
React-debug:
|
||||
:path: "../../../node_modules/react-native/ReactCommon/react/debug"
|
||||
React-hermes:
|
||||
:path: "../../../node_modules/react-native/ReactCommon/hermes"
|
||||
React-jsi:
|
||||
@@ -557,6 +644,8 @@ EXTERNAL SOURCES:
|
||||
:path: "../../../node_modules/react-native-document-picker"
|
||||
react-native-safe-area-context:
|
||||
:path: "../../../node_modules/react-native-safe-area-context"
|
||||
React-NativeModulesApple:
|
||||
:path: "../../../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios"
|
||||
React-perflogger:
|
||||
:path: "../../../node_modules/react-native/ReactCommon/reactperflogger"
|
||||
React-RCTActionSheet:
|
||||
@@ -579,8 +668,14 @@ EXTERNAL SOURCES:
|
||||
:path: "../../../node_modules/react-native/Libraries/Text"
|
||||
React-RCTVibration:
|
||||
:path: "../../../node_modules/react-native/Libraries/Vibration"
|
||||
React-rncore:
|
||||
:path: "../../../node_modules/react-native/ReactCommon"
|
||||
React-runtimeexecutor:
|
||||
:path: "../../../node_modules/react-native/ReactCommon/runtimeexecutor"
|
||||
React-runtimescheduler:
|
||||
:path: "../../../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler"
|
||||
React-utils:
|
||||
:path: "../../../node_modules/react-native/ReactCommon/react/utils"
|
||||
ReactCommon:
|
||||
:path: "../../../node_modules/react-native/ReactCommon"
|
||||
RNCAsyncStorage:
|
||||
@@ -603,64 +698,70 @@ EXTERNAL SOURCES:
|
||||
:path: "../../../node_modules/react-native/ReactCommon/yoga"
|
||||
|
||||
SPEC CHECKSUMS:
|
||||
boost: 57d2868c099736d80fcd648bf211b4431e51a558
|
||||
DoubleConversion: 5189b271737e1565bdce30deb4a08d647e3f5f54
|
||||
EXApplication: d8f53a7eee90a870a75656280e8d4b85726ea903
|
||||
EXConstants: f348da07e21b23d2b085e270d7b74f282df1a7d9
|
||||
EXFileSystem: 844e86ca9b5375486ecc4ef06d3838d5597d895d
|
||||
EXFont: 6ea3800df746be7233208d80fe379b8ed74f4272
|
||||
EXMediaLibrary: 587cd8aad27a6fc8d7c38b950bc75bc1845a7480
|
||||
Expo: 8448e3a2aa1b295f029c81551e1ab6d986517fdb
|
||||
ExpoKeepAwake: 69f5f627670d62318410392d03e0b5db0f85759a
|
||||
ExpoModulesCore: 653958063a301098b541ae4dfed1ac0b98db607b
|
||||
EXSplashScreen: 0e0a9ba0cf7553094e93213099bd7b42e6e237e9
|
||||
FBLazyVector: 60195509584153283780abdac5569feffb8f08cc
|
||||
FBReactNativeSpec: c5a5c4f1b95ae42a17cd22c8c89c482a7b327fe3
|
||||
boost: 20b6b3a53cb43939b6ffc2fd27d15ec7497167d0
|
||||
DoubleConversion: 2d248a4174d78beaaa49735340c9bcc564091245
|
||||
EXApplication: 02655a251434d564bb0e73291f5a490c74b5b76f
|
||||
EXConstants: ce5bbea779da8031ac818c36bea41b10e14d04e1
|
||||
EXFileSystem: 941b273758aee14be2ecc671dacb4f10dd28c833
|
||||
EXFont: 738c44c390953ebcbab075a4848bfbef025fd9ee
|
||||
EXMediaLibrary: 8ac14ce76f266026b10cac2ab049debe032d7ae7
|
||||
Expo: 900dc423a0e2c7e822b2c683a89426e82695fb27
|
||||
ExpoKeepAwake: be4cbd52d9b177cde0fd66daa1913afa3161fc1d
|
||||
ExpoModulesCore: e5a168deba84f74c0e558befa31dbaea06c00af0
|
||||
EXSplashScreen: 89586b0961acd173b04713b7457949b063a659da
|
||||
FBLazyVector: 4cce221dd782d3ff7c4172167bba09d58af67ccb
|
||||
FBReactNativeSpec: 60173e22b99be9ad9ac3842270d319de48e42817
|
||||
fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9
|
||||
glog: 04b94705f318337d7ead9e6d17c019bd9b1f6b1b
|
||||
hermes-engine: 38bfe887e456b33b697187570a08de33969f5db7
|
||||
glog: 5b8834f2f3f7d36c1c73e5a9837f53f03cfe84eb
|
||||
hermes-engine: 51d305855e02ee41d1b97d8b179ae88d01239906
|
||||
libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913
|
||||
lottie-ios: 8f97d3271e155c2d688875c29cd3c74908aef5f8
|
||||
lottie-react-native: b702fab740cdb952a8e2354713d3beda63ff97b0
|
||||
RCT-Folly: 424b8c9a7a0b9ab2886ffe9c3b041ef628fd4fb1
|
||||
RCTRequired: bec48f07daf7bcdc2655a0cde84e07d24d2a9e2a
|
||||
RCTTypeSafety: 171394eebacf71e1cfad79dbfae7ee8fc16ca80a
|
||||
React: d7433ccb6a8c36e4cbed59a73c0700fc83c3e98a
|
||||
React-callinvoker: 15f165009bd22ae829b2b600e50bcc98076ce4b8
|
||||
React-Codegen: b5910000eaf1e0c2f47d29be6f82f5f1264420d7
|
||||
React-Core: b6f2f78d580a90b83fd7b0d1c6911c799f6eac82
|
||||
React-CoreModules: e0cbc1a4f4f3f60e23c476fef7ab37be363ea8c1
|
||||
React-cxxreact: c87f3f124b2117d00d410b35f16c2257e25e50fa
|
||||
React-hermes: c64ca6bdf16a7069773103c9bedaf30ec90ab38f
|
||||
React-jsi: 39729361645568e238081b3b3180fbad803f25a4
|
||||
React-jsiexecutor: 515b703d23ffadeac7687bc2d12fb08b90f0aaa1
|
||||
React-jsinspector: 9f7c9137605e72ca0343db4cea88006cb94856dd
|
||||
React-logger: 957e5dc96d9dbffc6e0f15e0ee4d2b42829ff207
|
||||
react-native-document-picker: 69ca2094d8780cfc1e7e613894d15290fdc54bba
|
||||
react-native-safe-area-context: f5549f36508b1b7497434baa0cd97d7e470920d4
|
||||
React-perflogger: af8a3d31546077f42d729b949925cc4549f14def
|
||||
React-RCTActionSheet: 57cc5adfefbaaf0aae2cf7e10bccd746f2903673
|
||||
React-RCTAnimation: 11c61e94da700c4dc915cf134513764d87fc5e2b
|
||||
React-RCTAppDelegate: c3980adeaadcfd6cb495532e928b36ac6db3c14a
|
||||
React-RCTBlob: ccc5049d742b41971141415ca86b83b201495695
|
||||
React-RCTImage: 7a9226b0944f1e76e8e01e35a9245c2477cdbabb
|
||||
React-RCTLinking: bbe8cc582046a9c04f79c235b73c93700263e8b4
|
||||
React-RCTNetwork: fc2ca322159dc54e06508d4f5c3e934da63dc013
|
||||
React-RCTSettings: f1e9db2cdf946426d3f2b210e4ff4ce0f0d842ef
|
||||
React-RCTText: 1c41dd57e5d742b1396b4eeb251851ce7ff0fca1
|
||||
React-RCTVibration: 5199a180d04873366a83855de55ac33ce60fe4d5
|
||||
React-runtimeexecutor: 7bf0dafc7b727d93c8cb94eb00a9d3753c446c3e
|
||||
ReactCommon: 6f65ea5b7d84deb9e386f670dd11ce499ded7b40
|
||||
RNCAsyncStorage: 09fc8595e6d6f6d5abf16b23a56b257d9c6b7c5b
|
||||
RNCMaskedView: bc0170f389056201c82a55e242e5d90070e18e5a
|
||||
RNFlashList: 7fbca4fc075484a9426f1610d648dbea2de94eb0
|
||||
lottie-ios: 809ecf2d460ed650a6aed7aa88b2ec45fab4779c
|
||||
lottie-react-native: b04640d81bfc87915cd5c9058caa1112374691ff
|
||||
RCT-Folly: 30d165d2e977f66793419c3314296392cb793f38
|
||||
RCTRequired: a2faf4bad4e438ca37b2040cb8f7799baa065c18
|
||||
RCTTypeSafety: cb09f3e4747b6d18331a15eb05271de7441ca0b3
|
||||
React: 13109005b5353095c052f26af37413340ccf7a5d
|
||||
React-callinvoker: c8c87bce983aa499c13cb06d4447c025a35274d6
|
||||
React-Codegen: 712d523524d89d71f1cf7cc624854941be983c4d
|
||||
React-Core: 688f88b7f3a3d30b4848036223f8b07102c687e5
|
||||
React-CoreModules: 63c063a3ade8fb3b1bec5fd9a50f17b0421558c6
|
||||
React-cxxreact: 37765b4975541105b2a3322a4b473417c158c869
|
||||
React-debug: 51f11ef8db14b47f24e71c42a4916d4192972156
|
||||
React-hermes: 935ae71fb3d7654e947beba8498835cd5e479707
|
||||
React-jsi: ec628dc7a15ffea969f237b0ea6d2fde212b19dd
|
||||
React-jsiexecutor: 59d1eb03af7d30b7d66589c410f13151271e8006
|
||||
React-jsinspector: b511447170f561157547bc0bef3f169663860be7
|
||||
React-logger: c5b527272d5f22eaa09bb3c3a690fee8f237ae95
|
||||
react-native-document-picker: 2b8f18667caee73a96708a82b284a4f40b30a156
|
||||
react-native-safe-area-context: 9697629f7b2cda43cf52169bb7e0767d330648c2
|
||||
React-NativeModulesApple: c57f3efe0df288a6532b726ad2d0322a9bf38472
|
||||
React-perflogger: 6bd153e776e6beed54c56b0847e1220a3ff92ba5
|
||||
React-RCTActionSheet: c0b62af44e610e69d9a2049a682f5dba4e9dff17
|
||||
React-RCTAnimation: f9bf9719258926aea9ecb8a2aa2595d3ff9a6022
|
||||
React-RCTAppDelegate: e5ac35d4dbd1fae7df3a62b47db04b6a8d151592
|
||||
React-RCTBlob: c4f1e69a6ef739aa42586b876d637dab4e3b5bed
|
||||
React-RCTImage: e5798f01aba248416c02a506cf5e6dfcba827638
|
||||
React-RCTLinking: f5b6227c879e33206f34e68924c458f57bbb96d9
|
||||
React-RCTNetwork: d5554fbfac1c618da3c8fa29933108ea22837788
|
||||
React-RCTSettings: 189c71e3e6146ba59f4f7e2cbeb494cf2ad42afa
|
||||
React-RCTText: 19425aea9d8b6ccae55a27916355b17ab577e56e
|
||||
React-RCTVibration: 388ac0e1455420895d1ca2548401eed964b038a6
|
||||
React-rncore: 0f8b25194031cc6554c5203266497acfb8521ac5
|
||||
React-runtimeexecutor: 369ae9bb3f83b65201c0c8f7d50b72280b5a1dbc
|
||||
React-runtimescheduler: 837c1bebd2f84572db17698cd702ceaf585b0d9a
|
||||
React-utils: bcb57da67eec2711f8b353f6e3d33bd8e4b2efa3
|
||||
ReactCommon: 3ccb8fb14e6b3277e38c73b0ff5e4a1b8db017a9
|
||||
RNCAsyncStorage: ddc4ee162bfd41b0d2c68bf2d95acd81dd7f1f93
|
||||
RNCMaskedView: 949696f25ec596bfc697fc88e6f95cf0c79669b6
|
||||
RNFlashList: 25b0e092b4470c84db0386d4f5316dc34123bb6d
|
||||
RNFS: 4ac0f0ea233904cb798630b3c077808c06931688
|
||||
RNGestureHandler: 071d7a9ad81e8b83fe7663b303d132406a7d8f39
|
||||
RNReanimated: addc4900bf47882118d0a1b21747fa6705fa8cff
|
||||
RNScreens: 218801c16a2782546d30bd2026bb625c0302d70f
|
||||
RNSVG: 07dbd870b0dcdecc99b3a202fa37c8ca163caec2
|
||||
Yoga: 5ed1699acbba8863755998a4245daa200ff3817b
|
||||
RNGestureHandler: c0d04458598fcb26052494ae23dda8f8f5162b13
|
||||
RNReanimated: 79025fdede9665be5b1eec93abcd95ce19bf5ad4
|
||||
RNScreens: 6a8a3c6b808aa48dca1780df7b73ea524f602c63
|
||||
RNSVG: 80584470ff1ffc7994923ea135a3e5ad825546b9
|
||||
SocketRocket: f32cd54efbe0f095c4d7594881e52619cfe80b17
|
||||
Yoga: 8796b55dba14d7004f980b54bcc9833ee45b28ce
|
||||
|
||||
PODFILE CHECKSUM: 7a4bb50e685f075b59612fa770c28d9a25b9edea
|
||||
PODFILE CHECKSUM: bb3a1dc1b354487fb718a75205b2653b9a19b1a1
|
||||
|
||||
COCOAPODS: 1.11.3
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
{
|
||||
"expo.jsEngine": "hermes",
|
||||
"ios.deploymentTarget": "13.0"
|
||||
"ios.deploymentTarget": "13.0",
|
||||
"EX_DEV_CLIENT_NETWORK_INSPECTOR": "true"
|
||||
}
|
||||
|
||||
@@ -149,6 +149,7 @@
|
||||
BC1F37E21575379C81F561DC /* [CP] Check Pods Manifest.lock */,
|
||||
350DC403297BF2B8009CD6A1 /* Build Spacedrive Core */,
|
||||
FD10A7F022414F080027D42C /* Start Packager */,
|
||||
0883FA647AA9D506CE94B59A /* [Expo] Configure project */,
|
||||
13B07F871A680F5B00A75B9A /* Sources */,
|
||||
13B07F8C1A680F5B00A75B9A /* Frameworks */,
|
||||
13B07F8E1A680F5B00A75B9A /* Resources */,
|
||||
@@ -224,6 +225,25 @@
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "if [[ -f \"$PODS_ROOT/../.xcode.env\" ]]; then\n source \"$PODS_ROOT/../.xcode.env\"\nfi\nif [[ -f \"$PODS_ROOT/../.xcode.env.local\" ]]; then\n source \"$PODS_ROOT/../.xcode.env.local\"\nfi\n\n# The project root by default is one level up from the ios directory\nexport PROJECT_ROOT=\"$PROJECT_DIR\"/..\n\nif [[ \"$CONFIGURATION\" = *Debug* ]]; then\n export SKIP_BUNDLING=1\nfi\nif [[ -z \"$ENTRY_FILE\" ]]; then\n # Set the entry JS file using the bundler's entry resolution.\n export ENTRY_FILE=\"$(\"$NODE_BINARY\" -e \"require('expo/scripts/resolveAppEntry')\" $PROJECT_ROOT ios relative | tail -n 1)\"\nfi\n\n`\"$NODE_BINARY\" --print \"require('path').dirname(require.resolve('react-native/package.json')) + '/scripts/react-native-xcode.sh'\"`\n\n";
|
||||
};
|
||||
0883FA647AA9D506CE94B59A /* [Expo] Configure project */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
alwaysOutOfDate = 1;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputFileListPaths = (
|
||||
);
|
||||
inputPaths = (
|
||||
);
|
||||
name = "[Expo] Configure project";
|
||||
outputFileListPaths = (
|
||||
);
|
||||
outputPaths = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "# This script configures Expo modules and generates the modules provider file.\nbash -l -c \"./Pods/Target\\ Support\\ Files/Pods-Spacedrive/expo-configure-project.sh\"\n";
|
||||
};
|
||||
350DC403297BF2B8009CD6A1 /* Build Spacedrive Core */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
alwaysOutOfDate = 1;
|
||||
@@ -593,6 +613,8 @@
|
||||
LIBRARY_SEARCH_PATHS = "$(SDKROOT)/usr/lib/swift\"$(inherited)\"";
|
||||
MTL_ENABLE_DEBUG_INFO = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
OTHER_CFLAGS = "$(inherited)";
|
||||
OTHER_CPLUSPLUSFLAGS = "$(inherited)";
|
||||
REACT_NATIVE_PATH = "${PODS_ROOT}/../../../../node_modules/react-native";
|
||||
SDKROOT = iphoneos;
|
||||
};
|
||||
@@ -646,6 +668,8 @@
|
||||
);
|
||||
LIBRARY_SEARCH_PATHS = "$(SDKROOT)/usr/lib/swift\"$(inherited)\"";
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
OTHER_CFLAGS = "$(inherited)";
|
||||
OTHER_CPLUSPLUSFLAGS = "$(inherited)";
|
||||
REACT_NATIVE_PATH = "${PODS_ROOT}/../../../../node_modules/react-native";
|
||||
SDKROOT = iphoneos;
|
||||
VALIDATE_PRODUCT = YES;
|
||||
|
||||
@@ -1,78 +1,88 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1130"
|
||||
version = "1.3">
|
||||
LastUpgradeVersion="1130"
|
||||
version="1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES">
|
||||
parallelizeBuildables="YES"
|
||||
buildImplicitDependencies="YES">
|
||||
<BuildActionEntries>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "YES"
|
||||
buildForArchiving = "YES"
|
||||
buildForAnalyzing = "YES">
|
||||
buildForTesting="YES"
|
||||
buildForRunning="YES"
|
||||
buildForProfiling="YES"
|
||||
buildForArchiving="YES"
|
||||
buildForAnalyzing="YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
|
||||
BuildableName = "Spacedrive.app"
|
||||
BlueprintName = "Spacedrive"
|
||||
ReferencedContainer = "container:Spacedrive.xcodeproj">
|
||||
BuildableIdentifier="primary"
|
||||
BlueprintIdentifier="13B07F861A680F5B00A75B9A"
|
||||
BuildableName="Spacedrive.app"
|
||||
BlueprintName="Spacedrive"
|
||||
ReferencedContainer="container:Spacedrive.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
</BuildActionEntries>
|
||||
</BuildAction>
|
||||
<TestAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||
buildConfiguration="Debug"
|
||||
selectedDebuggerIdentifier="Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier="Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
shouldUseLaunchSchemeArgsEnv="YES">
|
||||
<Testables>
|
||||
<TestableReference
|
||||
skipped="NO">
|
||||
<BuildableReference
|
||||
BuildableIdentifier="primary"
|
||||
BlueprintIdentifier="00E356ED1AD99517003FC87E"
|
||||
BuildableName="SpacedriveTests.xctest"
|
||||
BlueprintName="SpacedriveTests"
|
||||
ReferencedContainer="container:Spacedrive.xcodeproj">
|
||||
</BuildableReference>
|
||||
</TestableReference>
|
||||
</Testables>
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
debugServiceExtension = "internal"
|
||||
allowLocationSimulation = "YES">
|
||||
buildConfiguration="Debug"
|
||||
selectedDebuggerIdentifier="Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier="Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
launchStyle="0"
|
||||
useCustomWorkingDirectory="NO"
|
||||
ignoresPersistentStateOnLaunch="NO"
|
||||
debugDocumentVersioning="YES"
|
||||
debugServiceExtension="internal"
|
||||
allowLocationSimulation="YES">
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
runnableDebuggingMode="0">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
|
||||
BuildableName = "Spacedrive.app"
|
||||
BlueprintName = "Spacedrive"
|
||||
ReferencedContainer = "container:Spacedrive.xcodeproj">
|
||||
BuildableIdentifier="primary"
|
||||
BlueprintIdentifier="13B07F861A680F5B00A75B9A"
|
||||
BuildableName="Spacedrive.app"
|
||||
BlueprintName="Spacedrive"
|
||||
ReferencedContainer="container:Spacedrive.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
</LaunchAction>
|
||||
<ProfileAction
|
||||
buildConfiguration = "Release"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
savedToolIdentifier = ""
|
||||
useCustomWorkingDirectory = "NO"
|
||||
debugDocumentVersioning = "YES">
|
||||
buildConfiguration="Release"
|
||||
shouldUseLaunchSchemeArgsEnv="YES"
|
||||
savedToolIdentifier=""
|
||||
useCustomWorkingDirectory="NO"
|
||||
debugDocumentVersioning="YES">
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
runnableDebuggingMode="0">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
|
||||
BuildableName = "Spacedrive.app"
|
||||
BlueprintName = "Spacedrive"
|
||||
ReferencedContainer = "container:Spacedrive.xcodeproj">
|
||||
BuildableIdentifier="primary"
|
||||
BlueprintIdentifier="13B07F861A680F5B00A75B9A"
|
||||
BuildableName="Spacedrive.app"
|
||||
BlueprintName="Spacedrive"
|
||||
ReferencedContainer="container:Spacedrive.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
</ProfileAction>
|
||||
<AnalyzeAction
|
||||
buildConfiguration = "Debug">
|
||||
buildConfiguration="Debug">
|
||||
</AnalyzeAction>
|
||||
<ArchiveAction
|
||||
buildConfiguration = "Release"
|
||||
revealArchiveInOrganizer = "YES">
|
||||
buildConfiguration="Release"
|
||||
revealArchiveInOrganizer="YES">
|
||||
</ArchiveAction>
|
||||
</Scheme>
|
||||
</Scheme>
|
||||
@@ -19,22 +19,12 @@
|
||||
- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
|
||||
{
|
||||
#if DEBUG
|
||||
return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index"];
|
||||
return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@".expo/.virtual-metro-entry"];
|
||||
#else
|
||||
return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
|
||||
#endif
|
||||
}
|
||||
|
||||
/// This method controls whether the `concurrentRoot`feature of React18 is turned on or off.
|
||||
///
|
||||
/// @see: https://reactjs.org/blog/2022/03/29/react-v18.html
|
||||
/// @note: This requires to be rendering on Fabric (i.e. on the New Architecture).
|
||||
/// @return: `true` if the `concurrentRoot` feature is enabled. Otherwise, it returns `false`.
|
||||
- (BOOL)concurrentRootEnabled
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
// Linking API
|
||||
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
|
||||
return [super application:application openURL:url options:options] || [RCTLinkingManager application:application openURL:url options:options];
|
||||
|
||||
|
Before Width: | Height: | Size: 733 B After Width: | Height: | Size: 736 B |
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3.6 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 3.4 KiB |
|
Before Width: | Height: | Size: 6.2 KiB After Width: | Height: | Size: 6.3 KiB |
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 5.5 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 5.1 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 370 KiB After Width: | Height: | Size: 341 KiB |
|
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 78 KiB |
@@ -1,89 +1,91 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||
<key>CFBundleDisplayName</key>
|
||||
<string>Spacedrive</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>$(PRODUCT_NAME)</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>0.0.1</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleURLTypes</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>CFBundleURLSchemes</key>
|
||||
<array>
|
||||
<string>spacedrive</string>
|
||||
<string>com.spacedrive.app</string>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
<key>LSRequiresIPhoneOS</key>
|
||||
<true />
|
||||
<key>NSAppTransportSecurity</key>
|
||||
<dict>
|
||||
<key>NSAllowsArbitraryLoads</key>
|
||||
<true />
|
||||
<key>NSExceptionDomains</key>
|
||||
<dict>
|
||||
<key>localhost</key>
|
||||
<dict>
|
||||
<key>NSExceptionAllowsInsecureHTTPLoads</key>
|
||||
<true />
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>NSPhotoLibraryAddUsageDescription</key>
|
||||
<string>Give Spacedrive permission to save photos</string>
|
||||
<key>NSPhotoLibraryUsageDescription</key>
|
||||
<string>Give Spacedrive permission to access your photos</string>
|
||||
<key>UIBackgroundModes</key>
|
||||
<array>
|
||||
<string>remote-notification</string>
|
||||
</array>
|
||||
<key>UIFileSharingEnabled</key>
|
||||
<true />
|
||||
<key>UILaunchStoryboardName</key>
|
||||
<string>SplashScreen</string>
|
||||
<key>UIRequiredDeviceCapabilities</key>
|
||||
<array>
|
||||
<string>armv7</string>
|
||||
</array>
|
||||
<key>UIRequiresFullScreen</key>
|
||||
<false />
|
||||
<key>UIStatusBarStyle</key>
|
||||
<string>UIStatusBarStyleDefault</string>
|
||||
<key>UISupportedInterfaceOrientations</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationPortrait</string>
|
||||
<string>UIInterfaceOrientationPortraitUpsideDown</string>
|
||||
</array>
|
||||
<key>UISupportedInterfaceOrientations~ipad</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationPortrait</string>
|
||||
<string>UIInterfaceOrientationPortraitUpsideDown</string>
|
||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||
</array>
|
||||
<key>UIUserInterfaceStyle</key>
|
||||
<string>Automatic</string>
|
||||
<key>UIViewControllerBasedStatusBarAppearance</key>
|
||||
<false />
|
||||
<key>ITSAppUsesNonExemptEncryption</key>
|
||||
<false />
|
||||
</dict>
|
||||
<dict>
|
||||
<key>CADisableMinimumFrameDurationOnPhone</key>
|
||||
<true />
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||
<key>CFBundleDisplayName</key>
|
||||
<string>Spacedrive</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>Spacedrive</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>0.0.1</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleURLTypes</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>CFBundleURLSchemes</key>
|
||||
<array>
|
||||
<string>spacedrive</string>
|
||||
<string>com.spacedrive.app</string>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
<key>LSRequiresIPhoneOS</key>
|
||||
<true />
|
||||
<key>NSAppTransportSecurity</key>
|
||||
<dict>
|
||||
<key>NSAllowsArbitraryLoads</key>
|
||||
<true />
|
||||
<key>NSExceptionDomains</key>
|
||||
<dict>
|
||||
<key>localhost</key>
|
||||
<dict>
|
||||
<key>NSExceptionAllowsInsecureHTTPLoads</key>
|
||||
<true />
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>NSPhotoLibraryAddUsageDescription</key>
|
||||
<string>Allow Spacedrive to save photos</string>
|
||||
<key>NSPhotoLibraryUsageDescription</key>
|
||||
<string>Allow Spacedrive to access your photos</string>
|
||||
<key>UIBackgroundModes</key>
|
||||
<array>
|
||||
<string>remote-notification</string>
|
||||
</array>
|
||||
<key>UIFileSharingEnabled</key>
|
||||
<true />
|
||||
<key>UILaunchStoryboardName</key>
|
||||
<string>SplashScreen</string>
|
||||
<key>UIRequiredDeviceCapabilities</key>
|
||||
<array>
|
||||
<string>armv7</string>
|
||||
</array>
|
||||
<key>UIRequiresFullScreen</key>
|
||||
<false />
|
||||
<key>UIStatusBarStyle</key>
|
||||
<string>UIStatusBarStyleDefault</string>
|
||||
<key>UISupportedInterfaceOrientations</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationPortrait</string>
|
||||
<string>UIInterfaceOrientationPortraitUpsideDown</string>
|
||||
</array>
|
||||
<key>UISupportedInterfaceOrientations~ipad</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationPortrait</string>
|
||||
<string>UIInterfaceOrientationPortraitUpsideDown</string>
|
||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||
</array>
|
||||
<key>UIUserInterfaceStyle</key>
|
||||
<string>Automatic</string>
|
||||
<key>UIViewControllerBasedStatusBarAppearance</key>
|
||||
<false />
|
||||
<key>ITSAppUsesNonExemptEncryption</key>
|
||||
<false />
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -1,5 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="16096" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="EXPO-VIEWCONTROLLER-1">
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0"
|
||||
toolsVersion="16096" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none"
|
||||
useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES"
|
||||
colorMatched="YES" initialViewController="EXPO-VIEWCONTROLLER-1">
|
||||
<device id="retina5_5" orientation="portrait" appearance="light" />
|
||||
<dependencies>
|
||||
<deployment identifier="iOS" />
|
||||
@@ -10,36 +13,73 @@
|
||||
<scenes>
|
||||
<scene sceneID="EXPO-SCENE-1">
|
||||
<objects>
|
||||
<viewController storyboardIdentifier="SplashScreenViewController" id="EXPO-VIEWCONTROLLER-1" sceneMemberID="viewController">
|
||||
<view key="view" userInteractionEnabled="NO" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" id="EXPO-ContainerView" userLabel="ContainerView">
|
||||
<viewController storyboardIdentifier="SplashScreenViewController"
|
||||
id="EXPO-VIEWCONTROLLER-1" sceneMemberID="viewController">
|
||||
<view key="view" userInteractionEnabled="NO" contentMode="scaleToFill"
|
||||
insetsLayoutMarginsFromSafeArea="NO" id="EXPO-ContainerView"
|
||||
userLabel="ContainerView">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="736" />
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES" />
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES"
|
||||
flexibleMaxY="YES" />
|
||||
<subviews>
|
||||
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" insetsLayoutMarginsFromSafeArea="NO" image="SplashScreenBackground" translatesAutoresizingMaskIntoConstraints="NO" id="EXPO-SplashScreenBackground" userLabel="SplashScreenBackground">
|
||||
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFill"
|
||||
horizontalHuggingPriority="251" verticalHuggingPriority="251"
|
||||
insetsLayoutMarginsFromSafeArea="NO" image="SplashScreenBackground"
|
||||
translatesAutoresizingMaskIntoConstraints="NO"
|
||||
id="EXPO-SplashScreenBackground" userLabel="SplashScreenBackground">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="736" />
|
||||
</imageView>
|
||||
<imageView id="EXPO-SplashScreen" userLabel="SplashScreen" image="SplashScreen" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" clipsSubviews="true" userInteractionEnabled="false" translatesAutoresizingMaskIntoConstraints="false">
|
||||
<imageView id="EXPO-SplashScreen" userLabel="SplashScreen"
|
||||
image="SplashScreen" contentMode="scaleAspectFit"
|
||||
horizontalHuggingPriority="251" verticalHuggingPriority="251"
|
||||
clipsSubviews="true" userInteractionEnabled="false"
|
||||
translatesAutoresizingMaskIntoConstraints="false">
|
||||
<rect key="frame" x="0" y="0" width="414" height="736" />
|
||||
</imageView>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstItem="EXPO-SplashScreenBackground" firstAttribute="top" secondItem="EXPO-ContainerView" secondAttribute="top" id="1gX-mQ-vu6" />
|
||||
<constraint firstItem="EXPO-SplashScreenBackground" firstAttribute="leading" secondItem="EXPO-ContainerView" secondAttribute="leading" id="6tX-OG-Sck" />
|
||||
<constraint firstItem="EXPO-SplashScreenBackground" firstAttribute="trailing" secondItem="EXPO-ContainerView" secondAttribute="trailing" id="ABX-8g-7v4" />
|
||||
<constraint firstItem="EXPO-SplashScreenBackground" firstAttribute="bottom" secondItem="EXPO-ContainerView" secondAttribute="bottom" id="jkI-2V-eW5" />
|
||||
<constraint firstItem="EXPO-SplashScreen" firstAttribute="top" secondItem="EXPO-ContainerView" secondAttribute="top" id="2VS-Uz-0LU" />
|
||||
<constraint firstItem="EXPO-SplashScreen" firstAttribute="leading" secondItem="EXPO-ContainerView" secondAttribute="leading" id="LhH-Ei-DKo" />
|
||||
<constraint firstItem="EXPO-SplashScreen" firstAttribute="trailing" secondItem="EXPO-ContainerView" secondAttribute="trailing" id="I6l-TP-6fn" />
|
||||
<constraint firstItem="EXPO-SplashScreen" firstAttribute="bottom" secondItem="EXPO-ContainerView" secondAttribute="bottom" id="nbp-HC-eaG" />
|
||||
<constraint firstItem="EXPO-SplashScreen" firstAttribute="top" secondItem="EXPO-ContainerView" secondAttribute="top" id="83fcb9b545b870ba44c24f0feeb116490c499c52" />
|
||||
<constraint firstItem="EXPO-SplashScreen" firstAttribute="leading" secondItem="EXPO-ContainerView" secondAttribute="leading" id="61d16215e44b98e39d0a2c74fdbfaaa22601b12c" />
|
||||
<constraint firstItem="EXPO-SplashScreen" firstAttribute="trailing" secondItem="EXPO-ContainerView" secondAttribute="trailing" id="f934da460e9ab5acae3ad9987d5b676a108796c1" />
|
||||
<constraint firstItem="EXPO-SplashScreen" firstAttribute="bottom" secondItem="EXPO-ContainerView" secondAttribute="bottom" id="d6a0be88096b36fb132659aa90203d39139deda9" />
|
||||
<constraint firstItem="EXPO-SplashScreenBackground" firstAttribute="top"
|
||||
secondItem="EXPO-ContainerView" secondAttribute="top"
|
||||
id="1gX-mQ-vu6" />
|
||||
<constraint firstItem="EXPO-SplashScreenBackground"
|
||||
firstAttribute="leading" secondItem="EXPO-ContainerView"
|
||||
secondAttribute="leading" id="6tX-OG-Sck" />
|
||||
<constraint firstItem="EXPO-SplashScreenBackground"
|
||||
firstAttribute="trailing" secondItem="EXPO-ContainerView"
|
||||
secondAttribute="trailing" id="ABX-8g-7v4" />
|
||||
<constraint firstItem="EXPO-SplashScreenBackground"
|
||||
firstAttribute="bottom" secondItem="EXPO-ContainerView"
|
||||
secondAttribute="bottom" id="jkI-2V-eW5" />
|
||||
<constraint firstItem="EXPO-SplashScreen" firstAttribute="top"
|
||||
secondItem="EXPO-ContainerView" secondAttribute="top"
|
||||
id="2VS-Uz-0LU" />
|
||||
<constraint firstItem="EXPO-SplashScreen" firstAttribute="leading"
|
||||
secondItem="EXPO-ContainerView" secondAttribute="leading"
|
||||
id="LhH-Ei-DKo" />
|
||||
<constraint firstItem="EXPO-SplashScreen" firstAttribute="trailing"
|
||||
secondItem="EXPO-ContainerView" secondAttribute="trailing"
|
||||
id="I6l-TP-6fn" />
|
||||
<constraint firstItem="EXPO-SplashScreen" firstAttribute="bottom"
|
||||
secondItem="EXPO-ContainerView" secondAttribute="bottom"
|
||||
id="nbp-HC-eaG" />
|
||||
<constraint firstItem="EXPO-SplashScreen" firstAttribute="top"
|
||||
secondItem="EXPO-ContainerView" secondAttribute="top"
|
||||
id="83fcb9b545b870ba44c24f0feeb116490c499c52" />
|
||||
<constraint firstItem="EXPO-SplashScreen" firstAttribute="leading"
|
||||
secondItem="EXPO-ContainerView" secondAttribute="leading"
|
||||
id="61d16215e44b98e39d0a2c74fdbfaaa22601b12c" />
|
||||
<constraint firstItem="EXPO-SplashScreen" firstAttribute="trailing"
|
||||
secondItem="EXPO-ContainerView" secondAttribute="trailing"
|
||||
id="f934da460e9ab5acae3ad9987d5b676a108796c1" />
|
||||
<constraint firstItem="EXPO-SplashScreen" firstAttribute="bottom"
|
||||
secondItem="EXPO-ContainerView" secondAttribute="bottom"
|
||||
id="d6a0be88096b36fb132659aa90203d39139deda9" />
|
||||
</constraints>
|
||||
<viewLayoutGuide key="safeArea" id="Rmq-lb-GrQ" />
|
||||
</view>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="EXPO-PLACEHOLDER-1" userLabel="First Responder" sceneMemberID="firstResponder" />
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="EXPO-PLACEHOLDER-1"
|
||||
userLabel="First Responder" sceneMemberID="firstResponder" />
|
||||
</objects>
|
||||
<point key="canvasLocation" x="140.625" y="129.4921875" />
|
||||
</scene>
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
<key>EXUpdatesLaunchWaitMs</key>
|
||||
<integer>0</integer>
|
||||
<key>EXUpdatesSDKVersion</key>
|
||||
<string>48.0.0</string>
|
||||
<string>49.0.0</string>
|
||||
<key>EXUpdatesURL</key>
|
||||
<string>https://exp.host/@spacedrive/spacedrive</string>
|
||||
</dict>
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
"start": "expo start --dev-client",
|
||||
"android": "expo run:android",
|
||||
"ios": "expo run:ios",
|
||||
"xcode": "open ios/spacedrive.xcworkspace",
|
||||
"xcode": "open ios/Spacedrive.xcworkspace",
|
||||
"android-studio": "open -a '/Applications/Android Studio.app' ./android",
|
||||
"lint": "eslint src --cache",
|
||||
"typecheck": "tsc -b",
|
||||
@@ -18,56 +18,56 @@
|
||||
"dependencies": {
|
||||
"@gorhom/bottom-sheet": "^4.4.7",
|
||||
"@hookform/resolvers": "^3.1.0",
|
||||
"@react-native-async-storage/async-storage": "~1.17.12",
|
||||
"@react-native-masked-view/masked-view": "0.2.8",
|
||||
"@react-navigation/bottom-tabs": "^6.5.7",
|
||||
"@react-navigation/drawer": "^6.6.2",
|
||||
"@react-navigation/native": "^6.1.6",
|
||||
"@react-navigation/stack": "^6.3.16",
|
||||
"@react-native-async-storage/async-storage": "~1.18.2",
|
||||
"@react-native-masked-view/masked-view": "0.2.9",
|
||||
"@react-navigation/bottom-tabs": "^6.5.8",
|
||||
"@react-navigation/drawer": "^6.6.3",
|
||||
"@react-navigation/native": "^6.1.7",
|
||||
"@react-navigation/stack": "^6.3.17",
|
||||
"@rspc/client": "=0.0.0-main-799eec5d",
|
||||
"@rspc/react": "=0.0.0-main-799eec5d",
|
||||
"@sd/assets": "workspace:*",
|
||||
"@sd/client": "workspace:*",
|
||||
"@shopify/flash-list": "1.4.2",
|
||||
"@shopify/flash-list": "1.5.0",
|
||||
"@tanstack/react-query": "^4.29.1",
|
||||
"class-variance-authority": "^0.5.3",
|
||||
"dayjs": "^1.11.8",
|
||||
"event-target-polyfill": "^0.0.3",
|
||||
"expo": "~48.0.19",
|
||||
"expo-linking": "~4.0.1",
|
||||
"expo-media-library": "~15.2.3",
|
||||
"expo-splash-screen": "~0.18.2",
|
||||
"expo-status-bar": "~1.4.4",
|
||||
"expo": "~49.0.8",
|
||||
"expo-linking": "~5.0.2",
|
||||
"expo-media-library": "~15.4.1",
|
||||
"expo-splash-screen": "~0.20.4",
|
||||
"expo-status-bar": "~1.6.0",
|
||||
"intl": "^1.2.5",
|
||||
"lottie-react-native": "5.1.4",
|
||||
"moti": "^0.24.2",
|
||||
"lottie-react-native": "6.2.0",
|
||||
"moti": "^0.26.0",
|
||||
"phosphor-react-native": "^1.1.2",
|
||||
"react": "18.2.0",
|
||||
"react-hook-form": "^7.43.9",
|
||||
"react-native": "0.71.3",
|
||||
"react-native-document-picker": "^8.2.1",
|
||||
"react-hook-form": "~7.45.2",
|
||||
"react-native": "0.72.3",
|
||||
"react-native-document-picker": "^9.0.1",
|
||||
"react-native-fs": "^2.20.0",
|
||||
"react-native-gesture-handler": "~2.9.0",
|
||||
"react-native-gesture-handler": "~2.12.1",
|
||||
"react-native-popup-menu": "^0.16.1",
|
||||
"react-native-reanimated": "~2.14.4",
|
||||
"react-native-safe-area-context": "4.5.1",
|
||||
"react-native-screens": "~3.20.0",
|
||||
"react-native-svg": "13.4.0",
|
||||
"react-native-reanimated": "~3.4.2",
|
||||
"react-native-safe-area-context": "4.7.1",
|
||||
"react-native-screens": "~3.23.0",
|
||||
"react-native-svg": "13.10.0",
|
||||
"react-native-wheel-color-picker": "^1.2.0",
|
||||
"twrnc": "^3.6.1",
|
||||
"twrnc": "^3.6.4",
|
||||
"use-count-up": "^3.0.1",
|
||||
"use-debounce": "^9.0.4",
|
||||
"valtio": "^1.10.4",
|
||||
"zod": "^3.21.4"
|
||||
"zod": "~3.22.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.22.1",
|
||||
"@rnx-kit/metro-config": "^1.3.6",
|
||||
"@rnx-kit/metro-config": "^1.3.8",
|
||||
"@sd/config": "workspace:*",
|
||||
"@types/react": "~18.0.38",
|
||||
"babel-plugin-module-resolver": "^5.0.0",
|
||||
"eslint-plugin-react-native": "^4.0.0",
|
||||
"react-native-svg-transformer": "^1.0.0",
|
||||
"react-native-svg-transformer": "^1.1.0",
|
||||
"typescript": "^5.1.3"
|
||||
}
|
||||
}
|
||||
|
||||
38
apps/mobile/src/components/animation/ProgressBar.tsx
Normal file
@@ -0,0 +1,38 @@
|
||||
import { MotiView } from 'moti';
|
||||
import { memo } from 'react';
|
||||
import { View } from 'react-native';
|
||||
import { tw } from '~/lib/tailwind';
|
||||
|
||||
type ProgressBarProps = {
|
||||
value: number;
|
||||
total: number;
|
||||
pending?: boolean;
|
||||
};
|
||||
|
||||
export const ProgressBar = memo((props: ProgressBarProps) => {
|
||||
const percentage = props.pending ? 0 : Math.round((props.value / props.total) * 100);
|
||||
|
||||
if (props.pending) {
|
||||
// Show indeterminate progress bar
|
||||
return (
|
||||
<View style={tw`h-1 overflow-hidden rounded-full bg-app-button`}>
|
||||
<MotiView
|
||||
style={tw`h-full w-[50%] bg-accent`}
|
||||
from={{ left: '-50%' }}
|
||||
animate={{ left: '100%' }}
|
||||
transition={{ type: 'timing', duration: 1500, loop: true }}
|
||||
/>
|
||||
</View>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<View style={tw`h-1 w-[94%] overflow-hidden rounded-full bg-app-button`}>
|
||||
<MotiView
|
||||
style={tw`h-full bg-accent`}
|
||||
animate={{ width: `${percentage}%` }}
|
||||
transition={{ type: 'timing' }}
|
||||
/>
|
||||
</View>
|
||||
);
|
||||
});
|
||||
@@ -1,9 +1,13 @@
|
||||
import { MotiView, useDynamicAnimation } from 'moti';
|
||||
import { MotiView } from 'moti';
|
||||
import { PropsWithChildren, ReactNode } from 'react';
|
||||
import { StyleSheet, View, ViewProps } from 'react-native';
|
||||
import { useDerivedValue, useSharedValue } from 'react-native-reanimated';
|
||||
import { StyleSheet, ViewProps } from 'react-native';
|
||||
import Animated, {
|
||||
runOnJS,
|
||||
useAnimatedStyle,
|
||||
useSharedValue,
|
||||
withTiming
|
||||
} from 'react-native-reanimated';
|
||||
import Layout from '~/constants/Layout';
|
||||
import { tw } from '~/lib/tailwind';
|
||||
|
||||
type MotiViewProps = PropsWithChildren<ViewProps>;
|
||||
|
||||
@@ -57,61 +61,54 @@ type AnimatedHeightProps = {
|
||||
hide?: boolean;
|
||||
onHeightDidAnimate?: (height: number) => void;
|
||||
initialHeight?: number;
|
||||
} & React.ComponentProps<typeof MotiView>;
|
||||
duration?: number;
|
||||
} & MotiViewProps;
|
||||
|
||||
export function AnimatedHeight({
|
||||
children,
|
||||
hide = false,
|
||||
hide = !children,
|
||||
style,
|
||||
delay = 0,
|
||||
transition = { type: 'timing', delay },
|
||||
onHeightDidAnimate,
|
||||
initialHeight = 0,
|
||||
...motiViewProps
|
||||
duration = 200,
|
||||
initialHeight = 0
|
||||
}: AnimatedHeightProps) {
|
||||
const measuredHeight = useSharedValue(initialHeight);
|
||||
const state = useDynamicAnimation(() => {
|
||||
const childStyle = useAnimatedStyle(
|
||||
() => ({
|
||||
opacity: withTiming(!measuredHeight.value || hide ? 0 : 1, { duration })
|
||||
}),
|
||||
[hide, measuredHeight]
|
||||
);
|
||||
|
||||
const containerStyle = useAnimatedStyle(() => {
|
||||
return {
|
||||
height: initialHeight,
|
||||
opacity: !initialHeight || hide ? 0 : 1
|
||||
height: withTiming(hide ? 0 : measuredHeight.value, { duration }, () => {
|
||||
if (onHeightDidAnimate) {
|
||||
runOnJS(onHeightDidAnimate)(measuredHeight.value);
|
||||
}
|
||||
})
|
||||
};
|
||||
});
|
||||
if ('state' in motiViewProps) {
|
||||
console.warn('[AnimateHeight] state prop not supported');
|
||||
}
|
||||
|
||||
useDerivedValue(() => {
|
||||
let height = Math.ceil(measuredHeight.value);
|
||||
if (hide) {
|
||||
height = 0;
|
||||
}
|
||||
|
||||
state.animateTo({
|
||||
height,
|
||||
opacity: !height || hide ? 0 : 1
|
||||
});
|
||||
}, [hide, measuredHeight]);
|
||||
|
||||
return (
|
||||
<MotiView
|
||||
{...motiViewProps}
|
||||
state={state}
|
||||
transition={transition}
|
||||
onDidAnimate={
|
||||
onHeightDidAnimate &&
|
||||
((key, finished, _, { attemptedValue }) =>
|
||||
key === 'height' && onHeightDidAnimate(attemptedValue as number))
|
||||
}
|
||||
style={[tw`overflow-hidden`, style]}
|
||||
>
|
||||
<View
|
||||
style={[StyleSheet.absoluteFill, { bottom: 'auto' }]}
|
||||
<Animated.View style={[styles.hidden, style, containerStyle]}>
|
||||
<Animated.View
|
||||
style={[StyleSheet.absoluteFill, styles.autoBottom, childStyle]}
|
||||
onLayout={({ nativeEvent }) => {
|
||||
measuredHeight.value = nativeEvent.layout.height;
|
||||
measuredHeight.value = Math.ceil(nativeEvent.layout.height);
|
||||
}}
|
||||
>
|
||||
{children}
|
||||
</View>
|
||||
</MotiView>
|
||||
</Animated.View>
|
||||
</Animated.View>
|
||||
);
|
||||
}
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
autoBottom: {
|
||||
bottom: 'auto'
|
||||
},
|
||||
hidden: {
|
||||
overflow: 'hidden'
|
||||
}
|
||||
});
|
||||
|
||||
@@ -1,14 +1,20 @@
|
||||
import AnimatedLottieView, { AnimatedLottieViewProps } from 'lottie-react-native';
|
||||
import LottieView from 'lottie-react-native';
|
||||
// They probably forgot to export the type on this update lol.
|
||||
// import type LottieViewProps from 'lottie-react-native';
|
||||
import { StyleProp, ViewStyle } from 'react-native';
|
||||
|
||||
type AnimationProps = Omit<AnimatedLottieViewProps, 'source'>;
|
||||
type AnimationProps = {
|
||||
style?: StyleProp<ViewStyle>;
|
||||
speed?: number;
|
||||
};
|
||||
|
||||
export const PulseAnimation = ({ style }: AnimationProps) => {
|
||||
export const PulseAnimation = (props: AnimationProps) => {
|
||||
return (
|
||||
<AnimatedLottieView
|
||||
<LottieView
|
||||
autoPlay
|
||||
loop
|
||||
source={require('@sd/assets/lottie/loading-pulse.json')}
|
||||
style={style}
|
||||
{...props}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -1,11 +1,16 @@
|
||||
import { AppLogo } from '@sd/assets/images';
|
||||
import { DrawerContentScrollView } from '@react-navigation/drawer';
|
||||
import { DrawerContentComponentProps } from '@react-navigation/drawer/lib/typescript/src/types';
|
||||
import { Gear } from 'phosphor-react-native';
|
||||
import { CheckCircle, Gear } from 'phosphor-react-native';
|
||||
import { useRef } from 'react';
|
||||
import { Image, Platform, Pressable, Text, View } from 'react-native';
|
||||
import { JobManagerContextProvider, useLibraryQuery } from '@sd/client';
|
||||
import Layout from '~/constants/Layout';
|
||||
import { tw, twStyle } from '~/lib/tailwind';
|
||||
import { getStackNameFromState } from '~/utils/nav';
|
||||
import { PulseAnimation } from '../animation/lottie';
|
||||
import { ModalRef } from '../layout/Modal';
|
||||
import { JobManagerModal } from '../modal/job/JobManagerModal';
|
||||
import DrawerLibraryManager from './DrawerLibraryManager';
|
||||
import DrawerLocations from './DrawerLocations';
|
||||
import DrawerTags from './DrawerTags';
|
||||
@@ -15,9 +20,20 @@ const drawerHeight = Platform.select({
|
||||
android: Layout.window.height * 0.9
|
||||
});
|
||||
|
||||
function JobIcon() {
|
||||
const { data: isActive } = useLibraryQuery(['jobs.isActive']);
|
||||
return isActive ? (
|
||||
<PulseAnimation style={tw`h-[24px] w-[32px]`} speed={1.5} />
|
||||
) : (
|
||||
<CheckCircle color="white" size={24} />
|
||||
);
|
||||
}
|
||||
|
||||
const DrawerContent = ({ navigation, state }: DrawerContentComponentProps) => {
|
||||
const stackName = getStackNameFromState(state);
|
||||
|
||||
const modalRef = useRef<ModalRef>(null);
|
||||
|
||||
return (
|
||||
<DrawerContentScrollView style={tw`flex-1 px-3 py-2`} scrollEnabled={false}>
|
||||
<View style={twStyle('justify-between', { height: drawerHeight })}>
|
||||
@@ -27,6 +43,7 @@ const DrawerContent = ({ navigation, state }: DrawerContentComponentProps) => {
|
||||
<Text style={tw`ml-2 text-lg font-bold text-ink`}>Spacedrive</Text>
|
||||
</View>
|
||||
<View style={tw`mt-6`} />
|
||||
|
||||
{/* Library Manager */}
|
||||
<DrawerLibraryManager />
|
||||
{/* Locations */}
|
||||
@@ -34,10 +51,19 @@ const DrawerContent = ({ navigation, state }: DrawerContentComponentProps) => {
|
||||
{/* Tags */}
|
||||
<DrawerTags stackName={stackName} />
|
||||
</View>
|
||||
{/* Settings */}
|
||||
<Pressable onPress={() => navigation.navigate('Settings')}>
|
||||
<Gear color={tw.color('ink')} size={24} />
|
||||
</Pressable>
|
||||
<View style={tw`flex w-full flex-row items-center gap-x-4`}>
|
||||
{/* Settings */}
|
||||
<Pressable onPress={() => navigation.navigate('Settings')}>
|
||||
<Gear color="white" size={24} />
|
||||
</Pressable>
|
||||
<JobManagerContextProvider>
|
||||
{/* Job Manager */}
|
||||
<Pressable onPress={() => modalRef.current?.present()}>
|
||||
<JobIcon />
|
||||
</Pressable>
|
||||
<JobManagerModal ref={modalRef} />
|
||||
</JobManagerContextProvider>
|
||||
</View>
|
||||
</View>
|
||||
</DrawerContentScrollView>
|
||||
);
|
||||
|
||||
@@ -35,7 +35,7 @@ type DrawerTagsProp = {
|
||||
const DrawerTags = ({ stackName }: DrawerTagsProp) => {
|
||||
const navigation = useNavigation<DrawerNavigationHelpers>();
|
||||
|
||||
const { data: tags } = useLibraryQuery(['tags.list'], { keepPreviousData: true });
|
||||
const tags = useLibraryQuery(['tags.list']);
|
||||
|
||||
const modalRef = useRef<ModalRef>(null);
|
||||
|
||||
@@ -46,7 +46,7 @@ const DrawerTags = ({ stackName }: DrawerTagsProp) => {
|
||||
containerStyle={tw`mb-3 ml-1 mt-6`}
|
||||
>
|
||||
<View style={tw`mt-2`}>
|
||||
{tags?.map((tag) => (
|
||||
{tags.data?.map((tag) => (
|
||||
<DrawerTagItem
|
||||
key={tag.id}
|
||||
tagName={tag.name!}
|
||||
|
||||
92
apps/mobile/src/components/job/Job.tsx
Normal file
@@ -0,0 +1,92 @@
|
||||
import {
|
||||
Copy,
|
||||
Fingerprint,
|
||||
Folder,
|
||||
Icon,
|
||||
Image,
|
||||
Info,
|
||||
Scissors,
|
||||
Trash
|
||||
} from 'phosphor-react-native';
|
||||
import { memo } from 'react';
|
||||
import { View, ViewStyle } from 'react-native';
|
||||
import { JobProgressEvent, JobReport, useJobInfo } from '@sd/client';
|
||||
import { tw } from '~/lib/tailwind';
|
||||
import { ProgressBar } from '../animation/ProgressBar';
|
||||
import JobContainer from './JobContainer';
|
||||
|
||||
type JobProps = {
|
||||
job: JobReport;
|
||||
isChild?: boolean;
|
||||
containerStyle?: ViewStyle;
|
||||
progress: JobProgressEvent | null;
|
||||
};
|
||||
|
||||
const JobIcon: Record<string, Icon> = {
|
||||
indexer: Folder,
|
||||
thumbnailer: Image,
|
||||
file_identifier: Fingerprint,
|
||||
file_copier: Copy,
|
||||
file_deleter: Trash,
|
||||
file_cutter: Scissors,
|
||||
object_validator: Fingerprint
|
||||
};
|
||||
|
||||
function Job({ job, isChild, progress }: JobProps) {
|
||||
const jobData = useJobInfo(job, progress);
|
||||
|
||||
if (job.status === 'CompletedWithErrors') {
|
||||
// TODO:
|
||||
// const JobError = (
|
||||
// <pre className="custom-scroll inspector-scroll max-h-[300px] rounded border border-app-darkBox bg-app-darkBox/80 p-3">
|
||||
// {job.errors_text.map((error, i) => (
|
||||
// <p
|
||||
// className="mb-1 w-full overflow-auto whitespace-normal break-words text-sm"
|
||||
// key={i}
|
||||
// >
|
||||
// {error.trim()}
|
||||
// </p>
|
||||
// ))}
|
||||
// </pre>
|
||||
// );
|
||||
jobData.textItems?.push([
|
||||
{
|
||||
text: 'Completed with errors',
|
||||
icon: Info as any,
|
||||
onClick: () => {
|
||||
// TODO:
|
||||
// showAlertDialog({
|
||||
// title: 'Error',
|
||||
// description:
|
||||
// 'The job completed with errors. Please see the error log below for more information. If you need help, please contact support and provide this error.',
|
||||
// children: JobError
|
||||
// });
|
||||
// }
|
||||
}
|
||||
}
|
||||
]);
|
||||
}
|
||||
|
||||
return (
|
||||
<JobContainer
|
||||
name={jobData.name}
|
||||
icon={JobIcon[job.name]}
|
||||
textItems={
|
||||
['Queued'].includes(job.status) ? [[{ text: job.status }]] : jobData.textItems
|
||||
}
|
||||
isChild={isChild}
|
||||
>
|
||||
{(jobData.isRunning || jobData.isPaused) && (
|
||||
<View style={tw`my-1.5 ml-1.5 w-[300px]`}>
|
||||
<ProgressBar
|
||||
pending={jobData.taskCount == 0}
|
||||
value={jobData.completedTaskCount}
|
||||
total={jobData.taskCount}
|
||||
/>
|
||||
</View>
|
||||
)}
|
||||
</JobContainer>
|
||||
);
|
||||
}
|
||||
|
||||
export default memo(Job);
|
||||
79
apps/mobile/src/components/job/JobContainer.tsx
Normal file
@@ -0,0 +1,79 @@
|
||||
import { Icon } from 'phosphor-react-native';
|
||||
import { Fragment } from 'react';
|
||||
import { Image, Text, View, ViewStyle } from 'react-native';
|
||||
import { TextItems } from '@sd/client';
|
||||
import { styled, tw, twStyle } from '~/lib/tailwind';
|
||||
|
||||
type JobContainerProps = {
|
||||
name: string;
|
||||
icon?: string | Icon;
|
||||
// Array of arrays of TextItems, where each array of TextItems is a truncated line of text.
|
||||
textItems?: TextItems;
|
||||
isChild?: boolean;
|
||||
children: React.ReactNode;
|
||||
containerStyle?: ViewStyle;
|
||||
};
|
||||
|
||||
const MetaContainer = styled(View, 'flex w-full overflow-hidden flex-col');
|
||||
|
||||
// Job container consolidates the common layout of a job item, used for regular jobs (Job.tsx) and grouped jobs (JobGroup.tsx).
|
||||
export default function JobContainer(props: JobContainerProps) {
|
||||
const { name, icon: Icon, textItems, isChild, children, ...restProps } = props;
|
||||
|
||||
return (
|
||||
<View
|
||||
style={twStyle(
|
||||
'flex flex-row justify-center',
|
||||
'border-b border-app-line/50 px-8 py-4',
|
||||
isChild && 'my-1.5 border-b-0 p-2 pl-12',
|
||||
restProps.containerStyle
|
||||
)}
|
||||
>
|
||||
{typeof Icon === 'number' ? (
|
||||
<Image source={Icon} style={tw`ml-4 mr-1 h-8 w-8`} />
|
||||
) : (
|
||||
Icon && (
|
||||
<View
|
||||
style={tw`mr-1 h-7 w-7 items-center justify-center rounded-full bg-app-button`}
|
||||
>
|
||||
<Icon weight="fill" color="white" size={18} />
|
||||
</View>
|
||||
)
|
||||
)}
|
||||
<MetaContainer>
|
||||
<Text style={tw`pl-1.5 text-sm font-medium text-white`} numberOfLines={1}>
|
||||
{name}
|
||||
</Text>
|
||||
{textItems?.map((item, index) => {
|
||||
// filter out undefined text so we don't render empty TextItems
|
||||
const filteredItems = item.filter((i) => i?.text);
|
||||
return (
|
||||
<Text
|
||||
key={index}
|
||||
style={tw`mt-[2px] pl-1.5 text-[13px] text-ink-faint`}
|
||||
numberOfLines={1}
|
||||
>
|
||||
{filteredItems.map((item, index) => {
|
||||
const Icon = item?.icon;
|
||||
return (
|
||||
<Fragment key={index}>
|
||||
{Icon && (
|
||||
<Icon
|
||||
weight="fill"
|
||||
// TODO: this might be ugly
|
||||
style={tw`-mt-0.5 ml-[5px] inline`}
|
||||
/>
|
||||
)}
|
||||
<Text key={index}>{item?.text}</Text>
|
||||
{index < filteredItems.length - 1 && <Text> • </Text>}
|
||||
</Fragment>
|
||||
);
|
||||
})}
|
||||
</Text>
|
||||
);
|
||||
})}
|
||||
{children && <View style={tw`mt-1`}>{children}</View>}
|
||||
</MetaContainer>
|
||||
</View>
|
||||
);
|
||||
}
|
||||
191
apps/mobile/src/components/job/JobGroup.tsx
Normal file
@@ -0,0 +1,191 @@
|
||||
import { Folder } from '@sd/assets/icons';
|
||||
import dayjs from 'dayjs';
|
||||
import { DotsThreeVertical, Pause, Play, Stop } from 'phosphor-react-native';
|
||||
import { useMemo, useState } from 'react';
|
||||
import { Animated, Pressable, View } from 'react-native';
|
||||
import { Swipeable } from 'react-native-gesture-handler';
|
||||
import {
|
||||
JobGroup,
|
||||
JobProgressEvent,
|
||||
JobReport,
|
||||
getJobNiceActionName,
|
||||
getTotalTasks,
|
||||
useLibraryMutation,
|
||||
useTotalElapsedTimeText
|
||||
} from '@sd/client';
|
||||
import { tw } from '~/lib/tailwind';
|
||||
import { ProgressBar } from '../animation/ProgressBar';
|
||||
import { AnimatedHeight } from '../animation/layout';
|
||||
import { Button } from '../primitive/Button';
|
||||
import Job from './Job';
|
||||
import JobContainer from './JobContainer';
|
||||
|
||||
interface JobGroupProps {
|
||||
group: JobGroup;
|
||||
progress: Record<string, JobProgressEvent>;
|
||||
}
|
||||
|
||||
export default function ({ group, progress }: JobGroupProps) {
|
||||
const { jobs } = group;
|
||||
|
||||
const [showChildJobs, setShowChildJobs] = useState(false);
|
||||
|
||||
const runningJob = jobs.find((job) => job.status === 'Running');
|
||||
|
||||
const tasks = getTotalTasks(jobs);
|
||||
const totalGroupTime = useTotalElapsedTimeText(jobs);
|
||||
|
||||
const dateStarted = useMemo(() => {
|
||||
const createdAt = dayjs(jobs[0]?.created_at).fromNow();
|
||||
return createdAt.charAt(0).toUpperCase() + createdAt.slice(1);
|
||||
}, [jobs]);
|
||||
|
||||
if (jobs.length === 0) return <></>;
|
||||
|
||||
const renderRightActions = (
|
||||
progress: Animated.AnimatedInterpolation<number>,
|
||||
_dragX: Animated.AnimatedInterpolation<number>,
|
||||
swipeable: Swipeable
|
||||
) => {
|
||||
const translate = progress.interpolate({
|
||||
inputRange: [0, 1],
|
||||
outputRange: [100, 0],
|
||||
extrapolate: 'clamp'
|
||||
});
|
||||
|
||||
return (
|
||||
<Animated.View
|
||||
style={[
|
||||
tw`flex flex-row items-center pr-4`,
|
||||
{ transform: [{ translateX: translate }] }
|
||||
]}
|
||||
>
|
||||
<Options activeJob={runningJob} group={group} />
|
||||
</Animated.View>
|
||||
);
|
||||
};
|
||||
|
||||
return (
|
||||
<Swipeable
|
||||
containerStyle={tw.style(showChildJobs && 'bg-app-darkBox/30')}
|
||||
enableTrackpadTwoFingerGesture
|
||||
renderRightActions={renderRightActions}
|
||||
>
|
||||
{jobs?.length > 1 ? (
|
||||
<>
|
||||
<Pressable onPress={() => setShowChildJobs((v) => !v)}>
|
||||
<JobContainer
|
||||
icon={Folder}
|
||||
containerStyle={tw.style('pb-2', showChildJobs && 'border-b-0 pb-1')}
|
||||
name={getJobNiceActionName(
|
||||
group.action ?? '',
|
||||
group.status === 'Completed',
|
||||
jobs[0]
|
||||
)}
|
||||
textItems={[
|
||||
[
|
||||
{
|
||||
text: `${tasks.total} ${
|
||||
tasks.total <= 1 ? 'task' : 'tasks'
|
||||
}`
|
||||
},
|
||||
{ text: dateStarted },
|
||||
{ text: totalGroupTime || undefined },
|
||||
|
||||
{
|
||||
text: ['Queued', 'Paused', 'Canceled', 'Failed'].includes(
|
||||
group.status
|
||||
)
|
||||
? group.status
|
||||
: undefined
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
text:
|
||||
!showChildJobs && runningJob !== undefined
|
||||
? progress[runningJob.id]?.message
|
||||
: undefined
|
||||
}
|
||||
]
|
||||
]}
|
||||
>
|
||||
{!showChildJobs && runningJob && (
|
||||
<View style={tw`mb-2 ml-1.5`}>
|
||||
<ProgressBar
|
||||
pending={tasks.completed === 0}
|
||||
value={tasks.completed}
|
||||
total={tasks.total}
|
||||
/>
|
||||
</View>
|
||||
)}
|
||||
</JobContainer>
|
||||
</Pressable>
|
||||
{showChildJobs && (
|
||||
<AnimatedHeight style={tw`mb-4`}>
|
||||
{jobs.map((job) => (
|
||||
<Job
|
||||
isChild={jobs.length > 1}
|
||||
key={job.id}
|
||||
job={job}
|
||||
progress={progress[job.id] ?? null}
|
||||
/>
|
||||
))}
|
||||
</AnimatedHeight>
|
||||
)}
|
||||
</>
|
||||
) : (
|
||||
<Job job={jobs[0]!} progress={progress[jobs[0]!.id] || null} />
|
||||
)}
|
||||
</Swipeable>
|
||||
);
|
||||
}
|
||||
|
||||
function Options({ activeJob, group }: { activeJob?: JobReport; group: JobGroup }) {
|
||||
const resumeJob = useLibraryMutation(['jobs.resume'], {
|
||||
onError: () => {
|
||||
// TODO: Toasts
|
||||
}
|
||||
});
|
||||
const pauseJob = useLibraryMutation(['jobs.pause'], {
|
||||
onError: () => {
|
||||
// TODO: Toasts
|
||||
}
|
||||
});
|
||||
const cancelJob = useLibraryMutation(['jobs.cancel'], {
|
||||
onError: () => {
|
||||
// TODO: Toasts
|
||||
}
|
||||
});
|
||||
|
||||
const isJobPaused = useMemo(
|
||||
() => group.jobs.some((job) => job.status === 'Paused'),
|
||||
[group.jobs]
|
||||
);
|
||||
|
||||
return (
|
||||
<>
|
||||
{/* Resume */}
|
||||
{(group.status === 'Queued' || group.status === 'Paused' || isJobPaused) && (
|
||||
<Button variant="outline" size="sm" onPress={() => resumeJob.mutate(group.id)}>
|
||||
<Play size={18} color="white" />
|
||||
</Button>
|
||||
)}
|
||||
{/* TODO: This should remove the job from panel */}
|
||||
{!activeJob !== undefined ? (
|
||||
<Button variant="outline" size="sm">
|
||||
<DotsThreeVertical size={16} color="white" />
|
||||
</Button>
|
||||
) : (
|
||||
<View style={tw`flex flex-row gap-2`}>
|
||||
<Button variant="outline" size="sm" onPress={() => pauseJob.mutate(group.id)}>
|
||||
<Pause size={16} color="white" />
|
||||
</Button>
|
||||
<Button variant="outline" size="sm" onPress={() => cancelJob.mutate(group.id)}>
|
||||
<Stop size={16} color="white" />
|
||||
</Button>
|
||||
</View>
|
||||
)}
|
||||
</>
|
||||
);
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
import {
|
||||
BottomSheetBackdrop,
|
||||
BottomSheetBackdropProps,
|
||||
BottomSheetFlatList,
|
||||
BottomSheetHandle,
|
||||
BottomSheetHandleProps,
|
||||
BottomSheetModal,
|
||||
@@ -72,6 +73,7 @@ export const Modal = forwardRef<ModalRef, ModalProps>((props, ref) => {
|
||||
});
|
||||
|
||||
export const ModalScrollView = BottomSheetScrollView;
|
||||
export const ModalFlatlist = BottomSheetFlatList;
|
||||
|
||||
type ConfirmModalProps = {
|
||||
title: string;
|
||||
|
||||
44
apps/mobile/src/components/modal/job/JobManagerModal.tsx
Normal file
@@ -0,0 +1,44 @@
|
||||
import { useQueryClient } from '@tanstack/react-query';
|
||||
import { forwardRef } from 'react';
|
||||
import { FlatList, Text, View } from 'react-native';
|
||||
import { useJobProgress, useLibraryQuery } from '@sd/client';
|
||||
import JobGroup from '~/components/job/JobGroup';
|
||||
import { Modal, ModalRef } from '~/components/layout/Modal';
|
||||
import { tw } from '~/lib/tailwind';
|
||||
|
||||
// TODO:
|
||||
// - When there is no job, make modal height smaller
|
||||
// - Add clear all jobs button
|
||||
|
||||
export const JobManagerModal = forwardRef<ModalRef, unknown>((_, ref) => {
|
||||
const queryClient = useQueryClient();
|
||||
|
||||
const jobGroups = useLibraryQuery(['jobs.reports']);
|
||||
const progress = useJobProgress(jobGroups.data);
|
||||
|
||||
// const clearAllJobs = useLibraryMutation(['jobs.clearAll'], {
|
||||
// onError: () => {
|
||||
// // TODO: Show error toast
|
||||
// },
|
||||
// onSuccess: () => {
|
||||
// queryClient.invalidateQueries(['jobs.reports ']);
|
||||
// }
|
||||
// });
|
||||
|
||||
return (
|
||||
<Modal ref={ref} snapPoints={['60']} title="Recent Jobs" showCloseButton>
|
||||
<FlatList
|
||||
data={jobGroups.data}
|
||||
style={tw`flex-1`}
|
||||
keyExtractor={(i) => i.id}
|
||||
contentContainerStyle={tw`mt-4`}
|
||||
renderItem={({ item }) => <JobGroup group={item} progress={progress} />}
|
||||
ListEmptyComponent={
|
||||
<View style={tw`flex h-60 items-center justify-center`}>
|
||||
<Text style={tw`text-center text-base text-ink-dull`}>No jobs.</Text>
|
||||
</View>
|
||||
}
|
||||
/>
|
||||
</Modal>
|
||||
);
|
||||
});
|
||||
@@ -50,6 +50,7 @@ export const AnimatedButton: FC<AnimatedButtonProps> = ({ variant, size, disable
|
||||
return (
|
||||
<MotiPressable
|
||||
disabled={disabled}
|
||||
// @ts-ignore
|
||||
animate={useMemo(
|
||||
() =>
|
||||
({ hovered, pressed }) => {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { ComponentType, createElement, forwardRef } from 'react';
|
||||
import { Component, ComponentType, ElementType, createElement, forwardRef } from 'react';
|
||||
import { create } from 'twrnc';
|
||||
import { Themes } from '@sd/client';
|
||||
|
||||
|
||||
@@ -8,7 +8,6 @@ export default function OverviewScreen({ navigation }: OverviewStackScreenProps<
|
||||
return (
|
||||
<VirtualizedListWrapper>
|
||||
<View style={tw`mt-4 px-4`}>
|
||||
{/* Stats */}
|
||||
<OverviewStats />
|
||||
</View>
|
||||
</VirtualizedListWrapper>
|
||||
|
||||
@@ -39,7 +39,6 @@ const GeneralSettingsScreen = ({ navigation }: SettingsStackScreenProps<'General
|
||||
<SettingsTitle style={tw`mt-3`}>Node Port</SettingsTitle>
|
||||
<Input value={node.p2p_port?.toString() ?? '5795'} keyboardType="numeric" />
|
||||
</Card>
|
||||
{/* TODO: Move this to Debug screen */}
|
||||
{debugState.enabled && (
|
||||
<Card style={tw`mt-4`}>
|
||||
{/* Card Header */}
|
||||
|
||||
@@ -4,7 +4,7 @@ import { Animated, FlatList, Text, View } from 'react-native';
|
||||
import { Swipeable } from 'react-native-gesture-handler';
|
||||
import { LibraryConfigWrapped, useBridgeQuery } from '@sd/client';
|
||||
import { ModalRef } from '~/components/layout/Modal';
|
||||
import DeleteLibraryModal from '~/components/modal/confirm-modals/DeleteLibraryModal';
|
||||
import DeleteLibraryModal from '~/components/modal/confirmModals/DeleteLibraryModal';
|
||||
import { AnimatedButton, FakeButton } from '~/components/primitive/Button';
|
||||
import { tw, twStyle } from '~/lib/tailwind';
|
||||
import { SettingsStackScreenProps } from '~/navigation/SettingsNavigator';
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import React from 'react';
|
||||
import { Text, View } from 'react-native';
|
||||
import { getDebugState, toggleFeatureFlag, useDebugState, useFeatureFlags } from '@sd/client';
|
||||
import Card from '~/components/layout/Card';
|
||||
import { Button } from '~/components/primitive/Button';
|
||||
import { tw } from '~/lib/tailwind';
|
||||
import { SettingsStackScreenProps } from '~/navigation/SettingsNavigator';
|
||||
@@ -8,26 +9,29 @@ import { SettingsStackScreenProps } from '~/navigation/SettingsNavigator';
|
||||
const DebugScreen = ({ navigation }: SettingsStackScreenProps<'Debug'>) => {
|
||||
const debugState = useDebugState();
|
||||
const featureFlags = useFeatureFlags();
|
||||
|
||||
return (
|
||||
<View>
|
||||
<Text style={tw`text-ink`}>Debug</Text>
|
||||
<Button onPress={() => toggleFeatureFlag(['p2pPairing', 'spacedrop'])}>
|
||||
<Text style={tw`text-ink`}>Toggle P2P</Text>
|
||||
</Button>
|
||||
<Button onPress={() => (getDebugState().rspcLogger = !getDebugState().rspcLogger)}>
|
||||
<Text style={tw`text-ink`}>Toggle rspc logger</Text>
|
||||
</Button>
|
||||
<Text style={tw`text-ink`}>{JSON.stringify(featureFlags)}</Text>
|
||||
<Text style={tw`text-ink`}>{JSON.stringify(debugState)}</Text>
|
||||
<Button
|
||||
onPress={() => {
|
||||
navigation.popToTop();
|
||||
navigation.replace('Home');
|
||||
getDebugState().enabled = false;
|
||||
}}
|
||||
>
|
||||
<Text style={tw`text-ink`}>Disable Debug Mode</Text>
|
||||
</Button>
|
||||
<View style={tw`flex-1 p-4`}>
|
||||
<Card style={tw`gap-y-4 bg-app-box`}>
|
||||
<Text style={tw`font-semibold text-ink`}>Debug</Text>
|
||||
<Button onPress={() => toggleFeatureFlag(['p2pPairing', 'spacedrop'])}>
|
||||
<Text style={tw`text-ink`}>Toggle P2P</Text>
|
||||
</Button>
|
||||
<Button onPress={() => (getDebugState().rspcLogger = !getDebugState().rspcLogger)}>
|
||||
<Text style={tw`text-ink`}>Toggle rspc logger</Text>
|
||||
</Button>
|
||||
<Text style={tw`text-ink`}>{JSON.stringify(featureFlags)}</Text>
|
||||
<Text style={tw`text-ink`}>{JSON.stringify(debugState)}</Text>
|
||||
<Button
|
||||
onPress={() => {
|
||||
navigation.popToTop();
|
||||
navigation.replace('Home');
|
||||
getDebugState().enabled = false;
|
||||
}}
|
||||
>
|
||||
<Text style={tw`text-ink`}>Disable Debug Mode</Text>
|
||||
</Button>
|
||||
</Card>
|
||||
</View>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -6,7 +6,7 @@ import { Alert, ScrollView, Text, View } from 'react-native';
|
||||
import { useLibraryMutation, useLibraryQuery } from '@sd/client';
|
||||
import { Input } from '~/components/form/Input';
|
||||
import { Switch } from '~/components/form/Switch';
|
||||
import DeleteLocationModal from '~/components/modal/confirm-modals/DeleteLocationModal';
|
||||
import DeleteLocationModal from '~/components/modal/confirmModals/DeleteLocationModal';
|
||||
import { AnimatedButton, FakeButton } from '~/components/primitive/Button';
|
||||
import { Divider } from '~/components/primitive/Divider';
|
||||
import {
|
||||
|
||||
@@ -5,7 +5,7 @@ import { Alert, View } from 'react-native';
|
||||
import { useBridgeMutation, useLibraryContext } from '@sd/client';
|
||||
import { Input } from '~/components/form/Input';
|
||||
import { Switch } from '~/components/form/Switch';
|
||||
import DeleteLibraryModal from '~/components/modal/confirm-modals/DeleteLibraryModal';
|
||||
import DeleteLibraryModal from '~/components/modal/confirmModals/DeleteLibraryModal';
|
||||
import { FakeButton } from '~/components/primitive/Button';
|
||||
import { Divider } from '~/components/primitive/Divider';
|
||||
import { SettingsContainer, SettingsTitle } from '~/components/settings/SettingsContainer';
|
||||
|
||||
@@ -12,7 +12,7 @@ import {
|
||||
import FolderIcon from '~/components/icons/FolderIcon';
|
||||
import { ModalRef } from '~/components/layout/Modal';
|
||||
import ImportModal from '~/components/modal/ImportModal';
|
||||
import DeleteLocationModal from '~/components/modal/confirm-modals/DeleteLocationModal';
|
||||
import DeleteLocationModal from '~/components/modal/confirmModals/DeleteLocationModal';
|
||||
import { AnimatedButton } from '~/components/primitive/Button';
|
||||
import { tw, twStyle } from '~/lib/tailwind';
|
||||
import { SettingsStackScreenProps } from '~/navigation/SettingsNavigator';
|
||||
|
||||
@@ -4,7 +4,7 @@ import { Animated, FlatList, Text, View } from 'react-native';
|
||||
import { Swipeable } from 'react-native-gesture-handler';
|
||||
import { Tag, useLibraryQuery } from '@sd/client';
|
||||
import { ModalRef } from '~/components/layout/Modal';
|
||||
import DeleteTagModal from '~/components/modal/confirm-modals/DeleteTagModal';
|
||||
import DeleteTagModal from '~/components/modal/confirmModals/DeleteTagModal';
|
||||
import CreateTagModal from '~/components/modal/tag/CreateTagModal';
|
||||
import UpdateTagModal from '~/components/modal/tag/UpdateTagModal';
|
||||
import { AnimatedButton, FakeButton } from '~/components/primitive/Button';
|
||||
|
||||
@@ -9,9 +9,9 @@ import * as ObjectItems from './Object/Items';
|
||||
import * as SharedItems from './SharedItems';
|
||||
import { ContextMenuContextProvider } from './context';
|
||||
|
||||
export * as SharedItems from './SharedItems';
|
||||
export * as FilePathItems from './FilePath/Items';
|
||||
export * as ObjectItems from './Object/Items';
|
||||
export * as SharedItems from './SharedItems';
|
||||
|
||||
const Items = ({ children }: { children?: () => ReactNode }) => (
|
||||
<>
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
import { Gear } from 'phosphor-react';
|
||||
import { useClientContext, useDebugState } from '@sd/client';
|
||||
import { JobManagerContextProvider, useClientContext, useDebugState } from '@sd/client';
|
||||
import { Button, ButtonLink, Popover, Tooltip, dialogManager } from '@sd/ui';
|
||||
import DebugPopover from './DebugPopover';
|
||||
import FeedbackDialog from './FeedbackDialog';
|
||||
import { IsRunningJob, JobManager } from './JobManager';
|
||||
import { JobManagerContextProvider } from './JobManager/context';
|
||||
|
||||
export default () => {
|
||||
const { library } = useClientContext();
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
import dayjs from 'dayjs';
|
||||
import { Info, Question } from 'phosphor-react';
|
||||
import { Copy, Fingerprint, Folder, Icon, Image, Info, Scissors, Trash } from 'phosphor-react';
|
||||
import { memo } from 'react';
|
||||
import { JobProgressEvent, JobReport } from '@sd/client';
|
||||
import { JobProgressEvent, JobReport, useJobInfo } from '@sd/client';
|
||||
import { ProgressBar } from '@sd/ui';
|
||||
import { showAlertDialog } from '~/components';
|
||||
import JobContainer from './JobContainer';
|
||||
import useJobInfo from './useJobInfo';
|
||||
|
||||
interface JobProps {
|
||||
job: JobReport;
|
||||
@@ -14,21 +12,18 @@ interface JobProps {
|
||||
progress: JobProgressEvent | null;
|
||||
}
|
||||
|
||||
const JobIcon: Record<string, Icon> = {
|
||||
indexer: Folder,
|
||||
thumbnailer: Image,
|
||||
file_identifier: Fingerprint,
|
||||
file_copier: Copy,
|
||||
file_deleter: Trash,
|
||||
file_cutter: Scissors,
|
||||
object_validator: Fingerprint
|
||||
};
|
||||
|
||||
function Job({ job, className, isChild, progress }: JobProps) {
|
||||
const info = useJobInfo(job, progress)[job.name] || {
|
||||
name: job.name,
|
||||
icon: Question,
|
||||
textItems: [[{ text: job.status.replace(/([A-Z])/g, ' $1').trim() }]]
|
||||
};
|
||||
|
||||
const isRunning = job.status === 'Running';
|
||||
const isPaused = job.status === 'Paused';
|
||||
|
||||
const task_count = progress?.task_count || job.task_count;
|
||||
const completed_task_count = progress?.completed_task_count || job.completed_task_count;
|
||||
|
||||
// dayjs from seconds to time
|
||||
// const timeText = isRunning ? formatEstimatedRemainingTime(job.estimated_completion) : undefined;
|
||||
const jobData = useJobInfo(job, progress);
|
||||
|
||||
// I don't like sending TSX as a prop due to lack of hot-reload, but it's the only way to get the error log to show up
|
||||
if (job.status === 'CompletedWithErrors') {
|
||||
@@ -44,7 +39,7 @@ function Job({ job, className, isChild, progress }: JobProps) {
|
||||
))}
|
||||
</pre>
|
||||
);
|
||||
info.textItems?.push([
|
||||
jobData.textItems?.push([
|
||||
{
|
||||
text: 'Completed with errors',
|
||||
icon: Info,
|
||||
@@ -63,18 +58,19 @@ function Job({ job, className, isChild, progress }: JobProps) {
|
||||
return (
|
||||
<JobContainer
|
||||
className={className}
|
||||
name={info.name}
|
||||
circleIcon={info.icon}
|
||||
textItems={['Queued'].includes(job.status) ? [[{ text: job.status }]] : info.textItems}
|
||||
// textItems={[[{ text: job.status }, { text: job.id, }]]}
|
||||
name={jobData.name}
|
||||
icon={JobIcon[job.name]}
|
||||
textItems={
|
||||
['Queued'].includes(job.status) ? [[{ text: job.status }]] : jobData.textItems
|
||||
}
|
||||
isChild={isChild}
|
||||
>
|
||||
{(isRunning || isPaused) && (
|
||||
{(jobData.isRunning || jobData.isPaused) && (
|
||||
<div className="my-1 ml-1.5 w-[335px]">
|
||||
<ProgressBar
|
||||
pending={task_count == 0}
|
||||
value={completed_task_count}
|
||||
total={task_count}
|
||||
pending={jobData.taskCount == 0}
|
||||
value={jobData.completedTaskCount}
|
||||
total={jobData.taskCount}
|
||||
/>
|
||||
</div>
|
||||
)}
|
||||
@@ -83,15 +79,3 @@ function Job({ job, className, isChild, progress }: JobProps) {
|
||||
}
|
||||
|
||||
export default memo(Job);
|
||||
|
||||
function formatEstimatedRemainingTime(end_date: string) {
|
||||
const duration = dayjs.duration(new Date(end_date).getTime() - Date.now());
|
||||
|
||||
if (duration.hours() > 0) {
|
||||
return `${duration.hours()} hour${duration.hours() > 1 ? 's' : ''} remaining`;
|
||||
} else if (duration.minutes() > 0) {
|
||||
return `${duration.minutes()} minute${duration.minutes() > 1 ? 's' : ''} remaining`;
|
||||
} else {
|
||||
return `${duration.seconds()} second${duration.seconds() > 1 ? 's' : ''} remaining`;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,22 +1,12 @@
|
||||
/* eslint-disable tailwindcss/classnames-order */
|
||||
import clsx from 'clsx';
|
||||
import { ForwardRefExoticComponent, Fragment, HTMLAttributes, ReactNode, forwardRef } from 'react';
|
||||
import { TextItems } from '@sd/client';
|
||||
import { Tooltip, tw } from '@sd/ui';
|
||||
import classes from './Job.module.scss';
|
||||
|
||||
export interface TextItem {
|
||||
text?: string;
|
||||
tooltip?: string;
|
||||
icon?: ForwardRefExoticComponent<any>;
|
||||
onClick?: () => void;
|
||||
}
|
||||
|
||||
// first array for lines, second array for items separated by " • ".
|
||||
export type TextItems = (TextItem | undefined)[][];
|
||||
interface JobContainerProps extends HTMLAttributes<HTMLLIElement> {
|
||||
name: string;
|
||||
iconImg?: string;
|
||||
circleIcon?: ForwardRefExoticComponent<any>;
|
||||
icon?: string | ForwardRefExoticComponent<any>;
|
||||
// Array of arrays of TextItems, where each array of TextItems is a truncated line of text.
|
||||
textItems?: TextItems;
|
||||
isChild?: boolean;
|
||||
@@ -32,16 +22,7 @@ const TextItem = tw.span`truncate`;
|
||||
|
||||
// Job container consolidates the common layout of a job item, used for regular jobs (Job.tsx) and grouped jobs (JobGroup.tsx).
|
||||
const JobContainer = forwardRef<HTMLLIElement, JobContainerProps>((props, ref) => {
|
||||
const {
|
||||
name,
|
||||
iconImg,
|
||||
circleIcon: CircleIcon,
|
||||
textItems,
|
||||
isChild,
|
||||
children,
|
||||
className,
|
||||
...restProps
|
||||
} = props;
|
||||
const { name, icon: Icon, textItems, isChild, children, className, ...restProps } = props;
|
||||
|
||||
return (
|
||||
<li
|
||||
@@ -54,24 +35,27 @@ const JobContainer = forwardRef<HTMLLIElement, JobContainerProps>((props, ref) =
|
||||
)}
|
||||
{...restProps}
|
||||
>
|
||||
{CircleIcon && (
|
||||
<CircleIcon weight="fill" className={clsx(CIRCLE_ICON_CLASS, isChild && 'mx-1')} />
|
||||
{typeof Icon === 'string' ? (
|
||||
<img src={Icon} className={IMG_ICON_CLASS} />
|
||||
) : (
|
||||
Icon && (
|
||||
<Icon weight="fill" className={clsx(CIRCLE_ICON_CLASS, isChild && 'mx-1')} />
|
||||
)
|
||||
)}
|
||||
{iconImg && <img src={iconImg} className={IMG_ICON_CLASS} />}
|
||||
<MetaContainer>
|
||||
<Tooltip tooltipClassName="bg-black max-w-[400px]" position="top" label={name}>
|
||||
<span className="truncate pl-1.5 font-semibold">{name}</span>
|
||||
</Tooltip>
|
||||
{textItems?.map((textItems, lineIndex) => {
|
||||
{textItems?.map((item, index) => {
|
||||
// filter out undefined text so we don't render empty TextItems
|
||||
const filteredItems = textItems.filter((i) => i?.text);
|
||||
const filteredItems = item.filter((i) => i?.text);
|
||||
|
||||
const popoverText = filteredItems.map((i) => i?.text).join(' • ');
|
||||
|
||||
return (
|
||||
<Tooltip
|
||||
label={popoverText}
|
||||
key={lineIndex}
|
||||
key={index}
|
||||
tooltipClassName="bg-black max-w-[400px]"
|
||||
>
|
||||
<TextLine>
|
||||
@@ -82,7 +66,7 @@ const JobContainer = forwardRef<HTMLLIElement, JobContainerProps>((props, ref) =
|
||||
<TextItem
|
||||
onClick={textItem?.onClick}
|
||||
className={clsx(
|
||||
// lineIndex > 0 && 'px-1.5 py-0.5 italic',
|
||||
// index > 0 && 'px-1.5 py-0.5 italic',
|
||||
textItem?.onClick &&
|
||||
'-ml-1.5 rounded-md hover:bg-app-button/50'
|
||||
)}
|
||||
|
||||