@react-navigation/core 8.0.0-alpha.4 → 8.0.0-alpha.41

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.
Files changed (323) hide show
  1. package/README.md +17 -14
  2. package/lib/module/BaseNavigationContainer.js +173 -90
  3. package/lib/module/BaseNavigationContainer.js.map +1 -1
  4. package/lib/module/ConsumedParamsContext.js +5 -0
  5. package/lib/module/ConsumedParamsContext.js.map +1 -0
  6. package/lib/module/DataLoading.js +129 -0
  7. package/lib/module/DataLoading.js.map +1 -0
  8. package/lib/module/NavigationBuilderContext.js +7 -10
  9. package/lib/module/NavigationBuilderContext.js.map +1 -1
  10. package/lib/module/NavigationIndependentTree.js +54 -9
  11. package/lib/module/NavigationIndependentTree.js.map +1 -1
  12. package/lib/module/NavigationProvider.js +37 -12
  13. package/lib/module/NavigationProvider.js.map +1 -1
  14. package/lib/module/NavigationRootContext.js +8 -0
  15. package/lib/module/NavigationRootContext.js.map +1 -0
  16. package/lib/module/NavigationStateContext.js +3 -0
  17. package/lib/module/NavigationStateContext.js.map +1 -1
  18. package/lib/module/PreventRemoveContext.js.map +1 -1
  19. package/lib/module/PreventRemoveProvider.js +40 -31
  20. package/lib/module/PreventRemoveProvider.js.map +1 -1
  21. package/lib/module/SceneView.js +29 -57
  22. package/lib/module/SceneView.js.map +1 -1
  23. package/lib/module/StaticNavigation.js +219 -67
  24. package/lib/module/StaticNavigation.js.map +1 -1
  25. package/lib/module/StaticTreeContext.js +5 -0
  26. package/lib/module/StaticTreeContext.js.map +1 -0
  27. package/lib/module/createNavigationContainerRef.js +7 -9
  28. package/lib/module/createNavigationContainerRef.js.map +1 -1
  29. package/lib/module/createNavigatorFactory.js +27 -5
  30. package/lib/module/createNavigatorFactory.js.map +1 -1
  31. package/lib/module/findFocusedRoute.js +7 -4
  32. package/lib/module/findFocusedRoute.js.map +1 -1
  33. package/lib/module/getActionFromState.js +45 -20
  34. package/lib/module/getActionFromState.js.map +1 -1
  35. package/lib/module/getPathFromState.js +204 -94
  36. package/lib/module/getPathFromState.js.map +1 -1
  37. package/lib/module/getPatternParts.js +61 -14
  38. package/lib/module/getPatternParts.js.map +1 -1
  39. package/lib/module/getStateFromPath.js +608 -272
  40. package/lib/module/getStateFromPath.js.map +1 -1
  41. package/lib/module/getStateFromRouteParams.js +23 -0
  42. package/lib/module/getStateFromRouteParams.js.map +1 -0
  43. package/lib/module/index.js +7 -6
  44. package/lib/module/index.js.map +1 -1
  45. package/lib/module/internal.js +2 -0
  46. package/lib/module/internal.js.map +1 -0
  47. package/lib/module/isRecordEqual.js +1 -1
  48. package/lib/module/isRecordEqual.js.map +1 -1
  49. package/lib/module/queryString.js +71 -0
  50. package/lib/module/queryString.js.map +1 -0
  51. package/lib/module/theming/useTheme.js +1 -1
  52. package/lib/module/theming/useTheme.js.map +1 -1
  53. package/lib/module/types.js +35 -1
  54. package/lib/module/types.js.map +1 -1
  55. package/lib/module/useDescriptors.js +65 -25
  56. package/lib/module/useDescriptors.js.map +1 -1
  57. package/lib/module/useEventEmitter.js +48 -33
  58. package/lib/module/useEventEmitter.js.map +1 -1
  59. package/lib/module/useFocusEffect.js +4 -2
  60. package/lib/module/useFocusEffect.js.map +1 -1
  61. package/lib/module/useFocusEvents.js +15 -5
  62. package/lib/module/useFocusEvents.js.map +1 -1
  63. package/lib/module/useFocusedListenersChildrenAdapter.js +3 -3
  64. package/lib/module/useFocusedListenersChildrenAdapter.js.map +1 -1
  65. package/lib/module/useIsFocused.js +8 -12
  66. package/lib/module/useIsFocused.js.map +1 -1
  67. package/lib/module/useKeyedChildListeners.js +5 -2
  68. package/lib/module/useKeyedChildListeners.js.map +1 -1
  69. package/lib/module/useLazyValue.js.map +1 -1
  70. package/lib/module/useNavigation.js +4 -17
  71. package/lib/module/useNavigation.js.map +1 -1
  72. package/lib/module/useNavigationBuilder.js +244 -147
  73. package/lib/module/useNavigationBuilder.js.map +1 -1
  74. package/lib/module/useNavigationCache.js +92 -89
  75. package/lib/module/useNavigationCache.js.map +1 -1
  76. package/lib/module/useNavigationHelpers.js +22 -29
  77. package/lib/module/useNavigationHelpers.js.map +1 -1
  78. package/lib/module/useNavigationIndependentTree.js +1 -1
  79. package/lib/module/useNavigationIndependentTree.js.map +1 -1
  80. package/lib/module/useNavigationState.js +158 -46
  81. package/lib/module/useNavigationState.js.map +1 -1
  82. package/lib/module/useOnAction.js +58 -11
  83. package/lib/module/useOnAction.js.map +1 -1
  84. package/lib/module/useOnGetNavigation.js +26 -0
  85. package/lib/module/useOnGetNavigation.js.map +1 -0
  86. package/lib/module/useOnGetState.js +7 -4
  87. package/lib/module/useOnGetState.js.map +1 -1
  88. package/lib/module/useOnPreventRemove.js +40 -31
  89. package/lib/module/useOnPreventRemove.js.map +1 -1
  90. package/lib/module/useOnRouteFocus.js +2 -2
  91. package/lib/module/useOnRouteFocus.js.map +1 -1
  92. package/lib/module/useOptionsGetters.js +35 -27
  93. package/lib/module/useOptionsGetters.js.map +1 -1
  94. package/lib/module/usePreventRemove.js +11 -5
  95. package/lib/module/usePreventRemove.js.map +1 -1
  96. package/lib/module/usePreventRemoveContext.js +2 -2
  97. package/lib/module/usePreventRemoveContext.js.map +1 -1
  98. package/lib/module/useRegisterNavigator.js +3 -4
  99. package/lib/module/useRegisterNavigator.js.map +1 -1
  100. package/lib/module/useRoute.js +2 -0
  101. package/lib/module/useRoute.js.map +1 -1
  102. package/lib/module/useRouteCache.js +51 -35
  103. package/lib/module/useRouteCache.js.map +1 -1
  104. package/lib/module/useScheduleUpdate.js +12 -10
  105. package/lib/module/useScheduleUpdate.js.map +1 -1
  106. package/lib/module/useStateForPath.js +1 -1
  107. package/lib/module/useStateForPath.js.map +1 -1
  108. package/lib/module/useSyncState.js +37 -15
  109. package/lib/module/useSyncState.js.map +1 -1
  110. package/lib/module/validatePathConfig.js +50 -36
  111. package/lib/module/validatePathConfig.js.map +1 -1
  112. package/lib/typescript/src/BaseNavigationContainer.d.ts +6 -3
  113. package/lib/typescript/src/BaseNavigationContainer.d.ts.map +1 -1
  114. package/lib/typescript/src/ConsumedParamsContext.d.ts +3 -0
  115. package/lib/typescript/src/ConsumedParamsContext.d.ts.map +1 -0
  116. package/lib/typescript/src/DataLoading.d.ts +21 -0
  117. package/lib/typescript/src/DataLoading.d.ts.map +1 -0
  118. package/lib/typescript/src/EnsureSingleNavigator.d.ts +1 -1
  119. package/lib/typescript/src/EnsureSingleNavigator.d.ts.map +1 -1
  120. package/lib/typescript/src/Group.d.ts +1 -1
  121. package/lib/typescript/src/Group.d.ts.map +1 -1
  122. package/lib/typescript/src/NavigationBuilderContext.d.ts +22 -14
  123. package/lib/typescript/src/NavigationBuilderContext.d.ts.map +1 -1
  124. package/lib/typescript/src/NavigationContainerRefContext.d.ts +1 -1
  125. package/lib/typescript/src/NavigationContainerRefContext.d.ts.map +1 -1
  126. package/lib/typescript/src/NavigationFocusedRouteStateContext.d.ts +4 -4
  127. package/lib/typescript/src/NavigationFocusedRouteStateContext.d.ts.map +1 -1
  128. package/lib/typescript/src/NavigationHelpersContext.d.ts +1 -1
  129. package/lib/typescript/src/NavigationHelpersContext.d.ts.map +1 -1
  130. package/lib/typescript/src/NavigationIndependentTree.d.ts +1 -1
  131. package/lib/typescript/src/NavigationIndependentTree.d.ts.map +1 -1
  132. package/lib/typescript/src/NavigationProvider.d.ts +21 -18
  133. package/lib/typescript/src/NavigationProvider.d.ts.map +1 -1
  134. package/lib/typescript/src/NavigationRootContext.d.ts +8 -0
  135. package/lib/typescript/src/NavigationRootContext.d.ts.map +1 -0
  136. package/lib/typescript/src/NavigationStateContext.d.ts +3 -3
  137. package/lib/typescript/src/NavigationStateContext.d.ts.map +1 -1
  138. package/lib/typescript/src/PreventRemoveContext.d.ts +1 -0
  139. package/lib/typescript/src/PreventRemoveContext.d.ts.map +1 -1
  140. package/lib/typescript/src/PreventRemoveProvider.d.ts +1 -1
  141. package/lib/typescript/src/PreventRemoveProvider.d.ts.map +1 -1
  142. package/lib/typescript/src/SceneView.d.ts +5 -2
  143. package/lib/typescript/src/SceneView.d.ts.map +1 -1
  144. package/lib/typescript/src/Screen.d.ts +1 -1
  145. package/lib/typescript/src/Screen.d.ts.map +1 -1
  146. package/lib/typescript/src/StaticContainer.d.ts +1 -1
  147. package/lib/typescript/src/StaticContainer.d.ts.map +1 -1
  148. package/lib/typescript/src/StaticNavigation.d.ts +189 -111
  149. package/lib/typescript/src/StaticNavigation.d.ts.map +1 -1
  150. package/lib/typescript/src/StaticTreeContext.d.ts +4 -0
  151. package/lib/typescript/src/StaticTreeContext.d.ts.map +1 -0
  152. package/lib/typescript/src/createNavigationContainerRef.d.ts +1 -1
  153. package/lib/typescript/src/createNavigationContainerRef.d.ts.map +1 -1
  154. package/lib/typescript/src/createNavigatorFactory.d.ts +23 -5
  155. package/lib/typescript/src/createNavigatorFactory.d.ts.map +1 -1
  156. package/lib/typescript/src/findFocusedRoute.d.ts +3 -8
  157. package/lib/typescript/src/findFocusedRoute.d.ts.map +1 -1
  158. package/lib/typescript/src/getActionFromState.d.ts +4 -4
  159. package/lib/typescript/src/getActionFromState.d.ts.map +1 -1
  160. package/lib/typescript/src/getPathFromState.d.ts +3 -3
  161. package/lib/typescript/src/getPathFromState.d.ts.map +1 -1
  162. package/lib/typescript/src/getPatternParts.d.ts +5 -2
  163. package/lib/typescript/src/getPatternParts.d.ts.map +1 -1
  164. package/lib/typescript/src/getStateFromPath.d.ts +4 -7
  165. package/lib/typescript/src/getStateFromPath.d.ts.map +1 -1
  166. package/lib/typescript/src/getStateFromRouteParams.d.ts +3 -0
  167. package/lib/typescript/src/getStateFromRouteParams.d.ts.map +1 -0
  168. package/lib/typescript/src/index.d.ts +36 -33
  169. package/lib/typescript/src/index.d.ts.map +1 -1
  170. package/lib/typescript/src/internal.d.ts +3 -0
  171. package/lib/typescript/src/internal.d.ts.map +1 -0
  172. package/lib/typescript/src/isRecordEqual.d.ts.map +1 -1
  173. package/lib/typescript/src/queryString.d.ts +5 -0
  174. package/lib/typescript/src/queryString.d.ts.map +1 -0
  175. package/lib/typescript/src/theming/ThemeContext.d.ts +1 -1
  176. package/lib/typescript/src/theming/ThemeContext.d.ts.map +1 -1
  177. package/lib/typescript/src/theming/ThemeProvider.d.ts +2 -2
  178. package/lib/typescript/src/theming/ThemeProvider.d.ts.map +1 -1
  179. package/lib/typescript/src/theming/useTheme.d.ts +1 -1
  180. package/lib/typescript/src/theming/useTheme.d.ts.map +1 -1
  181. package/lib/typescript/src/types.d.ts +265 -167
  182. package/lib/typescript/src/types.d.ts.map +1 -1
  183. package/lib/typescript/src/useChildListeners.d.ts +3 -3
  184. package/lib/typescript/src/useChildListeners.d.ts.map +1 -1
  185. package/lib/typescript/src/useDescriptors.d.ts +13 -11
  186. package/lib/typescript/src/useDescriptors.d.ts.map +1 -1
  187. package/lib/typescript/src/useEventEmitter.d.ts +2 -2
  188. package/lib/typescript/src/useEventEmitter.d.ts.map +1 -1
  189. package/lib/typescript/src/useFocusEffect.d.ts.map +1 -1
  190. package/lib/typescript/src/useFocusEvents.d.ts +2 -2
  191. package/lib/typescript/src/useFocusEvents.d.ts.map +1 -1
  192. package/lib/typescript/src/useFocusedListenersChildrenAdapter.d.ts +2 -2
  193. package/lib/typescript/src/useFocusedListenersChildrenAdapter.d.ts.map +1 -1
  194. package/lib/typescript/src/useIsFocused.d.ts +4 -0
  195. package/lib/typescript/src/useIsFocused.d.ts.map +1 -1
  196. package/lib/typescript/src/useKeyedChildListeners.d.ts +4 -3
  197. package/lib/typescript/src/useKeyedChildListeners.d.ts.map +1 -1
  198. package/lib/typescript/src/useLazyValue.d.ts.map +1 -1
  199. package/lib/typescript/src/useNavigation.d.ts +4 -2
  200. package/lib/typescript/src/useNavigation.d.ts.map +1 -1
  201. package/lib/typescript/src/useNavigationBuilder.d.ts +22 -63
  202. package/lib/typescript/src/useNavigationBuilder.d.ts.map +1 -1
  203. package/lib/typescript/src/useNavigationCache.d.ts +6 -5
  204. package/lib/typescript/src/useNavigationCache.d.ts.map +1 -1
  205. package/lib/typescript/src/useNavigationContainerRef.d.ts +1 -1
  206. package/lib/typescript/src/useNavigationContainerRef.d.ts.map +1 -1
  207. package/lib/typescript/src/useNavigationHelpers.d.ts +18 -58
  208. package/lib/typescript/src/useNavigationHelpers.d.ts.map +1 -1
  209. package/lib/typescript/src/useNavigationState.d.ts +19 -3
  210. package/lib/typescript/src/useNavigationState.d.ts.map +1 -1
  211. package/lib/typescript/src/useOnAction.d.ts +9 -9
  212. package/lib/typescript/src/useOnAction.d.ts.map +1 -1
  213. package/lib/typescript/src/useOnGetNavigation.d.ts +12 -0
  214. package/lib/typescript/src/useOnGetNavigation.d.ts.map +1 -0
  215. package/lib/typescript/src/useOnGetState.d.ts +1 -1
  216. package/lib/typescript/src/useOnGetState.d.ts.map +1 -1
  217. package/lib/typescript/src/useOnPreventRemove.d.ts +5 -9
  218. package/lib/typescript/src/useOnPreventRemove.d.ts.map +1 -1
  219. package/lib/typescript/src/useOnRouteFocus.d.ts +6 -6
  220. package/lib/typescript/src/useOnRouteFocus.d.ts.map +1 -1
  221. package/lib/typescript/src/useOptionsGetters.d.ts +4 -4
  222. package/lib/typescript/src/useOptionsGetters.d.ts.map +1 -1
  223. package/lib/typescript/src/usePreventRemove.d.ts.map +1 -1
  224. package/lib/typescript/src/usePreventRemoveContext.d.ts +2 -1
  225. package/lib/typescript/src/usePreventRemoveContext.d.ts.map +1 -1
  226. package/lib/typescript/src/useRegisterNavigator.d.ts.map +1 -1
  227. package/lib/typescript/src/useRoute.d.ts +7 -3
  228. package/lib/typescript/src/useRoute.d.ts.map +1 -1
  229. package/lib/typescript/src/useRouteCache.d.ts +7 -12
  230. package/lib/typescript/src/useRouteCache.d.ts.map +1 -1
  231. package/lib/typescript/src/useScheduleUpdate.d.ts +5 -4
  232. package/lib/typescript/src/useScheduleUpdate.d.ts.map +1 -1
  233. package/lib/typescript/src/useStateForPath.d.ts +1 -1
  234. package/lib/typescript/src/useStateForPath.d.ts.map +1 -1
  235. package/lib/typescript/src/useSyncState.d.ts +1 -0
  236. package/lib/typescript/src/useSyncState.d.ts.map +1 -1
  237. package/lib/typescript/src/utilities.d.ts +79 -39
  238. package/lib/typescript/src/utilities.d.ts.map +1 -1
  239. package/lib/typescript/src/validatePathConfig.d.ts.map +1 -1
  240. package/package.json +26 -22
  241. package/src/BaseNavigationContainer.tsx +459 -332
  242. package/src/ConsumedParamsContext.tsx +5 -0
  243. package/src/DataLoading.tsx +206 -0
  244. package/src/NavigationBuilderContext.tsx +44 -25
  245. package/src/NavigationFocusedRouteStateContext.tsx +4 -4
  246. package/src/NavigationIndependentTree.tsx +60 -12
  247. package/src/NavigationProvider.tsx +59 -21
  248. package/src/NavigationRootContext.tsx +11 -0
  249. package/src/NavigationStateContext.tsx +6 -6
  250. package/src/PreventRemoveContext.tsx +1 -0
  251. package/src/PreventRemoveProvider.tsx +55 -56
  252. package/src/SceneView.tsx +31 -57
  253. package/src/StaticNavigation.tsx +715 -328
  254. package/src/StaticTreeContext.tsx +7 -0
  255. package/src/createNavigationContainerRef.tsx +12 -11
  256. package/src/createNavigatorFactory.tsx +92 -8
  257. package/src/findFocusedRoute.tsx +16 -16
  258. package/src/getActionFromState.tsx +87 -51
  259. package/src/getPathFromState.tsx +310 -134
  260. package/src/getPatternParts.tsx +98 -16
  261. package/src/getStateFromPath.tsx +971 -344
  262. package/src/getStateFromRouteParams.tsx +59 -0
  263. package/src/index.tsx +57 -6
  264. package/src/internal.tsx +2 -0
  265. package/src/isRecordEqual.tsx +3 -1
  266. package/src/queryString.ts +109 -0
  267. package/src/theming/useTheme.tsx +1 -1
  268. package/src/types.tsx +799 -377
  269. package/src/useDescriptors.tsx +151 -43
  270. package/src/useEventEmitter.tsx +53 -39
  271. package/src/useFocusEffect.tsx +5 -2
  272. package/src/useFocusEvents.tsx +19 -8
  273. package/src/useFocusedListenersChildrenAdapter.tsx +3 -3
  274. package/src/useIsFocused.tsx +18 -21
  275. package/src/useKeyedChildListeners.tsx +5 -2
  276. package/src/useLazyValue.tsx +2 -2
  277. package/src/useNavigation.tsx +9 -26
  278. package/src/useNavigationBuilder.tsx +370 -201
  279. package/src/useNavigationCache.tsx +148 -123
  280. package/src/useNavigationHelpers.tsx +27 -37
  281. package/src/useNavigationIndependentTree.tsx +1 -1
  282. package/src/useNavigationState.tsx +207 -69
  283. package/src/useOnAction.tsx +92 -18
  284. package/src/useOnGetNavigation.tsx +30 -0
  285. package/src/useOnGetState.tsx +8 -4
  286. package/src/useOnPreventRemove.tsx +78 -43
  287. package/src/useOnRouteFocus.tsx +11 -15
  288. package/src/useOptionsGetters.tsx +44 -30
  289. package/src/usePreventRemove.tsx +13 -5
  290. package/src/usePreventRemoveContext.tsx +2 -2
  291. package/src/useRegisterNavigator.tsx +4 -4
  292. package/src/useRoute.tsx +20 -6
  293. package/src/useRouteCache.tsx +57 -35
  294. package/src/useScheduleUpdate.tsx +13 -11
  295. package/src/useStateForPath.tsx +1 -1
  296. package/src/useSyncState.tsx +39 -15
  297. package/src/utilities.tsx +151 -35
  298. package/src/validatePathConfig.tsx +86 -57
  299. package/lib/module/CurrentRenderContext.js +0 -10
  300. package/lib/module/CurrentRenderContext.js.map +0 -1
  301. package/lib/module/NavigationMetaContext.js +0 -15
  302. package/lib/module/NavigationMetaContext.js.map +0 -1
  303. package/lib/module/checkSerializable.js +0 -46
  304. package/lib/module/checkSerializable.js.map +0 -1
  305. package/lib/module/useComponent.js +0 -34
  306. package/lib/module/useComponent.js.map +0 -1
  307. package/lib/module/useCurrentRender.js +0 -19
  308. package/lib/module/useCurrentRender.js.map +0 -1
  309. package/lib/typescript/src/CurrentRenderContext.d.ts +0 -9
  310. package/lib/typescript/src/CurrentRenderContext.d.ts.map +0 -1
  311. package/lib/typescript/src/NavigationMetaContext.d.ts +0 -12
  312. package/lib/typescript/src/NavigationMetaContext.d.ts.map +0 -1
  313. package/lib/typescript/src/checkSerializable.d.ts +0 -10
  314. package/lib/typescript/src/checkSerializable.d.ts.map +0 -1
  315. package/lib/typescript/src/useComponent.d.ts +0 -7
  316. package/lib/typescript/src/useComponent.d.ts.map +0 -1
  317. package/lib/typescript/src/useCurrentRender.d.ts +0 -14
  318. package/lib/typescript/src/useCurrentRender.d.ts.map +0 -1
  319. package/src/CurrentRenderContext.tsx +0 -9
  320. package/src/NavigationMetaContext.tsx +0 -14
  321. package/src/checkSerializable.tsx +0 -74
  322. package/src/useComponent.tsx +0 -37
  323. package/src/useCurrentRender.tsx +0 -31
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+
3
+ import { getStateFromRouteParams } from "./getStateFromRouteParams.js";
4
+ function findScreenInConfig(config, name) {
5
+ const screens = config.screens;
6
+ if (screens?.[name] != null) {
7
+ return screens[name];
8
+ }
9
+ if (config.groups) {
10
+ for (const group of Object.values(config.groups)) {
11
+ if (group.screens[name] != null) {
12
+ return group.screens[name];
13
+ }
14
+ }
15
+ }
16
+ return undefined;
17
+ }
18
+ function findInitialRouteName(config) {
19
+ if (config.initialRouteName != null) {
20
+ return config.initialRouteName;
21
+ }
22
+ for (const key in config) {
23
+ if (key === 'screens' && config.screens) {
24
+ const name = Object.keys(config.screens)[0];
25
+ if (name != null) {
26
+ return name;
27
+ }
28
+ }
29
+ if (key === 'groups' && config.groups) {
30
+ for (const group of Object.values(config.groups)) {
31
+ const name = Object.keys(group.screens)[0];
32
+ if (name != null) {
33
+ return name;
34
+ }
35
+ }
36
+ }
37
+ }
38
+ return undefined;
39
+ }
40
+
41
+ /**
42
+ * Get loader for the focused route in a static config tree with given navigation state.
43
+ *
44
+ * @param tree The static navigation config.
45
+ * @param state The navigation state to extract the focused route path from.
46
+ * @returns A function that returns a `Promise<void>`, or `undefined` if no loaders are found.
47
+ *
48
+ * @example
49
+ * ```js
50
+ * const loader = getLoaderForState(RootStack, {
51
+ * index: 0,
52
+ * routes: [{ name: 'Home' }],
53
+ * });
54
+ * await loader?.();
55
+ * ```
56
+ */
57
+ export function getLoaderForState(tree, state) {
58
+ return getLoaderForStateChange(tree, state, undefined, undefined);
59
+ }
60
+ export function getLoaderForStateChange(tree, state, previousState, consumedParams) {
61
+ const focusedRoute = state?.routes[state.index ?? state.routes.length - 1];
62
+ const previousFocusedRoute = previousState?.routes[previousState.index ?? previousState.routes.length - 1];
63
+ if (!focusedRoute) {
64
+ return undefined;
65
+ }
66
+ const isNewlyFocused = previousState === undefined || previousFocusedRoute == null || focusedRoute.name !== previousFocusedRoute.name || focusedRoute.key != null && previousFocusedRoute.key != null && focusedRoute.key !== previousFocusedRoute.key;
67
+ const item = findScreenInConfig(tree.config, focusedRoute.name);
68
+ if (item == null) {
69
+ return undefined;
70
+ }
71
+ const initialParams = typeof item === 'object' && 'initialParams' in item ? item.initialParams : undefined;
72
+ const params = initialParams != null || focusedRoute.params != null ? {
73
+ ...initialParams,
74
+ ...focusedRoute.params
75
+ } : undefined;
76
+ const loaders = [];
77
+ if (isNewlyFocused && 'UNSTABLE_loader' in item && typeof item.UNSTABLE_loader === 'function') {
78
+ const loader = item.UNSTABLE_loader;
79
+ loaders.push(() => loader({
80
+ name: focusedRoute.name,
81
+ params
82
+ }));
83
+ }
84
+ const nested = 'config' in item ? item : 'screen' in item &&
85
+ // Nested navigators cannot be defined as a getter
86
+ Object.getOwnPropertyDescriptor(item, 'screen')?.get == null && 'config' in item.screen ? item.screen : undefined;
87
+ if (nested) {
88
+ const initialRouteName = findInitialRouteName(nested.config);
89
+ const stateFromParams = focusedRoute.params != null && consumedParams?.has(focusedRoute.params) ? undefined : getStateFromRouteParams(params);
90
+ let childState = previousState !== undefined && stateFromParams != null ? stateFromParams : focusedRoute.state ?? stateFromParams;
91
+ if (childState == null && initialRouteName != null) {
92
+ childState = {
93
+ routes: [{
94
+ name: initialRouteName
95
+ }]
96
+ };
97
+ }
98
+ let previousChildState;
99
+ if (!isNewlyFocused) {
100
+ const previousRouteParams = previousFocusedRoute?.params;
101
+ const previousParams = initialParams != null || previousRouteParams != null ? {
102
+ ...initialParams,
103
+ ...previousRouteParams
104
+ } : undefined;
105
+ const previousStateFromParams = previousRouteParams != null && consumedParams?.has(previousRouteParams) ? undefined : getStateFromRouteParams(previousParams);
106
+ previousChildState = previousFocusedRoute?.state ?? previousStateFromParams;
107
+ if (previousChildState == null && initialRouteName != null) {
108
+ previousChildState = {
109
+ routes: [{
110
+ name: initialRouteName
111
+ }]
112
+ };
113
+ }
114
+ }
115
+ const childLoader = getLoaderForStateChange(nested, childState, previousState === undefined ? undefined : previousChildState ?? {
116
+ routes: []
117
+ }, consumedParams);
118
+ if (childLoader) {
119
+ loaders.push(childLoader);
120
+ }
121
+ }
122
+ if (loaders.length === 0) {
123
+ return undefined;
124
+ }
125
+ return async () => {
126
+ await Promise.all(loaders.map(l => l()));
127
+ };
128
+ }
129
+ //# sourceMappingURL=DataLoading.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["getStateFromRouteParams","findScreenInConfig","config","name","screens","groups","group","Object","values","undefined","findInitialRouteName","initialRouteName","key","keys","getLoaderForState","tree","state","getLoaderForStateChange","previousState","consumedParams","focusedRoute","routes","index","length","previousFocusedRoute","isNewlyFocused","item","initialParams","params","loaders","UNSTABLE_loader","loader","push","nested","getOwnPropertyDescriptor","get","screen","stateFromParams","has","childState","previousChildState","previousRouteParams","previousParams","previousStateFromParams","childLoader","Promise","all","map","l"],"sourceRoot":"../../src","sources":["DataLoading.tsx"],"mappings":"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","ignoreList":[]}
@@ -4,15 +4,12 @@ import * as React from 'react';
4
4
  /**
5
5
  * Context which holds the required helpers needed to build nested navigators.
6
6
  */
7
- export const NavigationBuilderContext = /*#__PURE__*/React.createContext({
8
- onDispatchAction: () => undefined,
9
- onEmitEvent: () => undefined,
10
- onOptionsChange: () => undefined,
11
- scheduleUpdate: () => {
12
- throw new Error("Couldn't find a context for scheduling updates.");
13
- },
14
- flushUpdates: () => {
15
- throw new Error("Couldn't find a context for flushing updates.");
7
+ export const NavigationBuilderContext = /*#__PURE__*/React.createContext(undefined);
8
+ export function useNavigationBuilderContext() {
9
+ const value = React.use(NavigationBuilderContext);
10
+ if (value == null) {
11
+ throw new Error("Couldn't find a navigation builder context. Is your component inside NavigationContainer?");
16
12
  }
17
- });
13
+ return value;
14
+ }
18
15
  //# sourceMappingURL=NavigationBuilderContext.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["React","NavigationBuilderContext","createContext","onDispatchAction","undefined","onEmitEvent","onOptionsChange","scheduleUpdate","Error","flushUpdates"],"sourceRoot":"../../src","sources":["NavigationBuilderContext.tsx"],"mappings":";;AAKA,OAAO,KAAKA,KAAK,MAAM,OAAO;AA6C9B;AACA;AACA;AACA,OAAO,MAAMC,wBAAwB,gBAAGD,KAAK,CAACE,aAAa,CAmBxD;EACDC,gBAAgB,EAAEA,CAAA,KAAMC,SAAS;EACjCC,WAAW,EAAEA,CAAA,KAAMD,SAAS;EAC5BE,eAAe,EAAEA,CAAA,KAAMF,SAAS;EAChCG,cAAc,EAAEA,CAAA,KAAM;IACpB,MAAM,IAAIC,KAAK,CAAC,iDAAiD,CAAC;EACpE,CAAC;EACDC,YAAY,EAAEA,CAAA,KAAM;IAClB,MAAM,IAAID,KAAK,CAAC,+CAA+C,CAAC;EAClE;AACF,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["React","NavigationBuilderContext","createContext","undefined","useNavigationBuilderContext","value","use","Error"],"sourceRoot":"../../src","sources":["NavigationBuilderContext.tsx"],"mappings":";;AAMA,OAAO,KAAKA,KAAK,MAAM,OAAO;AA8E9B;AACA;AACA;AACA,OAAO,MAAMC,wBAAwB,gBAAGD,KAAK,CAACE,aAAa,CAEzDC,SAAS,CAAC;AAEZ,OAAO,SAASC,2BAA2BA,CAAA,EAAG;EAC5C,MAAMC,KAAK,GAAGL,KAAK,CAACM,GAAG,CAACL,wBAAwB,CAAC;EAEjD,IAAII,KAAK,IAAI,IAAI,EAAE;IACjB,MAAM,IAAIE,KAAK,CACb,2FACF,CAAC;EACH;EAEA,OAAOF,KAAK;AACd","ignoreList":[]}
@@ -1,8 +1,17 @@
1
1
  "use strict";
2
2
 
3
3
  import * as React from 'react';
4
+ import { NavigationBuilderContext } from "./NavigationBuilderContext.js";
5
+ import { NavigationContainerRefContext } from "./NavigationContainerRefContext.js";
6
+ import { NavigationFocusedRouteStateContext } from "./NavigationFocusedRouteStateContext.js";
7
+ import { NavigationHelpersContext } from "./NavigationHelpersContext.js";
4
8
  import { NavigationIndependentTreeContext } from "./NavigationIndependentTreeContext.js";
5
- import { NamedRouteContextListContext, NavigationContext, NavigationRouteContext, NavigationRouteNameContext } from "./NavigationProvider.js";
9
+ import { IsScreenContext, NamedRouteContextListContext, NavigationContext, NavigationRouteContext } from "./NavigationProvider.js";
10
+ import { NavigationRootContext } from "./NavigationRootContext.js";
11
+ import { PreventRemoveContext } from "./PreventRemoveContext.js";
12
+ import { StaticTreeContext } from "./StaticTreeContext.js";
13
+ import { FocusedRouteKeyContext, IsFocusedContext, IsFocusedGetterContext } from "./useIsFocused.js";
14
+ import { NamedNavigationStateListenerListContext, NavigationStateListenerContext } from "./useNavigationState.js";
6
15
 
7
16
  /**
8
17
  * Component to make the child navigation container independent of parent containers.
@@ -14,17 +23,53 @@ export function NavigationIndependentTree({
14
23
  return (
15
24
  /*#__PURE__*/
16
25
  // We need to clear any existing contexts for nested independent container to work correctly
17
- _jsx(NamedRouteContextListContext.Provider, {
18
- value: undefined,
19
- children: /*#__PURE__*/_jsx(NavigationRouteContext.Provider, {
26
+ _jsx(NavigationIndependentTreeContext.Provider, {
27
+ value: true,
28
+ children: /*#__PURE__*/_jsx(NavigationContainerRefContext.Provider, {
20
29
  value: undefined,
21
- children: /*#__PURE__*/_jsx(NavigationContext.Provider, {
30
+ children: /*#__PURE__*/_jsx(NavigationRootContext.Provider, {
22
31
  value: undefined,
23
- children: /*#__PURE__*/_jsx(NavigationRouteNameContext.Provider, {
32
+ children: /*#__PURE__*/_jsx(NavigationBuilderContext.Provider, {
24
33
  value: undefined,
25
- children: /*#__PURE__*/_jsx(NavigationIndependentTreeContext.Provider, {
26
- value: true,
27
- children: children
34
+ children: /*#__PURE__*/_jsx(StaticTreeContext.Provider, {
35
+ value: undefined,
36
+ children: /*#__PURE__*/_jsx(NavigationHelpersContext.Provider, {
37
+ value: undefined,
38
+ children: /*#__PURE__*/_jsx(NavigationStateListenerContext.Provider, {
39
+ value: undefined,
40
+ children: /*#__PURE__*/_jsx(FocusedRouteKeyContext.Provider, {
41
+ value: undefined,
42
+ children: /*#__PURE__*/_jsx(PreventRemoveContext.Provider, {
43
+ value: undefined,
44
+ children: /*#__PURE__*/_jsx(NamedNavigationStateListenerListContext.Provider, {
45
+ value: undefined,
46
+ children: /*#__PURE__*/_jsx(NamedRouteContextListContext.Provider, {
47
+ value: undefined,
48
+ children: /*#__PURE__*/_jsx(NavigationRouteContext.Provider, {
49
+ value: undefined,
50
+ children: /*#__PURE__*/_jsx(NavigationContext.Provider, {
51
+ value: undefined,
52
+ children: /*#__PURE__*/_jsx(IsFocusedContext.Provider, {
53
+ value: undefined,
54
+ children: /*#__PURE__*/_jsx(IsFocusedGetterContext.Provider, {
55
+ value: undefined,
56
+ children: /*#__PURE__*/_jsx(IsScreenContext.Provider, {
57
+ value: false,
58
+ children: /*#__PURE__*/_jsx(NavigationFocusedRouteStateContext.Provider, {
59
+ value: undefined,
60
+ children: children
61
+ })
62
+ })
63
+ })
64
+ })
65
+ })
66
+ })
67
+ })
68
+ })
69
+ })
70
+ })
71
+ })
72
+ })
28
73
  })
29
74
  })
30
75
  })
@@ -1 +1 @@
1
- {"version":3,"names":["React","NavigationIndependentTreeContext","NamedRouteContextListContext","NavigationContext","NavigationRouteContext","NavigationRouteNameContext","jsx","_jsx","NavigationIndependentTree","children","Provider","value","undefined"],"sourceRoot":"../../src","sources":["NavigationIndependentTree.tsx"],"mappings":";;AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAE9B,SAASC,gCAAgC,QAAQ,uCAAoC;AACrF,SACEC,4BAA4B,EAC5BC,iBAAiB,EACjBC,sBAAsB,EACtBC,0BAA0B,QACrB,yBAAsB;;AAE7B;AACA;AACA;AAFA,SAAAC,GAAA,IAAAC,IAAA;AAGA,OAAO,SAASC,yBAAyBA,CAAC;EACxCC;AAGF,CAAC,EAAE;EACD;IAAA;IACE;IACAF,IAAA,CAACL,4BAA4B,CAACQ,QAAQ;MAACC,KAAK,EAAEC,SAAU;MAAAH,QAAA,eACtDF,IAAA,CAACH,sBAAsB,CAACM,QAAQ;QAACC,KAAK,EAAEC,SAAU;QAAAH,QAAA,eAChDF,IAAA,CAACJ,iBAAiB,CAACO,QAAQ;UAACC,KAAK,EAAEC,SAAU;UAAAH,QAAA,eAC3CF,IAAA,CAACF,0BAA0B,CAACK,QAAQ;YAACC,KAAK,EAAEC,SAAU;YAAAH,QAAA,eACpDF,IAAA,CAACN,gCAAgC,CAACS,QAAQ;cAACC,KAAK,EAAE,IAAK;cAAAF,QAAA,EACpDA;YAAQ,CACgC;UAAC,CACT;QAAC,CACZ;MAAC,CACE;IAAC,CACG;EAAC;AAE5C","ignoreList":[]}
1
+ {"version":3,"names":["React","NavigationBuilderContext","NavigationContainerRefContext","NavigationFocusedRouteStateContext","NavigationHelpersContext","NavigationIndependentTreeContext","IsScreenContext","NamedRouteContextListContext","NavigationContext","NavigationRouteContext","NavigationRootContext","PreventRemoveContext","StaticTreeContext","FocusedRouteKeyContext","IsFocusedContext","IsFocusedGetterContext","NamedNavigationStateListenerListContext","NavigationStateListenerContext","jsx","_jsx","NavigationIndependentTree","children","Provider","value","undefined"],"sourceRoot":"../../src","sources":["NavigationIndependentTree.tsx"],"mappings":";;AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAE9B,SAASC,wBAAwB,QAAQ,+BAA4B;AACrE,SAASC,6BAA6B,QAAQ,oCAAiC;AAC/E,SAASC,kCAAkC,QAAQ,yCAAsC;AACzF,SAASC,wBAAwB,QAAQ,+BAA4B;AACrE,SAASC,gCAAgC,QAAQ,uCAAoC;AACrF,SACEC,eAAe,EACfC,4BAA4B,EAC5BC,iBAAiB,EACjBC,sBAAsB,QACjB,yBAAsB;AAC7B,SAASC,qBAAqB,QAAQ,4BAAyB;AAC/D,SAASC,oBAAoB,QAAQ,2BAAwB;AAC7D,SAASC,iBAAiB,QAAQ,wBAAqB;AACvD,SACEC,sBAAsB,EACtBC,gBAAgB,EAChBC,sBAAsB,QACjB,mBAAgB;AACvB,SACEC,uCAAuC,EACvCC,8BAA8B,QACzB,yBAAsB;;AAE7B;AACA;AACA;AAFA,SAAAC,GAAA,IAAAC,IAAA;AAGA,OAAO,SAASC,yBAAyBA,CAAC;EACxCC;AAGF,CAAC,EAAE;EACD;IAAA;IACE;IACAF,IAAA,CAACd,gCAAgC,CAACiB,QAAQ;MAACC,KAAK,EAAE,IAAK;MAAAF,QAAA,eACrDF,IAAA,CAACjB,6BAA6B,CAACoB,QAAQ;QAACC,KAAK,EAAEC,SAAU;QAAAH,QAAA,eACvDF,IAAA,CAACT,qBAAqB,CAACY,QAAQ;UAACC,KAAK,EAAEC,SAAU;UAAAH,QAAA,eAC/CF,IAAA,CAAClB,wBAAwB,CAACqB,QAAQ;YAACC,KAAK,EAAEC,SAAU;YAAAH,QAAA,eAClDF,IAAA,CAACP,iBAAiB,CAACU,QAAQ;cAACC,KAAK,EAAEC,SAAU;cAAAH,QAAA,eAC3CF,IAAA,CAACf,wBAAwB,CAACkB,QAAQ;gBAACC,KAAK,EAAEC,SAAU;gBAAAH,QAAA,eAClDF,IAAA,CAACF,8BAA8B,CAACK,QAAQ;kBAACC,KAAK,EAAEC,SAAU;kBAAAH,QAAA,eACxDF,IAAA,CAACN,sBAAsB,CAACS,QAAQ;oBAACC,KAAK,EAAEC,SAAU;oBAAAH,QAAA,eAChDF,IAAA,CAACR,oBAAoB,CAACW,QAAQ;sBAACC,KAAK,EAAEC,SAAU;sBAAAH,QAAA,eAC9CF,IAAA,CAACH,uCAAuC,CAACM,QAAQ;wBAC/CC,KAAK,EAAEC,SAAU;wBAAAH,QAAA,eAEjBF,IAAA,CAACZ,4BAA4B,CAACe,QAAQ;0BACpCC,KAAK,EAAEC,SAAU;0BAAAH,QAAA,eAEjBF,IAAA,CAACV,sBAAsB,CAACa,QAAQ;4BAACC,KAAK,EAAEC,SAAU;4BAAAH,QAAA,eAChDF,IAAA,CAACX,iBAAiB,CAACc,QAAQ;8BAACC,KAAK,EAAEC,SAAU;8BAAAH,QAAA,eAC3CF,IAAA,CAACL,gBAAgB,CAACQ,QAAQ;gCAACC,KAAK,EAAEC,SAAU;gCAAAH,QAAA,eAC1CF,IAAA,CAACJ,sBAAsB,CAACO,QAAQ;kCAC9BC,KAAK,EAAEC,SAAU;kCAAAH,QAAA,eAEjBF,IAAA,CAACb,eAAe,CAACgB,QAAQ;oCAACC,KAAK,EAAE,KAAM;oCAAAF,QAAA,eACrCF,IAAA,CAAChB,kCAAkC,CAACmB,QAAQ;sCAC1CC,KAAK,EAAEC,SAAU;sCAAAH,QAAA,EAEhBA;oCAAQ,CACkC;kCAAC,CACtB;gCAAC,CACI;8BAAC,CACT;4BAAC,CACF;0BAAC,CACE;wBAAC,CACG;sBAAC,CACQ;oBAAC,CACtB;kBAAC,CACD;gBAAC,CACK;cAAC,CACT;YAAC,CACV;UAAC,CACI;QAAC,CACN;MAAC,CACK;IAAC,CACA;EAAC;AAEhD","ignoreList":[]}
@@ -1,7 +1,10 @@
1
1
  "use strict";
2
2
 
3
3
  import * as React from 'react';
4
+ import useLatestCallback from 'use-latest-callback';
5
+ import { FocusedRouteKeyContext, IsFocusedContext, IsFocusedGetterContext } from "./useIsFocused.js";
4
6
  import { useLazyValue } from "./useLazyValue.js";
7
+ import { NamedNavigationStateListenerProvider } from "./useNavigationState.js";
5
8
 
6
9
  /**
7
10
  * Context which holds the route prop for a screen.
@@ -13,7 +16,12 @@ export const NavigationRouteContext = /*#__PURE__*/React.createContext(undefined
13
16
  * Context which holds the navigation prop for a screen.
14
17
  */
15
18
  export const NavigationContext = /*#__PURE__*/React.createContext(undefined);
16
- export const NavigationRouteNameContext = /*#__PURE__*/React.createContext(undefined);
19
+
20
+ /**
21
+ * Context which indicates whether the component is inside a screen.
22
+ */
23
+ export const IsScreenContext = /*#__PURE__*/React.createContext(false);
24
+
17
25
  /**
18
26
  * Component to provide the navigation and route contexts to its children.
19
27
  */
@@ -29,21 +37,38 @@ export function NavigationProvider({
29
37
  ...parents,
30
38
  [route.name]: NamedRouteContext
31
39
  }), [NamedRouteContext, parents, route.name]);
32
- return /*#__PURE__*/_jsx(NamedRouteContextListContext.Provider, {
33
- value: NamedRouteContextList,
34
- children: /*#__PURE__*/_jsx(NamedRouteContext.Provider, {
35
- value: route,
36
- children: /*#__PURE__*/_jsx(NavigationRouteContext.Provider, {
40
+ const parentIsFocused = React.use(IsFocusedContext);
41
+ const focusedRouteKey = React.use(FocusedRouteKeyContext);
42
+
43
+ // Mark route as focused only if:
44
+ // - It doesn't have a parent navigator
45
+ // - Parent navigator is focused
46
+ const isFocused = parentIsFocused == null || parentIsFocused ? focusedRouteKey === route.key : false;
47
+ const getIsFocused = useLatestCallback(() => isFocused);
48
+ return React.useMemo(() => /*#__PURE__*/_jsx(NamedNavigationStateListenerProvider, {
49
+ name: route.name,
50
+ children: /*#__PURE__*/_jsx(NamedRouteContextListContext.Provider, {
51
+ value: NamedRouteContextList,
52
+ children: /*#__PURE__*/_jsx(NamedRouteContext.Provider, {
37
53
  value: route,
38
- children: /*#__PURE__*/_jsx(NavigationContext.Provider, {
39
- value: navigation,
40
- children: /*#__PURE__*/_jsx(NavigationRouteNameContext.Provider, {
41
- value: route.name,
42
- children: children
54
+ children: /*#__PURE__*/_jsx(NavigationRouteContext.Provider, {
55
+ value: route,
56
+ children: /*#__PURE__*/_jsx(NavigationContext.Provider, {
57
+ value: navigation,
58
+ children: /*#__PURE__*/_jsx(IsFocusedContext.Provider, {
59
+ value: isFocused,
60
+ children: /*#__PURE__*/_jsx(IsFocusedGetterContext.Provider, {
61
+ value: getIsFocused,
62
+ children: /*#__PURE__*/_jsx(IsScreenContext.Provider, {
63
+ value: true,
64
+ children: children
65
+ })
66
+ })
67
+ })
43
68
  })
44
69
  })
45
70
  })
46
71
  })
47
- });
72
+ }), [NamedRouteContext, NamedRouteContextList, children, getIsFocused, isFocused, navigation, route]);
48
73
  }
49
74
  //# sourceMappingURL=NavigationProvider.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["React","useLazyValue","jsx","_jsx","NavigationRouteContext","createContext","undefined","NavigationContext","NavigationRouteNameContext","NamedRouteContextListContext","NavigationProvider","route","navigation","children","NamedRouteContext","parents","use","NamedRouteContextList","useMemo","name","Provider","value"],"sourceRoot":"../../src","sources":["NavigationProvider.tsx"],"mappings":";;AACA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAG9B,SAASC,YAAY,QAAQ,mBAAgB;;AAE7C;AACA;AACA;AAFA,SAAAC,GAAA,IAAAC,IAAA;AAGA,OAAO,MAAMC,sBAAsB,gBAAGJ,KAAK,CAACK,aAAa,CAEvDC,SAAS,CAAC;;AAEZ;AACA;AACA;AACA,OAAO,MAAMC,iBAAiB,gBAAGP,KAAK,CAACK,aAAa,CAElDC,SAAS,CAAC;AAEZ,OAAO,MAAME,0BAA0B,gBAAGR,KAAK,CAACK,aAAa,CAE3DC,SAAS,CAAC;AAQZ;AACA;AACA;AACA,OAAO,MAAMG,4BAA4B,gBAAGT,KAAK,CAACK,aAAa,CAE7DC,SAAS,CAAC;AAEZ,OAAO,SAASI,kBAAkBA,CAAC;EAAEC,KAAK;EAAEC,UAAU;EAAEC;AAAgB,CAAC,EAAE;EACzE,MAAMC,iBAAiB,GAAGb,YAAY,CAAC,mBAAMD,KAAK,CAACK,aAAa,CAACM,KAAK,CAAC,CAAC;EAExE,MAAMI,OAAO,GAAGf,KAAK,CAACgB,GAAG,CAACP,4BAA4B,CAAC;EAEvD,MAAMQ,qBAAqB,GAAGjB,KAAK,CAACkB,OAAO,CACzC,OAAO;IACL,GAAGH,OAAO;IACV,CAACJ,KAAK,CAACQ,IAAI,GAAGL;EAChB,CAAC,CAAC,EACF,CAACA,iBAAiB,EAAEC,OAAO,EAAEJ,KAAK,CAACQ,IAAI,CACzC,CAAC;EAED,oBACEhB,IAAA,CAACM,4BAA4B,CAACW,QAAQ;IAACC,KAAK,EAAEJ,qBAAsB;IAAAJ,QAAA,eAClEV,IAAA,CAACW,iBAAiB,CAACM,QAAQ;MAACC,KAAK,EAAEV,KAAM;MAAAE,QAAA,eACvCV,IAAA,CAACC,sBAAsB,CAACgB,QAAQ;QAACC,KAAK,EAAEV,KAAM;QAAAE,QAAA,eAC5CV,IAAA,CAACI,iBAAiB,CAACa,QAAQ;UAACC,KAAK,EAAET,UAAW;UAAAC,QAAA,eAC5CV,IAAA,CAACK,0BAA0B,CAACY,QAAQ;YAACC,KAAK,EAAEV,KAAK,CAACQ,IAAK;YAAAN,QAAA,EACpDA;UAAQ,CAC0B;QAAC,CACZ;MAAC,CACE;IAAC,CACR;EAAC,CACQ,CAAC;AAE5C","ignoreList":[]}
1
+ {"version":3,"names":["React","useLatestCallback","FocusedRouteKeyContext","IsFocusedContext","IsFocusedGetterContext","useLazyValue","NamedNavigationStateListenerProvider","jsx","_jsx","NavigationRouteContext","createContext","undefined","NavigationContext","IsScreenContext","NamedRouteContextListContext","NavigationProvider","route","navigation","children","NamedRouteContext","parents","use","NamedRouteContextList","useMemo","name","parentIsFocused","focusedRouteKey","isFocused","key","getIsFocused","Provider","value"],"sourceRoot":"../../src","sources":["NavigationProvider.tsx"],"mappings":";;AACA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,OAAOC,iBAAiB,MAAM,qBAAqB;AAGnD,SACEC,sBAAsB,EACtBC,gBAAgB,EAChBC,sBAAsB,QACjB,mBAAgB;AACvB,SAASC,YAAY,QAAQ,mBAAgB;AAC7C,SAASC,oCAAoC,QAAQ,yBAAsB;;AAE3E;AACA;AACA;AAFA,SAAAC,GAAA,IAAAC,IAAA;AAGA,OAAO,MAAMC,sBAAsB,gBAAGT,KAAK,CAACU,aAAa,CAEvDC,SAAS,CAAC;;AAEZ;AACA;AACA;AACA,OAAO,MAAMC,iBAAiB,gBAAGZ,KAAK,CAACU,aAAa,CAElDC,SAAS,CAAC;;AAEZ;AACA;AACA;AACA,OAAO,MAAME,eAAe,gBAAGb,KAAK,CAACU,aAAa,CAAC,KAAK,CAAC;;AAEzD;AACA;AACA;AACA,OAAO,MAAMI,4BAA4B,gBAAGd,KAAK,CAACU,aAAa,CAE7DC,SAAS,CAAC;AAQZ,OAAO,SAASI,kBAAkBA,CAAC;EAAEC,KAAK;EAAEC,UAAU;EAAEC;AAAgB,CAAC,EAAE;EACzE,MAAMC,iBAAiB,GAAGd,YAAY,CAAC,mBAAML,KAAK,CAACU,aAAa,CAACM,KAAK,CAAC,CAAC;EAExE,MAAMI,OAAO,GAAGpB,KAAK,CAACqB,GAAG,CAACP,4BAA4B,CAAC;EAEvD,MAAMQ,qBAAqB,GAAGtB,KAAK,CAACuB,OAAO,CACzC,OAAO;IACL,GAAGH,OAAO;IACV,CAACJ,KAAK,CAACQ,IAAI,GAAGL;EAChB,CAAC,CAAC,EACF,CAACA,iBAAiB,EAAEC,OAAO,EAAEJ,KAAK,CAACQ,IAAI,CACzC,CAAC;EAED,MAAMC,eAAe,GAAGzB,KAAK,CAACqB,GAAG,CAAClB,gBAAgB,CAAC;EACnD,MAAMuB,eAAe,GAAG1B,KAAK,CAACqB,GAAG,CAACnB,sBAAsB,CAAC;;EAEzD;EACA;EACA;EACA,MAAMyB,SAAS,GACbF,eAAe,IAAI,IAAI,IAAIA,eAAe,GACtCC,eAAe,KAAKV,KAAK,CAACY,GAAG,GAC7B,KAAK;EAEX,MAAMC,YAAY,GAAG5B,iBAAiB,CAAC,MAAM0B,SAAS,CAAC;EAEvD,OAAO3B,KAAK,CAACuB,OAAO,CAClB,mBACEf,IAAA,CAACF,oCAAoC;IAACkB,IAAI,EAAER,KAAK,CAACQ,IAAK;IAAAN,QAAA,eACrDV,IAAA,CAACM,4BAA4B,CAACgB,QAAQ;MAACC,KAAK,EAAET,qBAAsB;MAAAJ,QAAA,eAClEV,IAAA,CAACW,iBAAiB,CAACW,QAAQ;QAACC,KAAK,EAAEf,KAAM;QAAAE,QAAA,eACvCV,IAAA,CAACC,sBAAsB,CAACqB,QAAQ;UAACC,KAAK,EAAEf,KAAM;UAAAE,QAAA,eAC5CV,IAAA,CAACI,iBAAiB,CAACkB,QAAQ;YAACC,KAAK,EAAEd,UAAW;YAAAC,QAAA,eAC5CV,IAAA,CAACL,gBAAgB,CAAC2B,QAAQ;cAACC,KAAK,EAAEJ,SAAU;cAAAT,QAAA,eAC1CV,IAAA,CAACJ,sBAAsB,CAAC0B,QAAQ;gBAACC,KAAK,EAAEF,YAAa;gBAAAX,QAAA,eACnDV,IAAA,CAACK,eAAe,CAACiB,QAAQ;kBAACC,KAAK,EAAE,IAAK;kBAAAb,QAAA,EACnCA;gBAAQ,CACe;cAAC,CACI;YAAC,CACT;UAAC,CACF;QAAC,CACE;MAAC,CACR;IAAC,CACQ;EAAC,CACJ,CACvC,EACD,CACEC,iBAAiB,EACjBG,qBAAqB,EACrBJ,QAAQ,EACRW,YAAY,EACZF,SAAS,EACTV,UAAU,EACVD,KAAK,CAET,CAAC;AACH","ignoreList":[]}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+
3
+ import * as React from 'react';
4
+ /**
5
+ * Context which holds the navigation object for components outside a screen.
6
+ */
7
+ export const NavigationRootContext = /*#__PURE__*/React.createContext(undefined);
8
+ //# sourceMappingURL=NavigationRootContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","NavigationRootContext","createContext","undefined"],"sourceRoot":"../../src","sources":["NavigationRootContext.tsx"],"mappings":";;AACA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAI9B;AACA;AACA;AACA,OAAO,MAAMC,qBAAqB,gBAAGD,KAAK,CAACE,aAAa,CAEtDC,SAAS,CAAC","ignoreList":[]}
@@ -16,6 +16,9 @@ export const NavigationStateContext = /*#__PURE__*/React.createContext({
16
16
  get setState() {
17
17
  throw new Error(MISSING_CONTEXT_ERROR);
18
18
  },
19
+ get subscribe() {
20
+ throw new Error(MISSING_CONTEXT_ERROR);
21
+ },
19
22
  get getIsInitial() {
20
23
  throw new Error(MISSING_CONTEXT_ERROR);
21
24
  }
@@ -1 +1 @@
1
- {"version":3,"names":["React","MISSING_CONTEXT_ERROR","NavigationStateContext","createContext","isDefault","getKey","Error","setKey","getState","setState","getIsInitial"],"sourceRoot":"../../src","sources":["NavigationStateContext.tsx"],"mappings":";;AACA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAE9B,MAAMC,qBAAqB,GACzB,wKAAwK;AAE1K,OAAO,MAAMC,sBAAsB,gBAAGF,KAAK,CAACG,aAAa,CActD;EACDC,SAAS,EAAE,IAAI;EAEf,IAAIC,MAAMA,CAAA,EAAQ;IAChB,MAAM,IAAIC,KAAK,CAACL,qBAAqB,CAAC;EACxC,CAAC;EACD,IAAIM,MAAMA,CAAA,EAAQ;IAChB,MAAM,IAAID,KAAK,CAACL,qBAAqB,CAAC;EACxC,CAAC;EACD,IAAIO,QAAQA,CAAA,EAAQ;IAClB,MAAM,IAAIF,KAAK,CAACL,qBAAqB,CAAC;EACxC,CAAC;EACD,IAAIQ,QAAQA,CAAA,EAAQ;IAClB,MAAM,IAAIH,KAAK,CAACL,qBAAqB,CAAC;EACxC,CAAC;EACD,IAAIS,YAAYA,CAAA,EAAQ;IACtB,MAAM,IAAIJ,KAAK,CAACL,qBAAqB,CAAC;EACxC;AACF,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["React","MISSING_CONTEXT_ERROR","NavigationStateContext","createContext","isDefault","getKey","Error","setKey","getState","setState","subscribe","getIsInitial"],"sourceRoot":"../../src","sources":["NavigationStateContext.tsx"],"mappings":";;AACA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAE9B,MAAMC,qBAAqB,GACzB,wKAAwK;AAE1K,OAAO,MAAMC,sBAAsB,gBAAGF,KAAK,CAACG,aAAa,CAWtD;EACDC,SAAS,EAAE,IAAI;EAEf,IAAIC,MAAMA,CAAA,EAAQ;IAChB,MAAM,IAAIC,KAAK,CAACL,qBAAqB,CAAC;EACxC,CAAC;EACD,IAAIM,MAAMA,CAAA,EAAQ;IAChB,MAAM,IAAID,KAAK,CAACL,qBAAqB,CAAC;EACxC,CAAC;EACD,IAAIO,QAAQA,CAAA,EAAQ;IAClB,MAAM,IAAIF,KAAK,CAACL,qBAAqB,CAAC;EACxC,CAAC;EACD,IAAIQ,QAAQA,CAAA,EAAQ;IAClB,MAAM,IAAIH,KAAK,CAACL,qBAAqB,CAAC;EACxC,CAAC;EACD,IAAIS,SAASA,CAAA,EAAQ;IACnB,MAAM,IAAIJ,KAAK,CAACL,qBAAqB,CAAC;EACxC,CAAC;EACD,IAAIU,YAAYA,CAAA,EAAQ;IACtB,MAAM,IAAIL,KAAK,CAACL,qBAAqB,CAAC;EACxC;AACF,CAAC,CAAC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["React","PreventRemoveContext","createContext","undefined"],"sourceRoot":"../../src","sources":["PreventRemoveContext.tsx"],"mappings":";;AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;;AAE9B;AACA;AACA;AACA;;AAGA,OAAO,MAAMC,oBAAoB,gBAAGD,KAAK,CAACE,aAAa,CAUrDC,SAAS,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["React","PreventRemoveContext","createContext","undefined"],"sourceRoot":"../../src","sources":["PreventRemoveContext.tsx"],"mappings":";;AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;;AAE9B;AACA;AACA;AACA;;AAGA,OAAO,MAAMC,oBAAoB,gBAAGD,KAAK,CAACE,aAAa,CAWrDC,SAAS,CAAC","ignoreList":[]}
@@ -1,6 +1,5 @@
1
1
  "use strict";
2
2
 
3
- import { nanoid } from 'nanoid/non-secure';
4
3
  import * as React from 'react';
5
4
  import useLatestCallback from 'use-latest-callback';
6
5
  import { NavigationHelpersContext } from "./NavigationHelpersContext.js";
@@ -11,16 +10,12 @@ import { jsx as _jsx } from "react/jsx-runtime";
11
10
  * Util function to transform map of prevented routes to a simpler object.
12
11
  */
13
12
  const transformPreventedRoutes = preventedRoutesMap => {
14
- const preventedRoutesToTransform = [...preventedRoutesMap.values()];
15
- const preventedRoutes = preventedRoutesToTransform.reduce((acc, {
16
- routeKey,
17
- preventRemove
18
- }) => {
19
- acc[routeKey] = {
20
- preventRemove: acc[routeKey]?.preventRemove || preventRemove
13
+ const preventedRoutes = {};
14
+ for (const routeKey of preventedRoutesMap.values()) {
15
+ preventedRoutes[routeKey] = {
16
+ preventRemove: true
21
17
  };
22
- return acc;
23
- }, {});
18
+ }
24
19
  return preventedRoutes;
25
20
  };
26
21
 
@@ -30,38 +25,51 @@ const transformPreventedRoutes = preventedRoutesMap => {
30
25
  export function PreventRemoveProvider({
31
26
  children
32
27
  }) {
33
- const [parentId] = React.useState(() => nanoid());
28
+ const parentId = React.useId();
34
29
  const [preventedRoutesMap, setPreventedRoutesMap] = React.useState(() => new Map());
35
- const navigation = React.useContext(NavigationHelpersContext);
36
- const route = React.useContext(NavigationRouteContext);
37
- const preventRemoveContextValue = React.useContext(PreventRemoveContext);
30
+ const registry = React.useRef(new Map());
31
+ const navigation = React.use(NavigationHelpersContext);
32
+ const route = React.use(NavigationRouteContext);
33
+ const preventRemoveContextValue = React.use(PreventRemoveContext);
38
34
  // take `setPreventRemove` from parent context - if exist it means we're in a nested context
39
35
  const setParentPrevented = preventRemoveContextValue?.setPreventRemove;
36
+ const notifyParentPrevented = preventRemoveContextValue?.notifyPreventRemove;
40
37
  const setPreventRemove = useLatestCallback((id, routeKey, preventRemove) => {
41
- if (preventRemove && (navigation == null || navigation?.getState().routes.every(route => route.key !== routeKey))) {
42
- throw new Error(`Couldn't find a route with the key ${routeKey}. Is your component inside NavigationContent?`);
38
+ if (preventRemove && navigation == null) {
39
+ throw new Error("Couldn't find a navigation object. This is likely a bug in the navigator.\n\nIf you're using a custom navigator, make sure that the navigator content is wrapped by the 'render' function returned by 'useNavigationBuilder'.");
43
40
  }
41
+ if (preventRemove) {
42
+ registry.current.set(id, routeKey);
43
+ } else {
44
+ registry.current.delete(id);
45
+ }
46
+ });
47
+ const notifyPreventRemove = useLatestCallback(() => {
48
+ // eslint-disable-next-line @eslint-react/hooks-extra/no-direct-set-state-in-use-effect
44
49
  setPreventedRoutesMap(prevPrevented => {
50
+ const nextPrevented = registry.current;
51
+ const hasChanged = prevPrevented.size !== nextPrevented.size || [...nextPrevented].some(([id, routeKey]) => prevPrevented.get(id) !== routeKey);
52
+
45
53
  // values haven't changed - do nothing
46
- if (routeKey === prevPrevented.get(id)?.routeKey && preventRemove === prevPrevented.get(id)?.preventRemove) {
54
+ if (!hasChanged) {
47
55
  return prevPrevented;
48
56
  }
49
- const nextPrevented = new Map(prevPrevented);
50
- if (preventRemove) {
51
- nextPrevented.set(id, {
52
- routeKey,
53
- preventRemove
54
- });
55
- } else {
56
- nextPrevented.delete(id);
57
- }
58
- return nextPrevented;
57
+ return new Map(nextPrevented);
59
58
  });
60
59
  });
61
- const isPrevented = [...preventedRoutesMap.values()].some(({
62
- preventRemove
63
- }) => preventRemove);
60
+
61
+ // Sync the state on every commit in case the registry was changed by a screen
62
+ // unmounting while hidden with `<Activity>`, where no passive effects run
63
+ // Also notify the parent so nested prevention propagates upwards
64
64
  React.useEffect(() => {
65
+ notifyPreventRemove();
66
+ notifyParentPrevented?.();
67
+ return () => {
68
+ notifyParentPrevented?.();
69
+ };
70
+ });
71
+ const isPrevented = preventedRoutesMap.size > 0;
72
+ React.useInsertionEffect(() => {
65
73
  if (route?.key !== undefined && setParentPrevented !== undefined) {
66
74
  // when route is defined (and setParentPrevented) it means we're in a nested stack
67
75
  // route.key then will be the route key of parent
@@ -74,8 +82,9 @@ export function PreventRemoveProvider({
74
82
  }, [parentId, isPrevented, route?.key, setParentPrevented]);
75
83
  const value = React.useMemo(() => ({
76
84
  setPreventRemove,
85
+ notifyPreventRemove,
77
86
  preventedRoutes: transformPreventedRoutes(preventedRoutesMap)
78
- }), [setPreventRemove, preventedRoutesMap]);
87
+ }), [setPreventRemove, notifyPreventRemove, preventedRoutesMap]);
79
88
  return /*#__PURE__*/_jsx(PreventRemoveContext.Provider, {
80
89
  value: value,
81
90
  children: children
@@ -1 +1 @@
1
- {"version":3,"names":["nanoid","React","useLatestCallback","NavigationHelpersContext","NavigationRouteContext","PreventRemoveContext","jsx","_jsx","transformPreventedRoutes","preventedRoutesMap","preventedRoutesToTransform","values","preventedRoutes","reduce","acc","routeKey","preventRemove","PreventRemoveProvider","children","parentId","useState","setPreventedRoutesMap","Map","navigation","useContext","route","preventRemoveContextValue","setParentPrevented","setPreventRemove","id","getState","routes","every","key","Error","prevPrevented","get","nextPrevented","set","delete","isPrevented","some","useEffect","undefined","value","useMemo","Provider"],"sourceRoot":"../../src","sources":["PreventRemoveProvider.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","useLatestCallback","NavigationHelpersContext","NavigationRouteContext","PreventRemoveContext","jsx","_jsx","transformPreventedRoutes","preventedRoutesMap","preventedRoutes","routeKey","values","preventRemove","PreventRemoveProvider","children","parentId","useId","setPreventedRoutesMap","useState","Map","registry","useRef","navigation","use","route","preventRemoveContextValue","setParentPrevented","setPreventRemove","notifyParentPrevented","notifyPreventRemove","id","Error","current","set","delete","prevPrevented","nextPrevented","hasChanged","size","some","get","useEffect","isPrevented","useInsertionEffect","key","undefined","value","useMemo","Provider"],"sourceRoot":"../../src","sources":["PreventRemoveProvider.tsx"],"mappings":"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","ignoreList":[]}