@react-navigation/core 7.0.0-alpha.1 → 7.0.0-alpha.10
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/lib/commonjs/BaseNavigationContainer.js +25 -30
- package/lib/commonjs/BaseNavigationContainer.js.map +1 -1
- package/lib/commonjs/CurrentRenderContext.js +3 -4
- package/lib/commonjs/CurrentRenderContext.js.map +1 -1
- package/lib/commonjs/DeprecatedNavigationInChildContext.js +3 -4
- package/lib/commonjs/DeprecatedNavigationInChildContext.js.map +1 -1
- package/lib/commonjs/EnsureSingleNavigator.js +3 -4
- package/lib/commonjs/EnsureSingleNavigator.js.map +1 -1
- package/lib/commonjs/Group.js.map +1 -1
- package/lib/commonjs/NavigationBuilderContext.js +3 -4
- package/lib/commonjs/NavigationBuilderContext.js.map +1 -1
- package/lib/commonjs/NavigationContainerRefContext.js +3 -4
- package/lib/commonjs/NavigationContainerRefContext.js.map +1 -1
- package/lib/commonjs/NavigationContext.js +3 -4
- package/lib/commonjs/NavigationContext.js.map +1 -1
- package/lib/commonjs/NavigationHelpersContext.js +3 -4
- package/lib/commonjs/NavigationHelpersContext.js.map +1 -1
- package/lib/commonjs/NavigationIndependentTree.js +2 -2
- package/lib/commonjs/NavigationIndependentTree.js.map +1 -1
- package/lib/commonjs/NavigationIndependentTreeContext.js +3 -4
- package/lib/commonjs/NavigationIndependentTreeContext.js.map +1 -1
- package/lib/commonjs/NavigationRouteContext.js +3 -4
- package/lib/commonjs/NavigationRouteContext.js.map +1 -1
- package/lib/commonjs/NavigationStateContext.js +3 -4
- package/lib/commonjs/NavigationStateContext.js.map +1 -1
- package/lib/commonjs/PreventRemoveContext.js +8 -4
- package/lib/commonjs/PreventRemoveContext.js.map +1 -1
- package/lib/commonjs/PreventRemoveProvider.js +8 -10
- package/lib/commonjs/PreventRemoveProvider.js.map +1 -1
- package/lib/commonjs/SceneView.js +2 -2
- package/lib/commonjs/SceneView.js.map +1 -1
- package/lib/commonjs/Screen.js.map +1 -1
- package/lib/commonjs/StaticContainer.js +3 -4
- package/lib/commonjs/StaticContainer.js.map +1 -1
- package/lib/commonjs/StaticNavigation.js +34 -7
- package/lib/commonjs/StaticNavigation.js.map +1 -1
- package/lib/commonjs/UnhandledActionContext.js +3 -4
- package/lib/commonjs/UnhandledActionContext.js.map +1 -1
- package/lib/commonjs/checkDuplicateRouteNames.js +1 -2
- package/lib/commonjs/checkDuplicateRouteNames.js.map +1 -1
- package/lib/commonjs/checkSerializable.js.map +1 -1
- package/lib/commonjs/createNavigationContainerRef.js +1 -2
- package/lib/commonjs/createNavigationContainerRef.js.map +1 -1
- package/lib/commonjs/createNavigatorFactory.js +0 -3
- package/lib/commonjs/createNavigatorFactory.js.map +1 -1
- package/lib/commonjs/findFocusedRoute.js +2 -4
- package/lib/commonjs/findFocusedRoute.js.map +1 -1
- package/lib/commonjs/getActionFromState.js +6 -8
- package/lib/commonjs/getActionFromState.js.map +1 -1
- package/lib/commonjs/getFocusedRouteNameFromRoute.js +1 -1
- package/lib/commonjs/getFocusedRouteNameFromRoute.js.map +1 -1
- package/lib/commonjs/getPathFromState.js +21 -21
- package/lib/commonjs/getPathFromState.js.map +1 -1
- package/lib/commonjs/getStateFromPath.js +24 -17
- package/lib/commonjs/getStateFromPath.js.map +1 -1
- package/lib/commonjs/index.js +27 -3
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/isArrayEqual.js.map +1 -1
- package/lib/commonjs/isRecordEqual.js.map +1 -1
- package/lib/commonjs/theming/ThemeContext.js +12 -0
- package/lib/commonjs/theming/ThemeContext.js.map +1 -0
- package/lib/commonjs/theming/ThemeProvider.js +20 -0
- package/lib/commonjs/theming/ThemeProvider.js.map +1 -0
- package/lib/commonjs/theming/useTheme.js +18 -0
- package/lib/commonjs/theming/useTheme.js.map +1 -0
- package/lib/commonjs/types.js.map +1 -1
- package/lib/commonjs/useChildListeners.js +2 -2
- package/lib/commonjs/useChildListeners.js.map +1 -1
- package/lib/commonjs/useComponent.js +2 -2
- package/lib/commonjs/useComponent.js.map +1 -1
- package/lib/commonjs/useCurrentRender.js +2 -2
- package/lib/commonjs/useCurrentRender.js.map +1 -1
- package/lib/commonjs/useDescriptors.js +83 -31
- package/lib/commonjs/useDescriptors.js.map +1 -1
- package/lib/commonjs/useEventEmitter.js +5 -6
- package/lib/commonjs/useEventEmitter.js.map +1 -1
- package/lib/commonjs/useFocusEffect.js +4 -2
- package/lib/commonjs/useFocusEffect.js.map +1 -1
- package/lib/commonjs/useFocusEvents.js +4 -4
- package/lib/commonjs/useFocusEvents.js.map +1 -1
- package/lib/commonjs/useFocusedListenersChildrenAdapter.js +3 -3
- package/lib/commonjs/useFocusedListenersChildrenAdapter.js.map +1 -1
- package/lib/commonjs/useIsFocused.js +5 -4
- package/lib/commonjs/useIsFocused.js.map +1 -1
- package/lib/commonjs/useIsomorphicLayoutEffect.js +12 -0
- package/lib/commonjs/useIsomorphicLayoutEffect.js.map +1 -0
- package/lib/commonjs/useIsomorphicLayoutEffect.native.js +9 -0
- package/lib/commonjs/useIsomorphicLayoutEffect.native.js.map +1 -0
- package/lib/commonjs/useKeyedChildListeners.js +2 -2
- package/lib/commonjs/useKeyedChildListeners.js.map +1 -1
- package/lib/commonjs/useNavigation.js +2 -2
- package/lib/commonjs/useNavigation.js.map +1 -1
- package/lib/commonjs/useNavigationBuilder.js +78 -68
- package/lib/commonjs/useNavigationBuilder.js.map +1 -1
- package/lib/commonjs/useNavigationCache.js +57 -16
- package/lib/commonjs/useNavigationCache.js.map +1 -1
- package/lib/commonjs/useNavigationContainerRef.js +2 -2
- package/lib/commonjs/useNavigationContainerRef.js.map +1 -1
- package/lib/commonjs/useNavigationHelpers.js +4 -5
- package/lib/commonjs/useNavigationHelpers.js.map +1 -1
- package/lib/commonjs/useNavigationIndependentTree.js +2 -2
- package/lib/commonjs/useNavigationIndependentTree.js.map +1 -1
- package/lib/commonjs/useNavigationState.js +2 -2
- package/lib/commonjs/useNavigationState.js.map +1 -1
- package/lib/commonjs/useOnAction.js +6 -4
- package/lib/commonjs/useOnAction.js.map +1 -1
- package/lib/commonjs/useOnGetState.js +4 -5
- package/lib/commonjs/useOnGetState.js.map +1 -1
- package/lib/commonjs/useOnPreventRemove.js +5 -6
- package/lib/commonjs/useOnPreventRemove.js.map +1 -1
- package/lib/commonjs/useOnRouteFocus.js +2 -2
- package/lib/commonjs/useOnRouteFocus.js.map +1 -1
- package/lib/commonjs/useOptionsGetters.js +9 -10
- package/lib/commonjs/useOptionsGetters.js.map +1 -1
- package/lib/commonjs/usePreventRemove.js +5 -5
- package/lib/commonjs/usePreventRemove.js.map +1 -1
- package/lib/commonjs/usePreventRemoveContext.js +2 -2
- package/lib/commonjs/usePreventRemoveContext.js.map +1 -1
- package/lib/commonjs/useRegisterNavigator.js +2 -2
- package/lib/commonjs/useRegisterNavigator.js.map +1 -1
- package/lib/commonjs/useRoute.js +2 -2
- package/lib/commonjs/useRoute.js.map +1 -1
- package/lib/commonjs/useRouteCache.js +19 -16
- package/lib/commonjs/useRouteCache.js.map +1 -1
- package/lib/commonjs/useSyncState.js +27 -56
- package/lib/commonjs/useSyncState.js.map +1 -1
- package/lib/commonjs/validatePathConfig.js +37 -10
- package/lib/commonjs/validatePathConfig.js.map +1 -1
- package/lib/module/BaseNavigationContainer.js +22 -26
- package/lib/module/BaseNavigationContainer.js.map +1 -1
- package/lib/module/CurrentRenderContext.js.map +1 -1
- package/lib/module/DeprecatedNavigationInChildContext.js.map +1 -1
- package/lib/module/EnsureSingleNavigator.js.map +1 -1
- package/lib/module/Group.js.map +1 -1
- package/lib/module/NavigationBuilderContext.js.map +1 -1
- package/lib/module/NavigationContainerRefContext.js.map +1 -1
- package/lib/module/NavigationContext.js.map +1 -1
- package/lib/module/NavigationHelpersContext.js.map +1 -1
- package/lib/module/NavigationIndependentTree.js.map +1 -1
- package/lib/module/NavigationIndependentTreeContext.js.map +1 -1
- package/lib/module/NavigationRouteContext.js.map +1 -1
- package/lib/module/NavigationStateContext.js.map +1 -1
- package/lib/module/PreventRemoveContext.js.map +1 -1
- package/lib/module/PreventRemoveProvider.js +6 -8
- package/lib/module/PreventRemoveProvider.js.map +1 -1
- package/lib/module/SceneView.js.map +1 -1
- package/lib/module/Screen.js.map +1 -1
- package/lib/module/StaticContainer.js.map +1 -1
- package/lib/module/StaticNavigation.js +27 -5
- package/lib/module/StaticNavigation.js.map +1 -1
- package/lib/module/UnhandledActionContext.js.map +1 -1
- package/lib/module/checkDuplicateRouteNames.js +1 -2
- package/lib/module/checkDuplicateRouteNames.js.map +1 -1
- package/lib/module/checkSerializable.js.map +1 -1
- package/lib/module/createNavigationContainerRef.js.map +1 -1
- package/lib/module/createNavigatorFactory.js +0 -3
- package/lib/module/createNavigatorFactory.js.map +1 -1
- package/lib/module/findFocusedRoute.js +2 -4
- package/lib/module/findFocusedRoute.js.map +1 -1
- package/lib/module/getActionFromState.js +6 -8
- package/lib/module/getActionFromState.js.map +1 -1
- package/lib/module/getFocusedRouteNameFromRoute.js +1 -1
- package/lib/module/getFocusedRouteNameFromRoute.js.map +1 -1
- package/lib/module/getPathFromState.js +19 -19
- package/lib/module/getPathFromState.js.map +1 -1
- package/lib/module/getStateFromPath.js +22 -15
- package/lib/module/getStateFromPath.js.map +1 -1
- package/lib/module/index.js +4 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/isArrayEqual.js.map +1 -1
- package/lib/module/isRecordEqual.js.map +1 -1
- package/lib/module/theming/ThemeContext.js +4 -0
- package/lib/module/theming/ThemeContext.js.map +1 -0
- package/lib/module/theming/ThemeProvider.js +12 -0
- package/lib/module/theming/ThemeProvider.js.map +1 -0
- package/lib/module/theming/useTheme.js +10 -0
- package/lib/module/theming/useTheme.js.map +1 -0
- package/lib/module/types.js.map +1 -1
- package/lib/module/useChildListeners.js.map +1 -1
- package/lib/module/useComponent.js.map +1 -1
- package/lib/module/useCurrentRender.js.map +1 -1
- package/lib/module/useDescriptors.js +81 -29
- package/lib/module/useDescriptors.js.map +1 -1
- package/lib/module/useEventEmitter.js +3 -4
- package/lib/module/useEventEmitter.js.map +1 -1
- package/lib/module/useFocusEffect.js +2 -0
- package/lib/module/useFocusEffect.js.map +1 -1
- package/lib/module/useFocusEvents.js +2 -2
- package/lib/module/useFocusEvents.js.map +1 -1
- package/lib/module/useFocusedListenersChildrenAdapter.js +1 -1
- package/lib/module/useFocusedListenersChildrenAdapter.js.map +1 -1
- package/lib/module/useIsFocused.js.map +1 -1
- package/lib/module/useIsomorphicLayoutEffect.js +7 -0
- package/lib/module/useIsomorphicLayoutEffect.js.map +1 -0
- package/lib/module/useIsomorphicLayoutEffect.native.js +3 -0
- package/lib/module/useIsomorphicLayoutEffect.native.js.map +1 -0
- package/lib/module/useKeyedChildListeners.js.map +1 -1
- package/lib/module/useNavigation.js.map +1 -1
- package/lib/module/useNavigationBuilder.js +75 -66
- package/lib/module/useNavigationBuilder.js.map +1 -1
- package/lib/module/useNavigationCache.js +55 -14
- package/lib/module/useNavigationCache.js.map +1 -1
- package/lib/module/useNavigationContainerRef.js.map +1 -1
- package/lib/module/useNavigationHelpers.js +2 -3
- package/lib/module/useNavigationHelpers.js.map +1 -1
- package/lib/module/useNavigationIndependentTree.js.map +1 -1
- package/lib/module/useNavigationState.js.map +1 -1
- package/lib/module/useOnAction.js +4 -2
- package/lib/module/useOnAction.js.map +1 -1
- package/lib/module/useOnGetState.js +2 -3
- package/lib/module/useOnGetState.js.map +1 -1
- package/lib/module/useOnPreventRemove.js +3 -4
- package/lib/module/useOnPreventRemove.js.map +1 -1
- package/lib/module/useOnRouteFocus.js.map +1 -1
- package/lib/module/useOptionsGetters.js +7 -8
- package/lib/module/useOptionsGetters.js.map +1 -1
- package/lib/module/usePreventRemove.js +2 -2
- package/lib/module/usePreventRemove.js.map +1 -1
- package/lib/module/usePreventRemoveContext.js.map +1 -1
- package/lib/module/useRegisterNavigator.js.map +1 -1
- package/lib/module/useRoute.js.map +1 -1
- package/lib/module/useRouteCache.js +16 -12
- package/lib/module/useRouteCache.js.map +1 -1
- package/lib/module/useSyncState.js +25 -54
- package/lib/module/useSyncState.js.map +1 -1
- package/lib/module/validatePathConfig.js +37 -10
- package/lib/module/validatePathConfig.js.map +1 -1
- package/lib/typescript/src/BaseNavigationContainer.d.ts +2 -1
- package/lib/typescript/src/BaseNavigationContainer.d.ts.map +1 -1
- package/lib/typescript/src/EnsureSingleNavigator.d.ts +1 -1
- package/lib/typescript/src/EnsureSingleNavigator.d.ts.map +1 -1
- package/lib/typescript/src/NavigationContext.d.ts +1 -17
- package/lib/typescript/src/NavigationContext.d.ts.map +1 -1
- package/lib/typescript/src/NavigationHelpersContext.d.ts +1 -1
- package/lib/typescript/src/NavigationHelpersContext.d.ts.map +1 -1
- package/lib/typescript/src/NavigationIndependentTree.d.ts +1 -1
- package/lib/typescript/src/NavigationIndependentTree.d.ts.map +1 -1
- package/lib/typescript/src/NavigationRouteContext.d.ts +1 -1
- package/lib/typescript/src/NavigationRouteContext.d.ts.map +1 -1
- package/lib/typescript/src/NavigationStateContext.d.ts +2 -18
- package/lib/typescript/src/NavigationStateContext.d.ts.map +1 -1
- package/lib/typescript/src/PreventRemoveProvider.d.ts +1 -1
- package/lib/typescript/src/PreventRemoveProvider.d.ts.map +1 -1
- package/lib/typescript/src/SceneView.d.ts +2 -2
- package/lib/typescript/src/SceneView.d.ts.map +1 -1
- package/lib/typescript/src/StaticNavigation.d.ts +12 -5
- package/lib/typescript/src/StaticNavigation.d.ts.map +1 -1
- package/lib/typescript/src/createNavigatorFactory.d.ts.map +1 -1
- package/lib/typescript/src/findFocusedRoute.d.ts +1 -9
- package/lib/typescript/src/findFocusedRoute.d.ts.map +1 -1
- package/lib/typescript/src/getPathFromState.d.ts +1 -0
- package/lib/typescript/src/getPathFromState.d.ts.map +1 -1
- package/lib/typescript/src/getStateFromPath.d.ts +1 -0
- package/lib/typescript/src/getStateFromPath.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +5 -2
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/theming/ThemeContext.d.ts +3 -0
- package/lib/typescript/src/theming/ThemeContext.d.ts.map +1 -0
- package/lib/typescript/src/theming/ThemeProvider.d.ts +8 -0
- package/lib/typescript/src/theming/ThemeProvider.d.ts.map +1 -0
- package/lib/typescript/src/theming/useTheme.d.ts +2 -0
- package/lib/typescript/src/theming/useTheme.d.ts.map +1 -0
- package/lib/typescript/src/types.d.ts +80 -1
- package/lib/typescript/src/types.d.ts.map +1 -1
- package/lib/typescript/src/useComponent.d.ts +1 -1
- package/lib/typescript/src/useComponent.d.ts.map +1 -1
- package/lib/typescript/src/useDescriptors.d.ts +107 -59
- package/lib/typescript/src/useDescriptors.d.ts.map +1 -1
- package/lib/typescript/src/useFocusEffect.d.ts.map +1 -1
- package/lib/typescript/src/useFocusedListenersChildrenAdapter.d.ts +1 -1
- package/lib/typescript/src/useFocusedListenersChildrenAdapter.d.ts.map +1 -1
- package/lib/typescript/src/useIsomorphicLayoutEffect.d.ts +6 -0
- package/lib/typescript/src/useIsomorphicLayoutEffect.d.ts.map +1 -0
- package/lib/typescript/src/useIsomorphicLayoutEffect.native.d.ts +3 -0
- package/lib/typescript/src/useIsomorphicLayoutEffect.native.d.ts.map +1 -0
- package/lib/typescript/src/useNavigation.d.ts +4 -1
- package/lib/typescript/src/useNavigation.d.ts.map +1 -1
- package/lib/typescript/src/useNavigationBuilder.d.ts +99 -63
- package/lib/typescript/src/useNavigationBuilder.d.ts.map +1 -1
- package/lib/typescript/src/useNavigationCache.d.ts +53 -3
- package/lib/typescript/src/useNavigationCache.d.ts.map +1 -1
- package/lib/typescript/src/useNavigationHelpers.d.ts +25 -55
- package/lib/typescript/src/useNavigationHelpers.d.ts.map +1 -1
- package/lib/typescript/src/useOnAction.d.ts +1 -1
- package/lib/typescript/src/useOnAction.d.ts.map +1 -1
- package/lib/typescript/src/useOnGetState.d.ts +1 -1
- package/lib/typescript/src/useOnGetState.d.ts.map +1 -1
- package/lib/typescript/src/useOnPreventRemove.d.ts +1 -1
- package/lib/typescript/src/useOnPreventRemove.d.ts.map +1 -1
- package/lib/typescript/src/usePreventRemove.d.ts +1 -1
- package/lib/typescript/src/usePreventRemove.d.ts.map +1 -1
- package/lib/typescript/src/useRouteCache.d.ts +1 -1
- package/lib/typescript/src/useRouteCache.d.ts.map +1 -1
- package/lib/typescript/src/useSyncState.d.ts +1 -4
- package/lib/typescript/src/useSyncState.d.ts.map +1 -1
- package/lib/typescript/src/validatePathConfig.d.ts +1 -1
- package/lib/typescript/src/validatePathConfig.d.ts.map +1 -1
- package/lib/typescript/utils/usePrevious.d.ts +6 -0
- package/lib/typescript/utils/usePrevious.d.ts.map +1 -0
- package/package.json +14 -14
- package/src/BaseNavigationContainer.tsx +35 -36
- package/src/Group.tsx +1 -1
- package/src/PreventRemoveProvider.tsx +4 -1
- package/src/SceneView.tsx +1 -1
- package/src/Screen.tsx +1 -1
- package/src/StaticNavigation.tsx +34 -32
- package/src/checkDuplicateRouteNames.tsx +1 -1
- package/src/createNavigationContainerRef.tsx +1 -1
- package/src/createNavigatorFactory.tsx +2 -4
- package/src/getActionFromState.tsx +1 -1
- package/src/getFocusedRouteNameFromRoute.tsx +3 -3
- package/src/getPathFromState.tsx +14 -11
- package/src/getStateFromPath.tsx +22 -3
- package/src/index.tsx +6 -3
- package/src/theming/ThemeContext.tsx +7 -0
- package/src/theming/ThemeProvider.tsx +14 -0
- package/src/theming/useTheme.tsx +15 -0
- package/src/types.tsx +133 -17
- package/src/useDescriptors.tsx +153 -59
- package/src/useFocusEffect.tsx +1 -0
- package/src/useFocusedListenersChildrenAdapter.tsx +2 -2
- package/src/useIsomorphicLayoutEffect.native.tsx +3 -0
- package/src/useIsomorphicLayoutEffect.tsx +7 -0
- package/src/useNavigation.tsx +4 -1
- package/src/useNavigationBuilder.tsx +119 -100
- package/src/useNavigationCache.tsx +91 -30
- package/src/useNavigationContainerRef.tsx +1 -1
- package/src/useNavigationHelpers.tsx +6 -7
- package/src/useOnAction.tsx +8 -3
- package/src/useOnGetState.tsx +1 -1
- package/src/useOnPreventRemove.tsx +1 -1
- package/src/useOptionsGetters.tsx +2 -2
- package/src/usePreventRemove.tsx +1 -1
- package/src/useRouteCache.tsx +17 -16
- package/src/useSyncState.tsx +31 -59
- package/src/validatePathConfig.tsx +58 -14
- package/lib/commonjs/fromEntries.js +0 -18
- package/lib/commonjs/fromEntries.js.map +0 -1
- package/lib/commonjs/useScheduleUpdate.js +0 -37
- package/lib/commonjs/useScheduleUpdate.js.map +0 -1
- package/lib/module/fromEntries.js +0 -12
- package/lib/module/fromEntries.js.map +0 -1
- package/lib/module/useScheduleUpdate.js +0 -27
- package/lib/module/useScheduleUpdate.js.map +0 -1
- package/lib/typescript/src/fromEntries.d.ts +0 -2
- package/lib/typescript/src/fromEntries.d.ts.map +0 -1
- package/lib/typescript/src/useScheduleUpdate.d.ts +0 -14
- package/lib/typescript/src/useScheduleUpdate.d.ts.map +0 -1
- package/src/fromEntries.tsx +0 -11
- package/src/useScheduleUpdate.tsx +0 -32
package/src/types.tsx
CHANGED
|
@@ -14,6 +14,9 @@ declare global {
|
|
|
14
14
|
namespace ReactNavigation {
|
|
15
15
|
// eslint-disable-next-line @typescript-eslint/no-empty-interface
|
|
16
16
|
interface RootParamList {}
|
|
17
|
+
|
|
18
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-interface
|
|
19
|
+
interface Theme {}
|
|
17
20
|
}
|
|
18
21
|
}
|
|
19
22
|
|
|
@@ -23,17 +26,44 @@ export type DefaultNavigatorOptions<
|
|
|
23
26
|
ParamList extends ParamListBase,
|
|
24
27
|
State extends NavigationState,
|
|
25
28
|
ScreenOptions extends {},
|
|
26
|
-
EventMap extends EventMapBase
|
|
29
|
+
EventMap extends EventMapBase,
|
|
27
30
|
> = DefaultRouterOptions<Keyof<ParamList>> & {
|
|
28
31
|
/**
|
|
29
32
|
* Optional ID for the navigator. Can be used with `navigation.getParent(id)` to refer to a parent.
|
|
30
33
|
*/
|
|
31
34
|
id?: string;
|
|
35
|
+
|
|
32
36
|
/**
|
|
33
37
|
* Children React Elements to extract the route configuration from.
|
|
34
38
|
* Only `Screen`, `Group` and `React.Fragment` are supported as children.
|
|
35
39
|
*/
|
|
36
40
|
children: React.ReactNode;
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Layout for the navigator.
|
|
44
|
+
* Useful for wrapping with a component with access to navigator's state and options.
|
|
45
|
+
*/
|
|
46
|
+
layout?: (props: {
|
|
47
|
+
state: State;
|
|
48
|
+
navigation: NavigationHelpers<ParamList>;
|
|
49
|
+
descriptors: Record<
|
|
50
|
+
string,
|
|
51
|
+
Descriptor<
|
|
52
|
+
ScreenOptions,
|
|
53
|
+
NavigationProp<
|
|
54
|
+
ParamList,
|
|
55
|
+
keyof ParamList,
|
|
56
|
+
string | undefined,
|
|
57
|
+
State,
|
|
58
|
+
ScreenOptions,
|
|
59
|
+
EventMap
|
|
60
|
+
>,
|
|
61
|
+
RouteProp<ParamList>
|
|
62
|
+
>
|
|
63
|
+
>;
|
|
64
|
+
children: React.ReactNode;
|
|
65
|
+
}) => React.ReactElement;
|
|
66
|
+
|
|
37
67
|
/**
|
|
38
68
|
* Event listeners for all the screens in the navigator.
|
|
39
69
|
*/
|
|
@@ -43,6 +73,7 @@ export type DefaultNavigatorOptions<
|
|
|
43
73
|
route: RouteProp<ParamList>;
|
|
44
74
|
navigation: any;
|
|
45
75
|
}) => ScreenListeners<State, EventMap>);
|
|
76
|
+
|
|
46
77
|
/**
|
|
47
78
|
* Default options for all screens under this navigator.
|
|
48
79
|
*/
|
|
@@ -51,7 +82,25 @@ export type DefaultNavigatorOptions<
|
|
|
51
82
|
| ((props: {
|
|
52
83
|
route: RouteProp<ParamList>;
|
|
53
84
|
navigation: any;
|
|
85
|
+
theme: ReactNavigation.Theme;
|
|
54
86
|
}) => ScreenOptions);
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Layout for all screens under this navigator.
|
|
90
|
+
*/
|
|
91
|
+
screenLayout?: (props: {
|
|
92
|
+
route: RouteProp<ParamList, keyof ParamList>;
|
|
93
|
+
navigation: any;
|
|
94
|
+
theme: ReactNavigation.Theme;
|
|
95
|
+
children: React.ReactElement;
|
|
96
|
+
}) => React.ReactElement;
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
A function returning a state, which may be set after modifying the routes name.
|
|
100
|
+
*/
|
|
101
|
+
getStateForRouteNamesChange?: (
|
|
102
|
+
state: NavigationState
|
|
103
|
+
) => PartialState<NavigationState> | undefined;
|
|
55
104
|
};
|
|
56
105
|
|
|
57
106
|
export type EventMapBase = Record<
|
|
@@ -69,7 +118,7 @@ export type EventMapCore<State extends NavigationState> = {
|
|
|
69
118
|
export type EventArg<
|
|
70
119
|
EventName extends string,
|
|
71
120
|
CanPreventDefault extends boolean | undefined = false,
|
|
72
|
-
Data = undefined
|
|
121
|
+
Data = undefined,
|
|
73
122
|
> = {
|
|
74
123
|
/**
|
|
75
124
|
* Type of the event (e.g. `focus`, `blur`)
|
|
@@ -94,7 +143,7 @@ export type EventArg<
|
|
|
94
143
|
|
|
95
144
|
export type EventListenerCallback<
|
|
96
145
|
EventMap extends EventMapBase,
|
|
97
|
-
EventName extends keyof EventMap
|
|
146
|
+
EventName extends keyof EventMap,
|
|
98
147
|
> = (
|
|
99
148
|
e: EventArg<
|
|
100
149
|
Extract<EventName, string>,
|
|
@@ -162,7 +211,7 @@ export class PrivateValueStore<T extends [any, any, any]> {
|
|
|
162
211
|
|
|
163
212
|
type NavigationHelpersCommon<
|
|
164
213
|
ParamList extends ParamListBase,
|
|
165
|
-
State extends NavigationState = NavigationState
|
|
214
|
+
State extends NavigationState = NavigationState,
|
|
166
215
|
> = {
|
|
167
216
|
/**
|
|
168
217
|
* Dispatch an action or an update function to the router.
|
|
@@ -251,6 +300,22 @@ type NavigationHelpersCommon<
|
|
|
251
300
|
: never
|
|
252
301
|
): void;
|
|
253
302
|
|
|
303
|
+
/**
|
|
304
|
+
* Preloads the route in current navigation tree.
|
|
305
|
+
*
|
|
306
|
+
* @param name Name of the route to navigate to.
|
|
307
|
+
* @param [params] Params object for the route.
|
|
308
|
+
*/
|
|
309
|
+
preload<RouteName extends keyof ParamList>(
|
|
310
|
+
...args: RouteName extends unknown
|
|
311
|
+
? undefined extends ParamList[RouteName]
|
|
312
|
+
?
|
|
313
|
+
| [screen: RouteName]
|
|
314
|
+
| [screen: RouteName, params: ParamList[RouteName]]
|
|
315
|
+
: [screen: RouteName, params: ParamList[RouteName]]
|
|
316
|
+
: never
|
|
317
|
+
): void;
|
|
318
|
+
|
|
254
319
|
/**
|
|
255
320
|
* Reset the navigation state to the provided state.
|
|
256
321
|
*
|
|
@@ -297,11 +362,18 @@ type NavigationHelpersCommon<
|
|
|
297
362
|
* Note that this method doesn't re-render screen when the result changes. So don't use it in `render`.
|
|
298
363
|
*/
|
|
299
364
|
getState(): State;
|
|
365
|
+
/**
|
|
366
|
+
* Schedules the given state to be used as navigation state when the list of screens defined in the navigator changes
|
|
367
|
+
* instead of automatically calculating the new state, e.g. due to conditional rendering or dynamically defining screens.
|
|
368
|
+
*
|
|
369
|
+
* @param state Navigation state object.
|
|
370
|
+
*/
|
|
371
|
+
setStateForNextRouteNamesChange(state: PartialState<State> | State): void;
|
|
300
372
|
} & PrivateValueStore<[ParamList, unknown, unknown]>;
|
|
301
373
|
|
|
302
374
|
export type NavigationHelpers<
|
|
303
375
|
ParamList extends ParamListBase,
|
|
304
|
-
EventMap extends EventMapBase = {}
|
|
376
|
+
EventMap extends EventMapBase = {},
|
|
305
377
|
> = NavigationHelpersCommon<ParamList> &
|
|
306
378
|
EventEmitter<EventMap> & {
|
|
307
379
|
/**
|
|
@@ -342,6 +414,10 @@ export type NavigationContainerProps = {
|
|
|
342
414
|
* @deprecated Use nested navigation API instead
|
|
343
415
|
*/
|
|
344
416
|
navigationInChildEnabled?: boolean;
|
|
417
|
+
/**
|
|
418
|
+
* Theme object for the UI elements.
|
|
419
|
+
*/
|
|
420
|
+
theme?: ReactNavigation.Theme;
|
|
345
421
|
/**
|
|
346
422
|
* Children elements to render.
|
|
347
423
|
*/
|
|
@@ -354,7 +430,7 @@ export type NavigationProp<
|
|
|
354
430
|
NavigatorID extends string | undefined = undefined,
|
|
355
431
|
State extends NavigationState = NavigationState<ParamList>,
|
|
356
432
|
ScreenOptions extends {} = {},
|
|
357
|
-
EventMap extends EventMapBase = {}
|
|
433
|
+
EventMap extends EventMapBase = {},
|
|
358
434
|
> = Omit<NavigationHelpersCommon<ParamList, State>, 'getParent'> & {
|
|
359
435
|
/**
|
|
360
436
|
* Returns the navigation prop from a parent navigator based on the ID.
|
|
@@ -389,12 +465,12 @@ export type NavigationProp<
|
|
|
389
465
|
|
|
390
466
|
export type RouteProp<
|
|
391
467
|
ParamList extends ParamListBase,
|
|
392
|
-
RouteName extends keyof ParamList = Keyof<ParamList
|
|
468
|
+
RouteName extends keyof ParamList = Keyof<ParamList>,
|
|
393
469
|
> = Route<Extract<RouteName, string>, ParamList[RouteName]>;
|
|
394
470
|
|
|
395
471
|
export type CompositeNavigationProp<
|
|
396
472
|
A extends NavigationProp<ParamListBase, string, any, any, any>,
|
|
397
|
-
B extends NavigationHelpersCommon<ParamListBase, any
|
|
473
|
+
B extends NavigationHelpersCommon<ParamListBase, any>,
|
|
398
474
|
> = Omit<A & B, keyof NavigationProp<any>> &
|
|
399
475
|
NavigationProp<
|
|
400
476
|
/**
|
|
@@ -442,7 +518,7 @@ export type CompositeScreenProps<
|
|
|
442
518
|
},
|
|
443
519
|
B extends {
|
|
444
520
|
navigation: NavigationHelpersCommon<any, any>;
|
|
445
|
-
}
|
|
521
|
+
},
|
|
446
522
|
> = {
|
|
447
523
|
navigation: CompositeNavigationProp<A['navigation'], B['navigation']>;
|
|
448
524
|
route: A['route'];
|
|
@@ -451,7 +527,7 @@ export type CompositeScreenProps<
|
|
|
451
527
|
export type Descriptor<
|
|
452
528
|
ScreenOptions extends {},
|
|
453
529
|
Navigation extends NavigationProp<any, any, any, any, any, any>,
|
|
454
|
-
Route extends RouteProp<any, any
|
|
530
|
+
Route extends RouteProp<any, any>,
|
|
455
531
|
> = {
|
|
456
532
|
/**
|
|
457
533
|
* Render the component associated with this route.
|
|
@@ -476,7 +552,7 @@ export type Descriptor<
|
|
|
476
552
|
|
|
477
553
|
export type ScreenListeners<
|
|
478
554
|
State extends NavigationState,
|
|
479
|
-
EventMap extends EventMapBase
|
|
555
|
+
EventMap extends EventMapBase,
|
|
480
556
|
> = Partial<{
|
|
481
557
|
[EventName in keyof (EventMap & EventMapCore<State>)]: EventListenerCallback<
|
|
482
558
|
EventMap,
|
|
@@ -486,7 +562,7 @@ export type ScreenListeners<
|
|
|
486
562
|
|
|
487
563
|
type ScreenComponentType<
|
|
488
564
|
ParamList extends ParamListBase,
|
|
489
|
-
RouteName extends keyof ParamList
|
|
565
|
+
RouteName extends keyof ParamList,
|
|
490
566
|
> =
|
|
491
567
|
| React.ComponentType<{
|
|
492
568
|
route: RouteProp<ParamList, RouteName>;
|
|
@@ -496,7 +572,7 @@ type ScreenComponentType<
|
|
|
496
572
|
|
|
497
573
|
export type RouteConfigComponent<
|
|
498
574
|
ParamList extends ParamListBase,
|
|
499
|
-
RouteName extends keyof ParamList
|
|
575
|
+
RouteName extends keyof ParamList,
|
|
500
576
|
> =
|
|
501
577
|
| {
|
|
502
578
|
/**
|
|
@@ -531,7 +607,7 @@ export type RouteConfig<
|
|
|
531
607
|
RouteName extends keyof ParamList,
|
|
532
608
|
State extends NavigationState,
|
|
533
609
|
ScreenOptions extends {},
|
|
534
|
-
EventMap extends EventMapBase
|
|
610
|
+
EventMap extends EventMapBase,
|
|
535
611
|
> = {
|
|
536
612
|
/**
|
|
537
613
|
* Optional key for this screen. This doesn't need to be unique.
|
|
@@ -553,6 +629,7 @@ export type RouteConfig<
|
|
|
553
629
|
| ((props: {
|
|
554
630
|
route: RouteProp<ParamList, RouteName>;
|
|
555
631
|
navigation: any;
|
|
632
|
+
theme: ReactNavigation.Theme;
|
|
556
633
|
}) => ScreenOptions);
|
|
557
634
|
|
|
558
635
|
/**
|
|
@@ -565,6 +642,18 @@ export type RouteConfig<
|
|
|
565
642
|
navigation: any;
|
|
566
643
|
}) => ScreenListeners<State, EventMap>);
|
|
567
644
|
|
|
645
|
+
/**
|
|
646
|
+
* Layout for this screen.
|
|
647
|
+
* Useful for wrapping the screen with custom containers.
|
|
648
|
+
* e.g. for styling, error boundaries, suspense, etc.
|
|
649
|
+
*/
|
|
650
|
+
layout?: (props: {
|
|
651
|
+
route: RouteProp<ParamList, keyof ParamList>;
|
|
652
|
+
navigation: any;
|
|
653
|
+
theme: ReactNavigation.Theme;
|
|
654
|
+
children: React.ReactElement;
|
|
655
|
+
}) => React.ReactElement;
|
|
656
|
+
|
|
568
657
|
/**
|
|
569
658
|
* Function to return an unique ID for this screen.
|
|
570
659
|
* Receives an object with the route params.
|
|
@@ -585,7 +674,7 @@ export type RouteConfig<
|
|
|
585
674
|
|
|
586
675
|
export type RouteGroupConfig<
|
|
587
676
|
ParamList extends ParamListBase,
|
|
588
|
-
ScreenOptions extends {}
|
|
677
|
+
ScreenOptions extends {},
|
|
589
678
|
> = {
|
|
590
679
|
/**
|
|
591
680
|
* Optional key for the screens in this group.
|
|
@@ -601,7 +690,20 @@ export type RouteGroupConfig<
|
|
|
601
690
|
| ((props: {
|
|
602
691
|
route: RouteProp<ParamList, keyof ParamList>;
|
|
603
692
|
navigation: any;
|
|
693
|
+
theme: ReactNavigation.Theme;
|
|
604
694
|
}) => ScreenOptions);
|
|
695
|
+
|
|
696
|
+
/**
|
|
697
|
+
* Layout for the screens inside the group.
|
|
698
|
+
* This will override the `screenLayout` of parent group or navigator.
|
|
699
|
+
*/
|
|
700
|
+
screenLayout?: (props: {
|
|
701
|
+
route: RouteProp<ParamList, keyof ParamList>;
|
|
702
|
+
navigation: any;
|
|
703
|
+
theme: ReactNavigation.Theme;
|
|
704
|
+
children: React.ReactElement;
|
|
705
|
+
}) => React.ReactElement;
|
|
706
|
+
|
|
605
707
|
/**
|
|
606
708
|
* Children React Elements to extract the route configuration from.
|
|
607
709
|
* Only `Screen`, `Group` and `React.Fragment` are supported as children.
|
|
@@ -673,6 +775,14 @@ export type NavigationContainerRef<ParamList extends {}> =
|
|
|
673
775
|
* Whether the navigation container is ready to handle actions.
|
|
674
776
|
*/
|
|
675
777
|
isReady(): boolean;
|
|
778
|
+
/**
|
|
779
|
+
* Stub function for setOptions on navigation object for use with useNavigation.
|
|
780
|
+
*/
|
|
781
|
+
setOptions(): never;
|
|
782
|
+
/**
|
|
783
|
+
* Stub function for getParent on navigation object for use with useNavigation.
|
|
784
|
+
*/
|
|
785
|
+
getParent(): undefined;
|
|
676
786
|
};
|
|
677
787
|
|
|
678
788
|
export type NavigationContainerRefWithCurrent<ParamList extends {}> =
|
|
@@ -685,7 +795,7 @@ export type TypedNavigator<
|
|
|
685
795
|
State extends NavigationState,
|
|
686
796
|
ScreenOptions extends {},
|
|
687
797
|
EventMap extends EventMapBase,
|
|
688
|
-
Navigator extends React.ComponentType<any
|
|
798
|
+
Navigator extends React.ComponentType<any>,
|
|
689
799
|
> = {
|
|
690
800
|
/**
|
|
691
801
|
* Navigator component which manages the child screens.
|
|
@@ -779,12 +889,18 @@ export type PathConfig<ParamList extends {}> = {
|
|
|
779
889
|
* Name of the initial route to use for the navigator when the path matches.
|
|
780
890
|
*/
|
|
781
891
|
initialRouteName?: keyof ParamList;
|
|
892
|
+
/**
|
|
893
|
+
* A function returning a state, which may be set after modifying the routes name.
|
|
894
|
+
*/
|
|
895
|
+
getStateForRouteNamesChange?: (
|
|
896
|
+
state: NavigationState
|
|
897
|
+
) => PartialState<NavigationState> | undefined;
|
|
782
898
|
};
|
|
783
899
|
|
|
784
900
|
export type PathConfigMap<ParamList extends {}> = {
|
|
785
901
|
[RouteName in keyof ParamList]?: NonNullable<
|
|
786
902
|
ParamList[RouteName]
|
|
787
|
-
> extends NavigatorScreenParams<infer T>
|
|
903
|
+
> extends NavigatorScreenParams<infer T extends {}>
|
|
788
904
|
? string | PathConfig<T>
|
|
789
905
|
: string | Omit<PathConfig<{}>, 'screens' | 'initialRouteName'>;
|
|
790
906
|
};
|
package/src/useDescriptors.tsx
CHANGED
|
@@ -2,18 +2,20 @@ import type {
|
|
|
2
2
|
NavigationAction,
|
|
3
3
|
NavigationState,
|
|
4
4
|
ParamListBase,
|
|
5
|
+
PartialState,
|
|
5
6
|
Router,
|
|
6
7
|
} from '@react-navigation/routers';
|
|
7
8
|
import * as React from 'react';
|
|
8
9
|
|
|
9
10
|
import {
|
|
10
|
-
AddKeyedListener,
|
|
11
|
-
AddListener,
|
|
11
|
+
type AddKeyedListener,
|
|
12
|
+
type AddListener,
|
|
12
13
|
NavigationBuilderContext,
|
|
13
14
|
} from './NavigationBuilderContext';
|
|
14
15
|
import { NavigationContext } from './NavigationContext';
|
|
15
16
|
import { NavigationRouteContext } from './NavigationRouteContext';
|
|
16
17
|
import { SceneView } from './SceneView';
|
|
18
|
+
import { ThemeContext } from './theming/ThemeContext';
|
|
17
19
|
import type {
|
|
18
20
|
Descriptor,
|
|
19
21
|
EventMapBase,
|
|
@@ -29,24 +31,33 @@ import { useRouteCache } from './useRouteCache';
|
|
|
29
31
|
export type ScreenConfigWithParent<
|
|
30
32
|
State extends NavigationState,
|
|
31
33
|
ScreenOptions extends {},
|
|
32
|
-
EventMap extends EventMapBase
|
|
34
|
+
EventMap extends EventMapBase,
|
|
33
35
|
> = {
|
|
34
36
|
keys: (string | undefined)[];
|
|
35
37
|
options: (ScreenOptionsOrCallback<ScreenOptions> | undefined)[] | undefined;
|
|
38
|
+
layout: ScreenLayout | undefined;
|
|
36
39
|
props: RouteConfig<ParamListBase, string, State, ScreenOptions, EventMap>;
|
|
37
40
|
};
|
|
38
41
|
|
|
42
|
+
type ScreenLayout = (props: {
|
|
43
|
+
route: RouteProp<ParamListBase, string>;
|
|
44
|
+
navigation: any;
|
|
45
|
+
theme: ReactNavigation.Theme;
|
|
46
|
+
children: React.ReactElement;
|
|
47
|
+
}) => React.ReactElement;
|
|
48
|
+
|
|
39
49
|
type ScreenOptionsOrCallback<ScreenOptions extends {}> =
|
|
40
50
|
| ScreenOptions
|
|
41
51
|
| ((props: {
|
|
42
52
|
route: RouteProp<ParamListBase, string>;
|
|
43
53
|
navigation: any;
|
|
54
|
+
theme: ReactNavigation.Theme;
|
|
44
55
|
}) => ScreenOptions);
|
|
45
56
|
|
|
46
57
|
type Options<
|
|
47
58
|
State extends NavigationState,
|
|
48
59
|
ScreenOptions extends {},
|
|
49
|
-
EventMap extends EventMapBase
|
|
60
|
+
EventMap extends EventMapBase,
|
|
50
61
|
> = {
|
|
51
62
|
state: State;
|
|
52
63
|
screens: Record<
|
|
@@ -54,14 +65,8 @@ type Options<
|
|
|
54
65
|
ScreenConfigWithParent<State, ScreenOptions, EventMap>
|
|
55
66
|
>;
|
|
56
67
|
navigation: NavigationHelpers<ParamListBase>;
|
|
57
|
-
screenOptions
|
|
58
|
-
|
|
59
|
-
| ScreenOptions
|
|
60
|
-
| ((props: {
|
|
61
|
-
route: RouteProp<ParamListBase>;
|
|
62
|
-
navigation: any;
|
|
63
|
-
options: ScreenOptions;
|
|
64
|
-
}) => ScreenOptions);
|
|
68
|
+
screenOptions: ScreenOptionsOrCallback<ScreenOptions> | undefined;
|
|
69
|
+
screenLayout: ScreenLayout | undefined;
|
|
65
70
|
onAction: (action: NavigationAction) => boolean;
|
|
66
71
|
getState: () => State;
|
|
67
72
|
setState: (state: State) => void;
|
|
@@ -84,13 +89,13 @@ export function useDescriptors<
|
|
|
84
89
|
State extends NavigationState,
|
|
85
90
|
ActionHelpers extends Record<string, () => void>,
|
|
86
91
|
ScreenOptions extends {},
|
|
87
|
-
EventMap extends EventMapBase
|
|
92
|
+
EventMap extends EventMapBase,
|
|
88
93
|
>({
|
|
89
94
|
state,
|
|
90
95
|
screens,
|
|
91
96
|
navigation,
|
|
92
97
|
screenOptions,
|
|
93
|
-
|
|
98
|
+
screenLayout,
|
|
94
99
|
onAction,
|
|
95
100
|
getState,
|
|
96
101
|
setState,
|
|
@@ -100,6 +105,7 @@ export function useDescriptors<
|
|
|
100
105
|
router,
|
|
101
106
|
emitter,
|
|
102
107
|
}: Options<State, ScreenOptions, EventMap>) {
|
|
108
|
+
const theme = React.useContext(ThemeContext);
|
|
103
109
|
const [options, setOptions] = React.useState<Record<string, ScreenOptions>>(
|
|
104
110
|
{}
|
|
105
111
|
);
|
|
@@ -130,7 +136,12 @@ export function useDescriptors<
|
|
|
130
136
|
]
|
|
131
137
|
);
|
|
132
138
|
|
|
133
|
-
const navigations = useNavigationCache<
|
|
139
|
+
const { base, navigations } = useNavigationCache<
|
|
140
|
+
State,
|
|
141
|
+
ScreenOptions,
|
|
142
|
+
EventMap,
|
|
143
|
+
ActionHelpers
|
|
144
|
+
>({
|
|
134
145
|
state,
|
|
135
146
|
getState,
|
|
136
147
|
navigation,
|
|
@@ -141,27 +152,20 @@ export function useDescriptors<
|
|
|
141
152
|
|
|
142
153
|
const routes = useRouteCache(state.routes);
|
|
143
154
|
|
|
144
|
-
|
|
145
|
-
|
|
155
|
+
const getOptions = (
|
|
156
|
+
route: RouteProp<ParamListBase, string>,
|
|
157
|
+
navigation: NavigationProp<
|
|
158
|
+
ParamListBase,
|
|
146
159
|
string,
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
ScreenOptions,
|
|
155
|
-
EventMap
|
|
156
|
-
> &
|
|
157
|
-
ActionHelpers,
|
|
158
|
-
RouteProp<ParamListBase>
|
|
159
|
-
>
|
|
160
|
-
>
|
|
161
|
-
>((acc, route, i) => {
|
|
160
|
+
string | undefined,
|
|
161
|
+
State,
|
|
162
|
+
ScreenOptions,
|
|
163
|
+
EventMap
|
|
164
|
+
>,
|
|
165
|
+
overrides: Record<string, ScreenOptions>
|
|
166
|
+
) => {
|
|
162
167
|
const config = screens[route.name];
|
|
163
168
|
const screen = config.props;
|
|
164
|
-
const navigation = navigations[route.key];
|
|
165
169
|
|
|
166
170
|
const optionsList = [
|
|
167
171
|
// The default `screenOptions` passed to the navigator
|
|
@@ -173,30 +177,35 @@ export function useDescriptors<
|
|
|
173
177
|
// The `options` prop passed to `Screen` elements,
|
|
174
178
|
screen.options,
|
|
175
179
|
// The options set via `navigation.setOptions`
|
|
176
|
-
|
|
180
|
+
overrides,
|
|
177
181
|
];
|
|
178
182
|
|
|
179
|
-
|
|
183
|
+
return optionsList.reduce<ScreenOptions>(
|
|
180
184
|
(acc, curr) =>
|
|
181
185
|
Object.assign(
|
|
182
186
|
acc,
|
|
183
187
|
// @ts-expect-error: we check for function but TS still complains
|
|
184
|
-
typeof curr !== 'function' ? curr : curr({ route, navigation })
|
|
188
|
+
typeof curr !== 'function' ? curr : curr({ route, navigation, theme })
|
|
185
189
|
),
|
|
186
190
|
{} as ScreenOptions
|
|
187
191
|
);
|
|
192
|
+
};
|
|
188
193
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
194
|
+
const render = (
|
|
195
|
+
route: RouteProp<ParamListBase, string>,
|
|
196
|
+
navigation: NavigationProp<
|
|
197
|
+
ParamListBase,
|
|
198
|
+
string,
|
|
199
|
+
string | undefined,
|
|
200
|
+
State,
|
|
201
|
+
ScreenOptions,
|
|
202
|
+
EventMap
|
|
203
|
+
>,
|
|
204
|
+
customOptions: ScreenOptions,
|
|
205
|
+
routeState: NavigationState | PartialState<NavigationState> | undefined
|
|
206
|
+
) => {
|
|
207
|
+
const config = screens[route.name];
|
|
208
|
+
const screen = config.props;
|
|
200
209
|
|
|
201
210
|
const clearOptions = () =>
|
|
202
211
|
setOptions((o) => {
|
|
@@ -209,24 +218,74 @@ export function useDescriptors<
|
|
|
209
218
|
return o;
|
|
210
219
|
});
|
|
211
220
|
|
|
212
|
-
const
|
|
221
|
+
const layout =
|
|
222
|
+
// The `layout` prop passed to `Screen` elements,
|
|
223
|
+
screen.layout ??
|
|
224
|
+
// The `screenLayout` props passed to `Group` elements
|
|
225
|
+
config.layout ??
|
|
226
|
+
// The default `screenLayout` passed to the navigator
|
|
227
|
+
screenLayout;
|
|
228
|
+
|
|
229
|
+
let element = (
|
|
230
|
+
<SceneView
|
|
231
|
+
navigation={navigation}
|
|
232
|
+
route={route}
|
|
233
|
+
screen={screen}
|
|
234
|
+
routeState={routeState}
|
|
235
|
+
getState={getState}
|
|
236
|
+
setState={setState}
|
|
237
|
+
options={customOptions}
|
|
238
|
+
clearOptions={clearOptions}
|
|
239
|
+
/>
|
|
240
|
+
);
|
|
241
|
+
|
|
242
|
+
if (layout != null) {
|
|
243
|
+
element = layout({
|
|
244
|
+
route,
|
|
245
|
+
navigation,
|
|
246
|
+
// @ts-expect-error: in practice `theme` will be defined
|
|
247
|
+
theme,
|
|
248
|
+
children: element,
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
return (
|
|
213
253
|
<NavigationBuilderContext.Provider key={route.key} value={context}>
|
|
214
254
|
<NavigationContext.Provider value={navigation}>
|
|
215
255
|
<NavigationRouteContext.Provider value={route}>
|
|
216
|
-
|
|
217
|
-
navigation={navigation}
|
|
218
|
-
route={route}
|
|
219
|
-
screen={screen}
|
|
220
|
-
routeState={state.routes[i].state}
|
|
221
|
-
getState={getState}
|
|
222
|
-
setState={setState}
|
|
223
|
-
options={mergedOptions}
|
|
224
|
-
clearOptions={clearOptions}
|
|
225
|
-
/>
|
|
256
|
+
{element}
|
|
226
257
|
</NavigationRouteContext.Provider>
|
|
227
258
|
</NavigationContext.Provider>
|
|
228
259
|
</NavigationBuilderContext.Provider>
|
|
229
260
|
);
|
|
261
|
+
};
|
|
262
|
+
|
|
263
|
+
const descriptors = routes.reduce<
|
|
264
|
+
Record<
|
|
265
|
+
string,
|
|
266
|
+
Descriptor<
|
|
267
|
+
ScreenOptions,
|
|
268
|
+
NavigationProp<
|
|
269
|
+
ParamListBase,
|
|
270
|
+
string,
|
|
271
|
+
string | undefined,
|
|
272
|
+
State,
|
|
273
|
+
ScreenOptions,
|
|
274
|
+
EventMap
|
|
275
|
+
> &
|
|
276
|
+
ActionHelpers,
|
|
277
|
+
RouteProp<ParamListBase>
|
|
278
|
+
>
|
|
279
|
+
>
|
|
280
|
+
>((acc, route, i) => {
|
|
281
|
+
const navigation = navigations[route.key];
|
|
282
|
+
const customOptions = getOptions(route, navigation, options[route.key]);
|
|
283
|
+
const element = render(
|
|
284
|
+
route,
|
|
285
|
+
navigation,
|
|
286
|
+
customOptions,
|
|
287
|
+
state.routes[i].state
|
|
288
|
+
);
|
|
230
289
|
|
|
231
290
|
acc[route.key] = {
|
|
232
291
|
route,
|
|
@@ -235,9 +294,44 @@ export function useDescriptors<
|
|
|
235
294
|
render() {
|
|
236
295
|
return element;
|
|
237
296
|
},
|
|
238
|
-
options:
|
|
297
|
+
options: customOptions as ScreenOptions,
|
|
239
298
|
};
|
|
240
299
|
|
|
241
300
|
return acc;
|
|
242
301
|
}, {});
|
|
302
|
+
|
|
303
|
+
/**
|
|
304
|
+
* Create a descriptor object for a route.
|
|
305
|
+
*
|
|
306
|
+
* @param route Route object for which the descriptor should be created
|
|
307
|
+
* @param placeholder Whether the descriptor should be a placeholder, e.g. for a route not yet in the state
|
|
308
|
+
* @returns Descriptor object
|
|
309
|
+
*/
|
|
310
|
+
const describe = (route: RouteProp<ParamListBase>, placeholder: boolean) => {
|
|
311
|
+
if (!placeholder) {
|
|
312
|
+
if (!(route.key in descriptors)) {
|
|
313
|
+
throw new Error(`Couldn't find a route with the key ${route.key}.`);
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
return descriptors[route.key];
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
const navigation = base;
|
|
320
|
+
const customOptions = getOptions(route, navigation, {});
|
|
321
|
+
const element = render(route, navigation, customOptions, undefined);
|
|
322
|
+
|
|
323
|
+
return {
|
|
324
|
+
route,
|
|
325
|
+
navigation,
|
|
326
|
+
render() {
|
|
327
|
+
return element;
|
|
328
|
+
},
|
|
329
|
+
options: customOptions as ScreenOptions,
|
|
330
|
+
};
|
|
331
|
+
};
|
|
332
|
+
|
|
333
|
+
return {
|
|
334
|
+
describe,
|
|
335
|
+
descriptors,
|
|
336
|
+
};
|
|
243
337
|
}
|
package/src/useFocusEffect.tsx
CHANGED
|
@@ -14,6 +14,7 @@ type EffectCallback = () => undefined | void | (() => void);
|
|
|
14
14
|
export function useFocusEffect(effect: EffectCallback) {
|
|
15
15
|
const navigation = useNavigation();
|
|
16
16
|
|
|
17
|
+
// eslint-disable-next-line prefer-rest-params
|
|
17
18
|
if (arguments[1] !== undefined) {
|
|
18
19
|
const message =
|
|
19
20
|
"You passed a second argument to 'useFocusEffect', but it only accepts one argument. " +
|
|
@@ -2,8 +2,8 @@ import type { ParamListBase } from '@react-navigation/routers';
|
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
|
-
FocusedNavigationCallback,
|
|
6
|
-
FocusedNavigationListener,
|
|
5
|
+
type FocusedNavigationCallback,
|
|
6
|
+
type FocusedNavigationListener,
|
|
7
7
|
NavigationBuilderContext,
|
|
8
8
|
} from './NavigationBuilderContext';
|
|
9
9
|
import type { NavigationHelpers } from './types';
|