Upgrade to Expo 51 and React Native 0.74 (#3980)
* upgrade packages * remove `expo-image-picker` patch * remove old expo-updates patch * rename rn patch * downgrade crop picker * bump `ExpoGifView` `SDWebImage` version * apply config changes * update build docs for apple silicon * update build docs for apple silicon * update expo-updates patch * add back patch readme * bump `expo-dev-client` * bump `babel-preset` * update `babel.config.js` * update `react-native-paste-input` patch * remove old ota updates hook * update types * update types * downgrade pager-view * update animated ref type * fix web-only type * update `react-native-bottom-sheet` `BottomSheetTextInput` * add `expo-application` to jest mocks * remove reanimated patch * update notifications patch * update reanimated path * fix import * update yarn.lock * use `ItemT` instead of `any` * expo bump * Revert logic change, fix types * Fix JSON file --------- Co-authored-by: Dan Abramov <dan.abramov@gmail.com>zio/stable
parent
5ceb440d4e
commit
888bec7b4f
|
@ -175,7 +175,6 @@ module.exports = function (config) {
|
||||||
checkAutomatically: 'NEVER',
|
checkAutomatically: 'NEVER',
|
||||||
channel: UPDATES_CHANNEL,
|
channel: UPDATES_CHANNEL,
|
||||||
},
|
},
|
||||||
assetBundlePatterns: ['**/*'],
|
|
||||||
plugins: [
|
plugins: [
|
||||||
'expo-localization',
|
'expo-localization',
|
||||||
Boolean(process.env.SENTRY_AUTH_TOKEN) && 'sentry-expo',
|
Boolean(process.env.SENTRY_AUTH_TOKEN) && 'sentry-expo',
|
||||||
|
|
|
@ -8,9 +8,6 @@ module.exports = function (api) {
|
||||||
{
|
{
|
||||||
lazyImports: true,
|
lazyImports: true,
|
||||||
native: {
|
native: {
|
||||||
// We should be able to remove this after upgrading Expo
|
|
||||||
// to a version that includes https://github.com/expo/expo/pull/24672.
|
|
||||||
unstable_transformProfile: 'hermes-stable',
|
|
||||||
// Disable ESM -> CJS compilation because Metro takes care of it.
|
// Disable ESM -> CJS compilation because Metro takes care of it.
|
||||||
// However, we need it in Jest tests since those run without Metro.
|
// However, we need it in Jest tests since those run without Metro.
|
||||||
disableImportExportTransform: !isTestEnv,
|
disableImportExportTransform: !isTestEnv,
|
||||||
|
|
|
@ -4,7 +4,10 @@
|
||||||
|
|
||||||
- Set up your environment [using the expo instructions](https://docs.expo.dev/guides/local-app-development/).
|
- Set up your environment [using the expo instructions](https://docs.expo.dev/guides/local-app-development/).
|
||||||
- make sure that the JAVA_HOME points to the zulu-17 directory in your `.zshrc` or `.bashrc` file: `export JAVA_HOME=/Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home`. DO NOT use another JDK or you will encounter build errors.
|
- make sure that the JAVA_HOME points to the zulu-17 directory in your `.zshrc` or `.bashrc` file: `export JAVA_HOME=/Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home`. DO NOT use another JDK or you will encounter build errors.
|
||||||
- If you're running macOS, make sure you are running the correct versions of Ruby and Cocoapods:
|
- If you're running macOS, make sure you are running the correct versions of Ruby and Cocoapods:-
|
||||||
|
- If you are using Apple Silicon and this is the first time you are building for RN 0.74+, you may need to run:
|
||||||
|
- `arch -arm64 brew install llvm`
|
||||||
|
- `sudo gem install ffi`
|
||||||
- Check if you've installed Cocoapods through `homebrew`. If you have, remove it:
|
- Check if you've installed Cocoapods through `homebrew`. If you have, remove it:
|
||||||
- `brew info cocoapods`
|
- `brew info cocoapods`
|
||||||
- If output says `Installed`:
|
- If output says `Installed`:
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
/* global jest */
|
/* global jest */
|
||||||
import {configure} from '@testing-library/react-native'
|
|
||||||
import 'react-native-gesture-handler/jestSetup'
|
import 'react-native-gesture-handler/jestSetup'
|
||||||
|
|
||||||
// IMPORTANT: this is what's used in the native runtime
|
// IMPORTANT: this is what's used in the native runtime
|
||||||
import 'react-native-url-polyfill/auto'
|
import 'react-native-url-polyfill/auto'
|
||||||
|
|
||||||
|
import {configure} from '@testing-library/react-native'
|
||||||
|
|
||||||
configure({asyncUtilTimeout: 20000})
|
configure({asyncUtilTimeout: 20000})
|
||||||
|
|
||||||
jest.mock('@react-native-async-storage/async-storage', () =>
|
jest.mock('@react-native-async-storage/async-storage', () =>
|
||||||
|
@ -90,3 +90,8 @@ jest.mock('sentry-expo', () => ({
|
||||||
}))
|
}))
|
||||||
|
|
||||||
jest.mock('crypto', () => ({}))
|
jest.mock('crypto', () => ({}))
|
||||||
|
|
||||||
|
jest.mock('expo-application', () => ({
|
||||||
|
nativeApplicationVersion: '1.0.0',
|
||||||
|
nativeBuildVersion: '1',
|
||||||
|
}))
|
||||||
|
|
|
@ -10,8 +10,8 @@ Pod::Spec.new do |s|
|
||||||
s.static_framework = true
|
s.static_framework = true
|
||||||
|
|
||||||
s.dependency 'ExpoModulesCore'
|
s.dependency 'ExpoModulesCore'
|
||||||
s.dependency 'SDWebImage', '~> 5.17.0'
|
s.dependency 'SDWebImage', '~> 5.19.1'
|
||||||
s.dependency 'SDWebImageWebPCoder', '~> 0.13.0'
|
s.dependency 'SDWebImageWebPCoder', '~> 0.14.6'
|
||||||
|
|
||||||
# Swift/Objective-C compatibility
|
# Swift/Objective-C compatibility
|
||||||
s.pod_target_xcconfig = {
|
s.pod_target_xcconfig = {
|
||||||
|
|
80
package.json
80
package.json
|
@ -65,7 +65,7 @@
|
||||||
"@fortawesome/free-solid-svg-icons": "^6.1.1",
|
"@fortawesome/free-solid-svg-icons": "^6.1.1",
|
||||||
"@fortawesome/react-native-fontawesome": "^0.3.0",
|
"@fortawesome/react-native-fontawesome": "^0.3.0",
|
||||||
"@lingui/react": "^4.5.0",
|
"@lingui/react": "^4.5.0",
|
||||||
"@mattermost/react-native-paste-input": "^0.6.4",
|
"@mattermost/react-native-paste-input": "^0.7.1",
|
||||||
"@miblanchard/react-native-slider": "^2.3.1",
|
"@miblanchard/react-native-slider": "^2.3.1",
|
||||||
"@radix-ui/react-dropdown-menu": "^2.0.6",
|
"@radix-ui/react-dropdown-menu": "^2.0.6",
|
||||||
"@react-native-async-storage/async-storage": "1.23.1",
|
"@react-native-async-storage/async-storage": "1.23.1",
|
||||||
|
@ -107,35 +107,36 @@
|
||||||
"base64-js": "^1.5.1",
|
"base64-js": "^1.5.1",
|
||||||
"bcp-47-match": "^2.0.3",
|
"bcp-47-match": "^2.0.3",
|
||||||
"date-fns": "^2.30.0",
|
"date-fns": "^2.30.0",
|
||||||
|
"deprecated-react-native-prop-types": "^5.0.0",
|
||||||
"email-validator": "^2.0.4",
|
"email-validator": "^2.0.4",
|
||||||
"emoji-mart": "^5.5.2",
|
"emoji-mart": "^5.5.2",
|
||||||
"eventemitter3": "^5.0.1",
|
"eventemitter3": "^5.0.1",
|
||||||
"expo": "^50.0.17",
|
"expo": "^51.0.8",
|
||||||
"expo-application": "^5.8.3",
|
"expo-application": "^5.9.1",
|
||||||
"expo-build-properties": "^0.11.1",
|
"expo-build-properties": "^0.12.1",
|
||||||
"expo-camera": "~14.0.4",
|
"expo-camera": "~14.1.3",
|
||||||
"expo-clipboard": "^5.0.1",
|
"expo-clipboard": "^5.0.1",
|
||||||
"expo-constants": "~15.4.5",
|
"expo-constants": "~15.4.6",
|
||||||
"expo-dev-client": "~3.3.8",
|
"expo-dev-client": "^4.0.14",
|
||||||
"expo-device": "~5.9.3",
|
"expo-device": "~5.9.3",
|
||||||
"expo-file-system": "^16.0.9",
|
"expo-file-system": "^16.0.9",
|
||||||
"expo-haptics": "^12.8.1",
|
"expo-haptics": "^12.8.1",
|
||||||
"expo-image": "~1.10.6",
|
"expo-image": "~1.12.9",
|
||||||
"expo-image-manipulator": "^11.8.0",
|
"expo-image-manipulator": "^12.0.3",
|
||||||
"expo-image-picker": "~14.7.1",
|
"expo-image-picker": "~15.0.4",
|
||||||
"expo-linear-gradient": "^12.7.2",
|
"expo-linear-gradient": "^13.0.2",
|
||||||
"expo-linking": "^6.2.2",
|
"expo-linking": "^6.3.1",
|
||||||
"expo-localization": "~14.8.3",
|
"expo-localization": "~15.0.3",
|
||||||
"expo-media-library": "~15.9.1",
|
"expo-media-library": "~16.0.3",
|
||||||
"expo-navigation-bar": "~2.8.1",
|
"expo-navigation-bar": "~3.0.4",
|
||||||
"expo-notifications": "~0.27.6",
|
"expo-notifications": "~0.28.1",
|
||||||
"expo-sharing": "^11.10.0",
|
"expo-sharing": "^12.0.1",
|
||||||
"expo-splash-screen": "~0.26.4",
|
"expo-splash-screen": "~0.27.4",
|
||||||
"expo-status-bar": "~1.11.1",
|
"expo-status-bar": "~1.12.1",
|
||||||
"expo-system-ui": "~2.9.3",
|
"expo-system-ui": "~3.0.4",
|
||||||
"expo-task-manager": "~11.7.2",
|
"expo-task-manager": "~11.8.1",
|
||||||
"expo-updates": "~0.24.10",
|
"expo-updates": "~0.25.11",
|
||||||
"expo-web-browser": "~12.8.2",
|
"expo-web-browser": "~13.0.3",
|
||||||
"fast-text-encoding": "^1.0.6",
|
"fast-text-encoding": "^1.0.6",
|
||||||
"history": "^5.3.0",
|
"history": "^5.3.0",
|
||||||
"js-sha256": "^0.9.0",
|
"js-sha256": "^0.9.0",
|
||||||
|
@ -164,30 +165,30 @@
|
||||||
"react-compiler-runtime": "file:./lib/react-compiler-runtime",
|
"react-compiler-runtime": "file:./lib/react-compiler-runtime",
|
||||||
"react-dom": "^18.2.0",
|
"react-dom": "^18.2.0",
|
||||||
"react-keyed-flatten-children": "^3.0.0",
|
"react-keyed-flatten-children": "^3.0.0",
|
||||||
"react-native": "0.73.2",
|
"react-native": "0.74.1",
|
||||||
"react-native-date-picker": "^4.4.0",
|
"react-native-date-picker": "^4.4.2",
|
||||||
"react-native-drawer-layout": "^4.0.0-alpha.3",
|
"react-native-drawer-layout": "^4.0.0-alpha.3",
|
||||||
"react-native-fs": "^2.20.0",
|
"react-native-fs": "^2.20.0",
|
||||||
"react-native-gesture-handler": "~2.14.0",
|
"react-native-gesture-handler": "~2.16.2",
|
||||||
"react-native-get-random-values": "~1.11.0",
|
"react-native-get-random-values": "~1.11.0",
|
||||||
"react-native-image-crop-picker": "^0.38.1",
|
"react-native-image-crop-picker": "0.40.3",
|
||||||
"react-native-ios-context-menu": "^1.15.3",
|
"react-native-ios-context-menu": "^1.15.3",
|
||||||
"react-native-keyboard-controller": "^1.12.1",
|
"react-native-keyboard-controller": "^1.12.1",
|
||||||
"react-native-pager-view": "6.2.3",
|
"react-native-pager-view": "6.2.3",
|
||||||
"react-native-picker-select": "^8.1.0",
|
"react-native-picker-select": "^9.1.3",
|
||||||
"react-native-progress": "bluesky-social/react-native-progress",
|
"react-native-progress": "bluesky-social/react-native-progress",
|
||||||
"react-native-reanimated": "^3.6.0",
|
"react-native-reanimated": "^3.11.0",
|
||||||
"react-native-root-siblings": "^4.1.1",
|
"react-native-root-siblings": "^4.1.1",
|
||||||
"react-native-safe-area-context": "4.8.2",
|
"react-native-safe-area-context": "4.10.1",
|
||||||
"react-native-screens": "~3.29.0",
|
"react-native-screens": "~3.31.1",
|
||||||
"react-native-svg": "14.1.0",
|
"react-native-svg": "^15.2.0",
|
||||||
"react-native-uitextview": "^1.1.6",
|
"react-native-uitextview": "^1.1.7",
|
||||||
"react-native-url-polyfill": "^1.3.0",
|
"react-native-url-polyfill": "^1.3.0",
|
||||||
"react-native-uuid": "^2.0.1",
|
"react-native-uuid": "^2.0.2",
|
||||||
"react-native-view-shot": "^3.8.0",
|
"react-native-view-shot": "^3.8.0",
|
||||||
"react-native-web": "~0.19.6",
|
"react-native-web": "~0.19.11",
|
||||||
"react-native-web-webview": "^1.0.2",
|
"react-native-web-webview": "^1.0.2",
|
||||||
"react-native-webview": "13.6.4",
|
"react-native-webview": "13.10.2",
|
||||||
"react-responsive": "^9.0.2",
|
"react-responsive": "^9.0.2",
|
||||||
"react-textarea-autosize": "^8.5.3",
|
"react-textarea-autosize": "^8.5.3",
|
||||||
"rn-fetch-blob": "^0.12.0",
|
"rn-fetch-blob": "^0.12.0",
|
||||||
|
@ -210,7 +211,7 @@
|
||||||
"@lingui/macro": "^4.5.0",
|
"@lingui/macro": "^4.5.0",
|
||||||
"@pmmmwh/react-refresh-webpack-plugin": "^0.5.11",
|
"@pmmmwh/react-refresh-webpack-plugin": "^0.5.11",
|
||||||
"@react-native-community/eslint-config": "^3.0.0",
|
"@react-native-community/eslint-config": "^3.0.0",
|
||||||
"@react-native/typescript-config": "^0.74.0",
|
"@react-native/typescript-config": "^0.74.1",
|
||||||
"@testing-library/jest-native": "^5.4.1",
|
"@testing-library/jest-native": "^5.4.1",
|
||||||
"@testing-library/react-native": "^11.5.2",
|
"@testing-library/react-native": "^11.5.2",
|
||||||
"@tsconfig/react-native": "^2.0.3",
|
"@tsconfig/react-native": "^2.0.3",
|
||||||
|
@ -254,7 +255,7 @@
|
||||||
"jest-expo": "^50.0.1",
|
"jest-expo": "^50.0.1",
|
||||||
"jest-junit": "^15.0.0",
|
"jest-junit": "^15.0.0",
|
||||||
"lint-staged": "^13.2.3",
|
"lint-staged": "^13.2.3",
|
||||||
"metro-react-native-babel-preset": "^0.73.7",
|
"metro-react-native-babel-preset": "^0.74.1",
|
||||||
"prettier": "^2.8.3",
|
"prettier": "^2.8.3",
|
||||||
"react-native-dotenv": "^3.3.1",
|
"react-native-dotenv": "^3.3.1",
|
||||||
"react-refresh": "^0.14.0",
|
"react-refresh": "^0.14.0",
|
||||||
|
@ -270,7 +271,8 @@
|
||||||
},
|
},
|
||||||
"resolutions": {
|
"resolutions": {
|
||||||
"@types/react": "^18",
|
"@types/react": "^18",
|
||||||
"**/zeed-dom": "0.10.9"
|
"**/zeed-dom": "0.10.9",
|
||||||
|
"@react-native/babel-preset": "0.74.1"
|
||||||
},
|
},
|
||||||
"jest": {
|
"jest": {
|
||||||
"preset": "jest-expo/ios",
|
"preset": "jest-expo/ios",
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,16 @@
|
||||||
|
diff --git a/node_modules/@mattermost/react-native-paste-input/ios/PasteInputView.m b/node_modules/@mattermost/react-native-paste-input/ios/PasteInputView.m
|
||||||
|
index e916023..0564d97 100644
|
||||||
|
--- a/node_modules/@mattermost/react-native-paste-input/ios/PasteInputView.m
|
||||||
|
+++ b/node_modules/@mattermost/react-native-paste-input/ios/PasteInputView.m
|
||||||
|
@@ -22,6 +22,11 @@ - (instancetype)initWithBridge:(RCTBridge *)bridge
|
||||||
|
_backedTextInputView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
|
||||||
|
_backedTextInputView.textInputDelegate = self;
|
||||||
|
|
||||||
|
+ // Disable inline predictions to prevent jank in the composer
|
||||||
|
+ if (@available(iOS 17.0, *)) {
|
||||||
|
+ _backedTextInputView.inlinePredictionType = UITextInlinePredictionTypeNo;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
[self addSubview:_backedTextInputView];
|
||||||
|
}
|
||||||
|
|
|
@ -1,112 +0,0 @@
|
||||||
diff --git a/node_modules/expo-image-picker/android/src/main/java/expo/modules/imagepicker/ImagePickerModule.kt b/node_modules/expo-image-picker/android/src/main/java/expo/modules/imagepicker/ImagePickerModule.kt
|
|
||||||
index 3f50f8c..ee47fa1 100644
|
|
||||||
--- a/node_modules/expo-image-picker/android/src/main/java/expo/modules/imagepicker/ImagePickerModule.kt
|
|
||||||
+++ b/node_modules/expo-image-picker/android/src/main/java/expo/modules/imagepicker/ImagePickerModule.kt
|
|
||||||
@@ -33,7 +33,9 @@ import kotlin.coroutines.resumeWithException
|
|
||||||
// TODO(@bbarthec): rename to ExpoImagePicker
|
|
||||||
private const val moduleName = "ExponentImagePicker"
|
|
||||||
|
|
||||||
+
|
|
||||||
class ImagePickerModule : Module() {
|
|
||||||
+ private var isPickerOpen = false
|
|
||||||
|
|
||||||
override fun definition() = ModuleDefinition {
|
|
||||||
Name(moduleName)
|
|
||||||
@@ -129,6 +131,11 @@ class ImagePickerModule : Module() {
|
|
||||||
options: ImagePickerOptions
|
|
||||||
): Any {
|
|
||||||
return try {
|
|
||||||
+ if(isPickerOpen) {
|
|
||||||
+ return ImagePickerResponse(canceled = true)
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ isPickerOpen = true
|
|
||||||
var result = launchPicker(pickerLauncher)
|
|
||||||
if (
|
|
||||||
!options.allowsMultipleSelection &&
|
|
||||||
@@ -143,6 +150,8 @@ class ImagePickerModule : Module() {
|
|
||||||
mediaHandler.readExtras(result.data, options)
|
|
||||||
} catch (cause: OperationCanceledException) {
|
|
||||||
return ImagePickerResponse(canceled = true)
|
|
||||||
+ } finally {
|
|
||||||
+ isPickerOpen = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
diff --git a/node_modules/expo-image-picker/android/src/main/java/expo/modules/imagepicker/contracts/ImageLibraryContract.kt b/node_modules/expo-image-picker/android/src/main/java/expo/modules/imagepicker/contracts/ImageLibraryContract.kt
|
|
||||||
index ff15c91..9763012 100644
|
|
||||||
--- a/node_modules/expo-image-picker/android/src/main/java/expo/modules/imagepicker/contracts/ImageLibraryContract.kt
|
|
||||||
+++ b/node_modules/expo-image-picker/android/src/main/java/expo/modules/imagepicker/contracts/ImageLibraryContract.kt
|
|
||||||
@@ -5,12 +5,7 @@ import android.content.ContentResolver
|
|
||||||
import android.content.Context
|
|
||||||
import android.content.Intent
|
|
||||||
import android.net.Uri
|
|
||||||
-import androidx.activity.result.PickVisualMediaRequest
|
|
||||||
-import androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia
|
|
||||||
-import androidx.activity.result.contract.ActivityResultContracts.PickMultipleVisualMedia
|
|
||||||
import expo.modules.imagepicker.ImagePickerOptions
|
|
||||||
-import expo.modules.imagepicker.MediaTypes
|
|
||||||
-import expo.modules.imagepicker.UNLIMITED_SELECTION
|
|
||||||
import expo.modules.imagepicker.getAllDataUris
|
|
||||||
import expo.modules.imagepicker.toMediaType
|
|
||||||
import expo.modules.kotlin.activityresult.AppContextActivityResultContract
|
|
||||||
@@ -26,51 +21,26 @@ import java.io.Serializable
|
|
||||||
* @see [androidx.activity.result.contract.ActivityResultContracts.GetMultipleContents]
|
|
||||||
*/
|
|
||||||
internal class ImageLibraryContract(
|
|
||||||
- private val appContextProvider: AppContextProvider
|
|
||||||
+ private val appContextProvider: AppContextProvider,
|
|
||||||
) : AppContextActivityResultContract<ImageLibraryContractOptions, ImagePickerContractResult> {
|
|
||||||
private val contentResolver: ContentResolver
|
|
||||||
get() = appContextProvider.appContext.reactContext?.contentResolver
|
|
||||||
?: throw Exceptions.ReactContextLost()
|
|
||||||
|
|
||||||
override fun createIntent(context: Context, input: ImageLibraryContractOptions): Intent {
|
|
||||||
- val request = PickVisualMediaRequest.Builder()
|
|
||||||
- .setMediaType(
|
|
||||||
- when (input.options.mediaTypes) {
|
|
||||||
- MediaTypes.VIDEOS -> {
|
|
||||||
- PickVisualMedia.VideoOnly
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- MediaTypes.IMAGES -> {
|
|
||||||
- PickVisualMedia.ImageOnly
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- else -> {
|
|
||||||
- PickVisualMedia.ImageAndVideo
|
|
||||||
- }
|
|
||||||
- }
|
|
||||||
- )
|
|
||||||
- .build()
|
|
||||||
+ val intent = Intent(Intent.ACTION_GET_CONTENT)
|
|
||||||
+ .addCategory(Intent.CATEGORY_OPENABLE)
|
|
||||||
+ .setType("image/*")
|
|
||||||
|
|
||||||
if (input.options.allowsMultipleSelection) {
|
|
||||||
- val selectionLimit = input.options.selectionLimit
|
|
||||||
-
|
|
||||||
- if (selectionLimit == 1) {
|
|
||||||
- // If multiple selection is allowed but the limit is 1, we should ignore
|
|
||||||
- // the multiple selection flag and just treat it as a single selection.
|
|
||||||
- return PickVisualMedia().createIntent(context, request)
|
|
||||||
+ if(input.options.selectionLimit == 1) {
|
|
||||||
+ return intent
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (selectionLimit > 1) {
|
|
||||||
- return PickMultipleVisualMedia(selectionLimit).createIntent(context, request)
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- // If the selection limit is 0, it is the same as unlimited selection.
|
|
||||||
- if (selectionLimit == UNLIMITED_SELECTION) {
|
|
||||||
- return PickMultipleVisualMedia().createIntent(context, request)
|
|
||||||
- }
|
|
||||||
+ intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true)
|
|
||||||
}
|
|
||||||
|
|
||||||
- return PickVisualMedia().createIntent(context, request)
|
|
||||||
+ return intent
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun parseResult(input: ImageLibraryContractOptions, resultCode: Int, intent: Intent?) =
|
|
|
@ -1,3 +0,0 @@
|
||||||
added by https://github.com/bluesky-social/social-app/pull/2384#pullrequestreview-1800985521
|
|
||||||
|
|
||||||
hackfixes the image picker on android so that the user can select from their typical image sources
|
|
|
@ -1,8 +1,8 @@
|
||||||
diff --git a/node_modules/expo-notifications/android/build.gradle b/node_modules/expo-notifications/android/build.gradle
|
diff --git a/node_modules/expo-notifications/android/build.gradle b/node_modules/expo-notifications/android/build.gradle
|
||||||
index 97bf4f4..6e9d427 100644
|
index d233e1f..cc2f856 100644
|
||||||
--- a/node_modules/expo-notifications/android/build.gradle
|
--- a/node_modules/expo-notifications/android/build.gradle
|
||||||
+++ b/node_modules/expo-notifications/android/build.gradle
|
+++ b/node_modules/expo-notifications/android/build.gradle
|
||||||
@@ -118,6 +118,7 @@ dependencies {
|
@@ -32,6 +32,7 @@ dependencies {
|
||||||
api 'com.google.firebase:firebase-messaging:22.0.0'
|
api 'com.google.firebase:firebase-messaging:22.0.0'
|
||||||
|
|
||||||
api 'me.leolin:ShortcutBadger:1.1.22@aar'
|
api 'me.leolin:ShortcutBadger:1.1.22@aar'
|
||||||
|
@ -46,28 +46,30 @@ index 0af7fe0..8f2c8d8 100644
|
||||||
try {
|
try {
|
||||||
return payload.getString(TITLE_KEY);
|
return payload.getString(TITLE_KEY);
|
||||||
diff --git a/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/model/NotificationContent.java b/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/model/NotificationContent.java
|
diff --git a/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/model/NotificationContent.java b/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/model/NotificationContent.java
|
||||||
index f1fed19..1619f59 100644
|
index f1fed19..166b34f 100644
|
||||||
--- a/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/model/NotificationContent.java
|
--- a/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/model/NotificationContent.java
|
||||||
+++ b/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/model/NotificationContent.java
|
+++ b/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/model/NotificationContent.java
|
||||||
@@ -20,6 +20,7 @@ import expo.modules.notifications.notifications.enums.NotificationPriority;
|
@@ -20,6 +20,7 @@ import expo.modules.notifications.notifications.enums.NotificationPriority;
|
||||||
* should be created using {@link NotificationContent.Builder}.
|
* should be created using {@link NotificationContent.Builder}.
|
||||||
*/
|
*/
|
||||||
public class NotificationContent implements Parcelable, Serializable {
|
public class NotificationContent implements Parcelable, Serializable {
|
||||||
+ private String mChannelId;
|
+ private string mChannelId;
|
||||||
private String mTitle;
|
private String mTitle;
|
||||||
private String mText;
|
private String mText;
|
||||||
private String mSubtitle;
|
private String mSubtitle;
|
||||||
@@ -50,6 +51,9 @@ public class NotificationContent implements Parcelable, Serializable {
|
@@ -50,6 +51,11 @@ public class NotificationContent implements Parcelable, Serializable {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
+ @Nullable
|
+ @Nullable
|
||||||
+ public String getChannelId() { return mChannelId; }
|
+ public String getChannelId() {
|
||||||
|
+ return mTitle;
|
||||||
|
+ }
|
||||||
+
|
+
|
||||||
@Nullable
|
@Nullable
|
||||||
public String getTitle() {
|
public String getTitle() {
|
||||||
return mTitle;
|
return mTitle;
|
||||||
@@ -121,6 +125,7 @@ public class NotificationContent implements Parcelable, Serializable {
|
@@ -121,6 +127,7 @@ public class NotificationContent implements Parcelable, Serializable {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected NotificationContent(Parcel in) {
|
protected NotificationContent(Parcel in) {
|
||||||
|
@ -75,7 +77,7 @@ index f1fed19..1619f59 100644
|
||||||
mTitle = in.readString();
|
mTitle = in.readString();
|
||||||
mText = in.readString();
|
mText = in.readString();
|
||||||
mSubtitle = in.readString();
|
mSubtitle = in.readString();
|
||||||
@@ -146,6 +151,7 @@ public class NotificationContent implements Parcelable, Serializable {
|
@@ -146,6 +153,7 @@ public class NotificationContent implements Parcelable, Serializable {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void writeToParcel(Parcel dest, int flags) {
|
public void writeToParcel(Parcel dest, int flags) {
|
||||||
|
@ -83,7 +85,7 @@ index f1fed19..1619f59 100644
|
||||||
dest.writeString(mTitle);
|
dest.writeString(mTitle);
|
||||||
dest.writeString(mText);
|
dest.writeString(mText);
|
||||||
dest.writeString(mSubtitle);
|
dest.writeString(mSubtitle);
|
||||||
@@ -166,6 +172,7 @@ public class NotificationContent implements Parcelable, Serializable {
|
@@ -166,6 +174,7 @@ public class NotificationContent implements Parcelable, Serializable {
|
||||||
private static final long serialVersionUID = 397666843266836802L;
|
private static final long serialVersionUID = 397666843266836802L;
|
||||||
|
|
||||||
private void writeObject(java.io.ObjectOutputStream out) throws IOException {
|
private void writeObject(java.io.ObjectOutputStream out) throws IOException {
|
||||||
|
@ -91,7 +93,7 @@ index f1fed19..1619f59 100644
|
||||||
out.writeObject(mTitle);
|
out.writeObject(mTitle);
|
||||||
out.writeObject(mText);
|
out.writeObject(mText);
|
||||||
out.writeObject(mSubtitle);
|
out.writeObject(mSubtitle);
|
||||||
@@ -190,6 +197,7 @@ public class NotificationContent implements Parcelable, Serializable {
|
@@ -190,6 +199,7 @@ public class NotificationContent implements Parcelable, Serializable {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException {
|
private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException {
|
||||||
|
@ -99,15 +101,15 @@ index f1fed19..1619f59 100644
|
||||||
mTitle = (String) in.readObject();
|
mTitle = (String) in.readObject();
|
||||||
mText = (String) in.readObject();
|
mText = (String) in.readObject();
|
||||||
mSubtitle = (String) in.readObject();
|
mSubtitle = (String) in.readObject();
|
||||||
@@ -240,6 +248,7 @@ public class NotificationContent implements Parcelable, Serializable {
|
@@ -240,6 +250,7 @@ public class NotificationContent implements Parcelable, Serializable {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Builder {
|
public static class Builder {
|
||||||
+ private String mChannelId;
|
+ private string mChannelId;
|
||||||
private String mTitle;
|
private String mTitle;
|
||||||
private String mText;
|
private String mText;
|
||||||
private String mSubtitle;
|
private String mSubtitle;
|
||||||
@@ -260,6 +269,11 @@ public class NotificationContent implements Parcelable, Serializable {
|
@@ -260,6 +271,11 @@ public class NotificationContent implements Parcelable, Serializable {
|
||||||
useDefaultVibrationPattern();
|
useDefaultVibrationPattern();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -119,7 +121,7 @@ index f1fed19..1619f59 100644
|
||||||
public Builder setTitle(String title) {
|
public Builder setTitle(String title) {
|
||||||
mTitle = title;
|
mTitle = title;
|
||||||
return this;
|
return this;
|
||||||
@@ -336,6 +350,7 @@ public class NotificationContent implements Parcelable, Serializable {
|
@@ -336,6 +352,7 @@ public class NotificationContent implements Parcelable, Serializable {
|
||||||
|
|
||||||
public NotificationContent build() {
|
public NotificationContent build() {
|
||||||
NotificationContent content = new NotificationContent();
|
NotificationContent content = new NotificationContent();
|
||||||
|
@ -128,18 +130,10 @@ index f1fed19..1619f59 100644
|
||||||
content.mSubtitle = mSubtitle;
|
content.mSubtitle = mSubtitle;
|
||||||
content.mText = mText;
|
content.mText = mText;
|
||||||
diff --git a/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/presentation/builders/ExpoNotificationBuilder.java b/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/presentation/builders/ExpoNotificationBuilder.java
|
diff --git a/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/presentation/builders/ExpoNotificationBuilder.java b/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/presentation/builders/ExpoNotificationBuilder.java
|
||||||
index 6bd9928..aab71ea 100644
|
index 6bd9928..ee93d70 100644
|
||||||
--- a/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/presentation/builders/ExpoNotificationBuilder.java
|
--- a/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/presentation/builders/ExpoNotificationBuilder.java
|
||||||
+++ b/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/presentation/builders/ExpoNotificationBuilder.java
|
+++ b/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/presentation/builders/ExpoNotificationBuilder.java
|
||||||
@@ -7,7 +7,6 @@ import android.content.pm.PackageManager;
|
@@ -48,6 +48,10 @@ public class ExpoNotificationBuilder extends ChannelAwareNotificationBuilder {
|
||||||
import android.content.res.Resources;
|
|
||||||
import android.graphics.Bitmap;
|
|
||||||
import android.graphics.BitmapFactory;
|
|
||||||
-import android.os.Build;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.os.Parcel;
|
|
||||||
import android.provider.Settings;
|
|
||||||
@@ -48,6 +47,10 @@ public class ExpoNotificationBuilder extends ChannelAwareNotificationBuilder {
|
|
||||||
|
|
||||||
NotificationContent content = getNotificationContent();
|
NotificationContent content = getNotificationContent();
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
diff --git a/node_modules/expo-updates/ios/EXUpdates/Update/NewUpdate.swift b/node_modules/expo-updates/ios/EXUpdates/Update/NewUpdate.swift
|
diff --git a/node_modules/expo-updates/ios/EXUpdates/Update/ExpoUpdatesUpdate.swift b/node_modules/expo-updates/ios/EXUpdates/Update/ExpoUpdatesUpdate.swift
|
||||||
index 189a5f5..8d5b8e6 100644
|
index b85291e..07a5d3c 100644
|
||||||
--- a/node_modules/expo-updates/ios/EXUpdates/Update/NewUpdate.swift
|
--- a/node_modules/expo-updates/ios/EXUpdates/Update/ExpoUpdatesUpdate.swift
|
||||||
+++ b/node_modules/expo-updates/ios/EXUpdates/Update/NewUpdate.swift
|
+++ b/node_modules/expo-updates/ios/EXUpdates/Update/ExpoUpdatesUpdate.swift
|
||||||
@@ -68,13 +68,20 @@ public final class NewUpdate: Update {
|
@@ -78,13 +78,20 @@ public final class ExpoUpdatesUpdate: Update {
|
||||||
processedAssets.append(asset)
|
status = UpdateStatus.StatusPending
|
||||||
}
|
}
|
||||||
|
|
||||||
+ // Instead of relying on various hacks to get the correct format for the specific
|
+ // Instead of relying on various hacks to get the correct format for the specific
|
||||||
|
@ -23,4 +23,4 @@ index 189a5f5..8d5b8e6 100644
|
||||||
+ commitTime: date,
|
+ commitTime: date,
|
||||||
runtimeVersion: runtimeVersion,
|
runtimeVersion: runtimeVersion,
|
||||||
keep: true,
|
keep: true,
|
||||||
status: UpdateStatus.StatusPending,
|
status: status,
|
|
@ -1,30 +1,28 @@
|
||||||
diff --git a/node_modules/react-native-reanimated/lib/module/reanimated2/index.js b/node_modules/react-native-reanimated/lib/module/reanimated2/index.js
|
diff --git a/node_modules/react-native-reanimated/lib/module/reanimated2/index.js b/node_modules/react-native-reanimated/lib/module/reanimated2/index.js
|
||||||
index 91e49f4..c10d3fc 100644
|
index ac9be5d..86d4605 100644
|
||||||
--- a/node_modules/react-native-reanimated/lib/module/reanimated2/index.js
|
--- a/node_modules/react-native-reanimated/lib/module/reanimated2/index.js
|
||||||
+++ b/node_modules/react-native-reanimated/lib/module/reanimated2/index.js
|
+++ b/node_modules/react-native-reanimated/lib/module/reanimated2/index.js
|
||||||
@@ -45,4 +45,5 @@ export { getUseOfValueInStyleWarning } from './pluginUtils';
|
@@ -47,4 +47,5 @@ export { LayoutAnimationConfig } from './component/LayoutAnimationConfig';
|
||||||
export { withReanimatedTimer, advanceAnimationByTime, advanceAnimationByFrame, setUpTests, getAnimatedStyle } from './jestUtils';
|
export { PerformanceMonitor } from './component/PerformanceMonitor';
|
||||||
export { LayoutAnimationConfig } from './component/LayoutAnimationConfig';
|
|
||||||
export { startMapper, stopMapper } from './mappers';
|
export { startMapper, stopMapper } from './mappers';
|
||||||
|
export { startScreenTransition, finishScreenTransition, ScreenTransition } from './screenTransition';
|
||||||
+export { isReducedMotion } from './PlatformChecker';
|
+export { isReducedMotion } from './PlatformChecker';
|
||||||
//# sourceMappingURL=index.js.map
|
//# sourceMappingURL=index.js.map
|
||||||
\ No newline at end of file
|
|
||||||
diff --git a/node_modules/react-native-reanimated/lib/typescript/reanimated2/index.d.ts b/node_modules/react-native-reanimated/lib/typescript/reanimated2/index.d.ts
|
diff --git a/node_modules/react-native-reanimated/lib/typescript/reanimated2/index.d.ts b/node_modules/react-native-reanimated/lib/typescript/reanimated2/index.d.ts
|
||||||
index 96bd913..ad63a09 100644
|
index f01dc57..161ef22 100644
|
||||||
--- a/node_modules/react-native-reanimated/lib/typescript/reanimated2/index.d.ts
|
--- a/node_modules/react-native-reanimated/lib/typescript/reanimated2/index.d.ts
|
||||||
+++ b/node_modules/react-native-reanimated/lib/typescript/reanimated2/index.d.ts
|
+++ b/node_modules/react-native-reanimated/lib/typescript/reanimated2/index.d.ts
|
||||||
@@ -33,3 +33,4 @@ export type { Adaptable, AdaptTransforms, AnimateProps, AnimatedProps, AnimatedT
|
@@ -36,3 +36,4 @@ export type { FlatListPropsWithLayout } from './component/FlatList';
|
||||||
export type { AnimatedScrollViewProps } from './component/ScrollView';
|
|
||||||
export type { FlatListPropsWithLayout } from './component/FlatList';
|
|
||||||
export { startMapper, stopMapper } from './mappers';
|
export { startMapper, stopMapper } from './mappers';
|
||||||
|
export { startScreenTransition, finishScreenTransition, ScreenTransition, } from './screenTransition';
|
||||||
|
export type { AnimatedScreenTransition, GoBackGesture, ScreenTransitionConfig, } from './screenTransition';
|
||||||
+export { isReducedMotion } from './PlatformChecker';
|
+export { isReducedMotion } from './PlatformChecker';
|
||||||
diff --git a/node_modules/react-native-reanimated/src/reanimated2/index.ts b/node_modules/react-native-reanimated/src/reanimated2/index.ts
|
diff --git a/node_modules/react-native-reanimated/src/reanimated2/index.ts b/node_modules/react-native-reanimated/src/reanimated2/index.ts
|
||||||
index 096dc05..38fc01d 100644
|
index 5885fa1..a3c693f 100644
|
||||||
--- a/node_modules/react-native-reanimated/src/reanimated2/index.ts
|
--- a/node_modules/react-native-reanimated/src/reanimated2/index.ts
|
||||||
+++ b/node_modules/react-native-reanimated/src/reanimated2/index.ts
|
+++ b/node_modules/react-native-reanimated/src/reanimated2/index.ts
|
||||||
@@ -271,3 +271,4 @@ export type {
|
@@ -284,3 +284,4 @@ export type {
|
||||||
export type { AnimatedScrollViewProps } from './component/ScrollView';
|
GoBackGesture,
|
||||||
export type { FlatListPropsWithLayout } from './component/FlatList';
|
ScreenTransitionConfig,
|
||||||
export { startMapper, stopMapper } from './mappers';
|
} from './screenTransition';
|
||||||
+export { isReducedMotion } from './PlatformChecker';
|
+export { isReducedMotion } from './PlatformChecker';
|
||||||
\ No newline at end of file
|
|
|
@ -1,56 +0,0 @@
|
||||||
import * as Updates from 'expo-updates'
|
|
||||||
import {useCallback, useEffect} from 'react'
|
|
||||||
import {AppState} from 'react-native'
|
|
||||||
import {logger} from '#/logger'
|
|
||||||
|
|
||||||
export function useOTAUpdate() {
|
|
||||||
// HELPER FUNCTIONS
|
|
||||||
const checkForUpdate = useCallback(async () => {
|
|
||||||
logger.debug('useOTAUpdate: Checking for update...')
|
|
||||||
try {
|
|
||||||
// Check if new OTA update is available
|
|
||||||
const update = await Updates.checkForUpdateAsync()
|
|
||||||
// If updates aren't available stop the function execution
|
|
||||||
if (!update.isAvailable) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
// Otherwise fetch the update in the background, so even if the user rejects switching to latest version it will be done automatically on next relaunch.
|
|
||||||
await Updates.fetchUpdateAsync()
|
|
||||||
} catch (e) {
|
|
||||||
logger.error('useOTAUpdate: Error while checking for update', {
|
|
||||||
message: e,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}, [])
|
|
||||||
const updateEventListener = useCallback((event: Updates.UpdateEvent) => {
|
|
||||||
logger.debug('useOTAUpdate: Listening for update...')
|
|
||||||
if (event.type === Updates.UpdateEventType.ERROR) {
|
|
||||||
logger.error('useOTAUpdate: Error while listening for update', {
|
|
||||||
message: event.message,
|
|
||||||
})
|
|
||||||
} else if (event.type === Updates.UpdateEventType.NO_UPDATE_AVAILABLE) {
|
|
||||||
// Handle no update available
|
|
||||||
// do nothing
|
|
||||||
} else if (event.type === Updates.UpdateEventType.UPDATE_AVAILABLE) {
|
|
||||||
// Handle update available
|
|
||||||
// open modal, ask for user confirmation, and reload the app
|
|
||||||
}
|
|
||||||
}, [])
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
// ADD EVENT LISTENERS
|
|
||||||
const updateEventSubscription = Updates.addListener(updateEventListener)
|
|
||||||
const appStateSubscription = AppState.addEventListener('change', state => {
|
|
||||||
if (state === 'active' && !__DEV__) {
|
|
||||||
checkForUpdate()
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
// REMOVE EVENT LISTENERS (CLEANUP)
|
|
||||||
return () => {
|
|
||||||
updateEventSubscription.remove()
|
|
||||||
appStateSubscription.remove()
|
|
||||||
}
|
|
||||||
}, []) // eslint-disable-line react-hooks/exhaustive-deps
|
|
||||||
// disable exhaustive deps because we don't want to run this effect again
|
|
||||||
}
|
|
|
@ -109,7 +109,7 @@ export const PagerWithHeader = React.forwardRef<PagerRef, PagerWithHeaderProps>(
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
const scrollRefs = useSharedValue<AnimatedRef<any>[]>([])
|
const scrollRefs = useSharedValue<Array<AnimatedRef<any> | null>>([])
|
||||||
const registerRef = React.useCallback(
|
const registerRef = React.useCallback(
|
||||||
(scrollRef: AnimatedRef<any> | null, atIndex: number) => {
|
(scrollRef: AnimatedRef<any> | null, atIndex: number) => {
|
||||||
scrollRefs.modify(refs => {
|
scrollRefs.modify(refs => {
|
||||||
|
@ -130,8 +130,9 @@ export const PagerWithHeader = React.forwardRef<PagerRef, PagerWithHeaderProps>(
|
||||||
lastForcedScrollY.value = forcedScrollY
|
lastForcedScrollY.value = forcedScrollY
|
||||||
const refs = scrollRefs.value
|
const refs = scrollRefs.value
|
||||||
for (let i = 0; i < refs.length; i++) {
|
for (let i = 0; i < refs.length; i++) {
|
||||||
if (i !== currentPage && refs[i] != null) {
|
const scollRef = refs[i]
|
||||||
scrollTo(refs[i], 0, forcedScrollY, false)
|
if (i !== currentPage && scollRef != null) {
|
||||||
|
scrollTo(scollRef, 0, forcedScrollY, false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
|
|
||||||
import React from 'react'
|
import React from 'react'
|
||||||
import {
|
import {
|
||||||
|
FlatList,
|
||||||
FlatListProps,
|
FlatListProps,
|
||||||
ScrollViewProps,
|
ScrollViewProps,
|
||||||
StyleSheet,
|
StyleSheet,
|
||||||
|
@ -67,7 +68,7 @@ export const FlatList_INTERNAL = React.forwardRef(function FlatListImpl<ItemT>(
|
||||||
desktopFixedHeight,
|
desktopFixedHeight,
|
||||||
...props
|
...props
|
||||||
}: React.PropsWithChildren<FlatListProps<ItemT> & AddedProps>,
|
}: React.PropsWithChildren<FlatListProps<ItemT> & AddedProps>,
|
||||||
ref: React.Ref<Animated.FlatList<ItemT>>,
|
ref: React.Ref<FlatList<ItemT>>,
|
||||||
) {
|
) {
|
||||||
const pal = usePalette('default')
|
const pal = usePalette('default')
|
||||||
const {isMobile} = useWebMediaQueries()
|
const {isMobile} = useWebMediaQueries()
|
||||||
|
|
|
@ -1,27 +1,28 @@
|
||||||
import React from 'react'
|
import React from 'react'
|
||||||
import {StyleSheet, View} from 'react-native'
|
import {StyleSheet, View} from 'react-native'
|
||||||
import {Text} from '../com/util/text/Text'
|
import RNPickerSelect, {PickerSelectProps} from 'react-native-picker-select'
|
||||||
import {s} from 'lib/styles'
|
|
||||||
import {usePalette} from 'lib/hooks/usePalette'
|
|
||||||
import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
|
|
||||||
import {CommonNavigatorParams, NativeStackScreenProps} from 'lib/routes/types'
|
|
||||||
import {ViewHeader} from 'view/com/util/ViewHeader'
|
|
||||||
import {CenteredView} from 'view/com/util/Views'
|
|
||||||
import {Button} from 'view/com/util/forms/Button'
|
|
||||||
import {
|
import {
|
||||||
FontAwesomeIcon,
|
FontAwesomeIcon,
|
||||||
FontAwesomeIconStyle,
|
FontAwesomeIconStyle,
|
||||||
} from '@fortawesome/react-native-fontawesome'
|
} from '@fortawesome/react-native-fontawesome'
|
||||||
import {useAnalytics} from 'lib/analytics/analytics'
|
import {msg, Trans} from '@lingui/macro'
|
||||||
|
import {useLingui} from '@lingui/react'
|
||||||
import {useFocusEffect} from '@react-navigation/native'
|
import {useFocusEffect} from '@react-navigation/native'
|
||||||
import {APP_LANGUAGES, LANGUAGES} from 'lib/../locale/languages'
|
|
||||||
import RNPickerSelect, {PickerSelectProps} from 'react-native-picker-select'
|
import {sanitizeAppLanguageSetting} from '#/locale/helpers'
|
||||||
import {useSetMinimalShellMode} from '#/state/shell'
|
|
||||||
import {useModalControls} from '#/state/modals'
|
import {useModalControls} from '#/state/modals'
|
||||||
import {useLanguagePrefs, useLanguagePrefsApi} from '#/state/preferences'
|
import {useLanguagePrefs, useLanguagePrefsApi} from '#/state/preferences'
|
||||||
import {Trans, msg} from '@lingui/macro'
|
import {useSetMinimalShellMode} from '#/state/shell'
|
||||||
import {useLingui} from '@lingui/react'
|
import {APP_LANGUAGES, LANGUAGES} from 'lib/../locale/languages'
|
||||||
import {sanitizeAppLanguageSetting} from '#/locale/helpers'
|
import {useAnalytics} from 'lib/analytics/analytics'
|
||||||
|
import {usePalette} from 'lib/hooks/usePalette'
|
||||||
|
import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
|
||||||
|
import {CommonNavigatorParams, NativeStackScreenProps} from 'lib/routes/types'
|
||||||
|
import {s} from 'lib/styles'
|
||||||
|
import {Button} from 'view/com/util/forms/Button'
|
||||||
|
import {ViewHeader} from 'view/com/util/ViewHeader'
|
||||||
|
import {CenteredView} from 'view/com/util/Views'
|
||||||
|
import {Text} from '../com/util/text/Text'
|
||||||
|
|
||||||
type Props = NativeStackScreenProps<CommonNavigatorParams, 'LanguageSettings'>
|
type Props = NativeStackScreenProps<CommonNavigatorParams, 'LanguageSettings'>
|
||||||
|
|
||||||
|
@ -132,9 +133,10 @@ export function LanguageSettingsScreen(_props: Props) {
|
||||||
paddingVertical: 8,
|
paddingVertical: 8,
|
||||||
borderRadius: 24,
|
borderRadius: 24,
|
||||||
},
|
},
|
||||||
|
|
||||||
inputWeb: {
|
inputWeb: {
|
||||||
// @ts-ignore web only
|
|
||||||
cursor: 'pointer',
|
cursor: 'pointer',
|
||||||
|
// @ts-ignore web only
|
||||||
'-moz-appearance': 'none',
|
'-moz-appearance': 'none',
|
||||||
'-webkit-appearance': 'none',
|
'-webkit-appearance': 'none',
|
||||||
appearance: 'none',
|
appearance: 'none',
|
||||||
|
@ -224,8 +226,8 @@ export function LanguageSettingsScreen(_props: Props) {
|
||||||
borderRadius: 24,
|
borderRadius: 24,
|
||||||
},
|
},
|
||||||
inputWeb: {
|
inputWeb: {
|
||||||
// @ts-ignore web only
|
|
||||||
cursor: 'pointer',
|
cursor: 'pointer',
|
||||||
|
// @ts-ignore web only
|
||||||
'-moz-appearance': 'none',
|
'-moz-appearance': 'none',
|
||||||
'-webkit-appearance': 'none',
|
'-webkit-appearance': 'none',
|
||||||
appearance: 'none',
|
appearance: 'none',
|
||||||
|
|
|
@ -739,8 +739,8 @@ let SearchInputBox = ({
|
||||||
style={[
|
style={[
|
||||||
{backgroundColor: pal.colors.backgroundLight},
|
{backgroundColor: pal.colors.backgroundLight},
|
||||||
styles.headerSearchContainer,
|
styles.headerSearchContainer,
|
||||||
|
// @ts-expect-error web only
|
||||||
isWeb && {
|
isWeb && {
|
||||||
// @ts-ignore web only
|
|
||||||
cursor: 'default',
|
cursor: 'default',
|
||||||
},
|
},
|
||||||
]}
|
]}
|
||||||
|
|
Loading…
Reference in New Issue