@react-navigation/core 8.0.0-alpha.3 → 8.0.0-alpha.30

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 (283) hide show
  1. package/lib/module/BaseNavigationContainer.js +34 -17
  2. package/lib/module/BaseNavigationContainer.js.map +1 -1
  3. package/lib/module/ConsumedParamsContext.js +5 -0
  4. package/lib/module/ConsumedParamsContext.js.map +1 -0
  5. package/lib/module/DataLoading.js +127 -0
  6. package/lib/module/DataLoading.js.map +1 -0
  7. package/lib/module/NavigationBuilderContext.js +1 -0
  8. package/lib/module/NavigationBuilderContext.js.map +1 -1
  9. package/lib/module/NavigationIndependentTree.js +17 -8
  10. package/lib/module/NavigationIndependentTree.js.map +1 -1
  11. package/lib/module/NavigationProvider.js +22 -11
  12. package/lib/module/NavigationProvider.js.map +1 -1
  13. package/lib/module/NavigationStateContext.js.map +1 -1
  14. package/lib/module/PreventRemoveContext.js.map +1 -1
  15. package/lib/module/PreventRemoveProvider.js +37 -27
  16. package/lib/module/PreventRemoveProvider.js.map +1 -1
  17. package/lib/module/SceneView.js +7 -40
  18. package/lib/module/SceneView.js.map +1 -1
  19. package/lib/module/StaticNavigation.js +179 -50
  20. package/lib/module/StaticNavigation.js.map +1 -1
  21. package/lib/module/StaticTreeContext.js +5 -0
  22. package/lib/module/StaticTreeContext.js.map +1 -0
  23. package/lib/module/checkSerializable.js +18 -13
  24. package/lib/module/checkSerializable.js.map +1 -1
  25. package/lib/module/createNavigationContainerRef.js +6 -8
  26. package/lib/module/createNavigationContainerRef.js.map +1 -1
  27. package/lib/module/createNavigatorFactory.js +27 -5
  28. package/lib/module/createNavigatorFactory.js.map +1 -1
  29. package/lib/module/findFocusedRoute.js +7 -4
  30. package/lib/module/findFocusedRoute.js.map +1 -1
  31. package/lib/module/getActionFromState.js +45 -20
  32. package/lib/module/getActionFromState.js.map +1 -1
  33. package/lib/module/getPathFromState.js +171 -90
  34. package/lib/module/getPathFromState.js.map +1 -1
  35. package/lib/module/getPatternParts.js +20 -4
  36. package/lib/module/getPatternParts.js.map +1 -1
  37. package/lib/module/getStateFromPath.js +485 -214
  38. package/lib/module/getStateFromPath.js.map +1 -1
  39. package/lib/module/getStateFromRouteParams.js +24 -0
  40. package/lib/module/getStateFromRouteParams.js.map +1 -0
  41. package/lib/module/index.js +5 -4
  42. package/lib/module/index.js.map +1 -1
  43. package/lib/module/theming/useTheme.js +1 -1
  44. package/lib/module/theming/useTheme.js.map +1 -1
  45. package/lib/module/types.js +35 -0
  46. package/lib/module/types.js.map +1 -1
  47. package/lib/module/useDescriptors.js +19 -11
  48. package/lib/module/useDescriptors.js.map +1 -1
  49. package/lib/module/useEventEmitter.js +48 -33
  50. package/lib/module/useEventEmitter.js.map +1 -1
  51. package/lib/module/useFocusEvents.js +12 -4
  52. package/lib/module/useFocusEvents.js.map +1 -1
  53. package/lib/module/useFocusedListenersChildrenAdapter.js +2 -2
  54. package/lib/module/useFocusedListenersChildrenAdapter.js.map +1 -1
  55. package/lib/module/useIsFocused.js +7 -12
  56. package/lib/module/useIsFocused.js.map +1 -1
  57. package/lib/module/useKeyedChildListeners.js +4 -2
  58. package/lib/module/useKeyedChildListeners.js.map +1 -1
  59. package/lib/module/useLazyValue.js.map +1 -1
  60. package/lib/module/useNavigation.js +2 -15
  61. package/lib/module/useNavigation.js.map +1 -1
  62. package/lib/module/useNavigationBuilder.js +201 -131
  63. package/lib/module/useNavigationBuilder.js.map +1 -1
  64. package/lib/module/useNavigationCache.js +22 -17
  65. package/lib/module/useNavigationCache.js.map +1 -1
  66. package/lib/module/useNavigationHelpers.js +28 -10
  67. package/lib/module/useNavigationHelpers.js.map +1 -1
  68. package/lib/module/useNavigationIndependentTree.js +1 -1
  69. package/lib/module/useNavigationIndependentTree.js.map +1 -1
  70. package/lib/module/useNavigationState.js +70 -35
  71. package/lib/module/useNavigationState.js.map +1 -1
  72. package/lib/module/useOnAction.js +37 -7
  73. package/lib/module/useOnAction.js.map +1 -1
  74. package/lib/module/useOnGetState.js +6 -3
  75. package/lib/module/useOnGetState.js.map +1 -1
  76. package/lib/module/useOnPreventRemove.js +39 -30
  77. package/lib/module/useOnPreventRemove.js.map +1 -1
  78. package/lib/module/useOnRouteFocus.js +1 -1
  79. package/lib/module/useOnRouteFocus.js.map +1 -1
  80. package/lib/module/useOptionsGetters.js +10 -5
  81. package/lib/module/useOptionsGetters.js.map +1 -1
  82. package/lib/module/usePreventRemove.js +10 -3
  83. package/lib/module/usePreventRemove.js.map +1 -1
  84. package/lib/module/usePreventRemoveContext.js +1 -1
  85. package/lib/module/usePreventRemoveContext.js.map +1 -1
  86. package/lib/module/useRegisterNavigator.js +2 -2
  87. package/lib/module/useRegisterNavigator.js.map +1 -1
  88. package/lib/module/useRoute.js +2 -0
  89. package/lib/module/useRoute.js.map +1 -1
  90. package/lib/module/useRouteCache.js +17 -11
  91. package/lib/module/useRouteCache.js.map +1 -1
  92. package/lib/module/useScheduleUpdate.js +9 -9
  93. package/lib/module/useScheduleUpdate.js.map +1 -1
  94. package/lib/module/useStateForPath.js +1 -1
  95. package/lib/module/useStateForPath.js.map +1 -1
  96. package/lib/module/useSyncState.js +7 -3
  97. package/lib/module/useSyncState.js.map +1 -1
  98. package/lib/module/validatePathConfig.js +50 -36
  99. package/lib/module/validatePathConfig.js.map +1 -1
  100. package/lib/typescript/src/BaseNavigationContainer.d.ts +6 -3
  101. package/lib/typescript/src/BaseNavigationContainer.d.ts.map +1 -1
  102. package/lib/typescript/src/ConsumedParamsContext.d.ts +3 -0
  103. package/lib/typescript/src/ConsumedParamsContext.d.ts.map +1 -0
  104. package/lib/typescript/src/DataLoading.d.ts +21 -0
  105. package/lib/typescript/src/DataLoading.d.ts.map +1 -0
  106. package/lib/typescript/src/EnsureSingleNavigator.d.ts +1 -1
  107. package/lib/typescript/src/EnsureSingleNavigator.d.ts.map +1 -1
  108. package/lib/typescript/src/Group.d.ts +1 -1
  109. package/lib/typescript/src/Group.d.ts.map +1 -1
  110. package/lib/typescript/src/NavigationBuilderContext.d.ts +9 -8
  111. package/lib/typescript/src/NavigationBuilderContext.d.ts.map +1 -1
  112. package/lib/typescript/src/NavigationContainerRefContext.d.ts +1 -1
  113. package/lib/typescript/src/NavigationContainerRefContext.d.ts.map +1 -1
  114. package/lib/typescript/src/NavigationFocusedRouteStateContext.d.ts +4 -4
  115. package/lib/typescript/src/NavigationFocusedRouteStateContext.d.ts.map +1 -1
  116. package/lib/typescript/src/NavigationHelpersContext.d.ts +1 -1
  117. package/lib/typescript/src/NavigationHelpersContext.d.ts.map +1 -1
  118. package/lib/typescript/src/NavigationIndependentTree.d.ts +1 -1
  119. package/lib/typescript/src/NavigationIndependentTree.d.ts.map +1 -1
  120. package/lib/typescript/src/NavigationProvider.d.ts +12 -13
  121. package/lib/typescript/src/NavigationProvider.d.ts.map +1 -1
  122. package/lib/typescript/src/NavigationStateContext.d.ts +3 -3
  123. package/lib/typescript/src/NavigationStateContext.d.ts.map +1 -1
  124. package/lib/typescript/src/PreventRemoveContext.d.ts +1 -0
  125. package/lib/typescript/src/PreventRemoveContext.d.ts.map +1 -1
  126. package/lib/typescript/src/PreventRemoveProvider.d.ts +1 -1
  127. package/lib/typescript/src/PreventRemoveProvider.d.ts.map +1 -1
  128. package/lib/typescript/src/SceneView.d.ts +3 -2
  129. package/lib/typescript/src/SceneView.d.ts.map +1 -1
  130. package/lib/typescript/src/Screen.d.ts +1 -1
  131. package/lib/typescript/src/Screen.d.ts.map +1 -1
  132. package/lib/typescript/src/StaticContainer.d.ts +1 -1
  133. package/lib/typescript/src/StaticContainer.d.ts.map +1 -1
  134. package/lib/typescript/src/StaticNavigation.d.ts +189 -109
  135. package/lib/typescript/src/StaticNavigation.d.ts.map +1 -1
  136. package/lib/typescript/src/StaticTreeContext.d.ts +4 -0
  137. package/lib/typescript/src/StaticTreeContext.d.ts.map +1 -0
  138. package/lib/typescript/src/checkSerializable.d.ts +8 -4
  139. package/lib/typescript/src/checkSerializable.d.ts.map +1 -1
  140. package/lib/typescript/src/createNavigationContainerRef.d.ts +1 -1
  141. package/lib/typescript/src/createNavigationContainerRef.d.ts.map +1 -1
  142. package/lib/typescript/src/createNavigatorFactory.d.ts +23 -5
  143. package/lib/typescript/src/createNavigatorFactory.d.ts.map +1 -1
  144. package/lib/typescript/src/findFocusedRoute.d.ts +3 -3
  145. package/lib/typescript/src/findFocusedRoute.d.ts.map +1 -1
  146. package/lib/typescript/src/getActionFromState.d.ts +4 -4
  147. package/lib/typescript/src/getActionFromState.d.ts.map +1 -1
  148. package/lib/typescript/src/getPathFromState.d.ts +3 -3
  149. package/lib/typescript/src/getPathFromState.d.ts.map +1 -1
  150. package/lib/typescript/src/getPatternParts.d.ts +1 -0
  151. package/lib/typescript/src/getPatternParts.d.ts.map +1 -1
  152. package/lib/typescript/src/getStateFromPath.d.ts +5 -5
  153. package/lib/typescript/src/getStateFromPath.d.ts.map +1 -1
  154. package/lib/typescript/src/getStateFromRouteParams.d.ts +3 -0
  155. package/lib/typescript/src/getStateFromRouteParams.d.ts.map +1 -0
  156. package/lib/typescript/src/index.d.ts +36 -33
  157. package/lib/typescript/src/index.d.ts.map +1 -1
  158. package/lib/typescript/src/theming/ThemeContext.d.ts +1 -1
  159. package/lib/typescript/src/theming/ThemeContext.d.ts.map +1 -1
  160. package/lib/typescript/src/theming/ThemeProvider.d.ts +2 -2
  161. package/lib/typescript/src/theming/ThemeProvider.d.ts.map +1 -1
  162. package/lib/typescript/src/theming/useTheme.d.ts +1 -1
  163. package/lib/typescript/src/theming/useTheme.d.ts.map +1 -1
  164. package/lib/typescript/src/types.d.ts +260 -159
  165. package/lib/typescript/src/types.d.ts.map +1 -1
  166. package/lib/typescript/src/useChildListeners.d.ts +3 -3
  167. package/lib/typescript/src/useChildListeners.d.ts.map +1 -1
  168. package/lib/typescript/src/useComponent.d.ts +1 -1
  169. package/lib/typescript/src/useComponent.d.ts.map +1 -1
  170. package/lib/typescript/src/useDescriptors.d.ts +8 -8
  171. package/lib/typescript/src/useDescriptors.d.ts.map +1 -1
  172. package/lib/typescript/src/useEventEmitter.d.ts +2 -2
  173. package/lib/typescript/src/useEventEmitter.d.ts.map +1 -1
  174. package/lib/typescript/src/useFocusEvents.d.ts +2 -2
  175. package/lib/typescript/src/useFocusEvents.d.ts.map +1 -1
  176. package/lib/typescript/src/useFocusedListenersChildrenAdapter.d.ts +2 -2
  177. package/lib/typescript/src/useFocusedListenersChildrenAdapter.d.ts.map +1 -1
  178. package/lib/typescript/src/useIsFocused.d.ts +3 -0
  179. package/lib/typescript/src/useIsFocused.d.ts.map +1 -1
  180. package/lib/typescript/src/useKeyedChildListeners.d.ts +3 -3
  181. package/lib/typescript/src/useKeyedChildListeners.d.ts.map +1 -1
  182. package/lib/typescript/src/useLazyValue.d.ts.map +1 -1
  183. package/lib/typescript/src/useNavigation.d.ts +4 -2
  184. package/lib/typescript/src/useNavigation.d.ts.map +1 -1
  185. package/lib/typescript/src/useNavigationBuilder.d.ts +23 -30
  186. package/lib/typescript/src/useNavigationBuilder.d.ts.map +1 -1
  187. package/lib/typescript/src/useNavigationCache.d.ts +3 -3
  188. package/lib/typescript/src/useNavigationCache.d.ts.map +1 -1
  189. package/lib/typescript/src/useNavigationContainerRef.d.ts +1 -1
  190. package/lib/typescript/src/useNavigationContainerRef.d.ts.map +1 -1
  191. package/lib/typescript/src/useNavigationHelpers.d.ts +19 -27
  192. package/lib/typescript/src/useNavigationHelpers.d.ts.map +1 -1
  193. package/lib/typescript/src/useNavigationState.d.ts +13 -3
  194. package/lib/typescript/src/useNavigationState.d.ts.map +1 -1
  195. package/lib/typescript/src/useOnAction.d.ts +9 -9
  196. package/lib/typescript/src/useOnAction.d.ts.map +1 -1
  197. package/lib/typescript/src/useOnGetState.d.ts +1 -1
  198. package/lib/typescript/src/useOnGetState.d.ts.map +1 -1
  199. package/lib/typescript/src/useOnPreventRemove.d.ts +5 -9
  200. package/lib/typescript/src/useOnPreventRemove.d.ts.map +1 -1
  201. package/lib/typescript/src/useOnRouteFocus.d.ts +6 -6
  202. package/lib/typescript/src/useOnRouteFocus.d.ts.map +1 -1
  203. package/lib/typescript/src/useOptionsGetters.d.ts +1 -1
  204. package/lib/typescript/src/useOptionsGetters.d.ts.map +1 -1
  205. package/lib/typescript/src/usePreventRemove.d.ts.map +1 -1
  206. package/lib/typescript/src/usePreventRemoveContext.d.ts +2 -1
  207. package/lib/typescript/src/usePreventRemoveContext.d.ts.map +1 -1
  208. package/lib/typescript/src/useRoute.d.ts +7 -3
  209. package/lib/typescript/src/useRoute.d.ts.map +1 -1
  210. package/lib/typescript/src/useRouteCache.d.ts +5 -5
  211. package/lib/typescript/src/useRouteCache.d.ts.map +1 -1
  212. package/lib/typescript/src/useScheduleUpdate.d.ts +5 -4
  213. package/lib/typescript/src/useScheduleUpdate.d.ts.map +1 -1
  214. package/lib/typescript/src/useStateForPath.d.ts +1 -1
  215. package/lib/typescript/src/useStateForPath.d.ts.map +1 -1
  216. package/lib/typescript/src/useSyncState.d.ts.map +1 -1
  217. package/lib/typescript/src/utilities.d.ts +74 -37
  218. package/lib/typescript/src/utilities.d.ts.map +1 -1
  219. package/lib/typescript/src/validatePathConfig.d.ts.map +1 -1
  220. package/package.json +23 -22
  221. package/src/BaseNavigationContainer.tsx +351 -333
  222. package/src/ConsumedParamsContext.tsx +5 -0
  223. package/src/DataLoading.tsx +203 -0
  224. package/src/NavigationBuilderContext.tsx +14 -9
  225. package/src/NavigationFocusedRouteStateContext.tsx +4 -4
  226. package/src/NavigationIndependentTree.tsx +18 -12
  227. package/src/NavigationProvider.tsx +26 -15
  228. package/src/NavigationStateContext.tsx +5 -6
  229. package/src/PreventRemoveContext.tsx +1 -0
  230. package/src/PreventRemoveProvider.tsx +51 -46
  231. package/src/SceneView.tsx +7 -39
  232. package/src/StaticNavigation.tsx +659 -307
  233. package/src/StaticTreeContext.tsx +7 -0
  234. package/src/checkSerializable.tsx +35 -19
  235. package/src/createNavigationContainerRef.tsx +12 -9
  236. package/src/createNavigatorFactory.tsx +92 -8
  237. package/src/findFocusedRoute.tsx +13 -8
  238. package/src/getActionFromState.tsx +86 -51
  239. package/src/getPathFromState.tsx +254 -128
  240. package/src/getPatternParts.tsx +25 -4
  241. package/src/getStateFromPath.tsx +811 -309
  242. package/src/getStateFromRouteParams.tsx +60 -0
  243. package/src/index.tsx +55 -5
  244. package/src/theming/useTheme.tsx +1 -1
  245. package/src/types.tsx +798 -373
  246. package/src/useDescriptors.tsx +28 -14
  247. package/src/useEventEmitter.tsx +52 -38
  248. package/src/useFocusEvents.tsx +15 -7
  249. package/src/useFocusedListenersChildrenAdapter.tsx +2 -2
  250. package/src/useIsFocused.tsx +14 -21
  251. package/src/useKeyedChildListeners.tsx +4 -2
  252. package/src/useLazyValue.tsx +2 -2
  253. package/src/useNavigation.tsx +7 -24
  254. package/src/useNavigationBuilder.tsx +311 -186
  255. package/src/useNavigationCache.tsx +32 -25
  256. package/src/useNavigationHelpers.tsx +27 -10
  257. package/src/useNavigationIndependentTree.tsx +1 -1
  258. package/src/useNavigationState.tsx +93 -59
  259. package/src/useOnAction.tsx +61 -13
  260. package/src/useOnGetState.tsx +5 -3
  261. package/src/useOnPreventRemove.tsx +75 -42
  262. package/src/useOnRouteFocus.tsx +10 -12
  263. package/src/useOptionsGetters.tsx +11 -5
  264. package/src/usePreventRemove.tsx +12 -3
  265. package/src/usePreventRemoveContext.tsx +1 -1
  266. package/src/useRegisterNavigator.tsx +2 -2
  267. package/src/useRoute.tsx +20 -6
  268. package/src/useRouteCache.tsx +22 -16
  269. package/src/useScheduleUpdate.tsx +9 -10
  270. package/src/useStateForPath.tsx +1 -1
  271. package/src/useSyncState.tsx +8 -3
  272. package/src/utilities.tsx +144 -31
  273. package/src/validatePathConfig.tsx +86 -57
  274. package/lib/module/CurrentRenderContext.js +0 -10
  275. package/lib/module/CurrentRenderContext.js.map +0 -1
  276. package/lib/module/useCurrentRender.js +0 -19
  277. package/lib/module/useCurrentRender.js.map +0 -1
  278. package/lib/typescript/src/CurrentRenderContext.d.ts +0 -9
  279. package/lib/typescript/src/CurrentRenderContext.d.ts.map +0 -1
  280. package/lib/typescript/src/useCurrentRender.d.ts +0 -14
  281. package/lib/typescript/src/useCurrentRender.d.ts.map +0 -1
  282. package/src/CurrentRenderContext.tsx +0 -9
  283. package/src/useCurrentRender.tsx +0 -31
@@ -10,8 +10,8 @@ export function useOnGetState({
10
10
  }) {
11
11
  const {
12
12
  addKeyedListener
13
- } = React.useContext(NavigationBuilderContext);
14
- const route = React.useContext(NavigationRouteContext);
13
+ } = React.use(NavigationBuilderContext);
14
+ const route = React.use(NavigationRouteContext);
15
15
  const key = route ? route.key : 'root';
16
16
  const getRehydratedState = React.useCallback(() => {
17
17
  const state = getState();
@@ -35,7 +35,10 @@ export function useOnGetState({
35
35
  routes
36
36
  };
37
37
  }, [getState, getStateListeners]);
38
- React.useEffect(() => {
38
+
39
+ // Use insertion effect to preserve the listener under `<Activity mode="hidden">`
40
+ // So `getRootState` will still return state of nested navigators
41
+ React.useInsertionEffect(() => {
39
42
  return addKeyedListener?.('getState', key, getRehydratedState);
40
43
  }, [addKeyedListener, getRehydratedState, key]);
41
44
  }
@@ -1 +1 @@
1
- {"version":3,"names":["React","isArrayEqual","NavigationBuilderContext","NavigationRouteContext","useOnGetState","getState","getStateListeners","addKeyedListener","useContext","route","key","getRehydratedState","useCallback","state","routes","map","childState","useEffect"],"sourceRoot":"../../src","sources":["useOnGetState.tsx"],"mappings":";;AACA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAE9B,SAASC,YAAY,QAAQ,mBAAgB;AAC7C,SAEEC,wBAAwB,QACnB,+BAA4B;AACnC,SAASC,sBAAsB,QAAQ,yBAAsB;AAO7D,OAAO,SAASC,aAAaA,CAAC;EAAEC,QAAQ;EAAEC;AAA2B,CAAC,EAAE;EACtE,MAAM;IAAEC;EAAiB,CAAC,GAAGP,KAAK,CAACQ,UAAU,CAACN,wBAAwB,CAAC;EACvE,MAAMO,KAAK,GAAGT,KAAK,CAACQ,UAAU,CAACL,sBAAsB,CAAC;EACtD,MAAMO,GAAG,GAAGD,KAAK,GAAGA,KAAK,CAACC,GAAG,GAAG,MAAM;EAEtC,MAAMC,kBAAkB,GAAGX,KAAK,CAACY,WAAW,CAAC,MAAM;IACjD,MAAMC,KAAK,GAAGR,QAAQ,CAAC,CAAC;;IAExB;IACA,MAAMS,MAAM,GAAGD,KAAK,CAACC,MAAM,CAACC,GAAG,CAAEN,KAAK,IAAK;MACzC,MAAMO,UAAU,GAAGV,iBAAiB,CAACG,KAAK,CAACC,GAAG,CAAC,GAAG,CAAC;MAEnD,IAAID,KAAK,CAACI,KAAK,KAAKG,UAAU,EAAE;QAC9B,OAAOP,KAAK;MACd;MAEA,OAAO;QAAE,GAAGA,KAAK;QAAEI,KAAK,EAAEG;MAAW,CAAC;IACxC,CAAC,CAAC;IAEF,IAAIf,YAAY,CAACY,KAAK,CAACC,MAAM,EAAEA,MAAM,CAAC,EAAE;MACtC,OAAOD,KAAK;IACd;IAEA,OAAO;MAAE,GAAGA,KAAK;MAAEC;IAAO,CAAC;EAC7B,CAAC,EAAE,CAACT,QAAQ,EAAEC,iBAAiB,CAAC,CAAC;EAEjCN,KAAK,CAACiB,SAAS,CAAC,MAAM;IACpB,OAAOV,gBAAgB,GAAG,UAAU,EAAEG,GAAG,EAAEC,kBAAkB,CAAC;EAChE,CAAC,EAAE,CAACJ,gBAAgB,EAAEI,kBAAkB,EAAED,GAAG,CAAC,CAAC;AACjD","ignoreList":[]}
1
+ {"version":3,"names":["React","isArrayEqual","NavigationBuilderContext","NavigationRouteContext","useOnGetState","getState","getStateListeners","addKeyedListener","use","route","key","getRehydratedState","useCallback","state","routes","map","childState","useInsertionEffect"],"sourceRoot":"../../src","sources":["useOnGetState.tsx"],"mappings":";;AACA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAE9B,SAASC,YAAY,QAAQ,mBAAgB;AAC7C,SAEEC,wBAAwB,QACnB,+BAA4B;AACnC,SAASC,sBAAsB,QAAQ,yBAAsB;AAO7D,OAAO,SAASC,aAAaA,CAAC;EAAEC,QAAQ;EAAEC;AAA2B,CAAC,EAAE;EACtE,MAAM;IAAEC;EAAiB,CAAC,GAAGP,KAAK,CAACQ,GAAG,CAACN,wBAAwB,CAAC;EAChE,MAAMO,KAAK,GAAGT,KAAK,CAACQ,GAAG,CAACL,sBAAsB,CAAC;EAC/C,MAAMO,GAAG,GAAGD,KAAK,GAAGA,KAAK,CAACC,GAAG,GAAG,MAAM;EAEtC,MAAMC,kBAAkB,GAAGX,KAAK,CAACY,WAAW,CAAC,MAAM;IACjD,MAAMC,KAAK,GAAGR,QAAQ,CAAC,CAAC;;IAExB;IACA,MAAMS,MAAM,GAAGD,KAAK,CAACC,MAAM,CAACC,GAAG,CAAEN,KAAK,IAAK;MACzC,MAAMO,UAAU,GAAGV,iBAAiB,CAACG,KAAK,CAACC,GAAG,CAAC,GAAG,CAAC;MAEnD,IAAID,KAAK,CAACI,KAAK,KAAKG,UAAU,EAAE;QAC9B,OAAOP,KAAK;MACd;MAEA,OAAO;QAAE,GAAGA,KAAK;QAAEI,KAAK,EAAEG;MAAW,CAAC;IACxC,CAAC,CAAC;IAEF,IAAIf,YAAY,CAACY,KAAK,CAACC,MAAM,EAAEA,MAAM,CAAC,EAAE;MACtC,OAAOD,KAAK;IACd;IAEA,OAAO;MAAE,GAAGA,KAAK;MAAEC;IAAO,CAAC;EAC7B,CAAC,EAAE,CAACT,QAAQ,EAAEC,iBAAiB,CAAC,CAAC;;EAEjC;EACA;EACAN,KAAK,CAACiB,kBAAkB,CAAC,MAAM;IAC7B,OAAOV,gBAAgB,GAAG,UAAU,EAAEG,GAAG,EAAEC,kBAAkB,CAAC;EAChE,CAAC,EAAE,CAACJ,gBAAgB,EAAEI,kBAAkB,EAAED,GAAG,CAAC,CAAC;AACjD","ignoreList":[]}
@@ -5,39 +5,48 @@ import { NavigationBuilderContext } from "./NavigationBuilderContext.js";
5
5
  import { NavigationRouteContext } from "./NavigationProvider.js";
6
6
  const VISITED_ROUTE_KEYS = Symbol('VISITED_ROUTE_KEYS');
7
7
  export const shouldPreventRemove = (emitter, beforeRemoveListeners, currentRoutes, nextRoutes, action) => {
8
- const nextRouteKeys = nextRoutes.map(route => route.key);
9
-
10
- // Call these in reverse order so last screens handle the event first
11
- const removedRoutes = currentRoutes.filter(route => !nextRouteKeys.includes(route.key)).reverse();
12
- const visitedRouteKeys =
13
- // @ts-expect-error: add this property to mark that we've already emitted this action
14
- action[VISITED_ROUTE_KEYS] ?? new Set();
8
+ const nextRoutesByKey = new Map(nextRoutes.map(route => [route.key, route]).filter(([, route]) => route.key != null));
9
+ const visitedRouteKeys = VISITED_ROUTE_KEYS in action && action[VISITED_ROUTE_KEYS] instanceof Set ? action[VISITED_ROUTE_KEYS] : new Set();
15
10
  const beforeRemoveAction = {
16
11
  ...action,
17
12
  [VISITED_ROUTE_KEYS]: visitedRouteKeys
18
13
  };
19
- for (const route of removedRoutes) {
14
+
15
+ // Call these in reverse order so last screens handle the event first
16
+ const reversedCurrentRoutes = [...currentRoutes].reverse();
17
+ for (const route of reversedCurrentRoutes) {
20
18
  if (visitedRouteKeys.has(route.key)) {
21
19
  // Skip if we've already emitted this action for this screen
22
20
  continue;
23
21
  }
24
-
25
- // First, we need to check if any child screens want to prevent it
26
- const isPrevented = beforeRemoveListeners[route.key]?.(beforeRemoveAction);
27
- if (isPrevented) {
28
- return true;
29
- }
30
- visitedRouteKeys.add(route.key);
31
- const event = emitter.emit({
32
- type: 'beforeRemove',
33
- target: route.key,
34
- data: {
35
- action: beforeRemoveAction
36
- },
37
- canPreventDefault: true
38
- });
39
- if (event.defaultPrevented) {
40
- return true;
22
+ if (!nextRoutesByKey.has(route.key)) {
23
+ // The route is not in next state, so it's being removed
24
+ // First, we need to check if any child screens want to prevent it
25
+ const isPrevented = beforeRemoveListeners[route.key]?.(beforeRemoveAction, undefined);
26
+ if (isPrevented) {
27
+ return true;
28
+ }
29
+ visitedRouteKeys.add(route.key);
30
+ const event = emitter.emit({
31
+ type: 'beforeRemove',
32
+ target: route.key,
33
+ data: {
34
+ action: beforeRemoveAction
35
+ },
36
+ canPreventDefault: true
37
+ });
38
+ if (event.defaultPrevented) {
39
+ return true;
40
+ }
41
+ } else {
42
+ // The route is kept but its nested state changed, so propagate the check into the nested navigator
43
+ const nextRoute = nextRoutesByKey.get(route.key);
44
+ if (route.state != null && route.state !== nextRoute?.state) {
45
+ const isPrevented = beforeRemoveListeners[route.key]?.(beforeRemoveAction, nextRoute?.state);
46
+ if (isPrevented) {
47
+ return true;
48
+ }
49
+ }
41
50
  }
42
51
  }
43
52
  return false;
@@ -49,14 +58,14 @@ export function useOnPreventRemove({
49
58
  }) {
50
59
  const {
51
60
  addKeyedListener
52
- } = React.useContext(NavigationBuilderContext);
53
- const route = React.useContext(NavigationRouteContext);
61
+ } = React.use(NavigationBuilderContext);
62
+ const route = React.use(NavigationRouteContext);
54
63
  const routeKey = route?.key;
55
- React.useEffect(() => {
64
+ React.useInsertionEffect(() => {
56
65
  if (routeKey) {
57
- return addKeyedListener?.('beforeRemove', routeKey, action => {
66
+ return addKeyedListener?.('beforeRemove', routeKey, (action, nextState) => {
58
67
  const state = getState();
59
- return shouldPreventRemove(emitter, beforeRemoveListeners, state.routes, [], action);
68
+ return shouldPreventRemove(emitter, beforeRemoveListeners, state.routes, nextState?.routes ?? [], action);
60
69
  });
61
70
  }
62
71
  }, [addKeyedListener, beforeRemoveListeners, emitter, getState, routeKey]);
@@ -1 +1 @@
1
- {"version":3,"names":["React","NavigationBuilderContext","NavigationRouteContext","VISITED_ROUTE_KEYS","Symbol","shouldPreventRemove","emitter","beforeRemoveListeners","currentRoutes","nextRoutes","action","nextRouteKeys","map","route","key","removedRoutes","filter","includes","reverse","visitedRouteKeys","Set","beforeRemoveAction","has","isPrevented","add","event","emit","type","target","data","canPreventDefault","defaultPrevented","useOnPreventRemove","getState","addKeyedListener","useContext","routeKey","useEffect","state","routes"],"sourceRoot":"../../src","sources":["useOnPreventRemove.tsx"],"mappings":";;AAIA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAE9B,SAEEC,wBAAwB,QACnB,+BAA4B;AACnC,SAASC,sBAAsB,QAAQ,yBAAsB;AAU7D,MAAMC,kBAAkB,GAAGC,MAAM,CAAC,oBAAoB,CAAC;AAEvD,OAAO,MAAMC,mBAAmB,GAAGA,CACjCC,OAAkD,EAClDC,qBAA4E,EAC5EC,aAAgC,EAChCC,UAA0C,EAC1CC,MAAwB,KACrB;EACH,MAAMC,aAAa,GAAGF,UAAU,CAACG,GAAG,CAAEC,KAAK,IAAKA,KAAK,CAACC,GAAG,CAAC;;EAE1D;EACA,MAAMC,aAAa,GAAGP,aAAa,CAChCQ,MAAM,CAAEH,KAAK,IAAK,CAACF,aAAa,CAACM,QAAQ,CAACJ,KAAK,CAACC,GAAG,CAAC,CAAC,CACrDI,OAAO,CAAC,CAAC;EAEZ,MAAMC,gBAA6B;EACjC;EACAT,MAAM,CAACP,kBAAkB,CAAC,IAAI,IAAIiB,GAAG,CAAS,CAAC;EAEjD,MAAMC,kBAAkB,GAAG;IACzB,GAAGX,MAAM;IACT,CAACP,kBAAkB,GAAGgB;EACxB,CAAC;EAED,KAAK,MAAMN,KAAK,IAAIE,aAAa,EAAE;IACjC,IAAII,gBAAgB,CAACG,GAAG,CAACT,KAAK,CAACC,GAAG,CAAC,EAAE;MACnC;MACA;IACF;;IAEA;IACA,MAAMS,WAAW,GAAGhB,qBAAqB,CAACM,KAAK,CAACC,GAAG,CAAC,GAAGO,kBAAkB,CAAC;IAE1E,IAAIE,WAAW,EAAE;MACf,OAAO,IAAI;IACb;IAEAJ,gBAAgB,CAACK,GAAG,CAACX,KAAK,CAACC,GAAG,CAAC;IAE/B,MAAMW,KAAK,GAAGnB,OAAO,CAACoB,IAAI,CAAC;MACzBC,IAAI,EAAE,cAAc;MACpBC,MAAM,EAAEf,KAAK,CAACC,GAAG;MACjBe,IAAI,EAAE;QAAEnB,MAAM,EAAEW;MAAmB,CAAC;MACpCS,iBAAiB,EAAE;IACrB,CAAC,CAAC;IAEF,IAAIL,KAAK,CAACM,gBAAgB,EAAE;MAC1B,OAAO,IAAI;IACb;EACF;EAEA,OAAO,KAAK;AACd,CAAC;AAED,OAAO,SAASC,kBAAkBA,CAAC;EACjCC,QAAQ;EACR3B,OAAO;EACPC;AACO,CAAC,EAAE;EACV,MAAM;IAAE2B;EAAiB,CAAC,GAAGlC,KAAK,CAACmC,UAAU,CAAClC,wBAAwB,CAAC;EACvE,MAAMY,KAAK,GAAGb,KAAK,CAACmC,UAAU,CAACjC,sBAAsB,CAAC;EACtD,MAAMkC,QAAQ,GAAGvB,KAAK,EAAEC,GAAG;EAE3Bd,KAAK,CAACqC,SAAS,CAAC,MAAM;IACpB,IAAID,QAAQ,EAAE;MACZ,OAAOF,gBAAgB,GAAG,cAAc,EAAEE,QAAQ,EAAG1B,MAAM,IAAK;QAC9D,MAAM4B,KAAK,GAAGL,QAAQ,CAAC,CAAC;QAExB,OAAO5B,mBAAmB,CACxBC,OAAO,EACPC,qBAAqB,EACrB+B,KAAK,CAACC,MAAM,EACZ,EAAE,EACF7B,MACF,CAAC;MACH,CAAC,CAAC;IACJ;EACF,CAAC,EAAE,CAACwB,gBAAgB,EAAE3B,qBAAqB,EAAED,OAAO,EAAE2B,QAAQ,EAAEG,QAAQ,CAAC,CAAC;AAC5E","ignoreList":[]}
1
+ {"version":3,"names":["React","NavigationBuilderContext","NavigationRouteContext","VISITED_ROUTE_KEYS","Symbol","shouldPreventRemove","emitter","beforeRemoveListeners","currentRoutes","nextRoutes","action","nextRoutesByKey","Map","map","route","key","filter","visitedRouteKeys","Set","beforeRemoveAction","reversedCurrentRoutes","reverse","has","isPrevented","undefined","add","event","emit","type","target","data","canPreventDefault","defaultPrevented","nextRoute","get","state","useOnPreventRemove","getState","addKeyedListener","use","routeKey","useInsertionEffect","nextState","routes"],"sourceRoot":"../../src","sources":["useOnPreventRemove.tsx"],"mappings":"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","ignoreList":[]}
@@ -15,7 +15,7 @@ export function useOnRouteFocus({
15
15
  }) {
16
16
  const {
17
17
  onRouteFocus: onRouteFocusParent
18
- } = React.useContext(NavigationBuilderContext);
18
+ } = React.use(NavigationBuilderContext);
19
19
  return React.useCallback(key => {
20
20
  const state = getState();
21
21
  const result = router.getStateForRouteFocus(state, key);
@@ -1 +1 @@
1
- {"version":3,"names":["React","NavigationBuilderContext","useOnRouteFocus","router","getState","key","sourceRouteKey","setState","onRouteFocus","onRouteFocusParent","useContext","useCallback","state","result","getStateForRouteFocus","undefined"],"sourceRoot":"../../src","sources":["useOnRouteFocus.tsx"],"mappings":";;AAKA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAE9B,SAASC,wBAAwB,QAAQ,+BAA4B;AASrE;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,eAAeA,CAAkC;EAC/DC,MAAM;EACNC,QAAQ;EACRC,GAAG,EAAEC,cAAc;EACnBC;AACe,CAAC,EAAE;EAClB,MAAM;IAAEC,YAAY,EAAEC;EAAmB,CAAC,GAAGT,KAAK,CAACU,UAAU,CAC3DT,wBACF,CAAC;EAED,OAAOD,KAAK,CAACW,WAAW,CACrBN,GAAW,IAAK;IACf,MAAMO,KAAK,GAAGR,QAAQ,CAAC,CAAC;IACxB,MAAMS,MAAM,GAAGV,MAAM,CAACW,qBAAqB,CAACF,KAAK,EAAEP,GAAG,CAAC;IAEvD,IAAIQ,MAAM,KAAKD,KAAK,EAAE;MACpBL,QAAQ,CAACM,MAAM,CAAC;IAClB;IAEA,IAAIJ,kBAAkB,KAAKM,SAAS,IAAIT,cAAc,KAAKS,SAAS,EAAE;MACpEN,kBAAkB,CAACH,cAAc,CAAC;IACpC;EACF,CAAC,EACD,CAACF,QAAQ,EAAEK,kBAAkB,EAAEN,MAAM,EAAEI,QAAQ,EAAED,cAAc,CACjE,CAAC;AACH","ignoreList":[]}
1
+ {"version":3,"names":["React","NavigationBuilderContext","useOnRouteFocus","router","getState","key","sourceRouteKey","setState","onRouteFocus","onRouteFocusParent","use","useCallback","state","result","getStateForRouteFocus","undefined"],"sourceRoot":"../../src","sources":["useOnRouteFocus.tsx"],"mappings":";;AAKA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAE9B,SAASC,wBAAwB,QAAQ,+BAA4B;AASrE;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,eAAeA,CAG7B;EAAEC,MAAM;EAAEC,QAAQ;EAAEC,GAAG,EAAEC,cAAc;EAAEC;AAAiC,CAAC,EAAE;EAC7E,MAAM;IAAEC,YAAY,EAAEC;EAAmB,CAAC,GAAGT,KAAK,CAACU,GAAG,CACpDT,wBACF,CAAC;EAED,OAAOD,KAAK,CAACW,WAAW,CACrBN,GAAW,IAAK;IACf,MAAMO,KAAK,GAAGR,QAAQ,CAAC,CAAC;IACxB,MAAMS,MAAM,GAAGV,MAAM,CAACW,qBAAqB,CAACF,KAAK,EAAEP,GAAG,CAAC;IAEvD,IAAIQ,MAAM,KAAKD,KAAK,EAAE;MACpBL,QAAQ,CAACM,MAAM,CAAC;IAClB;IAEA,IAAIJ,kBAAkB,KAAKM,SAAS,IAAIT,cAAc,KAAKS,SAAS,EAAE;MACpEN,kBAAkB,CAACH,cAAc,CAAC;IACpC;EACF,CAAC,EACD,CAACF,QAAQ,EAAEK,kBAAkB,EAAEN,MAAM,EAAEI,QAAQ,EAAED,cAAc,CACjE,CAAC;AACH","ignoreList":[]}
@@ -12,10 +12,10 @@ export function useOptionsGetters({
12
12
  const optionsGettersFromChildRef = React.useRef({});
13
13
  const {
14
14
  onOptionsChange
15
- } = React.useContext(NavigationBuilderContext);
15
+ } = React.use(NavigationBuilderContext);
16
16
  const {
17
17
  addOptionsGetter: parentAddOptionsGetter
18
- } = React.useContext(NavigationStateContext);
18
+ } = React.use(NavigationStateContext);
19
19
  const optionsChangeListener = React.useCallback(() => {
20
20
  const isFocused = navigation?.isFocused() ?? true;
21
21
  const hasChildren = Object.keys(optionsGettersFromChildRef.current).length;
@@ -23,8 +23,10 @@ export function useOptionsGetters({
23
23
  onOptionsChange(optionsRef.current ?? {});
24
24
  }
25
25
  }, [navigation, onOptionsChange]);
26
- React.useEffect(() => {
26
+ React.useInsertionEffect(() => {
27
27
  optionsRef.current = options;
28
+ }, [options]);
29
+ React.useEffect(() => {
28
30
  optionsChangeListener();
29
31
  return navigation?.addListener('focus', optionsChangeListener);
30
32
  }, [navigation, options, optionsChangeListener]);
@@ -52,8 +54,11 @@ export function useOptionsGetters({
52
54
  }
53
55
  return optionsRef.current;
54
56
  }, [navigation, getOptionsFromListener]);
55
- React.useEffect(() => {
56
- return parentAddOptionsGetter?.(key, getCurrentOptions);
57
+ React.useInsertionEffect(() => {
58
+ // We don't have a parent at the root
59
+ if (key != null) {
60
+ return parentAddOptionsGetter?.(key, getCurrentOptions);
61
+ }
57
62
  }, [getCurrentOptions, parentAddOptionsGetter, key]);
58
63
  const addOptionsGetter = React.useCallback((key, getter) => {
59
64
  optionsGettersFromChildRef.current[key] = getter;
@@ -1 +1 @@
1
- {"version":3,"names":["React","NavigationBuilderContext","NavigationStateContext","useOptionsGetters","key","options","navigation","optionsRef","useRef","optionsGettersFromChildRef","onOptionsChange","useContext","addOptionsGetter","parentAddOptionsGetter","optionsChangeListener","useCallback","isFocused","hasChildren","Object","keys","current","length","useEffect","addListener","getOptionsFromListener","result","getCurrentOptions","optionsFromListener","getter"],"sourceRoot":"../../src","sources":["useOptionsGetters.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","NavigationBuilderContext","NavigationStateContext","useOptionsGetters","key","options","navigation","optionsRef","useRef","optionsGettersFromChildRef","onOptionsChange","use","addOptionsGetter","parentAddOptionsGetter","optionsChangeListener","useCallback","isFocused","hasChildren","Object","keys","current","length","useInsertionEffect","useEffect","addListener","getOptionsFromListener","result","getCurrentOptions","optionsFromListener","getter"],"sourceRoot":"../../src","sources":["useOptionsGetters.tsx"],"mappings":"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","ignoreList":[]}
@@ -20,14 +20,21 @@ export function usePreventRemove(preventRemove, callback) {
20
20
  key: routeKey
21
21
  } = useRoute();
22
22
  const {
23
- setPreventRemove
23
+ setPreventRemove,
24
+ notifyPreventRemove
24
25
  } = usePreventRemoveContext();
25
- React.useEffect(() => {
26
+ React.useInsertionEffect(() => {
26
27
  setPreventRemove(id, routeKey, preventRemove);
27
28
  return () => {
28
29
  setPreventRemove(id, routeKey, false);
29
30
  };
30
31
  }, [setPreventRemove, id, routeKey, preventRemove]);
32
+ React.useEffect(() => {
33
+ notifyPreventRemove();
34
+ return () => {
35
+ notifyPreventRemove();
36
+ };
37
+ }, [id, routeKey, preventRemove, notifyPreventRemove]);
31
38
  const beforeRemoveListener = useLatestCallback(e => {
32
39
  if (!preventRemove) {
33
40
  return;
@@ -37,6 +44,6 @@ export function usePreventRemove(preventRemove, callback) {
37
44
  data: e.data
38
45
  });
39
46
  });
40
- React.useEffect(() => navigation?.addListener('beforeRemove', beforeRemoveListener), [navigation, beforeRemoveListener]);
47
+ React.useInsertionEffect(() => navigation?.addListener('beforeRemove', beforeRemoveListener), [navigation, beforeRemoveListener]);
41
48
  }
42
49
  //# sourceMappingURL=usePreventRemove.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["nanoid","React","useLatestCallback","useNavigation","usePreventRemoveContext","useRoute","usePreventRemove","preventRemove","callback","id","useState","navigation","key","routeKey","setPreventRemove","useEffect","beforeRemoveListener","e","preventDefault","data","addListener"],"sourceRoot":"../../src","sources":["usePreventRemove.tsx"],"mappings":";;AACA,SAASA,MAAM,QAAQ,mBAAmB;AAC1C,OAAO,KAAKC,KAAK,MAAM,OAAO;AAC9B,OAAOC,iBAAiB,MAAM,qBAAqB;AAGnD,SAASC,aAAa,QAAQ,oBAAiB;AAC/C,SAASC,uBAAuB,QAAQ,8BAA2B;AACnE,SAASC,QAAQ,QAAQ,eAAY;;AAErC;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,gBAAgBA,CAC9BC,aAAsB,EACtBC,QAAmE,EACnE;EACA,MAAM,CAACC,EAAE,CAAC,GAAGR,KAAK,CAACS,QAAQ,CAAC,MAAMV,MAAM,CAAC,CAAC,CAAC;EAE3C,MAAMW,UAAU,GAAGR,aAAa,CAAC,CAAC;EAClC,MAAM;IAAES,GAAG,EAAEC;EAAS,CAAC,GAAGR,QAAQ,CAAC,CAAC;EAEpC,MAAM;IAAES;EAAiB,CAAC,GAAGV,uBAAuB,CAAC,CAAC;EAEtDH,KAAK,CAACc,SAAS,CAAC,MAAM;IACpBD,gBAAgB,CAACL,EAAE,EAAEI,QAAQ,EAAEN,aAAa,CAAC;IAC7C,OAAO,MAAM;MACXO,gBAAgB,CAACL,EAAE,EAAEI,QAAQ,EAAE,KAAK,CAAC;IACvC,CAAC;EACH,CAAC,EAAE,CAACC,gBAAgB,EAAEL,EAAE,EAAEI,QAAQ,EAAEN,aAAa,CAAC,CAAC;EAEnD,MAAMS,oBAAoB,GAAGd,iBAAiB,CAE3Ce,CAAC,IAAK;IACP,IAAI,CAACV,aAAa,EAAE;MAClB;IACF;IAEAU,CAAC,CAACC,cAAc,CAAC,CAAC;IAElBV,QAAQ,CAAC;MAAEW,IAAI,EAAEF,CAAC,CAACE;IAAK,CAAC,CAAC;EAC5B,CAAC,CAAC;EAEFlB,KAAK,CAACc,SAAS,CACb,MAAMJ,UAAU,EAAES,WAAW,CAAC,cAAc,EAAEJ,oBAAoB,CAAC,EACnE,CAACL,UAAU,EAAEK,oBAAoB,CACnC,CAAC;AACH","ignoreList":[]}
1
+ {"version":3,"names":["nanoid","React","useLatestCallback","useNavigation","usePreventRemoveContext","useRoute","usePreventRemove","preventRemove","callback","id","useState","navigation","key","routeKey","setPreventRemove","notifyPreventRemove","useInsertionEffect","useEffect","beforeRemoveListener","e","preventDefault","data","addListener"],"sourceRoot":"../../src","sources":["usePreventRemove.tsx"],"mappings":";;AACA,SAASA,MAAM,QAAQ,mBAAmB;AAC1C,OAAO,KAAKC,KAAK,MAAM,OAAO;AAC9B,OAAOC,iBAAiB,MAAM,qBAAqB;AAGnD,SAASC,aAAa,QAAQ,oBAAiB;AAC/C,SAASC,uBAAuB,QAAQ,8BAA2B;AACnE,SAASC,QAAQ,QAAQ,eAAY;;AAErC;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,gBAAgBA,CAC9BC,aAAsB,EACtBC,QAAmE,EACnE;EACA,MAAM,CAACC,EAAE,CAAC,GAAGR,KAAK,CAACS,QAAQ,CAAC,MAAMV,MAAM,CAAC,CAAC,CAAC;EAE3C,MAAMW,UAAU,GAAGR,aAAa,CAAC,CAAC;EAClC,MAAM;IAAES,GAAG,EAAEC;EAAS,CAAC,GAAGR,QAAQ,CAAC,CAAC;EAEpC,MAAM;IAAES,gBAAgB;IAAEC;EAAoB,CAAC,GAAGX,uBAAuB,CAAC,CAAC;EAE3EH,KAAK,CAACe,kBAAkB,CAAC,MAAM;IAC7BF,gBAAgB,CAACL,EAAE,EAAEI,QAAQ,EAAEN,aAAa,CAAC;IAE7C,OAAO,MAAM;MACXO,gBAAgB,CAACL,EAAE,EAAEI,QAAQ,EAAE,KAAK,CAAC;IACvC,CAAC;EACH,CAAC,EAAE,CAACC,gBAAgB,EAAEL,EAAE,EAAEI,QAAQ,EAAEN,aAAa,CAAC,CAAC;EAEnDN,KAAK,CAACgB,SAAS,CAAC,MAAM;IACpBF,mBAAmB,CAAC,CAAC;IAErB,OAAO,MAAM;MACXA,mBAAmB,CAAC,CAAC;IACvB,CAAC;EACH,CAAC,EAAE,CAACN,EAAE,EAAEI,QAAQ,EAAEN,aAAa,EAAEQ,mBAAmB,CAAC,CAAC;EAEtD,MAAMG,oBAAoB,GAAGhB,iBAAiB,CAE3CiB,CAAC,IAAK;IACP,IAAI,CAACZ,aAAa,EAAE;MAClB;IACF;IAEAY,CAAC,CAACC,cAAc,CAAC,CAAC;IAElBZ,QAAQ,CAAC;MAAEa,IAAI,EAAEF,CAAC,CAACE;IAAK,CAAC,CAAC;EAC5B,CAAC,CAAC;EAEFpB,KAAK,CAACe,kBAAkB,CACtB,MAAML,UAAU,EAAEW,WAAW,CAAC,cAAc,EAAEJ,oBAAoB,CAAC,EACnE,CAACP,UAAU,EAAEO,oBAAoB,CACnC,CAAC;AACH","ignoreList":[]}
@@ -3,7 +3,7 @@
3
3
  import * as React from 'react';
4
4
  import { PreventRemoveContext } from "./PreventRemoveContext.js";
5
5
  export function usePreventRemoveContext() {
6
- const value = React.useContext(PreventRemoveContext);
6
+ const value = React.use(PreventRemoveContext);
7
7
  if (value == null) {
8
8
  throw new Error("Couldn't find the prevent remove context. Is your component inside NavigationContent?");
9
9
  }
@@ -1 +1 @@
1
- {"version":3,"names":["React","PreventRemoveContext","usePreventRemoveContext","value","useContext","Error"],"sourceRoot":"../../src","sources":["usePreventRemoveContext.tsx"],"mappings":";;AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAE9B,SAASC,oBAAoB,QAAQ,2BAAwB;AAE7D,OAAO,SAASC,uBAAuBA,CAAA,EAAG;EACxC,MAAMC,KAAK,GAAGH,KAAK,CAACI,UAAU,CAACH,oBAAoB,CAAC;EAEpD,IAAIE,KAAK,IAAI,IAAI,EAAE;IACjB,MAAM,IAAIE,KAAK,CACb,uFACF,CAAC;EACH;EAEA,OAAOF,KAAK;AACd","ignoreList":[]}
1
+ {"version":3,"names":["React","PreventRemoveContext","usePreventRemoveContext","value","use","Error"],"sourceRoot":"../../src","sources":["usePreventRemoveContext.tsx"],"mappings":";;AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAE9B,SAASC,oBAAoB,QAAQ,2BAAwB;AAE7D,OAAO,SAASC,uBAAuBA,CAAA,EAAG;EACxC,MAAMC,KAAK,GAAGH,KAAK,CAACI,GAAG,CAACH,oBAAoB,CAAC;EAE7C,IAAIE,KAAK,IAAI,IAAI,EAAE;IACjB,MAAM,IAAIE,KAAK,CACb,uFACF,CAAC;EACH;EAEA,OAAOF,KAAK;AACd","ignoreList":[]}
@@ -10,11 +10,11 @@ import { SingleNavigatorContext } from "./EnsureSingleNavigator.js";
10
10
  */
11
11
  export function useRegisterNavigator() {
12
12
  const [key] = React.useState(() => nanoid());
13
- const container = React.useContext(SingleNavigatorContext);
13
+ const container = React.use(SingleNavigatorContext);
14
14
  if (container === undefined) {
15
15
  throw new Error("Couldn't register the navigator. Have you wrapped your app with 'NavigationContainer'?\n\nThis can also happen if there are multiple copies of '@react-navigation' packages installed.");
16
16
  }
17
- React.useEffect(() => {
17
+ React.useInsertionEffect(() => {
18
18
  const {
19
19
  register,
20
20
  unregister
@@ -1 +1 @@
1
- {"version":3,"names":["nanoid","React","SingleNavigatorContext","useRegisterNavigator","key","useState","container","useContext","undefined","Error","useEffect","register","unregister"],"sourceRoot":"../../src","sources":["useRegisterNavigator.tsx"],"mappings":";;AAAA,SAASA,MAAM,QAAQ,mBAAmB;AAC1C,OAAO,KAAKC,KAAK,MAAM,OAAO;AAE9B,SAASC,sBAAsB,QAAQ,4BAAyB;;AAEhE;AACA;AACA;AACA;AACA,OAAO,SAASC,oBAAoBA,CAAA,EAAG;EACrC,MAAM,CAACC,GAAG,CAAC,GAAGH,KAAK,CAACI,QAAQ,CAAC,MAAML,MAAM,CAAC,CAAC,CAAC;EAC5C,MAAMM,SAAS,GAAGL,KAAK,CAACM,UAAU,CAACL,sBAAsB,CAAC;EAE1D,IAAII,SAAS,KAAKE,SAAS,EAAE;IAC3B,MAAM,IAAIC,KAAK,CACb,wLACF,CAAC;EACH;EAEAR,KAAK,CAACS,SAAS,CAAC,MAAM;IACpB,MAAM;MAAEC,QAAQ;MAAEC;IAAW,CAAC,GAAGN,SAAS;IAE1CK,QAAQ,CAACP,GAAG,CAAC;IAEb,OAAO,MAAMQ,UAAU,CAACR,GAAG,CAAC;EAC9B,CAAC,EAAE,CAACE,SAAS,EAAEF,GAAG,CAAC,CAAC;EAEpB,OAAOA,GAAG;AACZ","ignoreList":[]}
1
+ {"version":3,"names":["nanoid","React","SingleNavigatorContext","useRegisterNavigator","key","useState","container","use","undefined","Error","useInsertionEffect","register","unregister"],"sourceRoot":"../../src","sources":["useRegisterNavigator.tsx"],"mappings":";;AAAA,SAASA,MAAM,QAAQ,mBAAmB;AAC1C,OAAO,KAAKC,KAAK,MAAM,OAAO;AAE9B,SAASC,sBAAsB,QAAQ,4BAAyB;;AAEhE;AACA;AACA;AACA;AACA,OAAO,SAASC,oBAAoBA,CAAA,EAAG;EACrC,MAAM,CAACC,GAAG,CAAC,GAAGH,KAAK,CAACI,QAAQ,CAAC,MAAML,MAAM,CAAC,CAAC,CAAC;EAC5C,MAAMM,SAAS,GAAGL,KAAK,CAACM,GAAG,CAACL,sBAAsB,CAAC;EAEnD,IAAII,SAAS,KAAKE,SAAS,EAAE;IAC3B,MAAM,IAAIC,KAAK,CACb,wLACF,CAAC;EACH;EAEAR,KAAK,CAACS,kBAAkB,CAAC,MAAM;IAC7B,MAAM;MAAEC,QAAQ;MAAEC;IAAW,CAAC,GAAGN,SAAS;IAE1CK,QAAQ,CAACP,GAAG,CAAC;IAEb,OAAO,MAAMQ,UAAU,CAACR,GAAG,CAAC;EAC9B,CAAC,EAAE,CAACE,SAAS,EAAEF,GAAG,CAAC,CAAC;EAEpB,OAAOA,GAAG;AACZ","ignoreList":[]}
@@ -5,6 +5,8 @@ import { NamedRouteContextListContext, NavigationRouteContext } from "./Navigati
5
5
 
6
6
  /**
7
7
  * Get all possible route names from a param list and its nested navigators.
8
+ * Recurses into the param lists directly instead of using `RouteForName`,
9
+ * So the route objects don't need to be built just to get the names.
8
10
  */
9
11
 
10
12
  /**
@@ -1 +1 @@
1
- {"version":3,"names":["React","NamedRouteContextListContext","NavigationRouteContext","useRoute","name","undefined","route","use","Error","NamedRouteContextList","NamedRouteContext"],"sourceRoot":"../../src","sources":["useRoute.tsx"],"mappings":";;AACA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAE9B,SACEC,4BAA4B,EAC5BC,sBAAsB,QACjB,yBAAsB;;AAG7B;AACA;AACA;;AAMA;AACA;AACA;AACA;AACA;;AAaA,OAAO,SAASC,QAAQA,CAACC,IAAa,EAAE;EACtC,IAAIA,IAAI,KAAKC,SAAS,EAAE;IACtB,MAAMC,KAAK,GAAGN,KAAK,CAACO,GAAG,CAACL,sBAAsB,CAAC;IAE/C,IAAII,KAAK,KAAKD,SAAS,EAAE;MACvB,MAAM,IAAIG,KAAK,CACb,iFACF,CAAC;IACH;IAEA,OAAOF,KAAK;EACd;EAEA,MAAMG,qBAAqB,GAAGT,KAAK,CAACO,GAAG,CAACN,4BAA4B,CAAC;EAErE,IAAIQ,qBAAqB,KAAKJ,SAAS,EAAE;IACvC,MAAM,IAAIG,KAAK,CACb,kFACF,CAAC;EACH;EAEA,MAAME,iBAAiB,GAAGD,qBAAqB,CAACL,IAAI,CAAC;EAErD,IAAIM,iBAAiB,KAAKL,SAAS,EAAE;IACnC,MAAM,IAAIG,KAAK,CACb,gCAAgCJ,IAAI,8EACtC,CAAC;EACH;EAEA,MAAME,KAAK,GAAGN,KAAK,CAACO,GAAG,CAACG,iBAAiB,CAAC;EAE1C,OAAOJ,KAAK;AACd","ignoreList":[]}
1
+ {"version":3,"names":["React","NamedRouteContextListContext","NavigationRouteContext","useRoute","name","undefined","route","use","Error","NamedRouteContextList","NamedRouteContext"],"sourceRoot":"../../src","sources":["useRoute.tsx"],"mappings":";;AACA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAE9B,SACEC,4BAA4B,EAC5BC,sBAAsB,QACjB,yBAAsB;;AAS7B;AACA;AACA;AACA;AACA;;AASA;AACA;AACA;AACA;AACA;;AAgBA,OAAO,SAASC,QAAQA,CAACC,IAAa,EAAE;EACtC,IAAIA,IAAI,KAAKC,SAAS,EAAE;IACtB,MAAMC,KAAK,GAAGN,KAAK,CAACO,GAAG,CAACL,sBAAsB,CAAC;IAE/C,IAAII,KAAK,KAAKD,SAAS,EAAE;MACvB,MAAM,IAAIG,KAAK,CACb,iFACF,CAAC;IACH;IAEA,OAAOF,KAAK;EACd;EAEA,MAAMG,qBAAqB,GAAGT,KAAK,CAACO,GAAG,CAACN,4BAA4B,CAAC;EAErE,IAAIQ,qBAAqB,KAAKJ,SAAS,EAAE;IACvC,MAAM,IAAIG,KAAK,CACb,kFACF,CAAC;EACH;EAEA,MAAME,iBAAiB,GAAGD,qBAAqB,CAACL,IAAI,CAAC;EAErD,IAAIM,iBAAiB,KAAKL,SAAS,EAAE;IACnC,MAAM,IAAIG,KAAK,CACb,gCAAgCJ,IAAI,8EACtC,CAAC;EACH;EAEA,MAAME,KAAK,GAAGN,KAAK,CAACO,GAAG,CAACG,iBAAiB,CAAC;EAE1C,OAAOJ,KAAK;AACd","ignoreList":[]}
@@ -18,7 +18,7 @@ export function useRouteCache(routes) {
18
18
  const cache = React.useMemo(() => ({
19
19
  current: new Map()
20
20
  }), []);
21
- cache.current = routes.reduce((acc, route) => {
21
+ const next = routes.reduce((acc, route) => {
22
22
  const previous = cache.current.get(route.key);
23
23
  const {
24
24
  state,
@@ -31,12 +31,11 @@ export function useRouteCache(routes) {
31
31
  } else {
32
32
  proxy = routeWithoutState;
33
33
  }
34
- if (process.env.NODE_ENV !== 'production') {
34
+ if (process.env.NODE_ENV !== 'production' && proxy !== previous) {
35
35
  // FIXME: since the state is updated with mutation, the route object cannot be frozen
36
36
  // As a workaround, loop through the object and make the properties readonly
37
- for (const key in proxy) {
38
- // @ts-expect-error: this is fine since we are looping through the object
39
- const value = proxy[key];
37
+ // Only needed once per proxy - skip if we're reusing a previously-frozen one
38
+ for (const [key, value] of Object.entries(proxy)) {
40
39
  Object.defineProperty(proxy, key, {
41
40
  enumerable: true,
42
41
  configurable: true,
@@ -45,14 +44,21 @@ export function useRouteCache(routes) {
45
44
  });
46
45
  }
47
46
  }
48
- Object.defineProperty(proxy, CHILD_STATE, {
49
- enumerable: false,
50
- configurable: true,
51
- value: state
52
- });
47
+
48
+ // @ts-expect-error: this isn't in type definitions coz we want this private
49
+ if (proxy[CHILD_STATE] !== state) {
50
+ Object.defineProperty(proxy, CHILD_STATE, {
51
+ enumerable: false,
52
+ configurable: true,
53
+ value: state
54
+ });
55
+ }
53
56
  acc.set(route.key, proxy);
54
57
  return acc;
55
58
  }, new Map());
56
- return Array.from(cache.current.values());
59
+ React.useInsertionEffect(() => {
60
+ cache.current = next;
61
+ });
62
+ return Array.from(next.values());
57
63
  }
58
64
  //# sourceMappingURL=useRouteCache.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["React","isRecordEqual","CHILD_STATE","Symbol","useRouteCache","routes","cache","useMemo","current","Map","reduce","acc","route","previous","get","key","state","routeWithoutState","proxy","process","env","NODE_ENV","value","Object","defineProperty","enumerable","configurable","writable","set","Array","from","values"],"sourceRoot":"../../src","sources":["useRouteCache.tsx"],"mappings":";;AACA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAE9B,SAASC,aAAa,QAAQ,oBAAiB;AAK/C;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,WAAW,GAAGC,MAAM,CAAC,aAAa,CAAC;;AAEhD;AACA;AACA;AACA;AACA,OAAO,SAASC,aAAaA,CAC3BC,MAAuB,EACvB;EACA;EACA,MAAMC,KAAK,GAAGN,KAAK,CAACO,OAAO,CAAC,OAAO;IAAEC,OAAO,EAAE,IAAIC,GAAG,CAAC;EAAgB,CAAC,CAAC,EAAE,EAAE,CAAC;EAE7EH,KAAK,CAACE,OAAO,GAAGH,MAAM,CAACK,MAAM,CAAC,CAACC,GAAG,EAAEC,KAAK,KAAK;IAC5C,MAAMC,QAAQ,GAAGP,KAAK,CAACE,OAAO,CAACM,GAAG,CAACF,KAAK,CAACG,GAAG,CAAC;IAC7C,MAAM;MAAEC,KAAK;MAAE,GAAGC;IAAkB,CAAC,GAAGL,KAAK;IAE7C,IAAIM,KAAK;IAET,IAAIL,QAAQ,IAAIZ,aAAa,CAACY,QAAQ,EAAEI,iBAAiB,CAAC,EAAE;MAC1D;MACAC,KAAK,GAAGL,QAAQ;IAClB,CAAC,MAAM;MACLK,KAAK,GAAGD,iBAAiB;IAC3B;IAEA,IAAIE,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY,EAAE;MACzC;MACA;MACA,KAAK,MAAMN,GAAG,IAAIG,KAAK,EAAE;QACvB;QACA,MAAMI,KAAK,GAAGJ,KAAK,CAACH,GAAG,CAAC;QAExBQ,MAAM,CAACC,cAAc,CAACN,KAAK,EAAEH,GAAG,EAAE;UAChCU,UAAU,EAAE,IAAI;UAChBC,YAAY,EAAE,IAAI;UAClBC,QAAQ,EAAE,KAAK;UACfL;QACF,CAAC,CAAC;MACJ;IACF;IAEAC,MAAM,CAACC,cAAc,CAACN,KAAK,EAAEhB,WAAW,EAAE;MACxCuB,UAAU,EAAE,KAAK;MACjBC,YAAY,EAAE,IAAI;MAClBJ,KAAK,EAAEN;IACT,CAAC,CAAC;IAEFL,GAAG,CAACiB,GAAG,CAAChB,KAAK,CAACG,GAAG,EAAEG,KAAK,CAAC;IAEzB,OAAOP,GAAG;EACZ,CAAC,EAAE,IAAIF,GAAG,CAAC,CAAe,CAAC;EAE3B,OAAOoB,KAAK,CAACC,IAAI,CAACxB,KAAK,CAACE,OAAO,CAACuB,MAAM,CAAC,CAAC,CAAC;AAC3C","ignoreList":[]}
1
+ {"version":3,"names":["React","isRecordEqual","CHILD_STATE","Symbol","useRouteCache","routes","cache","useMemo","current","Map","next","reduce","acc","route","previous","get","key","state","routeWithoutState","proxy","process","env","NODE_ENV","value","Object","entries","defineProperty","enumerable","configurable","writable","set","useInsertionEffect","Array","from","values"],"sourceRoot":"../../src","sources":["useRouteCache.tsx"],"mappings":";;AACA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAE9B,SAASC,aAAa,QAAQ,oBAAiB;AAG/C;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,WAAW,GAAGC,MAAM,CAAC,aAAa,CAAC;;AAEhD;AACA;AACA;AACA;AACA,OAAO,SAASC,aAAaA,CAC3BC,MAAuB,EACvB;EACA;EACA,MAAMC,KAAK,GAAGN,KAAK,CAACO,OAAO,CACzB,OAAO;IAAEC,OAAO,EAAE,IAAIC,GAAG,CAAmC;EAAE,CAAC,CAAC,EAChE,EACF,CAAC;EAED,MAAMC,IAAI,GAAGL,MAAM,CAACM,MAAM,CAAC,CAACC,GAAG,EAAEC,KAAK,KAAK;IACzC,MAAMC,QAAQ,GAAGR,KAAK,CAACE,OAAO,CAACO,GAAG,CAACF,KAAK,CAACG,GAAG,CAAC;IAC7C,MAAM;MAAEC,KAAK;MAAE,GAAGC;IAAkB,CAAC,GAAGL,KAAK;IAE7C,IAAIM,KAAK;IAET,IAAIL,QAAQ,IAAIb,aAAa,CAACa,QAAQ,EAAEI,iBAAiB,CAAC,EAAE;MAC1D;MACAC,KAAK,GAAGL,QAAQ;IAClB,CAAC,MAAM;MACLK,KAAK,GAAGD,iBAAiB;IAC3B;IAEA,IAAIE,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY,IAAIH,KAAK,KAAKL,QAAQ,EAAE;MAC/D;MACA;MACA;MACA,KAAK,MAAM,CAACE,GAAG,EAAEO,KAAK,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACN,KAAK,CAAC,EAAE;QAChDK,MAAM,CAACE,cAAc,CAACP,KAAK,EAAEH,GAAG,EAAE;UAChCW,UAAU,EAAE,IAAI;UAChBC,YAAY,EAAE,IAAI;UAClBC,QAAQ,EAAE,KAAK;UACfN;QACF,CAAC,CAAC;MACJ;IACF;;IAEA;IACA,IAAIJ,KAAK,CAACjB,WAAW,CAAC,KAAKe,KAAK,EAAE;MAChCO,MAAM,CAACE,cAAc,CAACP,KAAK,EAAEjB,WAAW,EAAE;QACxCyB,UAAU,EAAE,KAAK;QACjBC,YAAY,EAAE,IAAI;QAClBL,KAAK,EAAEN;MACT,CAAC,CAAC;IACJ;IAEAL,GAAG,CAACkB,GAAG,CAACjB,KAAK,CAACG,GAAG,EAAEG,KAAK,CAAC;IAEzB,OAAOP,GAAG;EACZ,CAAC,EAAE,IAAIH,GAAG,CAAmC,CAAC,CAAC;EAE/CT,KAAK,CAAC+B,kBAAkB,CAAC,MAAM;IAC7BzB,KAAK,CAACE,OAAO,GAAGE,IAAI;EACtB,CAAC,CAAC;EAEF,OAAOsB,KAAK,CAACC,IAAI,CAACvB,IAAI,CAACwB,MAAM,CAAC,CAAC,CAAC;AAClC","ignoreList":[]}
@@ -5,20 +5,20 @@ import { NavigationBuilderContext } from "./NavigationBuilderContext.js";
5
5
 
6
6
  /**
7
7
  * When screen config changes, we want to update the navigator in the same update phase.
8
- * However, navigation state is in the root component and React won't let us update it from a child.
9
- * This is a workaround for that, the scheduled update is stored in the ref without actually calling setState.
10
- * It lets all subsequent updates access the latest state so it stays correct.
11
- * Then we call setState during after the component updates.
8
+ * However, navigation state is in the root component and React won't let us update it from a child during render.
9
+ * The render could also be interrupted in concurrent mode, so we need to update after commit.
10
+ * So we queue the update in an insertion effect and flush it in a layout effect.
11
+ * Insertion effects run before layout effects, so every navigator in the tree has queued its update before we flush.
12
+ * This lets nested updates be applied from the root down without clobbering each other.
12
13
  */
13
14
  export function useScheduleUpdate(callback) {
14
15
  const {
15
16
  scheduleUpdate,
16
17
  flushUpdates
17
- } = React.useContext(NavigationBuilderContext);
18
-
19
- // FIXME: This is potentially unsafe
20
- // However, since we are using sync store, it might be fine
21
- scheduleUpdate(callback);
18
+ } = React.use(NavigationBuilderContext);
19
+ React.useInsertionEffect(() => {
20
+ scheduleUpdate(callback);
21
+ });
22
22
  React.useLayoutEffect(flushUpdates);
23
23
  }
24
24
  //# sourceMappingURL=useScheduleUpdate.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["React","NavigationBuilderContext","useScheduleUpdate","callback","scheduleUpdate","flushUpdates","useContext","useLayoutEffect"],"sourceRoot":"../../src","sources":["useScheduleUpdate.tsx"],"mappings":";;AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAE9B,SAASC,wBAAwB,QAAQ,+BAA4B;;AAErE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,iBAAiBA,CAACC,QAAoB,EAAE;EACtD,MAAM;IAAEC,cAAc;IAAEC;EAAa,CAAC,GAAGL,KAAK,CAACM,UAAU,CACvDL,wBACF,CAAC;;EAED;EACA;EACAG,cAAc,CAACD,QAAQ,CAAC;EAExBH,KAAK,CAACO,eAAe,CAACF,YAAY,CAAC;AACrC","ignoreList":[]}
1
+ {"version":3,"names":["React","NavigationBuilderContext","useScheduleUpdate","callback","scheduleUpdate","flushUpdates","use","useInsertionEffect","useLayoutEffect"],"sourceRoot":"../../src","sources":["useScheduleUpdate.tsx"],"mappings":";;AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAE9B,SAASC,wBAAwB,QAAQ,+BAA4B;;AAErE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,iBAAiBA,CAACC,QAAoB,EAAE;EACtD,MAAM;IAAEC,cAAc;IAAEC;EAAa,CAAC,GAAGL,KAAK,CAACM,GAAG,CAACL,wBAAwB,CAAC;EAE5ED,KAAK,CAACO,kBAAkB,CAAC,MAAM;IAC7BH,cAAc,CAACD,QAAQ,CAAC;EAC1B,CAAC,CAAC;EAEFH,KAAK,CAACQ,eAAe,CAACH,YAAY,CAAC;AACrC","ignoreList":[]}
@@ -10,7 +10,7 @@ import { NavigationFocusedRouteStateContext } from "./NavigationFocusedRouteStat
10
10
  * @returns Minimal state to build a path for the current route.
11
11
  */
12
12
  export function useStateForPath() {
13
- const state = React.useContext(NavigationFocusedRouteStateContext);
13
+ const state = React.use(NavigationFocusedRouteStateContext);
14
14
  return state;
15
15
  }
16
16
  //# sourceMappingURL=useStateForPath.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["React","NavigationFocusedRouteStateContext","useStateForPath","state","useContext"],"sourceRoot":"../../src","sources":["useStateForPath.tsx"],"mappings":";;AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAE9B,SAASC,kCAAkC,QAAQ,yCAAsC;;AAEzF;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,eAAeA,CAAA,EAAG;EAChC,MAAMC,KAAK,GAAGH,KAAK,CAACI,UAAU,CAACH,kCAAkC,CAAC;EAElE,OAAOE,KAAK;AACd","ignoreList":[]}
1
+ {"version":3,"names":["React","NavigationFocusedRouteStateContext","useStateForPath","state","use"],"sourceRoot":"../../src","sources":["useStateForPath.tsx"],"mappings":";;AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAE9B,SAASC,kCAAkC,QAAQ,yCAAsC;;AAEzF;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,eAAeA,CAAA,EAAG;EAChC,MAAMC,KAAK,GAAGH,KAAK,CAACI,GAAG,CAACH,kCAAkC,CAAC;EAE3D,OAAOE,KAAK;AACd","ignoreList":[]}
@@ -20,8 +20,9 @@ const createStore = getInitialState => {
20
20
  let didUpdate = false;
21
21
  const setState = newState => {
22
22
  state = deepFreeze(newState);
23
- didUpdate = true;
24
- if (!isBatching) {
23
+ if (isBatching) {
24
+ didUpdate = true;
25
+ } else {
25
26
  listeners.forEach(listener => listener());
26
27
  }
27
28
  };
@@ -77,7 +78,10 @@ export function useSyncState(getInitialState) {
77
78
  pendingUpdatesRef.current = [];
78
79
  if (pendingUpdates.length !== 0) {
79
80
  store.batchUpdates(() => {
80
- // Flush all the pending updates
81
+ // Updates are queued child-first as insertion effects run bottom-up.
82
+ // The root navigator replaces the whole state while nested navigators merge into it.
83
+ // So we apply them root-first to avoid the root clobbering nested updates.
84
+ pendingUpdates.reverse();
81
85
  for (const update of pendingUpdates) {
82
86
  update();
83
87
  }
@@ -1 +1 @@
1
- {"version":3,"names":["React","useLatestCallback","deepFreeze","useLazyValue","createStore","getInitialState","listeners","Set","initialized","state","getState","isBatching","didUpdate","setState","newState","forEach","listener","subscribe","callback","add","delete","batchUpdates","useSyncState","store","rerender","useReducer","_","undefined","useEffect","unsubscribe","pendingUpdatesRef","useRef","scheduleUpdate","current","push","flushUpdates","pendingUpdates","length","update"],"sourceRoot":"../../src","sources":["useSyncState.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","useLatestCallback","deepFreeze","useLazyValue","createStore","getInitialState","listeners","Set","initialized","state","getState","isBatching","didUpdate","setState","newState","forEach","listener","subscribe","callback","add","delete","batchUpdates","useSyncState","store","rerender","useReducer","_","undefined","useEffect","unsubscribe","pendingUpdatesRef","useRef","scheduleUpdate","current","push","flushUpdates","pendingUpdates","length","reverse","update"],"sourceRoot":"../../src","sources":["useSyncState.tsx"],"mappings":"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","ignoreList":[]}
@@ -1,52 +1,66 @@
1
1
  "use strict";
2
2
 
3
- const formatToList = items => Object.entries(items).map(([key, value]) => `- ${key} (${value})`).join('\n');
3
+ const ROOT_VALIDATION_LIST = ['- path (string)', '- initialRouteName (string)', '- screens (object)'].join('\n');
4
+ const NESTED_VALIDATION_LIST = [ROOT_VALIDATION_LIST, '- alias (array)', '- exact (boolean)', '- stringify (object)', '- parse (object)', '- shared (boolean)'].join('\n');
5
+ const getValidationType = (key, root) => {
6
+ switch (key) {
7
+ case 'path':
8
+ case 'initialRouteName':
9
+ return 'string';
10
+ case 'screens':
11
+ return 'object';
12
+ case 'alias':
13
+ return root ? undefined : 'array';
14
+ case 'exact':
15
+ case 'shared':
16
+ return root ? undefined : 'boolean';
17
+ case 'stringify':
18
+ case 'parse':
19
+ return root ? undefined : 'object';
20
+ default:
21
+ return undefined;
22
+ }
23
+ };
4
24
  export function validatePathConfig(config, root = true) {
5
- const validation = {
6
- path: 'string',
7
- initialRouteName: 'string',
8
- screens: 'object',
9
- ...(root ? null : {
10
- alias: 'array',
11
- exact: 'boolean',
12
- stringify: 'object',
13
- parse: 'object'
14
- })
15
- };
16
25
  if (typeof config !== 'object' || config === null) {
17
26
  throw new Error(`Expected the configuration to be an object, but got ${JSON.stringify(config)}.`);
18
27
  }
19
- const validationErrors = Object.fromEntries(Object.keys(config).map(key => {
20
- if (key in validation) {
21
- const type = validation[key];
22
- // @ts-expect-error: we know the key exists
23
- const value = config[key];
24
- if (value !== undefined) {
25
- if (type === 'array') {
26
- if (!Array.isArray(value)) {
27
- return [key, `expected 'Array', got '${typeof value}'`];
28
- }
29
- } else if (typeof value !== type) {
30
- return [key, `expected '${type}', got '${typeof value}'`];
31
- }
28
+ const pathConfig = config;
29
+ let validationErrors;
30
+ for (const key in pathConfig) {
31
+ const type = getValidationType(key, root);
32
+ if (type === undefined) {
33
+ (validationErrors ??= []).push(`- ${key} (extraneous)`);
34
+ continue;
35
+ }
36
+ const value = pathConfig[key];
37
+ if (value === undefined) {
38
+ continue;
39
+ }
40
+ if (type === 'array') {
41
+ if (!Array.isArray(value)) {
42
+ (validationErrors ??= []).push(`- ${key} (expected 'Array', got '${typeof value}')`);
32
43
  }
33
- } else {
34
- return [key, 'extraneous'];
44
+ } else if (typeof value !== type) {
45
+ (validationErrors ??= []).push(`- ${key} (expected '${type}', got '${typeof value}')`);
35
46
  }
36
- return null;
37
- }).filter(Boolean));
38
- if (Object.keys(validationErrors).length) {
39
- throw new Error(`Found invalid properties in the configuration:\n${formatToList(validationErrors)}\n\nYou can only specify the following properties:\n${formatToList(validation)}\n\nIf you want to specify configuration for screens, you need to specify them under a 'screens' property.\n\nSee https://reactnavigation.org/docs/configuring-links for more details on how to specify a linking configuration.`);
40
47
  }
41
- if (root && 'path' in config && typeof config.path === 'string' && config.path.includes(':')) {
42
- throw new Error(`Found invalid path '${config.path}'. The 'path' in the top-level configuration cannot contain patterns for params.`);
48
+ if (validationErrors) {
49
+ throw new Error(`Found invalid properties in the configuration:\n${validationErrors.join('\n')}\n\nYou can only specify the following properties:\n${root ? ROOT_VALIDATION_LIST : NESTED_VALIDATION_LIST}\n\nIf you want to specify configuration for screens, you need to specify them under a 'screens' property.\n\nSee https://reactnavigation.org/docs/configuring-links for more details on how to specify a linking configuration.`);
43
50
  }
44
- if ('screens' in config && config.screens) {
45
- Object.entries(config.screens).forEach(([_, value]) => {
51
+ const path = pathConfig.path;
52
+ if (root && 'path' in pathConfig && typeof path === 'string' && path.includes(':')) {
53
+ throw new Error(`Found invalid path '${path}'. The 'path' in the top-level configuration cannot contain patterns for params.`);
54
+ }
55
+ const screens = pathConfig.screens;
56
+ if (screens && typeof screens === 'object') {
57
+ const screenConfig = screens;
58
+ for (const name in screenConfig) {
59
+ const value = screenConfig[name];
46
60
  if (typeof value !== 'string') {
47
61
  validatePathConfig(value, false);
48
62
  }
49
- });
63
+ }
50
64
  }
51
65
  }
52
66
  //# sourceMappingURL=validatePathConfig.js.map