From 7d4f4e46ca4ed8539faae20571e167f11de82891 Mon Sep 17 00:00:00 2001 From: Wojciech Lewicki Date: Thu, 18 Jan 2024 11:09:27 +0100 Subject: [PATCH 1/2] Update HeaderBackButtonClickedEvent.kt --- .../swmansion/rnscreens/events/HeaderBackButtonClickedEvent.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/src/main/java/com/swmansion/rnscreens/events/HeaderBackButtonClickedEvent.kt b/android/src/main/java/com/swmansion/rnscreens/events/HeaderBackButtonClickedEvent.kt index 488a8ad0a8..9a6b12246b 100644 --- a/android/src/main/java/com/swmansion/rnscreens/events/HeaderBackButtonClickedEvent.kt +++ b/android/src/main/java/com/swmansion/rnscreens/events/HeaderBackButtonClickedEvent.kt @@ -13,6 +13,6 @@ class HeaderBackButtonClickedEvent(surfaceId: Int, viewId: Int) : Event Date: Thu, 18 Jan 2024 11:31:49 +0100 Subject: [PATCH 2/2] Update ScreenNativeComponent.ts (#2016) As requested by @tboba --------- Co-authored-by: Tymoteusz Boba --- src/fabric/ScreenNativeComponent.ts | 2 +- src/index.native.tsx | 12 ++++-------- src/native-stack/views/NativeStackView.tsx | 20 ++++++++++++++++---- 3 files changed, 21 insertions(+), 13 deletions(-) diff --git a/src/fabric/ScreenNativeComponent.ts b/src/fabric/ScreenNativeComponent.ts index e7c33807e6..b6f0b71e3e 100644 --- a/src/fabric/ScreenNativeComponent.ts +++ b/src/fabric/ScreenNativeComponent.ts @@ -69,6 +69,7 @@ export interface NativeProps extends ViewProps { onHeaderHeightChange?: BubblingEventHandler; onTransitionProgress?: BubblingEventHandler; onGestureCancel?: BubblingEventHandler; + onHeaderBackButtonClicked?: BubblingEventHandler; sheetAllowedDetents?: WithDefault; sheetLargestUndimmedDetent?: WithDefault; sheetGrabberVisible?: WithDefault; @@ -96,7 +97,6 @@ export interface NativeProps extends ViewProps { navigationBarColor?: ColorValue; navigationBarHidden?: boolean; nativeBackButtonDismissalEnabled?: boolean; - onHeaderBackButtonClicked?: BubblingEventHandler; } export default codegenNativeComponent('RNSScreen', { diff --git a/src/index.native.tsx b/src/index.native.tsx index 16c308caf3..c08bed8e32 100644 --- a/src/index.native.tsx +++ b/src/index.native.tsx @@ -1,11 +1,5 @@ /* eslint-disable @typescript-eslint/no-var-requires */ -import React, { - Fragment, - PropsWithChildren, - ReactNode, - useEffect, - useRef, -} from 'react'; +import React, { PropsWithChildren, ReactNode, useEffect, useRef } from 'react'; import { Animated, Image, @@ -581,7 +575,9 @@ export type { const ScreenContext = React.createContext(InnerScreen); // context to be used when the user wants full screen swipe (see `gesture-handler` folder in repo) -const GHContext = React.createContext(Fragment); +const GHContext = React.createContext( + (props: { children: React.ReactNode }) => <>{props.children} +); class Screen extends React.Component { static contextType = ScreenContext; diff --git a/src/native-stack/views/NativeStackView.tsx b/src/native-stack/views/NativeStackView.tsx index 3a4dc4fced..6d3e82f818 100644 --- a/src/native-stack/views/NativeStackView.tsx +++ b/src/native-stack/views/NativeStackView.tsx @@ -419,7 +419,8 @@ function NativeStackViewInner({ const { key, routes } = state; const currentRouteKey = routes[state.index].key; - const topScreenOptions = descriptors[currentRouteKey].options; + const { goBackGesture, transitionAnimation, screenEdgeGesture } = + descriptors[currentRouteKey].options; const gestureDetectorBridge = React.useRef({ stackUseEffectCallback: _stackRef => { // this method will be override in GestureDetector @@ -432,12 +433,23 @@ function NativeStackViewInner({ const screensRefs = React.useRef({}); const ScreenGestureDetector = React.useContext(GHContext); + React.useEffect(() => { + if ( + ScreenGestureDetector.name !== 'GHWrapper' && + goBackGesture !== undefined + ) { + console.warn( + 'Cannot detect GestureDetectorProvider in a screen that uses `goBackGesture`. Make sure your navigator is wrapped in GestureDetectorProvider.' + ); + } + }, [ScreenGestureDetector.name, goBackGesture]); + return (