diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 2f53f00918bf..08095f4c7fa2 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -1945,7 +1945,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - RNScreens (3.29.0): + - RNScreens (3.30.1): - glog - hermes-engine - RCT-Folly (= 2022.05.16.00) @@ -1963,9 +1963,9 @@ PODS: - React-utils - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNScreens/common (= 3.29.0) + - RNScreens/common (= 3.30.1) - Yoga - - RNScreens/common (3.29.0): + - RNScreens/common (3.30.1): - glog - hermes-engine - RCT-Folly (= 2022.05.16.00) @@ -2571,7 +2571,7 @@ SPEC CHECKSUMS: RNPermissions: 8990fc2c10da3640938e6db1647cb6416095b729 RNReactNativeHapticFeedback: 616c35bdec7d20d4c524a7949ca9829c09e35f37 RNReanimated: 605409e0d0ced6f2e194ae585fedc2f8a1935bf2 - RNScreens: f7b8bb892b4957f6f91e5dfd9a191e7f13ce8baa + RNScreens: 65a936f4e227b91e4a8e2a7d4c4607355bfefda0 RNShare: 2a4cdfc0626ad56b0ef583d424f2038f772afe58 RNSound: 6c156f925295bdc83e8e422e7d8b38d33bc71852 RNSVG: db32cfcad0a221fd175e0882eff7bcba7690380a diff --git a/package-lock.json b/package-lock.json index 6a31f9009d10..ad041271ea89 100644 --- a/package-lock.json +++ b/package-lock.json @@ -107,7 +107,7 @@ "react-native-release-profiler": "^0.1.6", "react-native-render-html": "6.3.1", "react-native-safe-area-context": "4.8.2", - "react-native-screens": "3.29.0", + "react-native-screens": "3.30.1", "react-native-share": "^10.0.2", "react-native-sound": "^0.11.2", "react-native-svg": "14.1.0", @@ -39850,8 +39850,9 @@ } }, "node_modules/react-native-screens": { - "version": "3.29.0", - "license": "MIT", + "version": "3.30.1", + "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-3.30.1.tgz", + "integrity": "sha512-/muEvjocCtFb+j5J3YmLvB25+f4rIU8hnnxgGTkXcAf2omPBY8uhPjJaaFUlvj64VEoEzJcRpugbXWsjfPPIFg==", "dependencies": { "react-freeze": "^1.0.0", "warn-once": "^0.1.0" diff --git a/package.json b/package.json index ddee8708bc46..d80fee787adc 100644 --- a/package.json +++ b/package.json @@ -158,7 +158,7 @@ "react-native-release-profiler": "^0.1.6", "react-native-render-html": "6.3.1", "react-native-safe-area-context": "4.8.2", - "react-native-screens": "3.29.0", + "react-native-screens": "3.30.1", "react-native-share": "^10.0.2", "react-native-sound": "^0.11.2", "react-native-svg": "14.1.0", diff --git a/patches/react-native-screens+3.29.0+001+initial.patch b/patches/react-native-screens+3.29.0+001+initial.patch deleted file mode 100644 index dbe65b2abf3f..000000000000 --- a/patches/react-native-screens+3.29.0+001+initial.patch +++ /dev/null @@ -1,49 +0,0 @@ -diff --git a/node_modules/react-native-screens/android/src/fabric/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt b/node_modules/react-native-screens/android/src/fabric/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt -index d9e0e58..2d946c4 100644 ---- a/node_modules/react-native-screens/android/src/fabric/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt -+++ b/node_modules/react-native-screens/android/src/fabric/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt -@@ -3,7 +3,6 @@ package com.swmansion.rnscreens - import android.view.ViewGroup - import androidx.annotation.UiThread - import com.facebook.react.bridge.ReactContext --import com.facebook.react.bridge.ReadableMap - import com.facebook.react.bridge.WritableMap - import com.facebook.react.bridge.WritableNativeMap - import com.facebook.react.uimanager.FabricViewStateManager -@@ -13,6 +12,9 @@ import kotlin.math.abs - abstract class FabricEnabledViewGroup constructor(context: ReactContext?) : ViewGroup(context), FabricViewStateManager.HasFabricViewStateManager { - private val mFabricViewStateManager: FabricViewStateManager = FabricViewStateManager() - -+ private var lastSetWidth = 0f -+ private var lastSetHeight = 0f -+ - override fun getFabricViewStateManager(): FabricViewStateManager { - return mFabricViewStateManager - } -@@ -28,17 +30,16 @@ abstract class FabricEnabledViewGroup constructor(context: ReactContext?) : View - - // Check incoming state values. If they're already the correct value, return early to prevent - // infinite UpdateState/SetState loop. -- val currentState: ReadableMap? = mFabricViewStateManager.getStateData() -- if (currentState != null) { -- val delta = 0.9f -- val stateFrameHeight: Float = if (currentState.hasKey("frameHeight")) currentState.getDouble("frameHeight").toFloat() else 0f -- val stateFrameWidth: Float = if (currentState.hasKey("frameWidth")) currentState.getDouble("frameWidth").toFloat() else 0f -- if (abs(stateFrameWidth - realWidth) < delta && -- abs(stateFrameHeight - realHeight) < delta -- ) { -- return -- } -+ val delta = 0.9f -+ if (abs(lastSetWidth - realWidth) < delta && -+ abs(lastSetHeight - realHeight) < delta -+ ) { -+ return - } -+ -+ lastSetWidth = realWidth -+ lastSetHeight = realHeight -+ - mFabricViewStateManager.setState { - val map: WritableMap = WritableNativeMap() - map.putDouble("frameWidth", realWidth.toDouble()) diff --git a/patches/react-native-screens+3.29.0+002+fixLayoutIssues.patch b/patches/react-native-screens+3.29.0+002+fixLayoutIssues.patch deleted file mode 100644 index 9654c9cfcb42..000000000000 --- a/patches/react-native-screens+3.29.0+002+fixLayoutIssues.patch +++ /dev/null @@ -1,214 +0,0 @@ -diff --git a/node_modules/react-native-screens/android/src/fabric/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt b/node_modules/react-native-screens/android/src/fabric/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt -index 2d946c4..ccda8f3 100644 ---- a/node_modules/react-native-screens/android/src/fabric/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt -+++ b/node_modules/react-native-screens/android/src/fabric/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt -@@ -12,38 +12,36 @@ import kotlin.math.abs - abstract class FabricEnabledViewGroup constructor(context: ReactContext?) : ViewGroup(context), FabricViewStateManager.HasFabricViewStateManager { - private val mFabricViewStateManager: FabricViewStateManager = FabricViewStateManager() - -- private var lastSetWidth = 0f -- private var lastSetHeight = 0f -+ private var lastHeaderHeight: Double = 0.0 - - override fun getFabricViewStateManager(): FabricViewStateManager { - return mFabricViewStateManager - } - -- protected fun updateScreenSizeFabric(width: Int, height: Int) { -- updateState(width, height) -+ protected fun updateScreenSizeFabric(width: Int, height: Int, headerHeight: Double) { -+ updateState(width, height, headerHeight) - } - - @UiThread -- fun updateState(width: Int, height: Int) { -+ fun updateState(width: Int, height: Int, headerHeight: Double) { - val realWidth: Float = PixelUtil.toDIPFromPixel(width.toFloat()) - val realHeight: Float = PixelUtil.toDIPFromPixel(height.toFloat()) - - // Check incoming state values. If they're already the correct value, return early to prevent - // infinite UpdateState/SetState loop. -- val delta = 0.9f -- if (abs(lastSetWidth - realWidth) < delta && -- abs(lastSetHeight - realHeight) < delta -- ) { -+ val delta = 0.9 -+ if (abs(lastHeaderHeight - headerHeight) < delta) { - return - } - -- lastSetWidth = realWidth -- lastSetHeight = realHeight -+ lastHeaderHeight = headerHeight - - mFabricViewStateManager.setState { - val map: WritableMap = WritableNativeMap() - map.putDouble("frameWidth", realWidth.toDouble()) - map.putDouble("frameHeight", realHeight.toDouble()) -+ map.putDouble("contentOffsetX", 0.0) -+ map.putDouble("contentOffsetY", headerHeight) - map - } - } -diff --git a/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/Screen.kt b/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/Screen.kt -index a7d28f9..e0b0d8e 100644 ---- a/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/Screen.kt -+++ b/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/Screen.kt -@@ -72,9 +72,9 @@ class Screen constructor(context: ReactContext?) : FabricEnabledViewGroup(contex - val width = r - l - val height = b - t - -- calculateHeaderHeight() -+ val headerHeight = if (container is ScreenStack) calculateHeaderHeight().first else 0.0 - if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) { -- updateScreenSizeFabric(width, height) -+ updateScreenSizeFabric(width, height, headerHeight) - } else { - updateScreenSizePaper(width, height) - } -@@ -246,7 +246,7 @@ class Screen constructor(context: ReactContext?) : FabricEnabledViewGroup(contex - mNativeBackButtonDismissalEnabled = enableNativeBackButtonDismissal - } - -- private fun calculateHeaderHeight() { -+ private fun calculateHeaderHeight(): Pair { - val actionBarTv = TypedValue() - val resolvedActionBarSize = context.theme.resolveAttribute(android.R.attr.actionBarSize, actionBarTv, true) - -@@ -265,6 +265,8 @@ class Screen constructor(context: ReactContext?) : FabricEnabledViewGroup(contex - val totalHeight = actionBarHeight + statusBarHeight - UIManagerHelper.getEventDispatcherForReactTag(context as ReactContext, id) - ?.dispatchEvent(HeaderHeightChangeEvent(id, totalHeight)) -+ -+ return actionBarHeight to statusBarHeight - } - - enum class StackPresentation { -diff --git a/node_modules/react-native-screens/common/cpp/react/renderer/components/rnscreens/RNSScreenComponentDescriptor.h b/node_modules/react-native-screens/common/cpp/react/renderer/components/rnscreens/RNSScreenComponentDescriptor.h -index 67194d3..c1a1b40 100644 ---- a/node_modules/react-native-screens/common/cpp/react/renderer/components/rnscreens/RNSScreenComponentDescriptor.h -+++ b/node_modules/react-native-screens/common/cpp/react/renderer/components/rnscreens/RNSScreenComponentDescriptor.h -@@ -13,7 +13,7 @@ class RNSScreenComponentDescriptor final - using ConcreteComponentDescriptor::ConcreteComponentDescriptor; - - void adopt(ShadowNode& shadowNode) const override { -- react_native_assert( -+ react_native_assert( - dynamic_cast(&shadowNode)); - auto& screenShadowNode = - static_cast(shadowNode); -@@ -28,10 +28,7 @@ class RNSScreenComponentDescriptor final - shadowNode.getState()); - auto stateData = state->getData(); - -- if (stateData.frameSize.width != 0 && stateData.frameSize.height != 0) { -- layoutableShadowNode.setSize( -- Size{stateData.frameSize.width, stateData.frameSize.height}); -- } -+ layoutableShadowNode.setPadding({.bottom = stateData.contentOffset.y}); - - ConcreteComponentDescriptor::adopt(shadowNode); - } -diff --git a/node_modules/react-native-screens/common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNode.cpp b/node_modules/react-native-screens/common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNode.cpp -index ba61ed8..0e3746e 100644 ---- a/node_modules/react-native-screens/common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNode.cpp -+++ b/node_modules/react-native-screens/common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNode.cpp -@@ -5,5 +5,11 @@ namespace react { - - extern const char RNSScreenComponentName[] = "RNSScreen"; - -+Point RNSScreenShadowNode::getContentOriginOffset() const { -+ auto stateData = getStateData(); -+ auto contentOffset = stateData.contentOffset; -+ return {contentOffset.x, contentOffset.y}; -+} -+ - } // namespace react - } // namespace facebook -diff --git a/node_modules/react-native-screens/common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNode.h b/node_modules/react-native-screens/common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNode.h -index ef25dd1..bbd7599 100644 ---- a/node_modules/react-native-screens/common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNode.h -+++ b/node_modules/react-native-screens/common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNode.h -@@ -19,9 +19,11 @@ class JSI_EXPORT RNSScreenShadowNode final : public ConcreteViewShadowNode< - public: - using ConcreteViewShadowNode::ConcreteViewShadowNode; - -+ Point getContentOriginOffset() const override; -+ - static ShadowNodeTraits BaseTraits() { - auto traits = ConcreteViewShadowNode::BaseTraits(); -- traits.set(ShadowNodeTraits::Trait::RootNodeKind); -+ // traits.set(ShadowNodeTraits::Trait::RootNodeKind); - return traits; - } - }; -diff --git a/node_modules/react-native-screens/common/cpp/react/renderer/components/rnscreens/RNSScreenState.cpp b/node_modules/react-native-screens/common/cpp/react/renderer/components/rnscreens/RNSScreenState.cpp -index 69c77a6..6c3b8ca 100644 ---- a/node_modules/react-native-screens/common/cpp/react/renderer/components/rnscreens/RNSScreenState.cpp -+++ b/node_modules/react-native-screens/common/cpp/react/renderer/components/rnscreens/RNSScreenState.cpp -@@ -6,8 +6,8 @@ namespace react { - #ifdef ANDROID - folly::dynamic RNSScreenState::getDynamic() const { - return folly::dynamic::object("frameWidth", frameSize.width)( -- "frameHeight", frameSize.height); --} -+ "frameHeight", frameSize.height)("contentOffsetX", contentOffset.x)("contentOffsetY", contentOffset.y); -+ } - #endif - - } // namespace react -diff --git a/node_modules/react-native-screens/common/cpp/react/renderer/components/rnscreens/RNSScreenState.h b/node_modules/react-native-screens/common/cpp/react/renderer/components/rnscreens/RNSScreenState.h -index ce09807..e26d411 100644 ---- a/node_modules/react-native-screens/common/cpp/react/renderer/components/rnscreens/RNSScreenState.h -+++ b/node_modules/react-native-screens/common/cpp/react/renderer/components/rnscreens/RNSScreenState.h -@@ -17,7 +17,7 @@ class JSI_EXPORT RNSScreenState final { - using Shared = std::shared_ptr; - - RNSScreenState(){}; -- RNSScreenState(Size frameSize_) : frameSize(frameSize_){}; -+ RNSScreenState(Size frameSize_, Point contentOffset_) : frameSize(frameSize_), contentOffset(contentOffset_){}; - - #ifdef ANDROID - RNSScreenState( -@@ -25,10 +25,14 @@ class JSI_EXPORT RNSScreenState final { - folly::dynamic data) - : frameSize(Size{ - (Float)data["frameWidth"].getDouble(), -- (Float)data["frameHeight"].getDouble()}){}; -+ (Float)data["frameHeight"].getDouble()}), -+ contentOffset(Point{ -+ (Float)data["contentOffsetX"].getDouble(), -+ (Float)data["contentOffsetY"].getDouble()}){}; - #endif - - const Size frameSize{}; -+ Point contentOffset; - - #ifdef ANDROID - folly::dynamic getDynamic() const; -diff --git a/node_modules/react-native-screens/ios/RNSScreen.h b/node_modules/react-native-screens/ios/RNSScreen.h -index f1bd9d8..797fc12 100644 ---- a/node_modules/react-native-screens/ios/RNSScreen.h -+++ b/node_modules/react-native-screens/ios/RNSScreen.h -@@ -42,6 +42,7 @@ namespace react = facebook::react; - #ifdef RCT_NEW_ARCH_ENABLED - - (void)setViewToSnapshot:(UIView *)snapshot; - - (void)resetViewToScreen; -+- (CGFloat)calculateHeaderHeightIsModal:(BOOL)isModal; - #endif - - @end -diff --git a/node_modules/react-native-screens/ios/RNSScreen.mm b/node_modules/react-native-screens/ios/RNSScreen.mm -index 4b24cff..8f480ca 100644 ---- a/node_modules/react-native-screens/ios/RNSScreen.mm -+++ b/node_modules/react-native-screens/ios/RNSScreen.mm -@@ -107,7 +107,8 @@ - (void)updateBounds - { - #ifdef RCT_NEW_ARCH_ENABLED - if (_state != nullptr) { -- auto newState = react::RNSScreenState{RCTSizeFromCGSize(self.bounds.size)}; -+ CGFloat headerHeight = [_controller calculateHeaderHeightIsModal:self.isPresentedAsNativeModal]; -+ auto newState = react::RNSScreenState{RCTSizeFromCGSize(self.bounds.size), RCTPointFromCGPoint(CGPointMake(0, headerHeight))}; - _state->updateState(std::move(newState)); - UINavigationController *navctr = _controller.navigationController; - [navctr.view setNeedsLayout]; diff --git a/patches/react-native-screens+3.29.0+003+fixIOSHeaderHeight.patch b/patches/react-native-screens+3.29.0+003+fixIOSHeaderHeight.patch deleted file mode 100644 index ae162204a692..000000000000 --- a/patches/react-native-screens+3.29.0+003+fixIOSHeaderHeight.patch +++ /dev/null @@ -1,35 +0,0 @@ -diff --git a/node_modules/react-native-screens/ios/RNSScreen.mm b/node_modules/react-native-screens/ios/RNSScreen.mm -index 8f480ca..4cc5e7b 100644 ---- a/node_modules/react-native-screens/ios/RNSScreen.mm -+++ b/node_modules/react-native-screens/ios/RNSScreen.mm -@@ -108,7 +108,7 @@ - (void)updateBounds - #ifdef RCT_NEW_ARCH_ENABLED - if (_state != nullptr) { - CGFloat headerHeight = [_controller calculateHeaderHeightIsModal:self.isPresentedAsNativeModal]; -- auto newState = react::RNSScreenState{RCTSizeFromCGSize(self.bounds.size), RCTPointFromCGPoint(CGPointMake(0, headerHeight))}; -+ auto newState = react::RNSScreenState{RCTSizeFromCGSize(self.bounds.size), RCTPointFromCGPoint(CGPointMake(0, 0))}; - _state->updateState(std::move(newState)); - UINavigationController *navctr = _controller.navigationController; - [navctr.view setNeedsLayout]; -@@ -1106,17 +1106,11 @@ - (CGFloat)calculateHeaderHeightIsModal:(BOOL)isModal - { - UINavigationController *navctr = [self getVisibleNavigationControllerIsModal:isModal]; - -- // If navigation controller doesn't exists (or it is hidden) we want to handle two possible cases. -- // If there's no navigation controller for the modal, we simply don't want to return header height, as modal possibly -- // does not have header and we don't want to count status bar. If there's no navigation controller for the view we -- // just want to return status bar height (if it's hidden, it will simply return 0). -+ // If there's no navigation controller for the modal (or the navigation bar is hidden), we simply don't want to -+ // return header height, as modal possibly does not have header when navigation controller is nil, -+ // and we don't want to count status bar if navigation bar is hidden (inset could be negative). - if (navctr == nil || navctr.isNavigationBarHidden) { -- if (isModal) { -- return 0; -- } else { -- CGSize statusBarSize = [self getStatusBarHeightIsModal:isModal]; -- return MIN(statusBarSize.width, statusBarSize.height); -- } -+ return 0; - } - - CGFloat navbarHeight = navctr.navigationBar.frame.size.height;