@sigmela/router 0.7.0 → 0.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -4,6 +4,34 @@ All notable changes to this package are documented here. The format follows
4
4
  [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and the project uses
5
5
  [semantic versioning](https://semver.org/).
6
6
 
7
+ ## 0.7.1
8
+
9
+ ### Fixed
10
+
11
+ - A pending guard no longer replaces a container's chrome. `Router.Protected`
12
+ with `when="pending"` stripped `layout`/`component`/`elementType` off the
13
+ matched route; for a `Drawer` or `TabBar` container that swapped the app's
14
+ own shell for `DefaultDrawerLayout`, and the pending node never appeared at
15
+ all because `DrawerRouteContent` renders from `layout`, not `element`. An
16
+ app whose drawer chrome differs from the default — a custom sidebar, say —
17
+ showed the built-in chrome for as long as the guard stayed undecided.
18
+ Container routes now keep their chrome and swap only the content pane.
19
+ Overlay flow entries carry no `container`, so modal and sheet presentations
20
+ are unaffected.
21
+
22
+ ### Added
23
+
24
+ - `flowParent` on route props: the route id that must sit immediately below a
25
+ screen when a modal flow is entered straight at a deeper step, restoring the
26
+ history a visitor would have built by walking the flow normally. Shipped
27
+ here rather than in 0.7.0 — 0.7.0 was published before these commits landed,
28
+ so consumers were carrying it as a local patch.
29
+
30
+ ### Notes
31
+
32
+ - 0.7.0 has no entry of its own; everything above covers the gap between the
33
+ published 0.7.0 tarball and this release.
34
+
7
35
  ## 0.6.0
8
36
 
9
37
  ### Added
package/dist/Router.d.ts CHANGED
@@ -87,6 +87,12 @@ type RouterRouteElement = ReactNode | ElementType;
87
87
  export interface RouterRouteProps {
88
88
  id?: string;
89
89
  path?: string;
90
+ /**
91
+ * Route id that must sit immediately below this screen when a modal flow is
92
+ * entered straight at a deeper step. This restores the same spatial history
93
+ * a visitor would have built by walking the flow normally.
94
+ */
95
+ flowParent?: string;
90
96
  stackKey?: string | ((props: RouterRouteRenderProps) => string);
91
97
  fallback?: ReactNode;
92
98
  animation?: RouterScreenAnimation;
@@ -1 +1 @@
1
- {"version":3,"file":"Router.d.ts","sourceRoot":"","sources":["../src/Router.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Router.d.ts","sourceRoot":"","sources":["../src/Router.tsx"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1192,6 +1192,7 @@ function compiledRouteFromProps(props, path, routeId, presentation, animation, r
1192
1192
  return {
1193
1193
  id: routeId,
1194
1194
  path,
1195
+ flowParent: props.flowParent,
1195
1196
  presentation,
1196
1197
  animation,
1197
1198
  overlayLayout: props.overlayLayout,
@@ -1221,6 +1222,7 @@ function compileStackRoutes(children, parentPath, parentId = "root", inheritedGu
1221
1222
  routes.push({
1222
1223
  id: routeId,
1223
1224
  path,
1225
+ flowParent: props.flowParent,
1224
1226
  presentation,
1225
1227
  animation,
1226
1228
  overlayLayout: props.overlayLayout,
@@ -1557,6 +1559,7 @@ function compileStackRoutes(children, parentPath, parentId = "root", inheritedGu
1557
1559
  routes.push({
1558
1560
  id: routeId,
1559
1561
  path,
1562
+ flowParent: props.flowParent,
1560
1563
  presentation,
1561
1564
  animation,
1562
1565
  overlayLayout: props.overlayLayout,
@@ -3040,26 +3043,57 @@ function overlayFlowRootPathname(rootPath, pathname) {
3040
3043
  return `/${segments.slice(0, depth).join("/")}`;
3041
3044
  }
3042
3045
  function seedModalFlowScreens(match, pathname, search, state) {
3043
- const target = modalFlowScreenFromMatch(match, pathname, search, state, 0, "push");
3044
- if (!target) return void 0;
3045
3046
  const flow = match.route.overlayFlow;
3046
3047
  const rootEntry = flow?.entries[0];
3047
3048
  const rootRoute = flow?.routes[0];
3048
- if (!flow || !rootEntry || !rootRoute || rootRoute === match.route.childRoute) {
3049
- return [target];
3050
- }
3051
- const rootScreen = {
3052
- overlayRoute: rootEntry,
3053
- route: rootRoute,
3054
- params: match.params,
3055
- pathname: rootRoute.path ? overlayFlowRootPathname(rootRoute.path, pathname) : pathname,
3056
- search,
3057
- historyState: stateWithHistoryIndex(state, 0, createRouterId(), "push")
3058
- };
3059
- return [
3060
- rootScreen,
3061
- { ...target, historyState: stateWithHistoryIndex(state, 1, createRouterId(), "push") }
3062
- ];
3049
+ const targetRoute = match.route.childRoute;
3050
+ if (!flow || !rootEntry || !rootRoute || !targetRoute) {
3051
+ const target = modalFlowScreenFromMatch(
3052
+ match,
3053
+ pathname,
3054
+ search,
3055
+ state,
3056
+ 0,
3057
+ "push"
3058
+ );
3059
+ return target ? [target] : void 0;
3060
+ }
3061
+ const routeChain = [targetRoute];
3062
+ const visitedRouteIds = /* @__PURE__ */ new Set([targetRoute.id]);
3063
+ let currentRoute = targetRoute;
3064
+ while (currentRoute.flowParent) {
3065
+ const parentRoute = flow.routes.find(
3066
+ (route) => route.id === currentRoute.flowParent
3067
+ );
3068
+ if (!parentRoute || visitedRouteIds.has(parentRoute.id)) break;
3069
+ routeChain.unshift(parentRoute);
3070
+ visitedRouteIds.add(parentRoute.id);
3071
+ currentRoute = parentRoute;
3072
+ }
3073
+ if (!visitedRouteIds.has(rootRoute.id)) {
3074
+ routeChain.unshift(rootRoute);
3075
+ }
3076
+ return routeChain.flatMap((route, historyIndex) => {
3077
+ const routeIndex = flow.routes.indexOf(route);
3078
+ const overlayRoute = flow.entries[routeIndex];
3079
+ if (!overlayRoute) return [];
3080
+ const resolvedPathname = route === targetRoute ? pathname : pathForRoutePattern(route.path, match.params) ?? (route === rootRoute && route.path ? overlayFlowRootPathname(route.path, pathname) : pathname);
3081
+ return [
3082
+ {
3083
+ overlayRoute,
3084
+ route,
3085
+ params: match.params,
3086
+ pathname: resolvedPathname,
3087
+ search,
3088
+ historyState: stateWithHistoryIndex(
3089
+ state,
3090
+ historyIndex,
3091
+ createRouterId(),
3092
+ "push"
3093
+ )
3094
+ }
3095
+ ];
3096
+ });
3063
3097
  }
3064
3098
  function RouterRuntime({
3065
3099
  children,
@@ -3089,6 +3123,16 @@ function RouterRuntime({
3089
3123
  const modalEntriesRef = useRef(modalEntries);
3090
3124
  const modalSeqRef = useRef(0);
3091
3125
  modalEntriesRef.current = modalEntries;
3126
+ const navigationScopeRef = useRef({
3127
+ compiledRoutes,
3128
+ pathname,
3129
+ parser: wouterRouter.parser
3130
+ });
3131
+ navigationScopeRef.current = {
3132
+ compiledRoutes,
3133
+ pathname,
3134
+ parser: wouterRouter.parser
3135
+ };
3092
3136
  useLayoutEffect(() => {
3093
3137
  ensureInitialHistoryIndex();
3094
3138
  }, []);
@@ -3108,10 +3152,32 @@ function RouterRuntime({
3108
3152
  const match = useMemo(() => {
3109
3153
  if (!matchedRoute) return null;
3110
3154
  if (guardOutcome?.status !== "pending") return matchedRoute;
3155
+ const route = matchedRoute.route;
3156
+ if (route.container && route.childRoute) {
3157
+ return {
3158
+ ...matchedRoute,
3159
+ route: {
3160
+ ...route,
3161
+ childRoute: {
3162
+ ...route.childRoute,
3163
+ element: guardOutcome.element,
3164
+ elementType: void 0,
3165
+ component: void 0,
3166
+ layout: void 0,
3167
+ overlayLayout: void 0,
3168
+ render: void 0,
3169
+ childrenNode: void 0,
3170
+ container: void 0,
3171
+ childRoute: void 0,
3172
+ splitView: void 0
3173
+ }
3174
+ }
3175
+ };
3176
+ }
3111
3177
  return {
3112
3178
  ...matchedRoute,
3113
3179
  route: {
3114
- ...matchedRoute.route,
3180
+ ...route,
3115
3181
  element: guardOutcome.element,
3116
3182
  elementType: void 0,
3117
3183
  component: void 0,
@@ -3374,6 +3440,42 @@ function RouterRuntime({
3374
3440
  setModalEntries(
3375
3441
  (current) => current.map((candidate) => {
3376
3442
  if (candidate.id !== entry.id || !candidate.flowScreens) return candidate;
3443
+ if (operation === "push") {
3444
+ let existingIndex = -1;
3445
+ for (let index = candidate.flowScreens.length - 1; index >= 0; index -= 1) {
3446
+ const existing = candidate.flowScreens[index];
3447
+ if (existing.route.id === screen.route.id && normalizedPath(existing.pathname) === normalizedPath(screen.pathname) && existing.search === screen.search) {
3448
+ existingIndex = index;
3449
+ break;
3450
+ }
3451
+ }
3452
+ if (existingIndex !== -1) {
3453
+ const existing = candidate.flowScreens[existingIndex];
3454
+ const navigationKey = historyNavigationKeyFromState(existing.historyState) ?? createRouterId();
3455
+ const revealedScreen = {
3456
+ ...screen,
3457
+ historyState: stateWithHistoryIndex(
3458
+ state,
3459
+ existingIndex,
3460
+ navigationKey,
3461
+ "sync"
3462
+ )
3463
+ };
3464
+ const flowScreens2 = [
3465
+ ...candidate.flowScreens.slice(0, existingIndex),
3466
+ revealedScreen
3467
+ ];
3468
+ return {
3469
+ ...candidate,
3470
+ route: revealedScreen.overlayRoute,
3471
+ params: revealedScreen.params,
3472
+ pathname: revealedScreen.pathname,
3473
+ search: revealedScreen.search,
3474
+ historyState: revealedScreen.historyState,
3475
+ flowScreens: flowScreens2
3476
+ };
3477
+ }
3478
+ }
3377
3479
  const flowScreens = operation === "replace" ? [...candidate.flowScreens.slice(0, -1), screen] : [...candidate.flowScreens, screen];
3378
3480
  return {
3379
3481
  ...candidate,
@@ -3412,10 +3514,11 @@ function RouterRuntime({
3412
3514
  window.history.go(to);
3413
3515
  return;
3414
3516
  }
3415
- const target = parseNavigationTarget(to, pathname);
3517
+ const { compiledRoutes: compiledRoutes2, pathname: pathname2, parser } = navigationScopeRef.current;
3518
+ const target = parseNavigationTarget(to, pathname2);
3416
3519
  const overlayMatch = matchStackRouteByPresentation(
3417
- compiledRoutes,
3418
- wouterRouter.parser,
3520
+ compiledRoutes2,
3521
+ parser,
3419
3522
  target.pathname,
3420
3523
  OVERLAY_PRESENTATIONS
3421
3524
  );
@@ -3457,8 +3560,8 @@ function RouterRuntime({
3457
3560
  return;
3458
3561
  }
3459
3562
  const pushMatch = matchStackRouteByPresentation(
3460
- compiledRoutes,
3461
- wouterRouter.parser,
3563
+ compiledRoutes2,
3564
+ parser,
3462
3565
  target.pathname,
3463
3566
  PUSH_PRESENTATIONS
3464
3567
  );
@@ -3467,21 +3570,17 @@ function RouterRuntime({
3467
3570
  state: stateForSplitNavigationTarget(options.state, pushMatch, "navigate")
3468
3571
  });
3469
3572
  },
3470
- [
3471
- compiledRoutes,
3472
- goBackTopModal,
3473
- pathname,
3474
- pushModalEntry,
3475
- updateActiveModalFlow,
3476
- wouterRouter.parser
3477
- ]
3573
+ // Every value this reads travels through navigationScopeRef, and the three
3574
+ // callbacks below are themselves identity-stable, so this keeps one identity.
3575
+ [goBackTopModal, pushModalEntry, updateActiveModalFlow]
3478
3576
  );
3479
3577
  const replace = useCallback(
3480
3578
  (to, options = {}) => {
3481
- const target = parseNavigationTarget(to, pathname);
3579
+ const { compiledRoutes: compiledRoutes2, pathname: pathname2, parser } = navigationScopeRef.current;
3580
+ const target = parseNavigationTarget(to, pathname2);
3482
3581
  const overlayMatch = matchStackRouteByPresentation(
3483
- compiledRoutes,
3484
- wouterRouter.parser,
3582
+ compiledRoutes2,
3583
+ parser,
3485
3584
  target.pathname,
3486
3585
  OVERLAY_PRESENTATIONS
3487
3586
  );
@@ -3529,8 +3628,8 @@ function RouterRuntime({
3529
3628
  return;
3530
3629
  }
3531
3630
  const pushMatch = matchStackRouteByPresentation(
3532
- compiledRoutes,
3533
- wouterRouter.parser,
3631
+ compiledRoutes2,
3632
+ parser,
3534
3633
  target.pathname,
3535
3634
  PUSH_PRESENTATIONS
3536
3635
  );
@@ -3539,13 +3638,7 @@ function RouterRuntime({
3539
3638
  state: stateForSplitNavigationTarget(options.state, pushMatch, "replace")
3540
3639
  });
3541
3640
  },
3542
- [
3543
- compiledRoutes,
3544
- pathname,
3545
- pushModalEntry,
3546
- updateActiveModalFlow,
3547
- wouterRouter.parser
3548
- ]
3641
+ [pushModalEntry, updateActiveModalFlow]
3549
3642
  );
3550
3643
  const goBack = useCallback(() => {
3551
3644
  if (goBackTopModal()) return true;