bumps
This commit is contained in:
+1
-1
@@ -199,7 +199,7 @@ module.exports = function (config) {
|
|||||||
targetSdkVersion: 34,
|
targetSdkVersion: 34,
|
||||||
buildToolsVersion: '34.0.0',
|
buildToolsVersion: '34.0.0',
|
||||||
kotlinVersion: '1.8.0',
|
kotlinVersion: '1.8.0',
|
||||||
newArchEnabled: false,
|
newArchEnabled: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
|||||||
+47
-45
@@ -53,7 +53,6 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@atproto/api": "^0.13.7",
|
"@atproto/api": "^0.13.7",
|
||||||
"@bam.tech/react-native-image-resizer": "^3.0.4",
|
|
||||||
"@braintree/sanitize-url": "^6.0.2",
|
"@braintree/sanitize-url": "^6.0.2",
|
||||||
"@discord/bottom-sheet": "bluesky-social/react-native-bottom-sheet",
|
"@discord/bottom-sheet": "bluesky-social/react-native-bottom-sheet",
|
||||||
"@emoji-mart/react": "^1.1.1",
|
"@emoji-mart/react": "^1.1.1",
|
||||||
@@ -70,13 +69,13 @@
|
|||||||
"@fortawesome/react-native-fontawesome": "^0.3.2",
|
"@fortawesome/react-native-fontawesome": "^0.3.2",
|
||||||
"@haileyok/bluesky-video": "0.1.8",
|
"@haileyok/bluesky-video": "0.1.8",
|
||||||
"@lingui/react": "^4.5.0",
|
"@lingui/react": "^4.5.0",
|
||||||
"@mattermost/react-native-paste-input": "^0.7.1",
|
"@mattermost/react-native-paste-input": "^0.8.0",
|
||||||
"@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",
|
||||||
"@react-native-masked-view/masked-view": "0.3.0",
|
"@react-native-masked-view/masked-view": "0.3.1",
|
||||||
"@react-native-menu/menu": "^1.1.0",
|
"@react-native-menu/menu": "^1.1.0",
|
||||||
"@react-native-picker/picker": "2.6.1",
|
"@react-native-picker/picker": "2.8.0",
|
||||||
"@react-navigation/bottom-tabs": "^6.5.20",
|
"@react-navigation/bottom-tabs": "^6.5.20",
|
||||||
"@react-navigation/drawer": "^6.6.15",
|
"@react-navigation/drawer": "^6.6.15",
|
||||||
"@react-navigation/native": "^6.1.17",
|
"@react-navigation/native": "^6.1.17",
|
||||||
@@ -116,31 +115,32 @@
|
|||||||
"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": "^51.0.8",
|
"expo": "^52.0.0-canary-20240912-1059f85",
|
||||||
"expo-application": "^5.9.1",
|
"expo-modules-core": "2.0.0-canary-20240912-1059f85",
|
||||||
"expo-build-properties": "^0.12.1",
|
"expo-application": "^6.0.0-canary-20240912-1059f85",
|
||||||
"expo-camera": "~15.0.9",
|
"expo-build-properties": "^1.0.0-canary-20240912-1059f85",
|
||||||
"expo-clipboard": "^6.0.3",
|
"expo-camera": "~16.0.0-canary-20240912-1059f85",
|
||||||
"expo-dev-client": "^4.0.14",
|
"expo-clipboard": "^7.0.0-canary-20240912-1059f85",
|
||||||
"expo-device": "~6.0.2",
|
"expo-dev-client": "^5.0.0-canary-20240912-1059f85",
|
||||||
"expo-file-system": "^17.0.1",
|
"expo-device": "~7.0.0-canary-20240912-1059f85",
|
||||||
"expo-haptics": "^13.0.1",
|
"expo-file-system": "^18.0.0-canary-20240912-1059f85",
|
||||||
"expo-image": "~1.12.9",
|
"expo-haptics": "14.0.0-canary-20240912-1059f85",
|
||||||
"expo-image-manipulator": "^12.0.5",
|
"expo-image": "~2.0.0-canary-20240912-1059f85",
|
||||||
"expo-image-picker": "~15.0.5",
|
"expo-image-manipulator": "^13.0.0-canary-20240912-1059f85",
|
||||||
"expo-linear-gradient": "^13.0.2",
|
"expo-image-picker": "~16.0.0-canary-20240912-1059f85",
|
||||||
"expo-linking": "^6.3.1",
|
"expo-linear-gradient": "^14.0.0-canary-20240912-1059f85",
|
||||||
"expo-localization": "~15.0.3",
|
"expo-linking": "^7.0.0-canary-20240912-1059f85",
|
||||||
"expo-media-library": "~16.0.3",
|
"expo-localization": "~16.0.0-canary-20240912-1059f85",
|
||||||
"expo-navigation-bar": "~3.0.4",
|
"expo-media-library": "~17.0.0-canary-20240912-1059f85",
|
||||||
"expo-notifications": "~0.28.7",
|
"expo-navigation-bar": "~3.0.8-canary-20240912-1059f85",
|
||||||
"expo-sharing": "^12.0.1",
|
"expo-notifications": "1.0.0-canary-20240912-1059f85",
|
||||||
"expo-splash-screen": "~0.27.4",
|
"expo-sharing": "^13.0.0-canary-20240912-1059f85",
|
||||||
"expo-status-bar": "~1.12.1",
|
"expo-splash-screen": "~1.0.0-canary-20240912-1059f85",
|
||||||
"expo-system-ui": "~3.0.4",
|
"expo-status-bar": "~1.12.2-canary-20240912-1059f85",
|
||||||
"expo-task-manager": "~11.8.1",
|
"expo-system-ui": "~4.0.0-canary-20240912-1059f85",
|
||||||
"expo-updates": "~0.25.14",
|
"expo-task-manager": "~12.0.0-canary-20240912-1059f85",
|
||||||
"expo-web-browser": "~13.0.3",
|
"expo-updates": "1.0.0-canary-20240912-1059f85",
|
||||||
|
"expo-web-browser": "14.0.0-canary-20240912-1059f85",
|
||||||
"fast-text-encoding": "^1.0.6",
|
"fast-text-encoding": "^1.0.6",
|
||||||
"history": "^5.3.0",
|
"history": "^5.3.0",
|
||||||
"hls.js": "^1.5.11",
|
"hls.js": "^1.5.11",
|
||||||
@@ -170,33 +170,33 @@
|
|||||||
"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.74.1",
|
"react-native": "0.75.3",
|
||||||
"react-native-compressor": "^1.8.24",
|
"react-native-compressor": "^1.9.0",
|
||||||
"react-native-date-picker": "^4.4.2",
|
"react-native-date-picker": "^4.4.2",
|
||||||
"react-native-drawer-layout": "^4.0.0-alpha.3",
|
"react-native-drawer-layout": "^4.0.0-rc.10",
|
||||||
"react-native-fs": "^2.20.0",
|
"react-native-fs": "^2.20.0",
|
||||||
"react-native-gesture-handler": "~2.16.2",
|
"react-native-gesture-handler": "~2.19.0",
|
||||||
"react-native-get-random-values": "~1.11.0",
|
"react-native-get-random-values": "~1.11.0",
|
||||||
"react-native-image-crop-picker": "0.40.3",
|
"react-native-image-crop-picker": "0.41.2",
|
||||||
"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.13.4",
|
||||||
"react-native-mmkv": "^2.12.2",
|
"react-native-mmkv": "^3.",
|
||||||
"react-native-pager-view": "6.2.3",
|
"react-native-pager-view": "6.4.1",
|
||||||
"react-native-picker-select": "^9.1.3",
|
"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-qrcode-styled": "^0.3.1",
|
"react-native-qrcode-styled": "^0.3.2",
|
||||||
"react-native-reanimated": "^3.11.0",
|
"react-native-reanimated": "^3.15.2",
|
||||||
"react-native-root-siblings": "^4.1.1",
|
"react-native-root-siblings": "^4.1.1",
|
||||||
"react-native-safe-area-context": "4.10.1",
|
"react-native-safe-area-context": "^4.11.0",
|
||||||
"react-native-screens": "~3.31.1",
|
"react-native-screens": "~3.34.0",
|
||||||
"react-native-svg": "^15.3.0",
|
"react-native-svg": "^15.6.0",
|
||||||
"react-native-uitextview": "^1.3.0",
|
"react-native-uitextview": "^1.3.0",
|
||||||
"react-native-url-polyfill": "^1.3.0",
|
"react-native-url-polyfill": "^1.3.0",
|
||||||
"react-native-uuid": "^2.0.2",
|
"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.11",
|
"react-native-web": "~0.19.12",
|
||||||
"react-native-web-webview": "^1.0.2",
|
"react-native-web-webview": "^1.0.2",
|
||||||
"react-native-webview": "13.10.2",
|
"react-native-webview": "13.12.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",
|
||||||
@@ -283,7 +283,9 @@
|
|||||||
"**/zod": "3.23.8",
|
"**/zod": "3.23.8",
|
||||||
"**/expo-constants": "16.0.1",
|
"**/expo-constants": "16.0.1",
|
||||||
"**/expo-device": "6.0.2",
|
"**/expo-device": "6.0.2",
|
||||||
"@react-native/babel-preset": "0.74.1"
|
"@react-native/babel-preset": "0.74.1",
|
||||||
|
"wrap-ansi": "7.0.0",
|
||||||
|
"string-width": "4.2.3"
|
||||||
},
|
},
|
||||||
"jest": {
|
"jest": {
|
||||||
"preset": "jest-expo/ios",
|
"preset": "jest-expo/ios",
|
||||||
|
|||||||
@@ -1,5 +0,0 @@
|
|||||||
## expo-modules-core Patch
|
|
||||||
|
|
||||||
This patch fixes crashes seen in some Android clients when using intents to open the app. See https://github.com/expo/expo/pull/29513.
|
|
||||||
|
|
||||||
Do not remove this patch until that PR lands in Expo and is released.
|
|
||||||
@@ -1,39 +0,0 @@
|
|||||||
diff --git a/node_modules/expo-modules-core/android/src/main/java/expo/modules/adapters/react/NativeModulesProxy.java b/node_modules/expo-modules-core/android/src/main/java/expo/modules/adapters/react/NativeModulesProxy.java
|
|
||||||
index bb74e80..0aa0202 100644
|
|
||||||
--- a/node_modules/expo-modules-core/android/src/main/java/expo/modules/adapters/react/NativeModulesProxy.java
|
|
||||||
+++ b/node_modules/expo-modules-core/android/src/main/java/expo/modules/adapters/react/NativeModulesProxy.java
|
|
||||||
@@ -90,8 +90,8 @@ public class NativeModulesProxy extends ReactContextBaseJavaModule {
|
|
||||||
mModuleRegistry.ensureIsInitialized();
|
|
||||||
|
|
||||||
KotlinInteropModuleRegistry kotlinModuleRegistry = getKotlinInteropModuleRegistry();
|
|
||||||
- kotlinModuleRegistry.emitOnCreate();
|
|
||||||
kotlinModuleRegistry.installJSIInterop();
|
|
||||||
+ kotlinModuleRegistry.emitOnCreate();
|
|
||||||
|
|
||||||
Map<String, Object> constants = new HashMap<>(3);
|
|
||||||
constants.put(MODULES_CONSTANTS_KEY, new HashMap<>());
|
|
||||||
diff --git a/node_modules/expo-modules-core/build/uuid/uuid.js b/node_modules/expo-modules-core/build/uuid/uuid.js
|
|
||||||
index 109d3fe..c421931 100644
|
|
||||||
--- a/node_modules/expo-modules-core/build/uuid/uuid.js
|
|
||||||
+++ b/node_modules/expo-modules-core/build/uuid/uuid.js
|
|
||||||
@@ -1,5 +1,7 @@
|
|
||||||
import bytesToUuid from './lib/bytesToUuid';
|
|
||||||
import { Uuidv5Namespace } from './uuid.types';
|
|
||||||
+import { ensureNativeModulesAreInstalled } from '../ensureNativeModulesAreInstalled';
|
|
||||||
+ensureNativeModulesAreInstalled();
|
|
||||||
const nativeUuidv4 = globalThis?.expo?.uuidv4;
|
|
||||||
const nativeUuidv5 = globalThis?.expo?.uuidv5;
|
|
||||||
function uuidv4() {
|
|
||||||
diff --git a/node_modules/expo-modules-core/ios/Core/SharedObjects/SharedObjectRegistry.swift b/node_modules/expo-modules-core/ios/Core/SharedObjects/SharedObjectRegistry.swift
|
|
||||||
index ee2268a..4851b67 100644
|
|
||||||
--- a/node_modules/expo-modules-core/ios/Core/SharedObjects/SharedObjectRegistry.swift
|
|
||||||
+++ b/node_modules/expo-modules-core/ios/Core/SharedObjects/SharedObjectRegistry.swift
|
|
||||||
@@ -173,7 +173,7 @@ public final class SharedObjectRegistry {
|
|
||||||
}
|
|
||||||
|
|
||||||
internal func clear() {
|
|
||||||
- Self.lockQueue.async {
|
|
||||||
+ Self.lockQueue.sync {
|
|
||||||
self.pairs.removeAll()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,111 +0,0 @@
|
|||||||
diff --git a/node_modules/react-native/Libraries/Text/TextInput/RCTBaseTextInputView.mm b/node_modules/react-native/Libraries/Text/TextInput/RCTBaseTextInputView.mm
|
|
||||||
index b0d71dc..9974932 100644
|
|
||||||
--- a/node_modules/react-native/Libraries/Text/TextInput/RCTBaseTextInputView.mm
|
|
||||||
+++ b/node_modules/react-native/Libraries/Text/TextInput/RCTBaseTextInputView.mm
|
|
||||||
@@ -377,10 +377,6 @@ - (void)textInputDidBeginEditing
|
|
||||||
self.backedTextInputView.attributedText = [NSAttributedString new];
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (_selectTextOnFocus) {
|
|
||||||
- [self.backedTextInputView selectAll:nil];
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
[_eventDispatcher sendTextEventWithType:RCTTextEventTypeFocus
|
|
||||||
reactTag:self.reactTag
|
|
||||||
text:[self.backedTextInputView.attributedText.string copy]
|
|
||||||
@@ -611,6 +607,10 @@ - (UIView *)reactAccessibilityElement
|
|
||||||
- (void)reactFocus
|
|
||||||
{
|
|
||||||
[self.backedTextInputView reactFocus];
|
|
||||||
+
|
|
||||||
+ if (_selectTextOnFocus) {
|
|
||||||
+ [self.backedTextInputView selectAll:nil];
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)reactBlur
|
|
||||||
diff --git a/node_modules/react-native/React/Views/RefreshControl/RCTRefreshControl.h b/node_modules/react-native/React/Views/RefreshControl/RCTRefreshControl.h
|
|
||||||
index e9b330f..1ecdf0a 100644
|
|
||||||
--- a/node_modules/react-native/React/Views/RefreshControl/RCTRefreshControl.h
|
|
||||||
+++ b/node_modules/react-native/React/Views/RefreshControl/RCTRefreshControl.h
|
|
||||||
@@ -16,4 +16,6 @@
|
|
||||||
@property (nonatomic, copy) RCTDirectEventBlock onRefresh;
|
|
||||||
@property (nonatomic, weak) UIScrollView *scrollView;
|
|
||||||
|
|
||||||
+- (void)forwarderBeginRefreshing;
|
|
||||||
+
|
|
||||||
@end
|
|
||||||
diff --git a/node_modules/react-native/React/Views/RefreshControl/RCTRefreshControl.m b/node_modules/react-native/React/Views/RefreshControl/RCTRefreshControl.m
|
|
||||||
index b09e653..4c32b31 100644
|
|
||||||
--- a/node_modules/react-native/React/Views/RefreshControl/RCTRefreshControl.m
|
|
||||||
+++ b/node_modules/react-native/React/Views/RefreshControl/RCTRefreshControl.m
|
|
||||||
@@ -198,9 +198,53 @@ - (void)refreshControlValueChanged
|
|
||||||
[self setCurrentRefreshingState:super.refreshing];
|
|
||||||
_refreshingProgrammatically = NO;
|
|
||||||
|
|
||||||
+ if (@available(iOS 17.4, *)) {
|
|
||||||
+ if (_currentRefreshingState) {
|
|
||||||
+ UIImpactFeedbackGenerator *feedbackGenerator = [[UIImpactFeedbackGenerator alloc] initWithStyle:UIImpactFeedbackStyleLight];
|
|
||||||
+ [feedbackGenerator prepare];
|
|
||||||
+ [feedbackGenerator impactOccurred];
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
if (_onRefresh) {
|
|
||||||
_onRefresh(nil);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+/*
|
|
||||||
+ This method is used by Bluesky's ExpoScrollForwarder. This allows other React Native
|
|
||||||
+ libraries to perform a refresh of a scrollview and access the refresh control's onRefresh
|
|
||||||
+ function.
|
|
||||||
+ */
|
|
||||||
+- (void)forwarderBeginRefreshing
|
|
||||||
+{
|
|
||||||
+ _refreshingProgrammatically = NO;
|
|
||||||
+
|
|
||||||
+ [self sizeToFit];
|
|
||||||
+
|
|
||||||
+ if (!self.scrollView) {
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ UIScrollView *scrollView = (UIScrollView *)self.scrollView;
|
|
||||||
+
|
|
||||||
+ [UIView animateWithDuration:0.3
|
|
||||||
+ delay:0
|
|
||||||
+ options:UIViewAnimationOptionBeginFromCurrentState
|
|
||||||
+ animations:^(void) {
|
|
||||||
+ // Whenever we call this method, the scrollview will always be at a position of
|
|
||||||
+ // -130 or less. Scrolling back to -65 simulates the default behavior of RCTRefreshControl
|
|
||||||
+ [scrollView setContentOffset:CGPointMake(0, -65)];
|
|
||||||
+ }
|
|
||||||
+ completion:^(__unused BOOL finished) {
|
|
||||||
+ [super beginRefreshing];
|
|
||||||
+ [self setCurrentRefreshingState:super.refreshing];
|
|
||||||
+
|
|
||||||
+ if (self->_onRefresh) {
|
|
||||||
+ self->_onRefresh(nil);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ ];
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
@end
|
|
||||||
diff --git a/node_modules/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/core/JavaTimerManager.java b/node_modules/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/core/JavaTimerManager.java
|
|
||||||
index 5f5e1ab..aac00b6 100644
|
|
||||||
--- a/node_modules/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/core/JavaTimerManager.java
|
|
||||||
+++ b/node_modules/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/core/JavaTimerManager.java
|
|
||||||
@@ -99,8 +99,9 @@ public class JavaTimerManager {
|
|
||||||
}
|
|
||||||
|
|
||||||
// If the JS thread is busy for multiple frames we cancel any other pending runnable.
|
|
||||||
- if (mCurrentIdleCallbackRunnable != null) {
|
|
||||||
- mCurrentIdleCallbackRunnable.cancel();
|
|
||||||
+ IdleCallbackRunnable currentRunnable = mCurrentIdleCallbackRunnable;
|
|
||||||
+ if (currentRunnable != null) {
|
|
||||||
+ currentRunnable.cancel();
|
|
||||||
}
|
|
||||||
|
|
||||||
mCurrentIdleCallbackRunnable = new IdleCallbackRunnable(frameTimeNanos);
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
# ***This second part of this patch is load bearing, do not remove.***
|
|
||||||
|
|
||||||
## RefreshControl Patch - iOS 17.4 Haptic Regression
|
|
||||||
|
|
||||||
Patching `RCTRefreshControl.mm` temporarily to play an impact haptic on refresh when using iOS 17.4 or higher. Since
|
|
||||||
17.4, there has been a regression somewhere causing haptics to not play on iOS on refresh. Should monitor for an update
|
|
||||||
in the RN repo: https://github.com/facebook/react-native/issues/43388
|
|
||||||
|
|
||||||
## RefreshControl Path - ScrollForwarder
|
|
||||||
|
|
||||||
Patching `RCTRefreshControl.m` and `RCTRefreshControl.h` to add a new `forwarderBeginRefreshing` method to the class.
|
|
||||||
This method is used by `ExpoScrollForwarder` to initiate a refresh of the underlying `UIScrollView` from inside that
|
|
||||||
module.
|
|
||||||
|
|
||||||
|
|
||||||
## TextInput Patch - `selectTextOnFocus` fix
|
|
||||||
|
|
||||||
Patching `RCTBaseTextInputView.m` to fix an issue where `selectTextOnFocus` does not work as expected on iOS 17. This
|
|
||||||
patch _only_ fixes the Paper version of `TextInput`. If we migrate to Fabric and the fix has not been made upstream,
|
|
||||||
we can apply the same fix. See https://github.com/facebook/react-native/pull/44307.
|
|
||||||
@@ -1,209 +0,0 @@
|
|||||||
diff --git a/node_modules/react-native-reanimated/src/createAnimatedComponent/commonTypes.ts b/node_modules/react-native-reanimated/src/createAnimatedComponent/commonTypes.ts
|
|
||||||
index 92ebe62..5f8207e 100644
|
|
||||||
--- a/node_modules/react-native-reanimated/src/createAnimatedComponent/commonTypes.ts
|
|
||||||
+++ b/node_modules/react-native-reanimated/src/createAnimatedComponent/commonTypes.ts
|
|
||||||
@@ -96,7 +96,8 @@ export interface AnimatedComponentRef extends Component {
|
|
||||||
export interface IAnimatedComponentInternal {
|
|
||||||
_styles: StyleProps[] | null;
|
|
||||||
_animatedProps?: Partial<AnimatedComponentProps<AnimatedProps>>;
|
|
||||||
- _viewTag: number;
|
|
||||||
+ _componentViewTag: number;
|
|
||||||
+ _eventViewTag: number;
|
|
||||||
_isFirstRender: boolean;
|
|
||||||
jestAnimatedStyle: { value: StyleProps };
|
|
||||||
_component: AnimatedComponentRef | HTMLElement | null;
|
|
||||||
diff --git a/node_modules/react-native-reanimated/src/createAnimatedComponent/createAnimatedComponent.tsx b/node_modules/react-native-reanimated/src/createAnimatedComponent/createAnimatedComponent.tsx
|
|
||||||
index 88b3fdf..2488ebc 100644
|
|
||||||
--- a/node_modules/react-native-reanimated/src/createAnimatedComponent/createAnimatedComponent.tsx
|
|
||||||
+++ b/node_modules/react-native-reanimated/src/createAnimatedComponent/createAnimatedComponent.tsx
|
|
||||||
@@ -122,7 +122,8 @@ export function createAnimatedComponent(
|
|
||||||
{
|
|
||||||
_styles: StyleProps[] | null = null;
|
|
||||||
_animatedProps?: Partial<AnimatedComponentProps<AnimatedProps>>;
|
|
||||||
- _viewTag = -1;
|
|
||||||
+ _componentViewTag = -1;
|
|
||||||
+ _eventViewTag = -1;
|
|
||||||
_isFirstRender = true;
|
|
||||||
jestAnimatedStyle: { value: StyleProps } = { value: {} };
|
|
||||||
_component: AnimatedComponentRef | HTMLElement | null = null;
|
|
||||||
@@ -143,7 +144,8 @@ export function createAnimatedComponent(
|
|
||||||
}
|
|
||||||
|
|
||||||
componentDidMount() {
|
|
||||||
- this._viewTag = this._getViewInfo().viewTag as number;
|
|
||||||
+ this._setComponentViewTag();
|
|
||||||
+ this._setEventViewTag();
|
|
||||||
this._attachNativeEvents();
|
|
||||||
this._jsPropsUpdater.addOnJSPropsChangeListener(this);
|
|
||||||
this._attachAnimatedStyles();
|
|
||||||
@@ -185,7 +187,10 @@ export function createAnimatedComponent(
|
|
||||||
if (this.props.sharedTransitionTag) {
|
|
||||||
this._configureSharedTransition(true);
|
|
||||||
}
|
|
||||||
- this._sharedElementTransition?.unregisterTransition(this._viewTag, true);
|
|
||||||
+ this._sharedElementTransition?.unregisterTransition(
|
|
||||||
+ this._componentViewTag,
|
|
||||||
+ true
|
|
||||||
+ );
|
|
||||||
|
|
||||||
const exiting = this.props.exiting;
|
|
||||||
if (
|
|
||||||
@@ -209,7 +214,7 @@ export function createAnimatedComponent(
|
|
||||||
: getReduceMotionFromConfig();
|
|
||||||
if (!reduceMotionInExiting) {
|
|
||||||
updateLayoutAnimations(
|
|
||||||
- this._viewTag,
|
|
||||||
+ this._componentViewTag,
|
|
||||||
LayoutAnimationType.EXITING,
|
|
||||||
maybeBuild(
|
|
||||||
exiting,
|
|
||||||
@@ -221,12 +226,22 @@ export function createAnimatedComponent(
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- _getEventViewRef() {
|
|
||||||
- // Make sure to get the scrollable node for components that implement
|
|
||||||
- // `ScrollResponder.Mixin`.
|
|
||||||
- return (this._component as AnimatedComponentRef)?.getScrollableNode
|
|
||||||
- ? (this._component as AnimatedComponentRef).getScrollableNode?.()
|
|
||||||
- : this._component;
|
|
||||||
+ _setComponentViewTag() {
|
|
||||||
+ this._componentViewTag = this._getViewInfo().viewTag as number;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ _setEventViewTag() {
|
|
||||||
+ // Setting the tag for registering events - since the event emitting view can be nested inside the main component
|
|
||||||
+ const componentAnimatedRef = this._component as AnimatedComponentRef;
|
|
||||||
+ if (componentAnimatedRef.getScrollableNode) {
|
|
||||||
+ const scrollableNode = componentAnimatedRef.getScrollableNode();
|
|
||||||
+ this._eventViewTag = findNodeHandle(scrollableNode) ?? -1;
|
|
||||||
+ } else {
|
|
||||||
+ this._eventViewTag =
|
|
||||||
+ findNodeHandle(
|
|
||||||
+ options?.setNativeProps ? this : componentAnimatedRef
|
|
||||||
+ ) ?? -1;
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
_attachNativeEvents() {
|
|
||||||
@@ -236,7 +251,7 @@ export function createAnimatedComponent(
|
|
||||||
has('workletEventHandler', prop) &&
|
|
||||||
prop.workletEventHandler instanceof WorkletEventHandler
|
|
||||||
) {
|
|
||||||
- prop.workletEventHandler.registerForEvents(this._viewTag, key);
|
|
||||||
+ prop.workletEventHandler.registerForEvents(this._eventViewTag, key);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -248,7 +263,7 @@ export function createAnimatedComponent(
|
|
||||||
has('workletEventHandler', prop) &&
|
|
||||||
prop.workletEventHandler instanceof WorkletEventHandler
|
|
||||||
) {
|
|
||||||
- prop.workletEventHandler.unregisterFromEvents(this._viewTag);
|
|
||||||
+ prop.workletEventHandler.unregisterFromEvents(this._eventViewTag);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -258,15 +273,17 @@ export function createAnimatedComponent(
|
|
||||||
for (const style of this._styles) {
|
|
||||||
style.viewsRef.remove(this);
|
|
||||||
}
|
|
||||||
- } else if (this._viewTag !== -1 && this._styles !== null) {
|
|
||||||
+ } else if (this._componentViewTag !== -1 && this._styles !== null) {
|
|
||||||
for (const style of this._styles) {
|
|
||||||
- style.viewDescriptors.remove(this._viewTag);
|
|
||||||
+ style.viewDescriptors.remove(this._componentViewTag);
|
|
||||||
}
|
|
||||||
if (this.props.animatedProps?.viewDescriptors) {
|
|
||||||
- this.props.animatedProps.viewDescriptors.remove(this._viewTag);
|
|
||||||
+ this.props.animatedProps.viewDescriptors.remove(
|
|
||||||
+ this._componentViewTag
|
|
||||||
+ );
|
|
||||||
}
|
|
||||||
if (isFabric()) {
|
|
||||||
- removeFromPropsRegistry(this._viewTag);
|
|
||||||
+ removeFromPropsRegistry(this._componentViewTag);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -283,15 +300,19 @@ export function createAnimatedComponent(
|
|
||||||
const newProp = this.props[key];
|
|
||||||
if (!newProp) {
|
|
||||||
// Prop got deleted
|
|
||||||
- prevProp.workletEventHandler.unregisterFromEvents(this._viewTag);
|
|
||||||
+ prevProp.workletEventHandler.unregisterFromEvents(
|
|
||||||
+ this._eventViewTag
|
|
||||||
+ );
|
|
||||||
} else if (
|
|
||||||
has('workletEventHandler', newProp) &&
|
|
||||||
newProp.workletEventHandler instanceof WorkletEventHandler &&
|
|
||||||
newProp.workletEventHandler !== prevProp.workletEventHandler
|
|
||||||
) {
|
|
||||||
// Prop got changed
|
|
||||||
- prevProp.workletEventHandler.unregisterFromEvents(this._viewTag);
|
|
||||||
- newProp.workletEventHandler.registerForEvents(this._viewTag);
|
|
||||||
+ prevProp.workletEventHandler.unregisterFromEvents(
|
|
||||||
+ this._eventViewTag
|
|
||||||
+ );
|
|
||||||
+ newProp.workletEventHandler.registerForEvents(this._eventViewTag);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -304,7 +325,7 @@ export function createAnimatedComponent(
|
|
||||||
!prevProps[key]
|
|
||||||
) {
|
|
||||||
// Prop got added
|
|
||||||
- newProp.workletEventHandler.registerForEvents(this._viewTag);
|
|
||||||
+ newProp.workletEventHandler.registerForEvents(this._eventViewTag);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -381,7 +402,7 @@ export function createAnimatedComponent(
|
|
||||||
adaptViewConfig(viewConfig);
|
|
||||||
}
|
|
||||||
|
|
||||||
- this._viewTag = viewTag as number;
|
|
||||||
+ this._componentViewTag = viewTag as number;
|
|
||||||
|
|
||||||
// remove old styles
|
|
||||||
if (prevStyles) {
|
|
||||||
@@ -487,7 +508,11 @@ export function createAnimatedComponent(
|
|
||||||
AnimatedComponent.displayName
|
|
||||||
)
|
|
||||||
: undefined;
|
|
||||||
- updateLayoutAnimations(this._viewTag, LayoutAnimationType.LAYOUT, layout);
|
|
||||||
+ updateLayoutAnimations(
|
|
||||||
+ this._componentViewTag,
|
|
||||||
+ LayoutAnimationType.LAYOUT,
|
|
||||||
+ layout
|
|
||||||
+ );
|
|
||||||
}
|
|
||||||
|
|
||||||
_configureSharedTransition(isUnmounting = false) {
|
|
||||||
@@ -497,7 +522,7 @@ export function createAnimatedComponent(
|
|
||||||
const { sharedTransitionTag } = this.props;
|
|
||||||
if (!sharedTransitionTag) {
|
|
||||||
this._sharedElementTransition?.unregisterTransition(
|
|
||||||
- this._viewTag,
|
|
||||||
+ this._componentViewTag,
|
|
||||||
isUnmounting
|
|
||||||
);
|
|
||||||
this._sharedElementTransition = null;
|
|
||||||
@@ -508,7 +533,7 @@ export function createAnimatedComponent(
|
|
||||||
this._sharedElementTransition ??
|
|
||||||
new SharedTransition();
|
|
||||||
sharedElementTransition.registerTransition(
|
|
||||||
- this._viewTag,
|
|
||||||
+ this._componentViewTag,
|
|
||||||
sharedTransitionTag,
|
|
||||||
isUnmounting
|
|
||||||
);
|
|
||||||
@@ -527,7 +552,7 @@ export function createAnimatedComponent(
|
|
||||||
? (ref as HTMLElement)
|
|
||||||
: findNodeHandle(ref as Component);
|
|
||||||
|
|
||||||
- this._viewTag = tag as number;
|
|
||||||
+ this._componentViewTag = tag as number;
|
|
||||||
|
|
||||||
const { layout, entering, exiting, sharedTransitionTag } = this.props;
|
|
||||||
if (
|
|
||||||
+24
-24
@@ -12,7 +12,7 @@ import {
|
|||||||
} from 'expo-file-system'
|
} from 'expo-file-system'
|
||||||
import * as MediaLibrary from 'expo-media-library'
|
import * as MediaLibrary from 'expo-media-library'
|
||||||
import * as Sharing from 'expo-sharing'
|
import * as Sharing from 'expo-sharing'
|
||||||
import ImageResizer from '@bam.tech/react-native-image-resizer'
|
// import ImageResizer from '@bam.tech/react-native-image-resizer'
|
||||||
import {Buffer} from 'buffer'
|
import {Buffer} from 'buffer'
|
||||||
import RNFetchBlob from 'rn-fetch-blob'
|
import RNFetchBlob from 'rn-fetch-blob'
|
||||||
|
|
||||||
@@ -166,29 +166,29 @@ interface DoResizeOpts {
|
|||||||
|
|
||||||
async function doResize(localUri: string, opts: DoResizeOpts): Promise<Image> {
|
async function doResize(localUri: string, opts: DoResizeOpts): Promise<Image> {
|
||||||
for (let i = 0; i < 9; i++) {
|
for (let i = 0; i < 9; i++) {
|
||||||
const quality = 100 - i * 10
|
// const quality = 100 - i * 10
|
||||||
const resizeRes = await ImageResizer.createResizedImage(
|
// const resizeRes = await ImageResizer.createResizedImage(
|
||||||
localUri,
|
// localUri,
|
||||||
opts.width,
|
// opts.width,
|
||||||
opts.height,
|
// opts.height,
|
||||||
'JPEG',
|
// 'JPEG',
|
||||||
quality,
|
// quality,
|
||||||
undefined,
|
// undefined,
|
||||||
undefined,
|
// undefined,
|
||||||
undefined,
|
// undefined,
|
||||||
{mode: opts.mode},
|
// {mode: opts.mode},
|
||||||
)
|
// )
|
||||||
if (resizeRes.size < opts.maxSize) {
|
// if (resizeRes.size < opts.maxSize) {
|
||||||
return {
|
// return {
|
||||||
path: normalizePath(resizeRes.path),
|
// path: normalizePath(resizeRes.path),
|
||||||
mime: 'image/jpeg',
|
// mime: 'image/jpeg',
|
||||||
size: resizeRes.size,
|
// size: resizeRes.size,
|
||||||
width: resizeRes.width,
|
// width: resizeRes.width,
|
||||||
height: resizeRes.height,
|
// height: resizeRes.height,
|
||||||
}
|
// }
|
||||||
} else {
|
// } else {
|
||||||
safeDeleteAsync(resizeRes.path)
|
// safeDeleteAsync(resizeRes.path)
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
throw new Error(
|
throw new Error(
|
||||||
`This image is too big! We couldn't compress it down to ${opts.maxSize} bytes`,
|
`This image is too big! We couldn't compress it down to ${opts.maxSize} bytes`,
|
||||||
|
|||||||
Reference in New Issue
Block a user