@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/StaticNavigation.tsx
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { NavigationState, ParamListBase } from '@react-navigation/routers';
|
|
2
2
|
import * as React from 'react';
|
|
3
|
+
import { isValidElementType } from 'react-is';
|
|
3
4
|
|
|
4
|
-
import { fromEntries } from './fromEntries';
|
|
5
5
|
import type {
|
|
6
6
|
DefaultNavigatorOptions,
|
|
7
7
|
EventMapBase,
|
|
@@ -22,7 +22,17 @@ type FlatType<T> = { [K in keyof T]: T[K] } & {};
|
|
|
22
22
|
* keyof T doesn't work for union types. We can use distributive conditional types instead.
|
|
23
23
|
* https://www.typescriptlang.org/docs/handbook/2/conditional-types.html#distributive-conditional-types
|
|
24
24
|
*/
|
|
25
|
-
type KeysOf<T> = T extends
|
|
25
|
+
type KeysOf<T> = T extends {} ? keyof T : never;
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* We get a union type when using keyof, but we want an intersection instead.
|
|
29
|
+
* https://stackoverflow.com/a/50375286/1665026
|
|
30
|
+
*/
|
|
31
|
+
type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (
|
|
32
|
+
k: infer I
|
|
33
|
+
) => void
|
|
34
|
+
? I
|
|
35
|
+
: never;
|
|
26
36
|
|
|
27
37
|
type UnknownToUndefined<T> = unknown extends T ? undefined : T;
|
|
28
38
|
|
|
@@ -31,23 +41,16 @@ type ParamsForScreenComponent<T> = T extends {
|
|
|
31
41
|
}
|
|
32
42
|
? P
|
|
33
43
|
: T extends React.ComponentType<{ route: { params: infer P } }>
|
|
34
|
-
|
|
35
|
-
|
|
44
|
+
? P
|
|
45
|
+
: undefined;
|
|
36
46
|
|
|
37
47
|
type ParamsForScreen<T> = T extends { screen: StaticNavigation<any, any, any> }
|
|
38
48
|
? NavigatorScreenParams<StaticParamList<T['screen']>> | undefined
|
|
39
49
|
: T extends StaticNavigation<any, any, any>
|
|
40
|
-
|
|
41
|
-
|
|
50
|
+
? NavigatorScreenParams<StaticParamList<T>> | undefined
|
|
51
|
+
: UnknownToUndefined<ParamsForScreenComponent<T>>;
|
|
42
52
|
|
|
43
|
-
type ParamListForScreens<
|
|
44
|
-
Screens extends StaticConfigScreens<
|
|
45
|
-
ParamListBase,
|
|
46
|
-
NavigationState,
|
|
47
|
-
{},
|
|
48
|
-
EventMapBase
|
|
49
|
-
>
|
|
50
|
-
> = {
|
|
53
|
+
type ParamListForScreens<Screens> = {
|
|
51
54
|
[Key in KeysOf<Screens>]: ParamsForScreen<Screens[Key]>;
|
|
52
55
|
};
|
|
53
56
|
|
|
@@ -63,7 +66,7 @@ type ParamListForGroups<
|
|
|
63
66
|
>;
|
|
64
67
|
};
|
|
65
68
|
}>
|
|
66
|
-
| undefined
|
|
69
|
+
| undefined,
|
|
67
70
|
> = Groups extends {
|
|
68
71
|
[key: string]: {
|
|
69
72
|
screens: StaticConfigScreens<
|
|
@@ -74,14 +77,14 @@ type ParamListForGroups<
|
|
|
74
77
|
>;
|
|
75
78
|
};
|
|
76
79
|
}
|
|
77
|
-
? ParamListForScreens<Groups[keyof Groups]['screens']
|
|
80
|
+
? ParamListForScreens<UnionToIntersection<Groups[keyof Groups]['screens']>>
|
|
78
81
|
: {};
|
|
79
82
|
|
|
80
83
|
type StaticConfigScreens<
|
|
81
84
|
ParamList extends ParamListBase,
|
|
82
85
|
State extends NavigationState,
|
|
83
86
|
ScreenOptions extends {},
|
|
84
|
-
EventMap extends EventMapBase
|
|
87
|
+
EventMap extends EventMapBase,
|
|
85
88
|
> = {
|
|
86
89
|
[key in keyof ParamList]:
|
|
87
90
|
| React.ComponentType<any>
|
|
@@ -115,14 +118,7 @@ type StaticConfigScreens<
|
|
|
115
118
|
* },
|
|
116
119
|
* ```
|
|
117
120
|
*/
|
|
118
|
-
linking?:
|
|
119
|
-
| FlatType<
|
|
120
|
-
Pick<
|
|
121
|
-
PathConfig<ParamList>,
|
|
122
|
-
'path' | 'exact' | 'parse' | 'stringify'
|
|
123
|
-
>
|
|
124
|
-
>
|
|
125
|
-
| string;
|
|
121
|
+
linking?: PathConfig<ParamList> | string;
|
|
126
122
|
/**
|
|
127
123
|
* Static navigation config or Component to render for the screen.
|
|
128
124
|
*/
|
|
@@ -134,7 +130,7 @@ type GroupConfig<
|
|
|
134
130
|
ParamList extends ParamListBase,
|
|
135
131
|
State extends NavigationState,
|
|
136
132
|
ScreenOptions extends {},
|
|
137
|
-
EventMap extends EventMapBase
|
|
133
|
+
EventMap extends EventMapBase,
|
|
138
134
|
> = Omit<RouteGroupConfig<ParamList, ScreenOptions>, 'screens' | 'children'> & {
|
|
139
135
|
/**
|
|
140
136
|
* Callback to determine whether the screens in the group should be rendered or not.
|
|
@@ -152,7 +148,7 @@ export type StaticConfig<
|
|
|
152
148
|
State extends NavigationState,
|
|
153
149
|
ScreenOptions extends {},
|
|
154
150
|
EventMap extends EventMapBase,
|
|
155
|
-
Navigator extends React.ComponentType<{}
|
|
151
|
+
Navigator extends React.ComponentType<{}>,
|
|
156
152
|
> = Omit<
|
|
157
153
|
Omit<
|
|
158
154
|
React.ComponentProps<Navigator>,
|
|
@@ -201,7 +197,7 @@ export type StaticParamList<
|
|
|
201
197
|
};
|
|
202
198
|
};
|
|
203
199
|
};
|
|
204
|
-
}
|
|
200
|
+
},
|
|
205
201
|
> = FlatType<
|
|
206
202
|
ParamListForScreens<T['config']['screens']> &
|
|
207
203
|
ParamListForGroups<T['config']['groups']>
|
|
@@ -246,7 +242,7 @@ const getItemsFromScreens = (
|
|
|
246
242
|
useIf = _if;
|
|
247
243
|
props = rest;
|
|
248
244
|
|
|
249
|
-
if (
|
|
245
|
+
if (isValidElementType(screen)) {
|
|
250
246
|
component = screen;
|
|
251
247
|
} else if ('config' in screen) {
|
|
252
248
|
isNavigator = true;
|
|
@@ -255,7 +251,7 @@ const getItemsFromScreens = (
|
|
|
255
251
|
`${name}Navigator`
|
|
256
252
|
);
|
|
257
253
|
}
|
|
258
|
-
} else if (
|
|
254
|
+
} else if (isValidElementType(item)) {
|
|
259
255
|
component = item;
|
|
260
256
|
} else if ('config' in item) {
|
|
261
257
|
isNavigator = true;
|
|
@@ -268,7 +264,7 @@ const getItemsFromScreens = (
|
|
|
268
264
|
);
|
|
269
265
|
}
|
|
270
266
|
|
|
271
|
-
|
|
267
|
+
const element = isNavigator ? (
|
|
272
268
|
React.createElement(component, {})
|
|
273
269
|
) : (
|
|
274
270
|
<MemoizedScreen component={component} />
|
|
@@ -304,6 +300,12 @@ export function createComponentForStaticNavigation(
|
|
|
304
300
|
const { Navigator, Group, Screen, config } = tree;
|
|
305
301
|
const { screens, groups, ...rest } = config;
|
|
306
302
|
|
|
303
|
+
if (screens == null) {
|
|
304
|
+
throw new Error(
|
|
305
|
+
"Couldn't find a 'screens' property. Make sure to define your screens under a 'screens' property in the configuration."
|
|
306
|
+
);
|
|
307
|
+
}
|
|
308
|
+
|
|
307
309
|
const items = getItemsFromScreens(Screen, screens);
|
|
308
310
|
|
|
309
311
|
if (groups) {
|
|
@@ -369,7 +371,7 @@ export function createPathConfigForStaticNavigation(tree: {
|
|
|
369
371
|
>;
|
|
370
372
|
};
|
|
371
373
|
}) {
|
|
372
|
-
return fromEntries(
|
|
374
|
+
return Object.fromEntries(
|
|
373
375
|
Object.entries(tree.config.screens)
|
|
374
376
|
.map(([key, item]) => {
|
|
375
377
|
const screenConfig: PathConfig<ParamListBase> = {};
|
|
@@ -7,7 +7,7 @@ export function checkDuplicateRouteNames(state: NavigationState) {
|
|
|
7
7
|
location: string,
|
|
8
8
|
state: NavigationState | PartialState<NavigationState>
|
|
9
9
|
) => {
|
|
10
|
-
state.routes.forEach((route: typeof state.routes[0]) => {
|
|
10
|
+
state.routes.forEach((route: (typeof state.routes)[0]) => {
|
|
11
11
|
const currentLocation = location
|
|
12
12
|
? `${location} > ${route.name}`
|
|
13
13
|
: route.name;
|
|
@@ -10,7 +10,7 @@ export const NOT_INITIALIZED_ERROR =
|
|
|
10
10
|
"The 'navigation' object hasn't been initialized yet. This might happen if you don't have a navigator mounted, or if the navigator hasn't finished mounting. See https://reactnavigation.org/docs/navigating-without-navigation-prop#handling-initialization for more details.";
|
|
11
11
|
|
|
12
12
|
export function createNavigationContainerRef<
|
|
13
|
-
ParamList extends {} = ReactNavigation.RootParamList
|
|
13
|
+
ParamList extends {} = ReactNavigation.RootParamList,
|
|
14
14
|
>(): NavigationContainerRefWithCurrent<ParamList> {
|
|
15
15
|
const methods = [
|
|
16
16
|
...Object.keys(CommonActions),
|
|
@@ -17,7 +17,7 @@ export function createNavigatorFactory<
|
|
|
17
17
|
State extends NavigationState,
|
|
18
18
|
ScreenOptions extends {},
|
|
19
19
|
EventMap extends EventMapBase,
|
|
20
|
-
NavigatorComponent extends React.ComponentType<any
|
|
20
|
+
NavigatorComponent extends React.ComponentType<any>,
|
|
21
21
|
>(Navigator: NavigatorComponent) {
|
|
22
22
|
function createNavigator<ParamList extends ParamListBase>(): TypedNavigator<
|
|
23
23
|
ParamList,
|
|
@@ -27,7 +27,6 @@ export function createNavigatorFactory<
|
|
|
27
27
|
typeof Navigator
|
|
28
28
|
>;
|
|
29
29
|
|
|
30
|
-
// eslint-disable-next-line no-redeclare
|
|
31
30
|
function createNavigator<
|
|
32
31
|
ParamList extends ParamListBase,
|
|
33
32
|
Config extends StaticConfig<
|
|
@@ -36,7 +35,7 @@ export function createNavigatorFactory<
|
|
|
36
35
|
ScreenOptions,
|
|
37
36
|
EventMap,
|
|
38
37
|
typeof Navigator
|
|
39
|
-
|
|
38
|
+
>,
|
|
40
39
|
>(
|
|
41
40
|
config: Config
|
|
42
41
|
): TypedNavigator<
|
|
@@ -47,7 +46,6 @@ export function createNavigatorFactory<
|
|
|
47
46
|
typeof Navigator
|
|
48
47
|
> & { config: Config };
|
|
49
48
|
|
|
50
|
-
// eslint-disable-next-line no-redeclare
|
|
51
49
|
function createNavigator(config?: any): any {
|
|
52
50
|
if (config != null) {
|
|
53
51
|
return {
|
|
@@ -65,7 +65,7 @@ export function getActionFromState(
|
|
|
65
65
|
let config: ConfigItem | undefined = normalizedConfig?.screens?.[route?.name];
|
|
66
66
|
let params = { ...route.params } as NavigatorScreenParams<ParamListBase>;
|
|
67
67
|
|
|
68
|
-
|
|
68
|
+
const payload = route
|
|
69
69
|
? { name: route.name, path: route.path, params }
|
|
70
70
|
: undefined;
|
|
71
71
|
|
|
@@ -20,9 +20,9 @@ export function getFocusedRouteNameFromRoute(
|
|
|
20
20
|
: state.routes.length - 1)
|
|
21
21
|
].name
|
|
22
22
|
: // If state doesn't exist, we need to default to `screen` param if available
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
23
|
+
typeof params?.screen === 'string'
|
|
24
|
+
? params.screen
|
|
25
|
+
: undefined;
|
|
26
26
|
|
|
27
27
|
return routeName;
|
|
28
28
|
}
|
package/src/getPathFromState.tsx
CHANGED
|
@@ -5,11 +5,11 @@ import type {
|
|
|
5
5
|
} from '@react-navigation/routers';
|
|
6
6
|
import * as queryString from 'query-string';
|
|
7
7
|
|
|
8
|
-
import { fromEntries } from './fromEntries';
|
|
9
8
|
import type { PathConfig, PathConfigMap } from './types';
|
|
10
9
|
import { validatePathConfig } from './validatePathConfig';
|
|
11
10
|
|
|
12
11
|
type Options<ParamList extends {}> = {
|
|
12
|
+
path?: string;
|
|
13
13
|
initialRouteName?: string;
|
|
14
14
|
screens: PathConfigMap<ParamList>;
|
|
15
15
|
};
|
|
@@ -99,11 +99,11 @@ export function getPathFromState<ParamList extends {}>(
|
|
|
99
99
|
let pattern: string | undefined;
|
|
100
100
|
|
|
101
101
|
let focusedParams: Record<string, any> | undefined;
|
|
102
|
-
|
|
102
|
+
const focusedRoute = getActiveRoute(state);
|
|
103
103
|
let currentOptions = configs;
|
|
104
104
|
|
|
105
105
|
// Keep all the route names that appeared during going deeper in config in case the pattern is resolved to undefined
|
|
106
|
-
|
|
106
|
+
const nestedRouteNames = [];
|
|
107
107
|
|
|
108
108
|
let hasNext = true;
|
|
109
109
|
|
|
@@ -115,7 +115,7 @@ export function getPathFromState<ParamList extends {}>(
|
|
|
115
115
|
if (route.params) {
|
|
116
116
|
const stringify = currentOptions[route.name]?.stringify;
|
|
117
117
|
|
|
118
|
-
const currentParams = fromEntries(
|
|
118
|
+
const currentParams = Object.fromEntries(
|
|
119
119
|
Object.entries(route.params).map(([key, value]) => [
|
|
120
120
|
key,
|
|
121
121
|
stringify?.[key] ? stringify[key](value) : String(value),
|
|
@@ -213,7 +213,7 @@ export function getPathFromState<ParamList extends {}>(
|
|
|
213
213
|
if (route.state) {
|
|
214
214
|
path += '/';
|
|
215
215
|
} else if (focusedParams) {
|
|
216
|
-
for (
|
|
216
|
+
for (const param in focusedParams) {
|
|
217
217
|
if (focusedParams[param] === 'undefined') {
|
|
218
218
|
// eslint-disable-next-line @typescript-eslint/no-dynamic-delete
|
|
219
219
|
delete focusedParams[param];
|
|
@@ -234,6 +234,11 @@ export function getPathFromState<ParamList extends {}>(
|
|
|
234
234
|
path = path.replace(/\/+/g, '/');
|
|
235
235
|
path = path.length > 1 ? path.replace(/\/$/, '') : path;
|
|
236
236
|
|
|
237
|
+
// Include the root path if specified
|
|
238
|
+
if (options?.path) {
|
|
239
|
+
path = joinPaths(options.path, path);
|
|
240
|
+
}
|
|
241
|
+
|
|
237
242
|
return path;
|
|
238
243
|
}
|
|
239
244
|
|
|
@@ -257,17 +262,15 @@ const createConfigItem = (
|
|
|
257
262
|
return { pattern };
|
|
258
263
|
}
|
|
259
264
|
|
|
260
|
-
// If an object is specified as the value (e.g. Foo: { ... }),
|
|
261
|
-
// It can have `path` property and `screens` prop which has nested configs
|
|
262
|
-
let pattern: string | undefined;
|
|
263
|
-
|
|
264
265
|
if (config.exact && config.path === undefined) {
|
|
265
266
|
throw new Error(
|
|
266
267
|
"A 'path' needs to be specified when specifying 'exact: true'. If you don't want this screen in the URL, specify it as empty string, e.g. `path: ''`."
|
|
267
268
|
);
|
|
268
269
|
}
|
|
269
270
|
|
|
270
|
-
|
|
271
|
+
// If an object is specified as the value (e.g. Foo: { ... }),
|
|
272
|
+
// It can have `path` property and `screens` prop which has nested configs
|
|
273
|
+
const pattern =
|
|
271
274
|
config.exact !== true
|
|
272
275
|
? joinPaths(parentPattern || '', config.path || '')
|
|
273
276
|
: config.path || '';
|
|
@@ -288,7 +291,7 @@ const createNormalizedConfigs = (
|
|
|
288
291
|
options: PathConfigMap<object>,
|
|
289
292
|
pattern?: string
|
|
290
293
|
): Record<string, ConfigItem> =>
|
|
291
|
-
fromEntries(
|
|
294
|
+
Object.fromEntries(
|
|
292
295
|
Object.entries(options).map(([name, c]) => {
|
|
293
296
|
const result = createConfigItem(c, pattern);
|
|
294
297
|
|
package/src/getStateFromPath.tsx
CHANGED
|
@@ -11,6 +11,7 @@ import type { PathConfigMap } from './types';
|
|
|
11
11
|
import { validatePathConfig } from './validatePathConfig';
|
|
12
12
|
|
|
13
13
|
type Options<ParamList extends {}> = {
|
|
14
|
+
path?: string;
|
|
14
15
|
initialRouteName?: string;
|
|
15
16
|
screens: PathConfigMap<ParamList>;
|
|
16
17
|
};
|
|
@@ -70,7 +71,7 @@ export function getStateFromPath<ParamList extends {}>(
|
|
|
70
71
|
validatePathConfig(options);
|
|
71
72
|
}
|
|
72
73
|
|
|
73
|
-
|
|
74
|
+
const initialRoutes: InitialRouteConfig[] = [];
|
|
74
75
|
|
|
75
76
|
if (options?.initialRouteName) {
|
|
76
77
|
initialRoutes.push({
|
|
@@ -89,6 +90,21 @@ export function getStateFromPath<ParamList extends {}>(
|
|
|
89
90
|
// Make sure there is a trailing slash
|
|
90
91
|
remaining = remaining.endsWith('/') ? remaining : `${remaining}/`;
|
|
91
92
|
|
|
93
|
+
const prefix = options?.path?.replace(/^\//, ''); // Remove extra leading slash
|
|
94
|
+
|
|
95
|
+
if (prefix) {
|
|
96
|
+
// Make sure there is a trailing slash
|
|
97
|
+
const normalizedPrefix = prefix.endsWith('/') ? prefix : `${prefix}/`;
|
|
98
|
+
|
|
99
|
+
// If the path doesn't start with the prefix, it's not a match
|
|
100
|
+
if (!remaining.startsWith(normalizedPrefix)) {
|
|
101
|
+
return undefined;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// Remove the prefix from the path
|
|
105
|
+
remaining = remaining.replace(normalizedPrefix, '');
|
|
106
|
+
}
|
|
107
|
+
|
|
92
108
|
if (screens === undefined) {
|
|
93
109
|
// When no config is specified, use the path segments as route names
|
|
94
110
|
const routes = remaining
|
|
@@ -507,7 +523,6 @@ const createNestedStateObject = (
|
|
|
507
523
|
initialRoutes: InitialRouteConfig[],
|
|
508
524
|
flatConfig?: RouteConfig[]
|
|
509
525
|
) => {
|
|
510
|
-
let state: InitialState;
|
|
511
526
|
let route = routes.shift() as ParsedRoute;
|
|
512
527
|
const parentScreens: string[] = [];
|
|
513
528
|
|
|
@@ -515,7 +530,11 @@ const createNestedStateObject = (
|
|
|
515
530
|
|
|
516
531
|
parentScreens.push(route.name);
|
|
517
532
|
|
|
518
|
-
state = createStateObject(
|
|
533
|
+
const state: InitialState = createStateObject(
|
|
534
|
+
initialRoute,
|
|
535
|
+
route,
|
|
536
|
+
routes.length === 0
|
|
537
|
+
);
|
|
519
538
|
|
|
520
539
|
if (routes.length > 0) {
|
|
521
540
|
let nestedState = state;
|
package/src/index.tsx
CHANGED
|
@@ -15,12 +15,15 @@ export { NavigationRouteContext } from './NavigationRouteContext';
|
|
|
15
15
|
export { PreventRemoveContext } from './PreventRemoveContext';
|
|
16
16
|
export { PreventRemoveProvider } from './PreventRemoveProvider';
|
|
17
17
|
export {
|
|
18
|
+
createComponentForStaticNavigation,
|
|
19
|
+
createPathConfigForStaticNavigation,
|
|
18
20
|
type StaticNavigation,
|
|
19
21
|
type StaticParamList,
|
|
20
22
|
type StaticScreenProps,
|
|
21
|
-
createComponentForStaticNavigation,
|
|
22
|
-
createPathConfigForStaticNavigation,
|
|
23
23
|
} from './StaticNavigation';
|
|
24
|
+
export { ThemeContext } from './theming/ThemeContext';
|
|
25
|
+
export { ThemeProvider } from './theming/ThemeProvider';
|
|
26
|
+
export { useTheme } from './theming/useTheme';
|
|
24
27
|
export * from './types';
|
|
25
28
|
export { useFocusEffect } from './useFocusEffect';
|
|
26
29
|
export { useIsFocused } from './useIsFocused';
|
|
@@ -29,7 +32,7 @@ export { useNavigationBuilder } from './useNavigationBuilder';
|
|
|
29
32
|
export { useNavigationContainerRef } from './useNavigationContainerRef';
|
|
30
33
|
export { useNavigationIndependentTree } from './useNavigationIndependentTree';
|
|
31
34
|
export { useNavigationState } from './useNavigationState';
|
|
32
|
-
export {
|
|
35
|
+
export { usePreventRemove } from './usePreventRemove';
|
|
33
36
|
export { usePreventRemoveContext } from './usePreventRemoveContext';
|
|
34
37
|
export { useRoute } from './useRoute';
|
|
35
38
|
export { validatePathConfig } from './validatePathConfig';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
|
|
3
|
+
import { ThemeContext } from './ThemeContext';
|
|
4
|
+
|
|
5
|
+
type Props = {
|
|
6
|
+
value: ReactNavigation.Theme | undefined;
|
|
7
|
+
children: React.ReactNode;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export function ThemeProvider({ value, children }: Props) {
|
|
11
|
+
return (
|
|
12
|
+
<ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>
|
|
13
|
+
);
|
|
14
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
|
|
3
|
+
import { ThemeContext } from './ThemeContext';
|
|
4
|
+
|
|
5
|
+
export function useTheme() {
|
|
6
|
+
const theme = React.useContext(ThemeContext);
|
|
7
|
+
|
|
8
|
+
if (theme == null) {
|
|
9
|
+
throw new Error(
|
|
10
|
+
"Couldn't find a theme. Is your component inside NavigationContainer or does it have a theme?"
|
|
11
|
+
);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
return theme;
|
|
15
|
+
}
|