@amazon-devices/react-native-screens 3.0.9000000000 → 3.0.9000000003
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/SystemModules/amzn__react-native-screens-3.private.modules.txt +116 -61
- package/kepler-compatibility.json +5 -2
- package/lib/commonjs/TransitionProgressContext.js.map +1 -1
- package/lib/commonjs/components/DebugContainer.js.map +1 -1
- package/lib/commonjs/components/DebugContainer.web.js.map +1 -1
- package/lib/commonjs/components/Screen.web.js.map +1 -1
- package/lib/commonjs/components/ScreenStackHeaderConfig.js.map +1 -1
- package/lib/commonjs/components/ScreenStackHeaderConfig.web.js.map +1 -1
- package/lib/commonjs/components/ScreenStackItem.js.map +1 -1
- package/lib/commonjs/components/SearchBar.js.map +1 -1
- package/lib/commonjs/components/helpers/usePrevious.js.map +1 -1
- package/lib/commonjs/gesture-handler/ScreenGestureDetector.js.map +1 -1
- package/lib/commonjs/index.js +0 -210
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/native-stack/navigators/createNativeStackNavigator.js.map +1 -1
- package/lib/commonjs/native-stack/utils/AnimatedHeaderHeightContext.js.map +1 -1
- package/lib/commonjs/native-stack/utils/HeaderHeightContext.js.map +1 -1
- package/lib/commonjs/native-stack/utils/SafeAreaProviderCompat.js.map +1 -1
- package/lib/commonjs/native-stack/utils/useAnimatedHeaderHeight.js.map +1 -1
- package/lib/commonjs/native-stack/utils/useBackPressSubscription.js.map +1 -1
- package/lib/commonjs/native-stack/utils/useHeaderHeight.js.map +1 -1
- package/lib/commonjs/native-stack/views/HeaderConfig.js.map +1 -1
- package/lib/commonjs/native-stack/views/NativeStackView.js.map +1 -1
- package/lib/commonjs/reanimated/ReanimatedHeaderHeightContext.js.map +1 -1
- package/lib/commonjs/reanimated/ReanimatedNativeStackScreen.js.map +1 -1
- package/lib/commonjs/reanimated/ReanimatedTransitionProgressContext.js.map +1 -1
- package/lib/commonjs/reanimated/useReanimatedHeaderHeight.js.map +1 -1
- package/lib/commonjs/reanimated/useReanimatedTransitionProgress.js.map +1 -1
- package/lib/commonjs/useTransitionProgress.js.map +1 -1
- package/lib/module/components/Screen.web.js.map +1 -1
- package/lib/module/components/ScreenStackHeaderConfig.js.map +1 -1
- package/lib/module/components/ScreenStackHeaderConfig.web.js.map +1 -1
- package/lib/module/components/SearchBar.js.map +1 -1
- package/lib/module/components/helpers/usePrevious.js.map +1 -1
- package/lib/module/native-stack/utils/useBackPressSubscription.js.map +1 -1
- package/lib/module/native-stack/views/HeaderConfig.js.map +1 -1
- package/lib/module/native-stack/views/NativeStackView.js.map +1 -1
- package/lib/typescript/components/Screen.web.d.ts +1 -1
- package/lib/typescript/components/Screen.web.d.ts.map +1 -1
- package/lib/typescript/components/ScreenStackHeaderConfig.d.ts +5 -5
- package/lib/typescript/components/ScreenStackHeaderConfig.d.ts.map +1 -1
- package/lib/typescript/components/ScreenStackHeaderConfig.web.d.ts +6 -6
- package/lib/typescript/components/ScreenStackHeaderConfig.web.d.ts.map +1 -1
- package/lib/typescript/components/SearchBar.d.ts.map +1 -1
- package/lib/typescript/components/helpers/usePrevious.d.ts.map +1 -1
- package/lib/typescript/native-stack/utils/useBackPressSubscription.d.ts.map +1 -1
- package/lib/typescript/native-stack/views/HeaderConfig.d.ts +2 -2
- package/lib/typescript/native-stack/views/HeaderConfig.d.ts.map +1 -1
- package/lib/typescript/native-stack/views/NativeStackView.d.ts.map +1 -1
- package/lib/typescript/types.d.ts +2 -2
- package/lib/typescript/types.d.ts.map +1 -1
- package/oss-attribution/attribution.txt +77 -0
- package/oss-attribution/licenseInfos.json +27 -0
- package/package.json +1 -1
- package/src/index.tsx +0 -55
- package/SystemBundles/31d5b6b69618249f6233b73a1de7c4d890c86be7ccb031ce7cf2dcc41783f9f7.bundle +0 -45301
- package/SystemBundles/31d5b6b69618249f6233b73a1de7c4d890c86be7ccb031ce7cf2dcc41783f9f7.map +0 -13711
- package/lib/commonjs/TransitionProgressContext.js +0 -12
- package/lib/commonjs/components/DebugContainer.js +0 -39
- package/lib/commonjs/components/DebugContainer.web.js +0 -15
- package/lib/commonjs/components/FullWindowOverlay.js +0 -31
- package/lib/commonjs/components/FullWindowOverlay.web.js +0 -9
- package/lib/commonjs/components/Screen.js +0 -286
- package/lib/commonjs/components/Screen.web.js +0 -47
- package/lib/commonjs/components/ScreenContainer.js +0 -32
- package/lib/commonjs/components/ScreenContainer.web.js +0 -10
- package/lib/commonjs/components/ScreenContentWrapper.js +0 -17
- package/lib/commonjs/components/ScreenContentWrapper.web.js +0 -10
- package/lib/commonjs/components/ScreenFooter.js +0 -25
- package/lib/commonjs/components/ScreenFooter.web.js +0 -11
- package/lib/commonjs/components/ScreenStack.js +0 -67
- package/lib/commonjs/components/ScreenStack.web.js +0 -10
- package/lib/commonjs/components/ScreenStackHeaderConfig.js +0 -90
- package/lib/commonjs/components/ScreenStackHeaderConfig.web.js +0 -27
- package/lib/commonjs/components/ScreenStackItem.js +0 -107
- package/lib/commonjs/components/SearchBar.js +0 -63
- package/lib/commonjs/components/SearchBar.web.js +0 -10
- package/lib/commonjs/components/helpers/DelayedFreeze.js +0 -31
- package/lib/commonjs/components/helpers/usePrevious.js +0 -15
- package/lib/commonjs/contexts.js +0 -11
- package/lib/commonjs/core.js +0 -40
- package/lib/commonjs/fabric/FullWindowOverlayNativeComponent.js +0 -26
- package/lib/commonjs/fabric/ModalScreenNativeComponent.js +0 -14
- package/lib/commonjs/fabric/NativeScreensModule.js +0 -10
- package/lib/commonjs/fabric/NativeScreensModule.web.js +0 -8
- package/lib/commonjs/fabric/ScreenContainerNativeComponent.js +0 -30
- package/lib/commonjs/fabric/ScreenContentWrapperNativeComponent.js +0 -18
- package/lib/commonjs/fabric/ScreenFooterNativeComponent.js +0 -10
- package/lib/commonjs/fabric/ScreenNativeComponent.js +0 -70
- package/lib/commonjs/fabric/ScreenNavigationContainerNativeComponent.js +0 -12
- package/lib/commonjs/fabric/ScreenStackHeaderConfigNativeComponent.js +0 -32
- package/lib/commonjs/fabric/ScreenStackHeaderSubviewNativeComponent.js +0 -15
- package/lib/commonjs/fabric/ScreenStackNativeComponent.js +0 -32
- package/lib/commonjs/fabric/SearchBarNativeComponent.js +0 -18
- package/lib/commonjs/gesture-handler/GestureDetectorProvider.js +0 -19
- package/lib/commonjs/gesture-handler/RNScreensTurboModule.js +0 -8
- package/lib/commonjs/gesture-handler/ScreenGestureDetector.js +0 -201
- package/lib/commonjs/gesture-handler/constraints.js +0 -64
- package/lib/commonjs/gesture-handler/defaults.js +0 -45
- package/lib/commonjs/gesture-handler/fabricUtils.js +0 -66
- package/lib/commonjs/gesture-handler/fabricUtils.web.js +0 -17
- package/lib/commonjs/gesture-handler/index.js +0 -14
- package/lib/commonjs/native-stack/contexts/GHContext.js +0 -12
- package/lib/commonjs/native-stack/index.js +0 -49
- package/lib/commonjs/native-stack/navigators/createNativeStackNavigator.js +0 -76
- package/lib/commonjs/native-stack/types.js +0 -6
- package/lib/commonjs/native-stack/utils/AnimatedHeaderHeightContext.js +0 -12
- package/lib/commonjs/native-stack/utils/HeaderHeightContext.js +0 -12
- package/lib/commonjs/native-stack/utils/SafeAreaProviderCompat.js +0 -75
- package/lib/commonjs/native-stack/utils/getDefaultHeaderHeight.js +0 -35
- package/lib/commonjs/native-stack/utils/getStatusBarHeight.js +0 -22
- package/lib/commonjs/native-stack/utils/useAnimatedHeaderHeight.js +0 -19
- package/lib/commonjs/native-stack/utils/useBackPressSubscription.js +0 -52
- package/lib/commonjs/native-stack/utils/useHeaderHeight.js +0 -19
- package/lib/commonjs/native-stack/views/FontProcessor.js +0 -19
- package/lib/commonjs/native-stack/views/FooterComponent.js +0 -17
- package/lib/commonjs/native-stack/views/HeaderConfig.js +0 -149
- package/lib/commonjs/native-stack/views/NativeStackView.js +0 -420
- package/lib/commonjs/reanimated/ReanimatedHeaderHeightContext.js +0 -12
- package/lib/commonjs/reanimated/ReanimatedNativeStackScreen.js +0 -95
- package/lib/commonjs/reanimated/ReanimatedScreen.js +0 -22
- package/lib/commonjs/reanimated/ReanimatedScreenProvider.js +0 -39
- package/lib/commonjs/reanimated/ReanimatedTransitionProgressContext.js +0 -12
- package/lib/commonjs/reanimated/index.js +0 -28
- package/lib/commonjs/reanimated/useReanimatedHeaderHeight.js +0 -19
- package/lib/commonjs/reanimated/useReanimatedTransitionProgress.js +0 -19
- package/lib/commonjs/types.js +0 -6
- package/lib/commonjs/useTransitionProgress.js +0 -19
- package/lib/commonjs/utils.js +0 -43
- package/lib/module/TransitionProgressContext.js +0 -5
- package/lib/module/components/DebugContainer.js +0 -30
- package/lib/module/components/DebugContainer.web.js +0 -6
- package/lib/module/components/FullWindowOverlay.js +0 -24
- package/lib/module/components/FullWindowOverlay.web.js +0 -3
- package/lib/module/components/Screen.js +0 -282
- package/lib/module/components/Screen.web.js +0 -40
- package/lib/module/components/ScreenContainer.js +0 -26
- package/lib/module/components/ScreenContainer.web.js +0 -4
- package/lib/module/components/ScreenContentWrapper.js +0 -10
- package/lib/module/components/ScreenContentWrapper.web.js +0 -4
- package/lib/module/components/ScreenFooter.js +0 -18
- package/lib/module/components/ScreenFooter.web.js +0 -6
- package/lib/module/components/ScreenStack.js +0 -63
- package/lib/module/components/ScreenStack.web.js +0 -4
- package/lib/module/components/ScreenStackHeaderConfig.js +0 -81
- package/lib/module/components/ScreenStackHeaderConfig.web.js +0 -14
- package/lib/module/components/ScreenStackItem.js +0 -98
- package/lib/module/components/SearchBar.js +0 -57
- package/lib/module/components/SearchBar.web.js +0 -4
- package/lib/module/components/helpers/DelayedFreeze.js +0 -24
- package/lib/module/components/helpers/usePrevious.js +0 -9
- package/lib/module/contexts.js +0 -4
- package/lib/module/core.js +0 -31
- package/lib/module/fabric/FullWindowOverlayNativeComponent.js +0 -20
- package/lib/module/fabric/ModalScreenNativeComponent.js +0 -10
- package/lib/module/fabric/NativeScreensModule.js +0 -5
- package/lib/module/fabric/NativeScreensModule.web.js +0 -2
- package/lib/module/fabric/ScreenContainerNativeComponent.js +0 -24
- package/lib/module/fabric/ScreenContentWrapperNativeComponent.js +0 -10
- package/lib/module/fabric/ScreenFooterNativeComponent.js +0 -3
- package/lib/module/fabric/ScreenNativeComponent.js +0 -66
- package/lib/module/fabric/ScreenNavigationContainerNativeComponent.js +0 -6
- package/lib/module/fabric/ScreenStackHeaderConfigNativeComponent.js +0 -29
- package/lib/module/fabric/ScreenStackHeaderSubviewNativeComponent.js +0 -11
- package/lib/module/fabric/ScreenStackNativeComponent.js +0 -28
- package/lib/module/fabric/SearchBarNativeComponent.js +0 -12
- package/lib/module/gesture-handler/GestureDetectorProvider.js +0 -12
- package/lib/module/gesture-handler/RNScreensTurboModule.js +0 -2
- package/lib/module/gesture-handler/ScreenGestureDetector.js +0 -193
- package/lib/module/gesture-handler/constraints.js +0 -56
- package/lib/module/gesture-handler/defaults.js +0 -39
- package/lib/module/gesture-handler/fabricUtils.js +0 -61
- package/lib/module/gesture-handler/fabricUtils.web.js +0 -10
- package/lib/module/gesture-handler/index.js +0 -5
- package/lib/module/index.js +0 -33
- package/lib/module/native-stack/contexts/GHContext.js +0 -6
- package/lib/module/native-stack/index.js +0 -22
- package/lib/module/native-stack/navigators/createNativeStackNavigator.js +0 -73
- package/lib/module/native-stack/types.js +0 -2
- package/lib/module/native-stack/utils/AnimatedHeaderHeightContext.js +0 -4
- package/lib/module/native-stack/utils/HeaderHeightContext.js +0 -4
- package/lib/module/native-stack/utils/SafeAreaProviderCompat.js +0 -68
- package/lib/module/native-stack/utils/getDefaultHeaderHeight.js +0 -29
- package/lib/module/native-stack/utils/getStatusBarHeight.js +0 -16
- package/lib/module/native-stack/utils/useAnimatedHeaderHeight.js +0 -10
- package/lib/module/native-stack/utils/useBackPressSubscription.js +0 -45
- package/lib/module/native-stack/utils/useHeaderHeight.js +0 -10
- package/lib/module/native-stack/views/FontProcessor.js +0 -12
- package/lib/module/native-stack/views/FooterComponent.js +0 -10
- package/lib/module/native-stack/views/HeaderConfig.js +0 -139
- package/lib/module/native-stack/views/NativeStackView.js +0 -423
- package/lib/module/reanimated/ReanimatedHeaderHeightContext.js +0 -5
- package/lib/module/reanimated/ReanimatedNativeStackScreen.js +0 -93
- package/lib/module/reanimated/ReanimatedScreen.js +0 -16
- package/lib/module/reanimated/ReanimatedScreenProvider.js +0 -32
- package/lib/module/reanimated/ReanimatedTransitionProgressContext.js +0 -5
- package/lib/module/reanimated/index.js +0 -4
- package/lib/module/reanimated/useReanimatedHeaderHeight.js +0 -10
- package/lib/module/reanimated/useReanimatedTransitionProgress.js +0 -10
- package/lib/module/types.js +0 -2
- package/lib/module/useTransitionProgress.js +0 -10
- package/lib/module/utils.js +0 -35
- package/src/TransitionProgressContext.tsx +0 -14
- package/src/components/DebugContainer.tsx +0 -46
- package/src/components/DebugContainer.web.tsx +0 -7
- package/src/components/FullWindowOverlay.tsx +0 -33
- package/src/components/FullWindowOverlay.web.tsx +0 -6
- package/src/components/Screen.tsx +0 -392
- package/src/components/Screen.web.tsx +0 -46
- package/src/components/ScreenContainer.tsx +0 -28
- package/src/components/ScreenContainer.web.tsx +0 -5
- package/src/components/ScreenContentWrapper.tsx +0 -9
- package/src/components/ScreenContentWrapper.web.tsx +0 -5
- package/src/components/ScreenFooter.tsx +0 -20
- package/src/components/ScreenFooter.web.tsx +0 -7
- package/src/components/ScreenStack.tsx +0 -112
- package/src/components/ScreenStack.web.tsx +0 -5
- package/src/components/ScreenStackHeaderConfig.tsx +0 -122
- package/src/components/ScreenStackHeaderConfig.web.tsx +0 -39
- package/src/components/ScreenStackItem.tsx +0 -174
- package/src/components/SearchBar.tsx +0 -102
- package/src/components/SearchBar.web.tsx +0 -5
- package/src/components/helpers/DelayedFreeze.tsx +0 -27
- package/src/components/helpers/usePrevious.tsx +0 -11
- package/src/contexts.tsx +0 -9
- package/src/core.ts +0 -45
- package/src/fabric/FullWindowOverlayNativeComponent.ts +0 -23
- package/src/fabric/ModalScreenNativeComponent.ts +0 -115
- package/src/fabric/NativeScreensModule.ts +0 -8
- package/src/fabric/NativeScreensModule.web.ts +0 -1
- package/src/fabric/ScreenContainerNativeComponent.ts +0 -28
- package/src/fabric/ScreenContentWrapperNativeComponent.ts +0 -14
- package/src/fabric/ScreenFooterNativeComponent.ts +0 -6
- package/src/fabric/ScreenNativeComponent.ts +0 -171
- package/src/fabric/ScreenNavigationContainerNativeComponent.ts +0 -12
- package/src/fabric/ScreenStackHeaderConfigNativeComponent.ts +0 -97
- package/src/fabric/ScreenStackHeaderSubviewNativeComponent.ts +0 -26
- package/src/fabric/ScreenStackNativeComponent.ts +0 -34
- package/src/fabric/SearchBarNativeComponent.ts +0 -83
- package/src/gesture-handler/GestureDetectorProvider.tsx +0 -16
- package/src/gesture-handler/RNScreensTurboModule.ts +0 -13
- package/src/gesture-handler/ScreenGestureDetector.tsx +0 -241
- package/src/gesture-handler/constraints.ts +0 -87
- package/src/gesture-handler/defaults.ts +0 -46
- package/src/gesture-handler/fabricUtils.ts +0 -86
- package/src/gesture-handler/fabricUtils.web.ts +0 -10
- package/src/gesture-handler/index.tsx +0 -4
- package/src/native-stack/contexts/GHContext.tsx +0 -9
- package/src/native-stack/index.tsx +0 -27
- package/src/native-stack/navigators/createNativeStackNavigator.tsx +0 -110
- package/src/native-stack/types.tsx +0 -659
- package/src/native-stack/utils/AnimatedHeaderHeightContext.tsx +0 -8
- package/src/native-stack/utils/HeaderHeightContext.tsx +0 -5
- package/src/native-stack/utils/SafeAreaProviderCompat.tsx +0 -78
- package/src/native-stack/utils/getDefaultHeaderHeight.tsx +0 -41
- package/src/native-stack/utils/getStatusBarHeight.tsx +0 -22
- package/src/native-stack/utils/useAnimatedHeaderHeight.tsx +0 -15
- package/src/native-stack/utils/useBackPressSubscription.tsx +0 -66
- package/src/native-stack/utils/useHeaderHeight.tsx +0 -15
- package/src/native-stack/views/FontProcessor.tsx +0 -14
- package/src/native-stack/views/FooterComponent.tsx +0 -10
- package/src/native-stack/views/HeaderConfig.tsx +0 -202
- package/src/native-stack/views/NativeStackView.tsx +0 -550
- package/src/reanimated/ReanimatedHeaderHeightContext.tsx +0 -7
- package/src/reanimated/ReanimatedNativeStackScreen.tsx +0 -132
- package/src/reanimated/ReanimatedScreen.tsx +0 -26
- package/src/reanimated/ReanimatedScreenProvider.tsx +0 -43
- package/src/reanimated/ReanimatedTransitionProgressContext.tsx +0 -13
- package/src/reanimated/index.tsx +0 -3
- package/src/reanimated/useReanimatedHeaderHeight.tsx +0 -14
- package/src/reanimated/useReanimatedTransitionProgress.tsx +0 -14
- package/src/types.tsx +0 -869
- package/src/useTransitionProgress.tsx +0 -15
- package/src/utils.ts +0 -40
|
@@ -1,392 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import React from 'react';
|
|
4
|
-
import { Animated, View, Platform } from 'react-native';
|
|
5
|
-
|
|
6
|
-
import TransitionProgressContext from '../TransitionProgressContext';
|
|
7
|
-
import DelayedFreeze from './helpers/DelayedFreeze';
|
|
8
|
-
import { ScreenProps } from '../types';
|
|
9
|
-
|
|
10
|
-
import {
|
|
11
|
-
freezeEnabled,
|
|
12
|
-
isNativePlatformSupported,
|
|
13
|
-
screensEnabled,
|
|
14
|
-
} from '../core';
|
|
15
|
-
|
|
16
|
-
// Native components
|
|
17
|
-
import ScreenNativeComponent, {
|
|
18
|
-
NativeProps as ScreenNativeComponentProps,
|
|
19
|
-
} from '../fabric/ScreenNativeComponent';
|
|
20
|
-
import ModalScreenNativeComponent, {
|
|
21
|
-
NativeProps as ModalScreenNativeComponentProps,
|
|
22
|
-
} from '../fabric/ModalScreenNativeComponent';
|
|
23
|
-
import { usePrevious } from './helpers/usePrevious';
|
|
24
|
-
|
|
25
|
-
type NativeProps = ScreenNativeComponentProps | ModalScreenNativeComponentProps;
|
|
26
|
-
const AnimatedNativeScreen = Animated.createAnimatedComponent(
|
|
27
|
-
ScreenNativeComponent,
|
|
28
|
-
);
|
|
29
|
-
const AnimatedNativeModalScreen = Animated.createAnimatedComponent(
|
|
30
|
-
ModalScreenNativeComponent,
|
|
31
|
-
);
|
|
32
|
-
|
|
33
|
-
// Incomplete type, all accessible properties available at:
|
|
34
|
-
// react-native/Libraries/Components/View/ReactNativeViewViewConfig.js
|
|
35
|
-
interface ViewConfig extends View {
|
|
36
|
-
viewConfig: {
|
|
37
|
-
validAttributes: {
|
|
38
|
-
style: {
|
|
39
|
-
display: boolean;
|
|
40
|
-
};
|
|
41
|
-
};
|
|
42
|
-
};
|
|
43
|
-
_viewConfig: {
|
|
44
|
-
validAttributes: {
|
|
45
|
-
style: {
|
|
46
|
-
display: boolean;
|
|
47
|
-
};
|
|
48
|
-
};
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
// This value must be kept in sync with native side.
|
|
53
|
-
const SHEET_FIT_TO_CONTENTS = [-1];
|
|
54
|
-
const SHEET_COMPAT_LARGE = [1.0];
|
|
55
|
-
const SHEET_COMPAT_MEDIUM = [0.5];
|
|
56
|
-
const SHEET_COMPAT_ALL = [0.5, 1.0];
|
|
57
|
-
|
|
58
|
-
const SHEET_DIMMED_ALWAYS = -1;
|
|
59
|
-
// const SHEET_DIMMED_NEVER = 9999;
|
|
60
|
-
|
|
61
|
-
function assertDetentsArrayIsSorted(array: number[]) {
|
|
62
|
-
for (let i = 1; i < array.length; i++) {
|
|
63
|
-
if (array[i - 1] > array[i]) {
|
|
64
|
-
throw new Error(
|
|
65
|
-
'[RNScreens] The detent array is not sorted in ascending order!',
|
|
66
|
-
);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
// These exist to transform old 'legacy' values used by the formsheet API to the new API shape.
|
|
72
|
-
// We can get rid of it, once we get rid of support for legacy values: 'large', 'medium', 'all'.
|
|
73
|
-
function resolveSheetAllowedDetents(
|
|
74
|
-
allowedDetentsCompat: ScreenProps['sheetAllowedDetents'],
|
|
75
|
-
): number[] {
|
|
76
|
-
if (Array.isArray(allowedDetentsCompat)) {
|
|
77
|
-
if (Platform.OS === 'android' && allowedDetentsCompat.length > 3) {
|
|
78
|
-
if (__DEV__) {
|
|
79
|
-
console.warn(
|
|
80
|
-
'[RNScreens] Sheets API on Android do accept only up to 3 values. Any surplus value are ignored.',
|
|
81
|
-
);
|
|
82
|
-
}
|
|
83
|
-
allowedDetentsCompat = allowedDetentsCompat.slice(0, 3);
|
|
84
|
-
}
|
|
85
|
-
if (__DEV__) {
|
|
86
|
-
assertDetentsArrayIsSorted(allowedDetentsCompat);
|
|
87
|
-
}
|
|
88
|
-
return allowedDetentsCompat;
|
|
89
|
-
} else if (allowedDetentsCompat === 'fitToContents') {
|
|
90
|
-
return SHEET_FIT_TO_CONTENTS;
|
|
91
|
-
} else if (allowedDetentsCompat === 'large') {
|
|
92
|
-
return SHEET_COMPAT_LARGE;
|
|
93
|
-
} else if (allowedDetentsCompat === 'medium') {
|
|
94
|
-
return SHEET_COMPAT_MEDIUM;
|
|
95
|
-
} else if (allowedDetentsCompat === 'all') {
|
|
96
|
-
return SHEET_COMPAT_ALL;
|
|
97
|
-
} else {
|
|
98
|
-
// Safe default, only large detent is allowed.
|
|
99
|
-
return [1.0];
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
function resolveSheetLargestUndimmedDetent(
|
|
104
|
-
lud: ScreenProps['sheetLargestUndimmedDetentIndex'],
|
|
105
|
-
lastDetentIndex: number,
|
|
106
|
-
): number {
|
|
107
|
-
if (typeof lud === 'number') {
|
|
108
|
-
if (!isIndexInClosedRange(lud, SHEET_DIMMED_ALWAYS, lastDetentIndex)) {
|
|
109
|
-
if (__DEV__) {
|
|
110
|
-
throw new Error(
|
|
111
|
-
"[RNScreens] Provided value of 'sheetLargestUndimmedDetentIndex' prop is out of bounds of 'sheetAllowedDetents' array.",
|
|
112
|
-
);
|
|
113
|
-
}
|
|
114
|
-
// Return default in production
|
|
115
|
-
return SHEET_DIMMED_ALWAYS;
|
|
116
|
-
}
|
|
117
|
-
return lud;
|
|
118
|
-
} else if (lud === 'last') {
|
|
119
|
-
return lastDetentIndex;
|
|
120
|
-
} else if (lud === 'none' || lud === 'all') {
|
|
121
|
-
return SHEET_DIMMED_ALWAYS;
|
|
122
|
-
} else if (lud === 'large') {
|
|
123
|
-
return 1;
|
|
124
|
-
} else if (lud === 'medium') {
|
|
125
|
-
return 0;
|
|
126
|
-
} else {
|
|
127
|
-
// Safe default, every detent is dimmed
|
|
128
|
-
return SHEET_DIMMED_ALWAYS;
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
function resolveSheetInitialDetentIndex(
|
|
133
|
-
index: ScreenProps['sheetInitialDetentIndex'],
|
|
134
|
-
lastDetentIndex: number,
|
|
135
|
-
): number {
|
|
136
|
-
if (index === 'last') {
|
|
137
|
-
index = lastDetentIndex;
|
|
138
|
-
} else if (index == null) {
|
|
139
|
-
// Intentional check for undefined & null ^
|
|
140
|
-
index = 0;
|
|
141
|
-
}
|
|
142
|
-
if (!isIndexInClosedRange(index, 0, lastDetentIndex)) {
|
|
143
|
-
if (__DEV__) {
|
|
144
|
-
throw new Error(
|
|
145
|
-
"[RNScreens] Provided value of 'sheetInitialDetentIndex' prop is out of bounds of 'sheetAllowedDetents' array.",
|
|
146
|
-
);
|
|
147
|
-
}
|
|
148
|
-
// Return default in production
|
|
149
|
-
return 0;
|
|
150
|
-
}
|
|
151
|
-
return index;
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
function isIndexInClosedRange(
|
|
155
|
-
value: number,
|
|
156
|
-
lowerBound: number,
|
|
157
|
-
upperBound: number,
|
|
158
|
-
): boolean {
|
|
159
|
-
return Number.isInteger(value) && value >= lowerBound && value <= upperBound;
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
export const InnerScreen = React.forwardRef<View, ScreenProps>(
|
|
163
|
-
function InnerScreen(props, ref) {
|
|
164
|
-
const innerRef = React.useRef<ViewConfig | null>(null);
|
|
165
|
-
React.useImperativeHandle(ref, () => innerRef.current!, []);
|
|
166
|
-
const prevActivityState = usePrevious(props.activityState);
|
|
167
|
-
|
|
168
|
-
const setRef = (ref: ViewConfig) => {
|
|
169
|
-
innerRef.current = ref;
|
|
170
|
-
props.onComponentRef?.(ref);
|
|
171
|
-
};
|
|
172
|
-
|
|
173
|
-
const closing = React.useRef(new Animated.Value(0)).current;
|
|
174
|
-
const progress = React.useRef(new Animated.Value(0)).current;
|
|
175
|
-
const goingForward = React.useRef(new Animated.Value(0)).current;
|
|
176
|
-
|
|
177
|
-
const {
|
|
178
|
-
enabled = screensEnabled(),
|
|
179
|
-
freezeOnBlur = freezeEnabled(),
|
|
180
|
-
shouldFreeze,
|
|
181
|
-
...rest
|
|
182
|
-
} = props;
|
|
183
|
-
|
|
184
|
-
// To maintain default behavior of formSheet stack presentation style and to have reasonable
|
|
185
|
-
// defaults for new medium-detent iOS API we need to set defaults here
|
|
186
|
-
const {
|
|
187
|
-
// formSheet presentation related props
|
|
188
|
-
sheetAllowedDetents = [1.0],
|
|
189
|
-
sheetLargestUndimmedDetentIndex = SHEET_DIMMED_ALWAYS,
|
|
190
|
-
sheetGrabberVisible = false,
|
|
191
|
-
sheetCornerRadius = -1.0,
|
|
192
|
-
sheetExpandsWhenScrolledToEdge = true,
|
|
193
|
-
sheetElevation = 24,
|
|
194
|
-
sheetInitialDetentIndex = 0,
|
|
195
|
-
// Other
|
|
196
|
-
stackPresentation,
|
|
197
|
-
// Events for override
|
|
198
|
-
onAppear,
|
|
199
|
-
onDisappear,
|
|
200
|
-
onWillAppear,
|
|
201
|
-
onWillDisappear,
|
|
202
|
-
} = rest;
|
|
203
|
-
|
|
204
|
-
if (enabled && isNativePlatformSupported) {
|
|
205
|
-
const resolvedSheetAllowedDetents =
|
|
206
|
-
resolveSheetAllowedDetents(sheetAllowedDetents);
|
|
207
|
-
const resolvedSheetLargestUndimmedDetent =
|
|
208
|
-
resolveSheetLargestUndimmedDetent(
|
|
209
|
-
sheetLargestUndimmedDetentIndex,
|
|
210
|
-
resolvedSheetAllowedDetents.length - 1,
|
|
211
|
-
);
|
|
212
|
-
const resolvedSheetInitialDetentIndex = resolveSheetInitialDetentIndex(
|
|
213
|
-
sheetInitialDetentIndex,
|
|
214
|
-
resolvedSheetAllowedDetents.length - 1,
|
|
215
|
-
);
|
|
216
|
-
// Due to how Yoga resolves layout, we need to have different components for modal nad non-modal screens
|
|
217
|
-
const AnimatedScreen =
|
|
218
|
-
Platform.OS === 'android' ||
|
|
219
|
-
// amznmod_react - disable NativeModalScreen on kepler because native component is not implemented yet
|
|
220
|
-
// @ts-ignore
|
|
221
|
-
Platform.OS === 'kepler' ||
|
|
222
|
-
stackPresentation === undefined ||
|
|
223
|
-
stackPresentation === 'push' ||
|
|
224
|
-
stackPresentation === 'containedModal' ||
|
|
225
|
-
stackPresentation === 'containedTransparentModal'
|
|
226
|
-
? AnimatedNativeScreen
|
|
227
|
-
: AnimatedNativeModalScreen;
|
|
228
|
-
|
|
229
|
-
let {
|
|
230
|
-
// Filter out active prop in this case because it is unused and
|
|
231
|
-
// can cause problems depending on react-native version:
|
|
232
|
-
// https://github.com/react-navigation/react-navigation/issues/4886
|
|
233
|
-
active,
|
|
234
|
-
activityState,
|
|
235
|
-
children,
|
|
236
|
-
isNativeStack,
|
|
237
|
-
gestureResponseDistance,
|
|
238
|
-
onGestureCancel,
|
|
239
|
-
style,
|
|
240
|
-
...props
|
|
241
|
-
} = rest;
|
|
242
|
-
|
|
243
|
-
if (active !== undefined && activityState === undefined) {
|
|
244
|
-
console.warn(
|
|
245
|
-
'It appears that you are using old version of react-navigation library. Please update @react-navigation/bottom-tabs, @react-navigation/stack and @react-navigation/drawer to version 5.10.0 or above to take full advantage of new functionality added to react-native-screens',
|
|
246
|
-
);
|
|
247
|
-
activityState = active !== 0 ? 2 : 0; // in the new version, we need one of the screens to have value of 2 after the transition
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
if (
|
|
251
|
-
isNativeStack &&
|
|
252
|
-
prevActivityState !== undefined &&
|
|
253
|
-
activityState !== undefined
|
|
254
|
-
) {
|
|
255
|
-
if (prevActivityState > activityState) {
|
|
256
|
-
throw new Error(
|
|
257
|
-
'[RNScreens] activityState cannot be decreased in NativeStack',
|
|
258
|
-
);
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
const handleRef = (ref: ViewConfig) => {
|
|
263
|
-
if (ref?.viewConfig?.validAttributes?.style) {
|
|
264
|
-
ref.viewConfig.validAttributes.style = {
|
|
265
|
-
...ref.viewConfig.validAttributes.style,
|
|
266
|
-
display: false,
|
|
267
|
-
};
|
|
268
|
-
setRef(ref);
|
|
269
|
-
} else if (ref?._viewConfig?.validAttributes?.style) {
|
|
270
|
-
ref._viewConfig.validAttributes.style = {
|
|
271
|
-
...ref._viewConfig.validAttributes.style,
|
|
272
|
-
display: false,
|
|
273
|
-
};
|
|
274
|
-
setRef(ref);
|
|
275
|
-
}
|
|
276
|
-
};
|
|
277
|
-
|
|
278
|
-
const freeze =
|
|
279
|
-
freezeOnBlur &&
|
|
280
|
-
(shouldFreeze !== undefined ? shouldFreeze : activityState === 0);
|
|
281
|
-
|
|
282
|
-
return (
|
|
283
|
-
<DelayedFreeze freeze={freeze}>
|
|
284
|
-
<AnimatedScreen
|
|
285
|
-
{...props}
|
|
286
|
-
/**
|
|
287
|
-
* This messy override is to conform NativeProps used by codegen and
|
|
288
|
-
* our Public API. To see reasoning go to this PR:
|
|
289
|
-
* https://github.com/software-mansion/react-native-screens/pull/2423#discussion_r1810616995
|
|
290
|
-
*/
|
|
291
|
-
onAppear={onAppear as NativeProps['onAppear']}
|
|
292
|
-
onDisappear={onDisappear as NativeProps['onDisappear']}
|
|
293
|
-
onWillAppear={onWillAppear as NativeProps['onWillAppear']}
|
|
294
|
-
onWillDisappear={onWillDisappear as NativeProps['onWillDisappear']}
|
|
295
|
-
onGestureCancel={
|
|
296
|
-
(onGestureCancel as NativeProps['onGestureCancel']) ??
|
|
297
|
-
(() => {
|
|
298
|
-
// for internal use
|
|
299
|
-
})
|
|
300
|
-
}
|
|
301
|
-
//
|
|
302
|
-
// Hierarchy of screens is handled on the native side and setting zIndex value causes this issue:
|
|
303
|
-
// https://github.com/software-mansion/react-native-screens/issues/2345
|
|
304
|
-
// With below change of zIndex, we force RN diffing mechanism to NOT include detaching and attaching mutation in one transaction.
|
|
305
|
-
// Detailed information can be found here https://github.com/software-mansion/react-native-screens/pull/2351
|
|
306
|
-
style={[style, { zIndex: undefined }]}
|
|
307
|
-
activityState={activityState}
|
|
308
|
-
sheetAllowedDetents={resolvedSheetAllowedDetents}
|
|
309
|
-
sheetLargestUndimmedDetent={resolvedSheetLargestUndimmedDetent}
|
|
310
|
-
sheetElevation={sheetElevation}
|
|
311
|
-
sheetGrabberVisible={sheetGrabberVisible}
|
|
312
|
-
sheetCornerRadius={sheetCornerRadius}
|
|
313
|
-
sheetExpandsWhenScrolledToEdge={sheetExpandsWhenScrolledToEdge}
|
|
314
|
-
sheetInitialDetent={resolvedSheetInitialDetentIndex}
|
|
315
|
-
gestureResponseDistance={{
|
|
316
|
-
start: gestureResponseDistance?.start ?? -1,
|
|
317
|
-
end: gestureResponseDistance?.end ?? -1,
|
|
318
|
-
top: gestureResponseDistance?.top ?? -1,
|
|
319
|
-
bottom: gestureResponseDistance?.bottom ?? -1,
|
|
320
|
-
}}
|
|
321
|
-
// This prevents showing blank screen when navigating between multiple screens with freezing
|
|
322
|
-
// https://github.com/software-mansion/react-native-screens/pull/1208
|
|
323
|
-
ref={handleRef}
|
|
324
|
-
onTransitionProgress={
|
|
325
|
-
!isNativeStack
|
|
326
|
-
? undefined
|
|
327
|
-
: Animated.event(
|
|
328
|
-
[
|
|
329
|
-
{
|
|
330
|
-
nativeEvent: {
|
|
331
|
-
progress,
|
|
332
|
-
closing,
|
|
333
|
-
goingForward,
|
|
334
|
-
},
|
|
335
|
-
},
|
|
336
|
-
],
|
|
337
|
-
{ useNativeDriver: true },
|
|
338
|
-
)
|
|
339
|
-
}>
|
|
340
|
-
{!isNativeStack ? ( // see comment of this prop in types.tsx for information why it is needed
|
|
341
|
-
children
|
|
342
|
-
) : (
|
|
343
|
-
<TransitionProgressContext.Provider
|
|
344
|
-
value={{
|
|
345
|
-
progress,
|
|
346
|
-
closing,
|
|
347
|
-
goingForward,
|
|
348
|
-
}}>
|
|
349
|
-
{children}
|
|
350
|
-
</TransitionProgressContext.Provider>
|
|
351
|
-
)}
|
|
352
|
-
</AnimatedScreen>
|
|
353
|
-
</DelayedFreeze>
|
|
354
|
-
);
|
|
355
|
-
} else {
|
|
356
|
-
// same reason as above
|
|
357
|
-
let {
|
|
358
|
-
active,
|
|
359
|
-
activityState,
|
|
360
|
-
style,
|
|
361
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
362
|
-
onComponentRef,
|
|
363
|
-
...props
|
|
364
|
-
} = rest;
|
|
365
|
-
|
|
366
|
-
if (active !== undefined && activityState === undefined) {
|
|
367
|
-
activityState = active !== 0 ? 2 : 0;
|
|
368
|
-
}
|
|
369
|
-
return (
|
|
370
|
-
<Animated.View
|
|
371
|
-
style={[style, { display: activityState !== 0 ? 'flex' : 'none' }]}
|
|
372
|
-
ref={setRef}
|
|
373
|
-
{...props}
|
|
374
|
-
/>
|
|
375
|
-
);
|
|
376
|
-
}
|
|
377
|
-
},
|
|
378
|
-
);
|
|
379
|
-
|
|
380
|
-
// context to be used when the user wants to use enhanced implementation
|
|
381
|
-
// e.g. to use `useReanimatedTransitionProgress` (see `reanimated` folder in repo)
|
|
382
|
-
export const ScreenContext = React.createContext(InnerScreen);
|
|
383
|
-
|
|
384
|
-
const Screen = React.forwardRef<View, ScreenProps>((props, ref) => {
|
|
385
|
-
const ScreenWrapper = React.useContext(ScreenContext) || InnerScreen;
|
|
386
|
-
|
|
387
|
-
return <ScreenWrapper {...props} ref={ref} />;
|
|
388
|
-
});
|
|
389
|
-
|
|
390
|
-
Screen.displayName = 'Screen';
|
|
391
|
-
|
|
392
|
-
export default Screen;
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import { ScreenProps } from '../types';
|
|
4
|
-
import { Animated, View } from 'react-native';
|
|
5
|
-
import React from 'react';
|
|
6
|
-
|
|
7
|
-
import { screensEnabled } from '../core';
|
|
8
|
-
|
|
9
|
-
export const InnerScreen = View;
|
|
10
|
-
|
|
11
|
-
// We're using class component here because of the error from reanimated:
|
|
12
|
-
// createAnimatedComponent` does not support stateless functional components; use a class component instead.
|
|
13
|
-
// NOTE: React Server Components do not support class components.
|
|
14
|
-
export class NativeScreen extends React.Component<ScreenProps> {
|
|
15
|
-
render(): JSX.Element {
|
|
16
|
-
let {
|
|
17
|
-
active,
|
|
18
|
-
activityState,
|
|
19
|
-
style,
|
|
20
|
-
enabled = screensEnabled(),
|
|
21
|
-
...rest
|
|
22
|
-
} = this.props;
|
|
23
|
-
|
|
24
|
-
if (enabled) {
|
|
25
|
-
if (active !== undefined && activityState === undefined) {
|
|
26
|
-
activityState = active !== 0 ? 2 : 0; // change taken from index.native.tsx
|
|
27
|
-
}
|
|
28
|
-
return (
|
|
29
|
-
<View
|
|
30
|
-
// @ts-expect-error: hidden exists on web, but not in React Native
|
|
31
|
-
hidden={activityState === 0}
|
|
32
|
-
style={[style, { display: activityState !== 0 ? 'flex' : 'none' }]}
|
|
33
|
-
{...rest}
|
|
34
|
-
/>
|
|
35
|
-
);
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
return <View {...rest} />;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
const Screen = Animated.createAnimatedComponent(NativeScreen);
|
|
43
|
-
|
|
44
|
-
export const ScreenContext = React.createContext(Screen);
|
|
45
|
-
|
|
46
|
-
export default Screen;
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import { Platform, View } from 'react-native';
|
|
4
|
-
import React from 'react';
|
|
5
|
-
import { ScreenContainerProps } from '../types';
|
|
6
|
-
import { isNativePlatformSupported, screensEnabled } from '../core';
|
|
7
|
-
|
|
8
|
-
// Native components
|
|
9
|
-
import ScreenContainerNativeComponent from '../fabric/ScreenContainerNativeComponent';
|
|
10
|
-
import ScreenNavigationContainerNativeComponent from '../fabric/ScreenNavigationContainerNativeComponent';
|
|
11
|
-
|
|
12
|
-
function ScreenContainer(props: ScreenContainerProps) {
|
|
13
|
-
const { enabled = screensEnabled(), hasTwoStates, ...rest } = props;
|
|
14
|
-
|
|
15
|
-
if (enabled && isNativePlatformSupported) {
|
|
16
|
-
if (hasTwoStates) {
|
|
17
|
-
const ScreenNavigationContainer =
|
|
18
|
-
Platform.OS === 'ios'
|
|
19
|
-
? ScreenNavigationContainerNativeComponent
|
|
20
|
-
: ScreenContainerNativeComponent;
|
|
21
|
-
return <ScreenNavigationContainer {...rest} />;
|
|
22
|
-
}
|
|
23
|
-
return <ScreenContainerNativeComponent {...rest} />;
|
|
24
|
-
}
|
|
25
|
-
return <View {...rest} />;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export default ScreenContainer;
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { ViewProps } from 'react-native';
|
|
3
|
-
import ScreenContentWrapperNativeComponent from '../fabric/ScreenContentWrapperNativeComponent';
|
|
4
|
-
|
|
5
|
-
function ScreenContentWrapper(props: ViewProps) {
|
|
6
|
-
return <ScreenContentWrapperNativeComponent collapsable={false} {...props} />;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export default ScreenContentWrapper;
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { ViewProps } from 'react-native';
|
|
3
|
-
import ScreenFooterNativeComponent from '../fabric/ScreenFooterNativeComponent';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Unstable API
|
|
7
|
-
*/
|
|
8
|
-
function ScreenFooter(props: ViewProps) {
|
|
9
|
-
return <ScreenFooterNativeComponent {...props} />;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
type FooterProps = {
|
|
13
|
-
children?: React.ReactNode;
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
export function FooterComponent({ children }: FooterProps) {
|
|
17
|
-
return <ScreenFooter collapsable={false}>{children}</ScreenFooter>;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export default ScreenFooter;
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import React, { PropsWithChildren } from 'react';
|
|
4
|
-
import {
|
|
5
|
-
GestureDetectorBridge,
|
|
6
|
-
ScreensRefsHolder,
|
|
7
|
-
GestureProviderProps,
|
|
8
|
-
GoBackGesture,
|
|
9
|
-
ScreenStackProps,
|
|
10
|
-
} from '../types';
|
|
11
|
-
import { GHContext, RNSScreensRefContext } from '../contexts';
|
|
12
|
-
import warnOnce from 'warn-once';
|
|
13
|
-
|
|
14
|
-
// Native components
|
|
15
|
-
import ScreenStackNativeComponent, {
|
|
16
|
-
NativeProps,
|
|
17
|
-
} from '../fabric/ScreenStackNativeComponent';
|
|
18
|
-
|
|
19
|
-
const assertGHProvider = (
|
|
20
|
-
ScreenGestureDetector: (
|
|
21
|
-
props: PropsWithChildren<GestureProviderProps>,
|
|
22
|
-
) => React.JSX.Element,
|
|
23
|
-
goBackGesture: GoBackGesture | undefined,
|
|
24
|
-
) => {
|
|
25
|
-
const isGestureDetectorProviderNotDetected =
|
|
26
|
-
ScreenGestureDetector.name !== 'GHWrapper' && goBackGesture !== undefined;
|
|
27
|
-
|
|
28
|
-
warnOnce(
|
|
29
|
-
isGestureDetectorProviderNotDetected,
|
|
30
|
-
'Cannot detect GestureDetectorProvider in a screen that uses `goBackGesture`. Make sure your navigator is wrapped in GestureDetectorProvider.',
|
|
31
|
-
);
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
const assertCustomScreenTransitionsProps = (
|
|
35
|
-
screensRefs: ScreenStackProps['screensRefs'],
|
|
36
|
-
currentScreenId: ScreenStackProps['currentScreenId'],
|
|
37
|
-
goBackGesture: ScreenStackProps['goBackGesture'],
|
|
38
|
-
) => {
|
|
39
|
-
const isGestureDetectorNotConfiguredProperly =
|
|
40
|
-
goBackGesture !== undefined &&
|
|
41
|
-
screensRefs === null &&
|
|
42
|
-
currentScreenId === undefined;
|
|
43
|
-
|
|
44
|
-
warnOnce(
|
|
45
|
-
isGestureDetectorNotConfiguredProperly,
|
|
46
|
-
'Custom Screen Transition require screensRefs and currentScreenId to be provided.',
|
|
47
|
-
);
|
|
48
|
-
};
|
|
49
|
-
|
|
50
|
-
function ScreenStack(props: ScreenStackProps) {
|
|
51
|
-
const {
|
|
52
|
-
goBackGesture,
|
|
53
|
-
screensRefs: passedScreenRefs, // TODO: For compatibility with v5, remove once v5 is removed
|
|
54
|
-
currentScreenId,
|
|
55
|
-
transitionAnimation,
|
|
56
|
-
screenEdgeGesture,
|
|
57
|
-
onFinishTransitioning,
|
|
58
|
-
children,
|
|
59
|
-
...rest
|
|
60
|
-
} = props;
|
|
61
|
-
|
|
62
|
-
const screensRefs = React.useRef<ScreensRefsHolder>(
|
|
63
|
-
passedScreenRefs?.current ?? {},
|
|
64
|
-
);
|
|
65
|
-
const ref = React.useRef(null);
|
|
66
|
-
const ScreenGestureDetector = React.useContext(GHContext);
|
|
67
|
-
const gestureDetectorBridge = React.useRef<GestureDetectorBridge>({
|
|
68
|
-
stackUseEffectCallback: _stackRef => {
|
|
69
|
-
// this method will be overriden in GestureDetector
|
|
70
|
-
},
|
|
71
|
-
});
|
|
72
|
-
|
|
73
|
-
React.useEffect(() => {
|
|
74
|
-
gestureDetectorBridge.current.stackUseEffectCallback(ref);
|
|
75
|
-
});
|
|
76
|
-
|
|
77
|
-
assertGHProvider(ScreenGestureDetector, goBackGesture);
|
|
78
|
-
|
|
79
|
-
assertCustomScreenTransitionsProps(
|
|
80
|
-
screensRefs,
|
|
81
|
-
currentScreenId,
|
|
82
|
-
goBackGesture,
|
|
83
|
-
);
|
|
84
|
-
|
|
85
|
-
return (
|
|
86
|
-
<RNSScreensRefContext.Provider value={screensRefs}>
|
|
87
|
-
<ScreenGestureDetector
|
|
88
|
-
gestureDetectorBridge={gestureDetectorBridge}
|
|
89
|
-
goBackGesture={goBackGesture}
|
|
90
|
-
transitionAnimation={transitionAnimation}
|
|
91
|
-
screenEdgeGesture={screenEdgeGesture ?? false}
|
|
92
|
-
screensRefs={screensRefs}
|
|
93
|
-
currentScreenId={currentScreenId}>
|
|
94
|
-
<ScreenStackNativeComponent
|
|
95
|
-
{...rest}
|
|
96
|
-
/**
|
|
97
|
-
* This messy override is to conform NativeProps used by codegen and
|
|
98
|
-
* our Public API. To see reasoning go to this PR:
|
|
99
|
-
* https://github.com/software-mansion/react-native-screens/pull/2423#discussion_r1810616995
|
|
100
|
-
*/
|
|
101
|
-
onFinishTransitioning={
|
|
102
|
-
onFinishTransitioning as NativeProps['onFinishTransitioning']
|
|
103
|
-
}
|
|
104
|
-
ref={ref}>
|
|
105
|
-
{children}
|
|
106
|
-
</ScreenStackNativeComponent>
|
|
107
|
-
</ScreenGestureDetector>
|
|
108
|
-
</RNSScreensRefContext.Provider>
|
|
109
|
-
);
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
export default ScreenStack;
|