@react-navigation/routers 6.0.2 → 6.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/StackRouter.js +3 -2
- package/lib/commonjs/StackRouter.js.map +1 -1
- package/lib/commonjs/TabRouter.js +3 -2
- package/lib/commonjs/TabRouter.js.map +1 -1
- package/lib/module/StackRouter.js +3 -2
- package/lib/module/StackRouter.js.map +1 -1
- package/lib/module/TabRouter.js +3 -2
- package/lib/module/TabRouter.js.map +1 -1
- package/lib/typescript/src/types.d.ts +7 -1
- package/package.json +2 -2
- package/src/StackRouter.tsx +8 -3
- package/src/TabRouter.tsx +7 -2
- package/src/types.tsx +7 -1
|
@@ -112,9 +112,10 @@ function StackRouter(options) {
|
|
|
112
112
|
|
|
113
113
|
getStateForRouteNamesChange(state, {
|
|
114
114
|
routeNames,
|
|
115
|
-
routeParamList
|
|
115
|
+
routeParamList,
|
|
116
|
+
routeKeyChanges
|
|
116
117
|
}) {
|
|
117
|
-
const routes = state.routes.filter(route => routeNames.includes(route.name));
|
|
118
|
+
const routes = state.routes.filter(route => routeNames.includes(route.name) && !routeKeyChanges.includes(route.name));
|
|
118
119
|
|
|
119
120
|
if (routes.length === 0) {
|
|
120
121
|
const initialRouteName = options.initialRouteName !== undefined && routeNames.includes(options.initialRouteName) ? options.initialRouteName : routeNames[0];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["StackRouter.tsx"],"names":["StackActions","replace","name","params","type","payload","push","pop","count","popToTop","StackRouter","options","router","BaseRouter","getInitialState","routeNames","routeParamList","initialRouteName","undefined","includes","stale","key","index","routes","getRehydratedState","partialState","state","filter","route","map","length","getStateForRouteNamesChange","Math","min","getStateForRouteFocus","findIndex","r","slice","getStateForAction","action","target","source","i","getId","routeGetIdList","id","find","max","concat","path","merge","actionCreators"],"mappings":"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","sourcesContent":["import { nanoid } from 'nanoid/non-secure';\n\nimport BaseRouter from './BaseRouter';\nimport type {\n CommonNavigationAction,\n DefaultRouterOptions,\n NavigationState,\n ParamListBase,\n Route,\n Router,\n} from './types';\n\nexport type StackActionType =\n | {\n type: 'REPLACE';\n payload: { name: string; key?: string | undefined; params?: object };\n source?: string;\n target?: string;\n }\n | {\n type: 'PUSH';\n payload: { name: string; params?: object };\n source?: string;\n target?: string;\n }\n | {\n type: 'POP';\n payload: { count: number };\n source?: string;\n target?: string;\n }\n | {\n type: 'POP_TO_TOP';\n source?: string;\n target?: string;\n };\n\nexport type StackRouterOptions = DefaultRouterOptions;\n\nexport type StackNavigationState<ParamList extends ParamListBase> =\n NavigationState<ParamList> & {\n /**\n * Type of the router, in this case, it's stack.\n */\n type: 'stack';\n };\n\nexport type StackActionHelpers<ParamList extends ParamListBase> = {\n /**\n * Replace the current route with a new one.\n *\n * @param name Route name of the new route.\n * @param [params] Params object for the new route.\n */\n replace<RouteName extends keyof ParamList>(\n ...args: undefined extends ParamList[RouteName]\n ? [screen: RouteName] | [screen: RouteName, params: ParamList[RouteName]]\n : [screen: RouteName, params: ParamList[RouteName]]\n ): void;\n\n /**\n * Push a new screen onto the stack.\n *\n * @param name Name of the route for the tab.\n * @param [params] Params object for the route.\n */\n push<RouteName extends keyof ParamList>(\n ...args: undefined extends ParamList[RouteName]\n ? [screen: RouteName] | [screen: RouteName, params: ParamList[RouteName]]\n : [screen: RouteName, params: ParamList[RouteName]]\n ): void;\n\n /**\n * Pop a screen from the stack.\n */\n pop(count?: number): void;\n\n /**\n * Pop to the first route in the stack, dismissing all other screens.\n */\n popToTop(): void;\n};\n\nexport const StackActions = {\n replace(name: string, params?: object): StackActionType {\n return { type: 'REPLACE', payload: { name, params } };\n },\n push(name: string, params?: object): StackActionType {\n return { type: 'PUSH', payload: { name, params } };\n },\n pop(count: number = 1): StackActionType {\n return { type: 'POP', payload: { count } };\n },\n popToTop(): StackActionType {\n return { type: 'POP_TO_TOP' };\n },\n};\n\nexport default function StackRouter(options: StackRouterOptions) {\n const router: Router<\n StackNavigationState<ParamListBase>,\n CommonNavigationAction | StackActionType\n > = {\n ...BaseRouter,\n\n type: 'stack',\n\n getInitialState({ routeNames, routeParamList }) {\n const initialRouteName =\n options.initialRouteName !== undefined &&\n routeNames.includes(options.initialRouteName)\n ? options.initialRouteName\n : routeNames[0];\n\n return {\n stale: false,\n type: 'stack',\n key: `stack-${nanoid()}`,\n index: 0,\n routeNames,\n routes: [\n {\n key: `${initialRouteName}-${nanoid()}`,\n name: initialRouteName,\n params: routeParamList[initialRouteName],\n },\n ],\n };\n },\n\n getRehydratedState(partialState, { routeNames, routeParamList }) {\n let state = partialState;\n\n if (state.stale === false) {\n return state;\n }\n\n const routes = state.routes\n .filter((route) => routeNames.includes(route.name))\n .map(\n (route) =>\n ({\n ...route,\n key: route.key || `${route.name}-${nanoid()}`,\n params:\n routeParamList[route.name] !== undefined\n ? {\n ...routeParamList[route.name],\n ...route.params,\n }\n : route.params,\n } as Route<string>)\n );\n\n if (routes.length === 0) {\n const initialRouteName =\n options.initialRouteName !== undefined\n ? options.initialRouteName\n : routeNames[0];\n\n routes.push({\n key: `${initialRouteName}-${nanoid()}`,\n name: initialRouteName,\n params: routeParamList[initialRouteName],\n });\n }\n\n return {\n stale: false,\n type: 'stack',\n key: `stack-${nanoid()}`,\n index: routes.length - 1,\n routeNames,\n routes,\n };\n },\n\n getStateForRouteNamesChange(state, { routeNames, routeParamList }) {\n const routes = state.routes.filter((route) =>\n routeNames.includes(route.name)\n );\n\n if (routes.length === 0) {\n const initialRouteName =\n options.initialRouteName !== undefined &&\n routeNames.includes(options.initialRouteName)\n ? options.initialRouteName\n : routeNames[0];\n\n routes.push({\n key: `${initialRouteName}-${nanoid()}`,\n name: initialRouteName,\n params: routeParamList[initialRouteName],\n });\n }\n\n return {\n ...state,\n routeNames,\n routes,\n index: Math.min(state.index, routes.length - 1),\n };\n },\n\n getStateForRouteFocus(state, key) {\n const index = state.routes.findIndex((r) => r.key === key);\n\n if (index === -1 || index === state.index) {\n return state;\n }\n\n return {\n ...state,\n index,\n routes: state.routes.slice(0, index + 1),\n };\n },\n\n getStateForAction(state, action, options) {\n const { routeParamList } = options;\n\n switch (action.type) {\n case 'REPLACE': {\n const index =\n action.target === state.key && action.source\n ? state.routes.findIndex((r) => r.key === action.source)\n : state.index;\n\n if (index === -1) {\n return null;\n }\n\n const { name, key, params } = action.payload;\n\n if (!state.routeNames.includes(name)) {\n return null;\n }\n\n return {\n ...state,\n routes: state.routes.map((route, i) =>\n i === index\n ? {\n key: key !== undefined ? key : `${name}-${nanoid()}`,\n name,\n params:\n routeParamList[name] !== undefined\n ? {\n ...routeParamList[name],\n ...params,\n }\n : params,\n }\n : route\n ),\n };\n }\n\n case 'PUSH':\n if (state.routeNames.includes(action.payload.name)) {\n const getId = options.routeGetIdList[action.payload.name];\n const id = getId?.({ params: action.payload.params });\n\n const route = id\n ? state.routes.find(\n (route) =>\n route.name === action.payload.name &&\n id === getId?.({ params: route.params })\n )\n : undefined;\n\n let routes: Route<string>[];\n\n if (route) {\n routes = state.routes.filter((r) => r.key !== route.key);\n routes.push({\n ...route,\n params:\n routeParamList[action.payload.name] !== undefined\n ? {\n ...routeParamList[action.payload.name],\n ...action.payload.params,\n }\n : action.payload.params,\n });\n } else {\n routes = [\n ...state.routes,\n {\n key: `${action.payload.name}-${nanoid()}`,\n name: action.payload.name,\n params:\n routeParamList[action.payload.name] !== undefined\n ? {\n ...routeParamList[action.payload.name],\n ...action.payload.params,\n }\n : action.payload.params,\n },\n ];\n }\n\n return {\n ...state,\n index: routes.length - 1,\n routes,\n };\n }\n\n return null;\n\n case 'POP': {\n const index =\n action.target === state.key && action.source\n ? state.routes.findIndex((r) => r.key === action.source)\n : state.index;\n\n if (index > 0) {\n const count = Math.max(index - action.payload.count + 1, 1);\n const routes = state.routes\n .slice(0, count)\n .concat(state.routes.slice(index + 1));\n\n return {\n ...state,\n index: routes.length - 1,\n routes,\n };\n }\n\n return null;\n }\n\n case 'POP_TO_TOP':\n return router.getStateForAction(\n state,\n {\n type: 'POP',\n payload: { count: state.routes.length - 1 },\n },\n options\n );\n\n case 'NAVIGATE':\n if (\n action.payload.name !== undefined &&\n !state.routeNames.includes(action.payload.name)\n ) {\n return null;\n }\n\n if (action.payload.key || action.payload.name) {\n // If the route already exists, navigate to that\n let index = -1;\n\n const getId =\n // `getId` and `key` can't be used together\n action.payload.key === undefined &&\n action.payload.name !== undefined\n ? options.routeGetIdList[action.payload.name]\n : undefined;\n const id = getId?.({ params: action.payload.params });\n\n if (id) {\n index = state.routes.findIndex(\n (route) =>\n route.name === action.payload.name &&\n id === getId?.({ params: route.params })\n );\n } else if (\n (state.routes[state.index].name === action.payload.name &&\n action.payload.key === undefined) ||\n state.routes[state.index].key === action.payload.key\n ) {\n index = state.index;\n } else {\n for (let i = state.routes.length - 1; i >= 0; i--) {\n if (\n (state.routes[i].name === action.payload.name &&\n action.payload.key === undefined) ||\n state.routes[i].key === action.payload.key\n ) {\n index = i;\n break;\n }\n }\n }\n\n if (\n index === -1 &&\n action.payload.key &&\n action.payload.name === undefined\n ) {\n return null;\n }\n\n if (index === -1 && action.payload.name !== undefined) {\n const routes = [\n ...state.routes,\n {\n key:\n action.payload.key ?? `${action.payload.name}-${nanoid()}`,\n name: action.payload.name,\n path: action.payload.path,\n params:\n routeParamList[action.payload.name] !== undefined\n ? {\n ...routeParamList[action.payload.name],\n ...action.payload.params,\n }\n : action.payload.params,\n },\n ];\n\n return {\n ...state,\n routes,\n index: routes.length - 1,\n };\n }\n\n const route = state.routes[index];\n\n let params;\n\n if (action.payload.merge) {\n params =\n action.payload.params !== undefined ||\n routeParamList[route.name] !== undefined\n ? {\n ...routeParamList[route.name],\n ...route.params,\n ...action.payload.params,\n }\n : route.params;\n } else {\n params =\n routeParamList[route.name] !== undefined\n ? {\n ...routeParamList[route.name],\n ...action.payload.params,\n }\n : action.payload.params;\n }\n\n return {\n ...state,\n index,\n routes: [\n ...state.routes.slice(0, index),\n params !== route.params ||\n (action.payload.path && action.payload.path !== route.path)\n ? {\n ...route,\n path: action.payload.path ?? route.path,\n params,\n }\n : state.routes[index],\n ],\n };\n }\n\n return null;\n\n case 'GO_BACK':\n if (state.index > 0) {\n return router.getStateForAction(\n state,\n {\n type: 'POP',\n payload: { count: 1 },\n target: action.target,\n source: action.source,\n },\n options\n );\n }\n\n return null;\n\n default:\n return BaseRouter.getStateForAction(state, action);\n }\n },\n\n actionCreators: StackActions,\n };\n\n return router;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["StackRouter.tsx"],"names":["StackActions","replace","name","params","type","payload","push","pop","count","popToTop","StackRouter","options","router","BaseRouter","getInitialState","routeNames","routeParamList","initialRouteName","undefined","includes","stale","key","index","routes","getRehydratedState","partialState","state","filter","route","map","length","getStateForRouteNamesChange","routeKeyChanges","Math","min","getStateForRouteFocus","findIndex","r","slice","getStateForAction","action","target","source","i","getId","routeGetIdList","id","find","max","concat","path","merge","actionCreators"],"mappings":"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","sourcesContent":["import { nanoid } from 'nanoid/non-secure';\n\nimport BaseRouter from './BaseRouter';\nimport type {\n CommonNavigationAction,\n DefaultRouterOptions,\n NavigationState,\n ParamListBase,\n Route,\n Router,\n} from './types';\n\nexport type StackActionType =\n | {\n type: 'REPLACE';\n payload: { name: string; key?: string | undefined; params?: object };\n source?: string;\n target?: string;\n }\n | {\n type: 'PUSH';\n payload: { name: string; params?: object };\n source?: string;\n target?: string;\n }\n | {\n type: 'POP';\n payload: { count: number };\n source?: string;\n target?: string;\n }\n | {\n type: 'POP_TO_TOP';\n source?: string;\n target?: string;\n };\n\nexport type StackRouterOptions = DefaultRouterOptions;\n\nexport type StackNavigationState<ParamList extends ParamListBase> =\n NavigationState<ParamList> & {\n /**\n * Type of the router, in this case, it's stack.\n */\n type: 'stack';\n };\n\nexport type StackActionHelpers<ParamList extends ParamListBase> = {\n /**\n * Replace the current route with a new one.\n *\n * @param name Route name of the new route.\n * @param [params] Params object for the new route.\n */\n replace<RouteName extends keyof ParamList>(\n ...args: undefined extends ParamList[RouteName]\n ? [screen: RouteName] | [screen: RouteName, params: ParamList[RouteName]]\n : [screen: RouteName, params: ParamList[RouteName]]\n ): void;\n\n /**\n * Push a new screen onto the stack.\n *\n * @param name Name of the route for the tab.\n * @param [params] Params object for the route.\n */\n push<RouteName extends keyof ParamList>(\n ...args: undefined extends ParamList[RouteName]\n ? [screen: RouteName] | [screen: RouteName, params: ParamList[RouteName]]\n : [screen: RouteName, params: ParamList[RouteName]]\n ): void;\n\n /**\n * Pop a screen from the stack.\n */\n pop(count?: number): void;\n\n /**\n * Pop to the first route in the stack, dismissing all other screens.\n */\n popToTop(): void;\n};\n\nexport const StackActions = {\n replace(name: string, params?: object): StackActionType {\n return { type: 'REPLACE', payload: { name, params } };\n },\n push(name: string, params?: object): StackActionType {\n return { type: 'PUSH', payload: { name, params } };\n },\n pop(count: number = 1): StackActionType {\n return { type: 'POP', payload: { count } };\n },\n popToTop(): StackActionType {\n return { type: 'POP_TO_TOP' };\n },\n};\n\nexport default function StackRouter(options: StackRouterOptions) {\n const router: Router<\n StackNavigationState<ParamListBase>,\n CommonNavigationAction | StackActionType\n > = {\n ...BaseRouter,\n\n type: 'stack',\n\n getInitialState({ routeNames, routeParamList }) {\n const initialRouteName =\n options.initialRouteName !== undefined &&\n routeNames.includes(options.initialRouteName)\n ? options.initialRouteName\n : routeNames[0];\n\n return {\n stale: false,\n type: 'stack',\n key: `stack-${nanoid()}`,\n index: 0,\n routeNames,\n routes: [\n {\n key: `${initialRouteName}-${nanoid()}`,\n name: initialRouteName,\n params: routeParamList[initialRouteName],\n },\n ],\n };\n },\n\n getRehydratedState(partialState, { routeNames, routeParamList }) {\n let state = partialState;\n\n if (state.stale === false) {\n return state;\n }\n\n const routes = state.routes\n .filter((route) => routeNames.includes(route.name))\n .map(\n (route) =>\n ({\n ...route,\n key: route.key || `${route.name}-${nanoid()}`,\n params:\n routeParamList[route.name] !== undefined\n ? {\n ...routeParamList[route.name],\n ...route.params,\n }\n : route.params,\n } as Route<string>)\n );\n\n if (routes.length === 0) {\n const initialRouteName =\n options.initialRouteName !== undefined\n ? options.initialRouteName\n : routeNames[0];\n\n routes.push({\n key: `${initialRouteName}-${nanoid()}`,\n name: initialRouteName,\n params: routeParamList[initialRouteName],\n });\n }\n\n return {\n stale: false,\n type: 'stack',\n key: `stack-${nanoid()}`,\n index: routes.length - 1,\n routeNames,\n routes,\n };\n },\n\n getStateForRouteNamesChange(\n state,\n { routeNames, routeParamList, routeKeyChanges }\n ) {\n const routes = state.routes.filter(\n (route) =>\n routeNames.includes(route.name) &&\n !routeKeyChanges.includes(route.name)\n );\n\n if (routes.length === 0) {\n const initialRouteName =\n options.initialRouteName !== undefined &&\n routeNames.includes(options.initialRouteName)\n ? options.initialRouteName\n : routeNames[0];\n\n routes.push({\n key: `${initialRouteName}-${nanoid()}`,\n name: initialRouteName,\n params: routeParamList[initialRouteName],\n });\n }\n\n return {\n ...state,\n routeNames,\n routes,\n index: Math.min(state.index, routes.length - 1),\n };\n },\n\n getStateForRouteFocus(state, key) {\n const index = state.routes.findIndex((r) => r.key === key);\n\n if (index === -1 || index === state.index) {\n return state;\n }\n\n return {\n ...state,\n index,\n routes: state.routes.slice(0, index + 1),\n };\n },\n\n getStateForAction(state, action, options) {\n const { routeParamList } = options;\n\n switch (action.type) {\n case 'REPLACE': {\n const index =\n action.target === state.key && action.source\n ? state.routes.findIndex((r) => r.key === action.source)\n : state.index;\n\n if (index === -1) {\n return null;\n }\n\n const { name, key, params } = action.payload;\n\n if (!state.routeNames.includes(name)) {\n return null;\n }\n\n return {\n ...state,\n routes: state.routes.map((route, i) =>\n i === index\n ? {\n key: key !== undefined ? key : `${name}-${nanoid()}`,\n name,\n params:\n routeParamList[name] !== undefined\n ? {\n ...routeParamList[name],\n ...params,\n }\n : params,\n }\n : route\n ),\n };\n }\n\n case 'PUSH':\n if (state.routeNames.includes(action.payload.name)) {\n const getId = options.routeGetIdList[action.payload.name];\n const id = getId?.({ params: action.payload.params });\n\n const route = id\n ? state.routes.find(\n (route) =>\n route.name === action.payload.name &&\n id === getId?.({ params: route.params })\n )\n : undefined;\n\n let routes: Route<string>[];\n\n if (route) {\n routes = state.routes.filter((r) => r.key !== route.key);\n routes.push({\n ...route,\n params:\n routeParamList[action.payload.name] !== undefined\n ? {\n ...routeParamList[action.payload.name],\n ...action.payload.params,\n }\n : action.payload.params,\n });\n } else {\n routes = [\n ...state.routes,\n {\n key: `${action.payload.name}-${nanoid()}`,\n name: action.payload.name,\n params:\n routeParamList[action.payload.name] !== undefined\n ? {\n ...routeParamList[action.payload.name],\n ...action.payload.params,\n }\n : action.payload.params,\n },\n ];\n }\n\n return {\n ...state,\n index: routes.length - 1,\n routes,\n };\n }\n\n return null;\n\n case 'POP': {\n const index =\n action.target === state.key && action.source\n ? state.routes.findIndex((r) => r.key === action.source)\n : state.index;\n\n if (index > 0) {\n const count = Math.max(index - action.payload.count + 1, 1);\n const routes = state.routes\n .slice(0, count)\n .concat(state.routes.slice(index + 1));\n\n return {\n ...state,\n index: routes.length - 1,\n routes,\n };\n }\n\n return null;\n }\n\n case 'POP_TO_TOP':\n return router.getStateForAction(\n state,\n {\n type: 'POP',\n payload: { count: state.routes.length - 1 },\n },\n options\n );\n\n case 'NAVIGATE':\n if (\n action.payload.name !== undefined &&\n !state.routeNames.includes(action.payload.name)\n ) {\n return null;\n }\n\n if (action.payload.key || action.payload.name) {\n // If the route already exists, navigate to that\n let index = -1;\n\n const getId =\n // `getId` and `key` can't be used together\n action.payload.key === undefined &&\n action.payload.name !== undefined\n ? options.routeGetIdList[action.payload.name]\n : undefined;\n const id = getId?.({ params: action.payload.params });\n\n if (id) {\n index = state.routes.findIndex(\n (route) =>\n route.name === action.payload.name &&\n id === getId?.({ params: route.params })\n );\n } else if (\n (state.routes[state.index].name === action.payload.name &&\n action.payload.key === undefined) ||\n state.routes[state.index].key === action.payload.key\n ) {\n index = state.index;\n } else {\n for (let i = state.routes.length - 1; i >= 0; i--) {\n if (\n (state.routes[i].name === action.payload.name &&\n action.payload.key === undefined) ||\n state.routes[i].key === action.payload.key\n ) {\n index = i;\n break;\n }\n }\n }\n\n if (\n index === -1 &&\n action.payload.key &&\n action.payload.name === undefined\n ) {\n return null;\n }\n\n if (index === -1 && action.payload.name !== undefined) {\n const routes = [\n ...state.routes,\n {\n key:\n action.payload.key ?? `${action.payload.name}-${nanoid()}`,\n name: action.payload.name,\n path: action.payload.path,\n params:\n routeParamList[action.payload.name] !== undefined\n ? {\n ...routeParamList[action.payload.name],\n ...action.payload.params,\n }\n : action.payload.params,\n },\n ];\n\n return {\n ...state,\n routes,\n index: routes.length - 1,\n };\n }\n\n const route = state.routes[index];\n\n let params;\n\n if (action.payload.merge) {\n params =\n action.payload.params !== undefined ||\n routeParamList[route.name] !== undefined\n ? {\n ...routeParamList[route.name],\n ...route.params,\n ...action.payload.params,\n }\n : route.params;\n } else {\n params =\n routeParamList[route.name] !== undefined\n ? {\n ...routeParamList[route.name],\n ...action.payload.params,\n }\n : action.payload.params;\n }\n\n return {\n ...state,\n index,\n routes: [\n ...state.routes.slice(0, index),\n params !== route.params ||\n (action.payload.path && action.payload.path !== route.path)\n ? {\n ...route,\n path: action.payload.path ?? route.path,\n params,\n }\n : state.routes[index],\n ],\n };\n }\n\n return null;\n\n case 'GO_BACK':\n if (state.index > 0) {\n return router.getStateForAction(\n state,\n {\n type: 'POP',\n payload: { count: 1 },\n target: action.target,\n source: action.source,\n },\n options\n );\n }\n\n return null;\n\n default:\n return BaseRouter.getStateForAction(state, action);\n }\n },\n\n actionCreators: StackActions,\n };\n\n return router;\n}\n"]}
|
|
@@ -161,9 +161,10 @@ function TabRouter({
|
|
|
161
161
|
|
|
162
162
|
getStateForRouteNamesChange(state, {
|
|
163
163
|
routeNames,
|
|
164
|
-
routeParamList
|
|
164
|
+
routeParamList,
|
|
165
|
+
routeKeyChanges
|
|
165
166
|
}) {
|
|
166
|
-
const routes = routeNames.map(name => state.routes.find(r => r.name === name) || {
|
|
167
|
+
const routes = routeNames.map(name => state.routes.find(r => r.name === name && !routeKeyChanges.includes(r.name)) || {
|
|
167
168
|
name,
|
|
168
169
|
key: `${name}-${(0, _nonSecure.nanoid)()}`,
|
|
169
170
|
params: routeParamList[name]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["TabRouter.tsx"],"names":["TYPE_ROUTE","TabActions","jumpTo","name","params","type","payload","getRouteHistory","routes","index","backBehavior","initialRouteName","history","key","initialRouteIndex","i","unshift","findIndex","route","changeIndex","state","currentKey","filter","it","concat","TabRouter","router","BaseRouter","getInitialState","routeNames","routeParamList","undefined","includes","indexOf","map","stale","getRehydratedState","partialState","find","r","Math","min","max","length","getStateForRouteNamesChange","getStateForRouteFocus","getStateForAction","action","merge","path","previousKey","slice","shouldActionChangeFocus","actionCreators"],"mappings":";;;;;;;;AAAA;;AAEA;;;;AAyDA,MAAMA,UAAU,GAAG,OAAnB;AAEO,MAAMC,UAAU,GAAG;AACxBC,EAAAA,MAAM,CAACC,IAAD,EAAeC,MAAf,EAA+C;AACnD,WAAO;AAAEC,MAAAA,IAAI,EAAE,SAAR;AAAmBC,MAAAA,OAAO,EAAE;AAAEH,QAAAA,IAAF;AAAQC,QAAAA;AAAR;AAA5B,KAAP;AACD;;AAHuB,CAAnB;;;AAMP,MAAMG,eAAe,GAAG,CACtBC,MADsB,EAEtBC,KAFsB,EAGtBC,YAHsB,EAItBC,gBAJsB,KAKnB;AACH,QAAMC,OAAO,GAAG,CAAC;AAAEP,IAAAA,IAAI,EAAEL,UAAR;AAAoBa,IAAAA,GAAG,EAAEL,MAAM,CAACC,KAAD,CAAN,CAAcI;AAAvC,GAAD,CAAhB;AACA,MAAIC,iBAAJ;;AAEA,UAAQJ,YAAR;AACE,SAAK,OAAL;AACE,WAAK,IAAIK,CAAC,GAAGN,KAAb,EAAoBM,CAAC,GAAG,CAAxB,EAA2BA,CAAC,EAA5B,EAAgC;AAC9BH,QAAAA,OAAO,CAACI,OAAR,CAAgB;AAAEX,UAAAA,IAAI,EAAEL,UAAR;AAAoBa,UAAAA,GAAG,EAAEL,MAAM,CAACO,CAAC,GAAG,CAAL,CAAN,CAAcF;AAAvC,SAAhB;AACD;;AACD;;AACF,SAAK,YAAL;AACE,UAAIJ,KAAK,KAAK,CAAd,EAAiB;AACfG,QAAAA,OAAO,CAACI,OAAR,CAAgB;AACdX,UAAAA,IAAI,EAAEL,UADQ;AAEda,UAAAA,GAAG,EAAEL,MAAM,CAAC,CAAD,CAAN,CAAUK;AAFD,SAAhB;AAID;;AACD;;AACF,SAAK,cAAL;AACEC,MAAAA,iBAAiB,GAAGN,MAAM,CAACS,SAAP,CACjBC,KAAD,IAAWA,KAAK,CAACf,IAAN,KAAeQ,gBADR,CAApB;AAGAG,MAAAA,iBAAiB,GAAGA,iBAAiB,KAAK,CAAC,CAAvB,GAA2B,CAA3B,GAA+BA,iBAAnD;;AAEA,UAAIL,KAAK,KAAKK,iBAAd,EAAiC;AAC/BF,QAAAA,OAAO,CAACI,OAAR,CAAgB;AACdX,UAAAA,IAAI,EAAEL,UADQ;AAEda,UAAAA,GAAG,EAAEL,MAAM,CAACM,iBAAD,CAAN,CAA0BD;AAFjB,SAAhB;AAID;;AACD;;AACF,SAAK,SAAL;AACE;AACA;AA7BJ;;AAgCA,SAAOD,OAAP;AACD,CA1CD;;AA4CA,MAAMO,WAAW,GAAG,CAClBC,KADkB,EAElBX,KAFkB,EAGlBC,YAHkB,EAIlBC,gBAJkB,KAKf;AACH,MAAIC,OAAJ;;AAEA,MAAIF,YAAY,KAAK,SAArB,EAAgC;AAC9B,UAAMW,UAAU,GAAGD,KAAK,CAACZ,MAAN,CAAaC,KAAb,EAAoBI,GAAvC;AAEAD,IAAAA,OAAO,GAAGQ,KAAK,CAACR,OAAN,CACPU,MADO,CACCC,EAAD,IAASA,EAAE,CAAClB,IAAH,KAAY,OAAZ,GAAsBkB,EAAE,CAACV,GAAH,KAAWQ,UAAjC,GAA8C,KADvD,EAEPG,MAFO,CAEA;AAAEnB,MAAAA,IAAI,EAAEL,UAAR;AAAoBa,MAAAA,GAAG,EAAEQ;AAAzB,KAFA,CAAV;AAGD,GAND,MAMO;AACLT,IAAAA,OAAO,GAAGL,eAAe,CACvBa,KAAK,CAACZ,MADiB,EAEvBC,KAFuB,EAGvBC,YAHuB,EAIvBC,gBAJuB,CAAzB;AAMD;;AAED,SAAO,EACL,GAAGS,KADE;AAELX,IAAAA,KAFK;AAGLG,IAAAA;AAHK,GAAP;AAKD,CA5BD;;AA8Be,SAASa,SAAT,CAAmB;AAChCd,EAAAA,gBADgC;AAEhCD,EAAAA,YAAY,GAAG;AAFiB,CAAnB,EAGM;AACnB,QAAMgB,MAGL,GAAG,EACF,GAAGC,mBADD;AAGFtB,IAAAA,IAAI,EAAE,KAHJ;;AAKFuB,IAAAA,eAAe,CAAC;AAAEC,MAAAA,UAAF;AAAcC,MAAAA;AAAd,KAAD,EAAiC;AAC9C,YAAMrB,KAAK,GACTE,gBAAgB,KAAKoB,SAArB,IAAkCF,UAAU,CAACG,QAAX,CAAoBrB,gBAApB,CAAlC,GACIkB,UAAU,CAACI,OAAX,CAAmBtB,gBAAnB,CADJ,GAEI,CAHN;AAKA,YAAMH,MAAM,GAAGqB,UAAU,CAACK,GAAX,CAAgB/B,IAAD,KAAW;AACvCA,QAAAA,IADuC;AAEvCU,QAAAA,GAAG,EAAG,GAAEV,IAAK,IAAG,wBAAS,EAFc;AAGvCC,QAAAA,MAAM,EAAE0B,cAAc,CAAC3B,IAAD;AAHiB,OAAX,CAAf,CAAf;AAMA,YAAMS,OAAO,GAAGL,eAAe,CAC7BC,MAD6B,EAE7BC,KAF6B,EAG7BC,YAH6B,EAI7BC,gBAJ6B,CAA/B;AAOA,aAAO;AACLwB,QAAAA,KAAK,EAAE,KADF;AAEL9B,QAAAA,IAAI,EAAE,KAFD;AAGLQ,QAAAA,GAAG,EAAG,OAAM,wBAAS,EAHhB;AAILJ,QAAAA,KAJK;AAKLoB,QAAAA,UALK;AAMLjB,QAAAA,OANK;AAOLJ,QAAAA;AAPK,OAAP;AASD,KAjCC;;AAmCF4B,IAAAA,kBAAkB,CAACC,YAAD,EAAe;AAAER,MAAAA,UAAF;AAAcC,MAAAA;AAAd,KAAf,EAA+C;AAAA;;AAC/D,UAAIV,KAAK,GAAGiB,YAAZ;;AAEA,UAAIjB,KAAK,CAACe,KAAN,KAAgB,KAApB,EAA2B;AACzB,eAAOf,KAAP;AACD;;AAED,YAAMZ,MAAM,GAAGqB,UAAU,CAACK,GAAX,CAAgB/B,IAAD,IAAU;AACtC,cAAMe,KAAK,GACTE,KADY,CAEZZ,MAFY,CAEL8B,IAFK,CAECC,CAAD,IAAOA,CAAC,CAACpC,IAAF,KAAWA,IAFlB,CAAd;AAIA,eAAO,EACL,GAAGe,KADE;AAELf,UAAAA,IAFK;AAGLU,UAAAA,GAAG,EACDK,KAAK,IAAIA,KAAK,CAACf,IAAN,KAAeA,IAAxB,IAAgCe,KAAK,CAACL,GAAtC,GACIK,KAAK,CAACL,GADV,GAEK,GAAEV,IAAK,IAAG,wBAAS,EANrB;AAOLC,UAAAA,MAAM,EACJ0B,cAAc,CAAC3B,IAAD,CAAd,KAAyB4B,SAAzB,GACI,EACE,GAAGD,cAAc,CAAC3B,IAAD,CADnB;AAEE,gBAAIe,KAAK,GAAGA,KAAK,CAACd,MAAT,GAAkB2B,SAA3B;AAFF,WADJ,GAKIb,KAAK,GACLA,KAAK,CAACd,MADD,GAEL2B;AAfD,SAAP;AAiBD,OAtBc,CAAf;AAwBA,YAAMtB,KAAK,GAAG+B,IAAI,CAACC,GAAL,CACZD,IAAI,CAACE,GAAL,CAASb,UAAU,CAACI,OAAX,kBAAmBb,KAAK,CAACZ,MAAN,iBAAaY,KAAb,aAAaA,KAAb,uBAAaA,KAAK,CAAEX,KAApB,uDAA6B,CAA7B,CAAnB,kDAAmB,cAAiCN,IAApD,CAAT,EAAoE,CAApE,CADY,EAEZK,MAAM,CAACmC,MAAP,GAAgB,CAFJ,CAAd;AAKA,YAAM/B,OAAO,8CACXQ,KAAK,CAACR,OADK,mDACX,eAAeU,MAAf,CAAuBC,EAAD,IAAQf,MAAM,CAAC8B,IAAP,CAAaC,CAAD,IAAOA,CAAC,CAAC1B,GAAF,KAAUU,EAAE,CAACV,GAAhC,CAA9B,CADW,yEAEX,EAFF;AAIA,aAAOM,WAAW,CAChB;AACEgB,QAAAA,KAAK,EAAE,KADT;AAEE9B,QAAAA,IAAI,EAAE,KAFR;AAGEQ,QAAAA,GAAG,EAAG,OAAM,wBAAS,EAHvB;AAIEJ,QAAAA,KAJF;AAKEoB,QAAAA,UALF;AAMEjB,QAAAA,OANF;AAOEJ,QAAAA;AAPF,OADgB,EAUhBC,KAVgB,EAWhBC,YAXgB,EAYhBC,gBAZgB,CAAlB;AAcD,KAzFC;;AA2FFiC,IAAAA,2BAA2B,CAACxB,KAAD,EAAQ;AAAES,MAAAA,UAAF;AAAcC,MAAAA;AAAd,KAAR,EAAwC;AACjE,YAAMtB,MAAM,GAAGqB,UAAU,CAACK,GAAX,CACZ/B,IAAD,IACEiB,KAAK,CAACZ,MAAN,CAAa8B,IAAb,CAAmBC,CAAD,IAAOA,CAAC,CAACpC,IAAF,KAAWA,IAApC,KAA6C;AAC3CA,QAAAA,IAD2C;AAE3CU,QAAAA,GAAG,EAAG,GAAEV,IAAK,IAAG,wBAAS,EAFkB;AAG3CC,QAAAA,MAAM,EAAE0B,cAAc,CAAC3B,IAAD;AAHqB,OAFlC,CAAf;AASA,YAAMM,KAAK,GAAG+B,IAAI,CAACE,GAAL,CACZ,CADY,EAEZb,UAAU,CAACI,OAAX,CAAmBb,KAAK,CAACZ,MAAN,CAAaY,KAAK,CAACX,KAAnB,EAA0BN,IAA7C,CAFY,CAAd;AAKA,UAAIS,OAAO,GAAGQ,KAAK,CAACR,OAAN,CAAcU,MAAd,EACZ;AACCC,MAAAA,EAAD,IAAQA,EAAE,CAAClB,IAAH,KAAY,OAAZ,IAAuBG,MAAM,CAAC8B,IAAP,CAAaC,CAAD,IAAOA,CAAC,CAAC1B,GAAF,KAAUU,EAAE,CAACV,GAAhC,CAFnB,CAAd;;AAKA,UAAI,CAACD,OAAO,CAAC+B,MAAb,EAAqB;AACnB/B,QAAAA,OAAO,GAAGL,eAAe,CACvBC,MADuB,EAEvBC,KAFuB,EAGvBC,YAHuB,EAIvBC,gBAJuB,CAAzB;AAMD;;AAED,aAAO,EACL,GAAGS,KADE;AAELR,QAAAA,OAFK;AAGLiB,QAAAA,UAHK;AAILrB,QAAAA,MAJK;AAKLC,QAAAA;AALK,OAAP;AAOD,KA/HC;;AAiIFoC,IAAAA,qBAAqB,CAACzB,KAAD,EAAQP,GAAR,EAAa;AAChC,YAAMJ,KAAK,GAAGW,KAAK,CAACZ,MAAN,CAAaS,SAAb,CAAwBsB,CAAD,IAAOA,CAAC,CAAC1B,GAAF,KAAUA,GAAxC,CAAd;;AAEA,UAAIJ,KAAK,KAAK,CAAC,CAAX,IAAgBA,KAAK,KAAKW,KAAK,CAACX,KAApC,EAA2C;AACzC,eAAOW,KAAP;AACD;;AAED,aAAOD,WAAW,CAACC,KAAD,EAAQX,KAAR,EAAeC,YAAf,EAA6BC,gBAA7B,CAAlB;AACD,KAzIC;;AA2IFmC,IAAAA,iBAAiB,CAAC1B,KAAD,EAAQ2B,MAAR,EAAgB;AAAEjB,MAAAA;AAAF,KAAhB,EAAoC;AACnD,cAAQiB,MAAM,CAAC1C,IAAf;AACE,aAAK,SAAL;AACA,aAAK,UAAL;AAAiB;AACf,gBAAII,KAAK,GAAG,CAAC,CAAb;;AAEA,gBAAIsC,MAAM,CAAC1C,IAAP,KAAgB,UAAhB,IAA8B0C,MAAM,CAACzC,OAAP,CAAeO,GAAjD,EAAsD;AACpDJ,cAAAA,KAAK,GAAGW,KAAK,CAACZ,MAAN,CAAaS,SAAb,CACLC,KAAD,IAAWA,KAAK,CAACL,GAAN,KAAckC,MAAM,CAACzC,OAAP,CAAeO,GADlC,CAAR;AAGD,aAJD,MAIO;AACLJ,cAAAA,KAAK,GAAGW,KAAK,CAACZ,MAAN,CAAaS,SAAb,CACLC,KAAD,IAAWA,KAAK,CAACf,IAAN,KAAe4C,MAAM,CAACzC,OAAP,CAAeH,IADnC,CAAR;AAGD;;AAED,gBAAIM,KAAK,KAAK,CAAC,CAAf,EAAkB;AAChB,qBAAO,IAAP;AACD;;AAED,mBAAOU,WAAW,CAChB,EACE,GAAGC,KADL;AAEEZ,cAAAA,MAAM,EAAEY,KAAK,CAACZ,MAAN,CAAa0B,GAAb,CAAiB,CAAChB,KAAD,EAAQH,CAAR,KAAc;AACrC,oBAAIA,CAAC,KAAKN,KAAV,EAAiB;AACf,yBAAOS,KAAP;AACD;;AAED,oBAAId,MAAJ;;AAEA,oBAAI2C,MAAM,CAAC1C,IAAP,KAAgB,UAAhB,IAA8B0C,MAAM,CAACzC,OAAP,CAAe0C,KAAjD,EAAwD;AACtD5C,kBAAAA,MAAM,GACJ2C,MAAM,CAACzC,OAAP,CAAeF,MAAf,KAA0B2B,SAA1B,IACAD,cAAc,CAACZ,KAAK,CAACf,IAAP,CAAd,KAA+B4B,SAD/B,GAEI,EACE,GAAGD,cAAc,CAACZ,KAAK,CAACf,IAAP,CADnB;AAEE,uBAAGe,KAAK,CAACd,MAFX;AAGE,uBAAG2C,MAAM,CAACzC,OAAP,CAAeF;AAHpB,mBAFJ,GAOIc,KAAK,CAACd,MARZ;AASD,iBAVD,MAUO;AACLA,kBAAAA,MAAM,GACJ0B,cAAc,CAACZ,KAAK,CAACf,IAAP,CAAd,KAA+B4B,SAA/B,GACI,EACE,GAAGD,cAAc,CAACZ,KAAK,CAACf,IAAP,CADnB;AAEE,uBAAG4C,MAAM,CAACzC,OAAP,CAAeF;AAFpB,mBADJ,GAKI2C,MAAM,CAACzC,OAAP,CAAeF,MANrB;AAOD;;AAED,sBAAM6C,IAAI,GACRF,MAAM,CAAC1C,IAAP,KAAgB,UAAhB,IAA8B0C,MAAM,CAACzC,OAAP,CAAe2C,IAAf,IAAuB,IAArD,GACIF,MAAM,CAACzC,OAAP,CAAe2C,IADnB,GAEI/B,KAAK,CAAC+B,IAHZ;AAKA,uBAAO7C,MAAM,KAAKc,KAAK,CAACd,MAAjB,IAA2B6C,IAAI,KAAK/B,KAAK,CAAC+B,IAA1C,GACH,EAAE,GAAG/B,KAAL;AAAY+B,kBAAAA,IAAZ;AAAkB7C,kBAAAA;AAAlB,iBADG,GAEHc,KAFJ;AAGD,eAnCO;AAFV,aADgB,EAwChBT,KAxCgB,EAyChBC,YAzCgB,EA0ChBC,gBA1CgB,CAAlB;AA4CD;;AAED,aAAK,SAAL;AAAgB;AACd,gBAAIS,KAAK,CAACR,OAAN,CAAc+B,MAAd,KAAyB,CAA7B,EAAgC;AAC9B,qBAAO,IAAP;AACD;;AAED,kBAAMO,WAAW,GAAG9B,KAAK,CAACR,OAAN,CAAcQ,KAAK,CAACR,OAAN,CAAc+B,MAAd,GAAuB,CAArC,EAAwC9B,GAA5D;AACA,kBAAMJ,KAAK,GAAGW,KAAK,CAACZ,MAAN,CAAaS,SAAb,CACXC,KAAD,IAAWA,KAAK,CAACL,GAAN,KAAcqC,WADb,CAAd;;AAIA,gBAAIzC,KAAK,KAAK,CAAC,CAAf,EAAkB;AAChB,qBAAO,IAAP;AACD;;AAED,mBAAO,EACL,GAAGW,KADE;AAELR,cAAAA,OAAO,EAAEQ,KAAK,CAACR,OAAN,CAAcuC,KAAd,CAAoB,CAApB,EAAuB,CAAC,CAAxB,CAFJ;AAGL1C,cAAAA;AAHK,aAAP;AAKD;;AAED;AACE,iBAAOkB,oBAAWmB,iBAAX,CAA6B1B,KAA7B,EAAoC2B,MAApC,CAAP;AAvFJ;AAyFD,KArOC;;AAuOFK,IAAAA,uBAAuB,CAACL,MAAD,EAAS;AAC9B,aAAOA,MAAM,CAAC1C,IAAP,KAAgB,UAAvB;AACD,KAzOC;;AA2OFgD,IAAAA,cAAc,EAAEpD;AA3Od,GAHJ;AAiPA,SAAOyB,MAAP;AACD","sourcesContent":["import { nanoid } from 'nanoid/non-secure';\n\nimport BaseRouter from './BaseRouter';\nimport type {\n CommonNavigationAction,\n DefaultRouterOptions,\n NavigationState,\n ParamListBase,\n PartialState,\n Route,\n Router,\n} from './types';\n\nexport type TabActionType = {\n type: 'JUMP_TO';\n payload: { name: string; params?: object };\n source?: string;\n target?: string;\n};\n\nexport type BackBehavior =\n | 'initialRoute'\n | 'firstRoute'\n | 'history'\n | 'order'\n | 'none';\n\nexport type TabRouterOptions = DefaultRouterOptions & {\n backBehavior?: BackBehavior;\n};\n\nexport type TabNavigationState<ParamList extends ParamListBase> = Omit<\n NavigationState<ParamList>,\n 'history'\n> & {\n /**\n * Type of the router, in this case, it's tab.\n */\n type: 'tab';\n /**\n * List of previously visited route keys.\n */\n history: { type: 'route'; key: string }[];\n};\n\nexport type TabActionHelpers<ParamList extends ParamListBase> = {\n /**\n * Jump to an existing tab.\n *\n * @param name Name of the route for the tab.\n * @param [params] Params object for the route.\n */\n jumpTo<RouteName extends Extract<keyof ParamList, string>>(\n ...args: undefined extends ParamList[RouteName]\n ? [screen: RouteName] | [screen: RouteName, params: ParamList[RouteName]]\n : [screen: RouteName, params: ParamList[RouteName]]\n ): void;\n};\n\nconst TYPE_ROUTE = 'route' as const;\n\nexport const TabActions = {\n jumpTo(name: string, params?: object): TabActionType {\n return { type: 'JUMP_TO', payload: { name, params } };\n },\n};\n\nconst getRouteHistory = (\n routes: Route<string>[],\n index: number,\n backBehavior: BackBehavior,\n initialRouteName: string | undefined\n) => {\n const history = [{ type: TYPE_ROUTE, key: routes[index].key }];\n let initialRouteIndex;\n\n switch (backBehavior) {\n case 'order':\n for (let i = index; i > 0; i--) {\n history.unshift({ type: TYPE_ROUTE, key: routes[i - 1].key });\n }\n break;\n case 'firstRoute':\n if (index !== 0) {\n history.unshift({\n type: TYPE_ROUTE,\n key: routes[0].key,\n });\n }\n break;\n case 'initialRoute':\n initialRouteIndex = routes.findIndex(\n (route) => route.name === initialRouteName\n );\n initialRouteIndex = initialRouteIndex === -1 ? 0 : initialRouteIndex;\n\n if (index !== initialRouteIndex) {\n history.unshift({\n type: TYPE_ROUTE,\n key: routes[initialRouteIndex].key,\n });\n }\n break;\n case 'history':\n // The history will fill up on navigation\n break;\n }\n\n return history;\n};\n\nconst changeIndex = (\n state: TabNavigationState<ParamListBase>,\n index: number,\n backBehavior: BackBehavior,\n initialRouteName: string | undefined\n) => {\n let history;\n\n if (backBehavior === 'history') {\n const currentKey = state.routes[index].key;\n\n history = state.history\n .filter((it) => (it.type === 'route' ? it.key !== currentKey : false))\n .concat({ type: TYPE_ROUTE, key: currentKey });\n } else {\n history = getRouteHistory(\n state.routes,\n index,\n backBehavior,\n initialRouteName\n );\n }\n\n return {\n ...state,\n index,\n history,\n };\n};\n\nexport default function TabRouter({\n initialRouteName,\n backBehavior = 'firstRoute',\n}: TabRouterOptions) {\n const router: Router<\n TabNavigationState<ParamListBase>,\n TabActionType | CommonNavigationAction\n > = {\n ...BaseRouter,\n\n type: 'tab',\n\n getInitialState({ routeNames, routeParamList }) {\n const index =\n initialRouteName !== undefined && routeNames.includes(initialRouteName)\n ? routeNames.indexOf(initialRouteName)\n : 0;\n\n const routes = routeNames.map((name) => ({\n name,\n key: `${name}-${nanoid()}`,\n params: routeParamList[name],\n }));\n\n const history = getRouteHistory(\n routes,\n index,\n backBehavior,\n initialRouteName\n );\n\n return {\n stale: false,\n type: 'tab',\n key: `tab-${nanoid()}`,\n index,\n routeNames,\n history,\n routes,\n };\n },\n\n getRehydratedState(partialState, { routeNames, routeParamList }) {\n let state = partialState;\n\n if (state.stale === false) {\n return state;\n }\n\n const routes = routeNames.map((name) => {\n const route = (\n state as PartialState<TabNavigationState<ParamListBase>>\n ).routes.find((r) => r.name === name);\n\n return {\n ...route,\n name,\n key:\n route && route.name === name && route.key\n ? route.key\n : `${name}-${nanoid()}`,\n params:\n routeParamList[name] !== undefined\n ? {\n ...routeParamList[name],\n ...(route ? route.params : undefined),\n }\n : route\n ? route.params\n : undefined,\n } as Route<string>;\n });\n\n const index = Math.min(\n Math.max(routeNames.indexOf(state.routes[state?.index ?? 0]?.name), 0),\n routes.length - 1\n );\n\n const history =\n state.history?.filter((it) => routes.find((r) => r.key === it.key)) ??\n [];\n\n return changeIndex(\n {\n stale: false,\n type: 'tab',\n key: `tab-${nanoid()}`,\n index,\n routeNames,\n history,\n routes,\n },\n index,\n backBehavior,\n initialRouteName\n );\n },\n\n getStateForRouteNamesChange(state, { routeNames, routeParamList }) {\n const routes = routeNames.map(\n (name) =>\n state.routes.find((r) => r.name === name) || {\n name,\n key: `${name}-${nanoid()}`,\n params: routeParamList[name],\n }\n );\n\n const index = Math.max(\n 0,\n routeNames.indexOf(state.routes[state.index].name)\n );\n\n let history = state.history.filter(\n // Type will always be 'route' for tabs, but could be different in a router extending this (e.g. drawer)\n (it) => it.type !== 'route' || routes.find((r) => r.key === it.key)\n );\n\n if (!history.length) {\n history = getRouteHistory(\n routes,\n index,\n backBehavior,\n initialRouteName\n );\n }\n\n return {\n ...state,\n history,\n routeNames,\n routes,\n index,\n };\n },\n\n getStateForRouteFocus(state, key) {\n const index = state.routes.findIndex((r) => r.key === key);\n\n if (index === -1 || index === state.index) {\n return state;\n }\n\n return changeIndex(state, index, backBehavior, initialRouteName);\n },\n\n getStateForAction(state, action, { routeParamList }) {\n switch (action.type) {\n case 'JUMP_TO':\n case 'NAVIGATE': {\n let index = -1;\n\n if (action.type === 'NAVIGATE' && action.payload.key) {\n index = state.routes.findIndex(\n (route) => route.key === action.payload.key\n );\n } else {\n index = state.routes.findIndex(\n (route) => route.name === action.payload.name\n );\n }\n\n if (index === -1) {\n return null;\n }\n\n return changeIndex(\n {\n ...state,\n routes: state.routes.map((route, i) => {\n if (i !== index) {\n return route;\n }\n\n let params;\n\n if (action.type === 'NAVIGATE' && action.payload.merge) {\n params =\n action.payload.params !== undefined ||\n routeParamList[route.name] !== undefined\n ? {\n ...routeParamList[route.name],\n ...route.params,\n ...action.payload.params,\n }\n : route.params;\n } else {\n params =\n routeParamList[route.name] !== undefined\n ? {\n ...routeParamList[route.name],\n ...action.payload.params,\n }\n : action.payload.params;\n }\n\n const path =\n action.type === 'NAVIGATE' && action.payload.path != null\n ? action.payload.path\n : route.path;\n\n return params !== route.params || path !== route.path\n ? { ...route, path, params }\n : route;\n }),\n },\n index,\n backBehavior,\n initialRouteName\n );\n }\n\n case 'GO_BACK': {\n if (state.history.length === 1) {\n return null;\n }\n\n const previousKey = state.history[state.history.length - 2].key;\n const index = state.routes.findIndex(\n (route) => route.key === previousKey\n );\n\n if (index === -1) {\n return null;\n }\n\n return {\n ...state,\n history: state.history.slice(0, -1),\n index,\n };\n }\n\n default:\n return BaseRouter.getStateForAction(state, action);\n }\n },\n\n shouldActionChangeFocus(action) {\n return action.type === 'NAVIGATE';\n },\n\n actionCreators: TabActions,\n };\n\n return router;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["TabRouter.tsx"],"names":["TYPE_ROUTE","TabActions","jumpTo","name","params","type","payload","getRouteHistory","routes","index","backBehavior","initialRouteName","history","key","initialRouteIndex","i","unshift","findIndex","route","changeIndex","state","currentKey","filter","it","concat","TabRouter","router","BaseRouter","getInitialState","routeNames","routeParamList","undefined","includes","indexOf","map","stale","getRehydratedState","partialState","find","r","Math","min","max","length","getStateForRouteNamesChange","routeKeyChanges","getStateForRouteFocus","getStateForAction","action","merge","path","previousKey","slice","shouldActionChangeFocus","actionCreators"],"mappings":"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","sourcesContent":["import { nanoid } from 'nanoid/non-secure';\n\nimport BaseRouter from './BaseRouter';\nimport type {\n CommonNavigationAction,\n DefaultRouterOptions,\n NavigationState,\n ParamListBase,\n PartialState,\n Route,\n Router,\n} from './types';\n\nexport type TabActionType = {\n type: 'JUMP_TO';\n payload: { name: string; params?: object };\n source?: string;\n target?: string;\n};\n\nexport type BackBehavior =\n | 'initialRoute'\n | 'firstRoute'\n | 'history'\n | 'order'\n | 'none';\n\nexport type TabRouterOptions = DefaultRouterOptions & {\n backBehavior?: BackBehavior;\n};\n\nexport type TabNavigationState<ParamList extends ParamListBase> = Omit<\n NavigationState<ParamList>,\n 'history'\n> & {\n /**\n * Type of the router, in this case, it's tab.\n */\n type: 'tab';\n /**\n * List of previously visited route keys.\n */\n history: { type: 'route'; key: string }[];\n};\n\nexport type TabActionHelpers<ParamList extends ParamListBase> = {\n /**\n * Jump to an existing tab.\n *\n * @param name Name of the route for the tab.\n * @param [params] Params object for the route.\n */\n jumpTo<RouteName extends Extract<keyof ParamList, string>>(\n ...args: undefined extends ParamList[RouteName]\n ? [screen: RouteName] | [screen: RouteName, params: ParamList[RouteName]]\n : [screen: RouteName, params: ParamList[RouteName]]\n ): void;\n};\n\nconst TYPE_ROUTE = 'route' as const;\n\nexport const TabActions = {\n jumpTo(name: string, params?: object): TabActionType {\n return { type: 'JUMP_TO', payload: { name, params } };\n },\n};\n\nconst getRouteHistory = (\n routes: Route<string>[],\n index: number,\n backBehavior: BackBehavior,\n initialRouteName: string | undefined\n) => {\n const history = [{ type: TYPE_ROUTE, key: routes[index].key }];\n let initialRouteIndex;\n\n switch (backBehavior) {\n case 'order':\n for (let i = index; i > 0; i--) {\n history.unshift({ type: TYPE_ROUTE, key: routes[i - 1].key });\n }\n break;\n case 'firstRoute':\n if (index !== 0) {\n history.unshift({\n type: TYPE_ROUTE,\n key: routes[0].key,\n });\n }\n break;\n case 'initialRoute':\n initialRouteIndex = routes.findIndex(\n (route) => route.name === initialRouteName\n );\n initialRouteIndex = initialRouteIndex === -1 ? 0 : initialRouteIndex;\n\n if (index !== initialRouteIndex) {\n history.unshift({\n type: TYPE_ROUTE,\n key: routes[initialRouteIndex].key,\n });\n }\n break;\n case 'history':\n // The history will fill up on navigation\n break;\n }\n\n return history;\n};\n\nconst changeIndex = (\n state: TabNavigationState<ParamListBase>,\n index: number,\n backBehavior: BackBehavior,\n initialRouteName: string | undefined\n) => {\n let history;\n\n if (backBehavior === 'history') {\n const currentKey = state.routes[index].key;\n\n history = state.history\n .filter((it) => (it.type === 'route' ? it.key !== currentKey : false))\n .concat({ type: TYPE_ROUTE, key: currentKey });\n } else {\n history = getRouteHistory(\n state.routes,\n index,\n backBehavior,\n initialRouteName\n );\n }\n\n return {\n ...state,\n index,\n history,\n };\n};\n\nexport default function TabRouter({\n initialRouteName,\n backBehavior = 'firstRoute',\n}: TabRouterOptions) {\n const router: Router<\n TabNavigationState<ParamListBase>,\n TabActionType | CommonNavigationAction\n > = {\n ...BaseRouter,\n\n type: 'tab',\n\n getInitialState({ routeNames, routeParamList }) {\n const index =\n initialRouteName !== undefined && routeNames.includes(initialRouteName)\n ? routeNames.indexOf(initialRouteName)\n : 0;\n\n const routes = routeNames.map((name) => ({\n name,\n key: `${name}-${nanoid()}`,\n params: routeParamList[name],\n }));\n\n const history = getRouteHistory(\n routes,\n index,\n backBehavior,\n initialRouteName\n );\n\n return {\n stale: false,\n type: 'tab',\n key: `tab-${nanoid()}`,\n index,\n routeNames,\n history,\n routes,\n };\n },\n\n getRehydratedState(partialState, { routeNames, routeParamList }) {\n let state = partialState;\n\n if (state.stale === false) {\n return state;\n }\n\n const routes = routeNames.map((name) => {\n const route = (\n state as PartialState<TabNavigationState<ParamListBase>>\n ).routes.find((r) => r.name === name);\n\n return {\n ...route,\n name,\n key:\n route && route.name === name && route.key\n ? route.key\n : `${name}-${nanoid()}`,\n params:\n routeParamList[name] !== undefined\n ? {\n ...routeParamList[name],\n ...(route ? route.params : undefined),\n }\n : route\n ? route.params\n : undefined,\n } as Route<string>;\n });\n\n const index = Math.min(\n Math.max(routeNames.indexOf(state.routes[state?.index ?? 0]?.name), 0),\n routes.length - 1\n );\n\n const history =\n state.history?.filter((it) => routes.find((r) => r.key === it.key)) ??\n [];\n\n return changeIndex(\n {\n stale: false,\n type: 'tab',\n key: `tab-${nanoid()}`,\n index,\n routeNames,\n history,\n routes,\n },\n index,\n backBehavior,\n initialRouteName\n );\n },\n\n getStateForRouteNamesChange(\n state,\n { routeNames, routeParamList, routeKeyChanges }\n ) {\n const routes = routeNames.map(\n (name) =>\n state.routes.find(\n (r) => r.name === name && !routeKeyChanges.includes(r.name)\n ) || {\n name,\n key: `${name}-${nanoid()}`,\n params: routeParamList[name],\n }\n );\n\n const index = Math.max(\n 0,\n routeNames.indexOf(state.routes[state.index].name)\n );\n\n let history = state.history.filter(\n // Type will always be 'route' for tabs, but could be different in a router extending this (e.g. drawer)\n (it) => it.type !== 'route' || routes.find((r) => r.key === it.key)\n );\n\n if (!history.length) {\n history = getRouteHistory(\n routes,\n index,\n backBehavior,\n initialRouteName\n );\n }\n\n return {\n ...state,\n history,\n routeNames,\n routes,\n index,\n };\n },\n\n getStateForRouteFocus(state, key) {\n const index = state.routes.findIndex((r) => r.key === key);\n\n if (index === -1 || index === state.index) {\n return state;\n }\n\n return changeIndex(state, index, backBehavior, initialRouteName);\n },\n\n getStateForAction(state, action, { routeParamList }) {\n switch (action.type) {\n case 'JUMP_TO':\n case 'NAVIGATE': {\n let index = -1;\n\n if (action.type === 'NAVIGATE' && action.payload.key) {\n index = state.routes.findIndex(\n (route) => route.key === action.payload.key\n );\n } else {\n index = state.routes.findIndex(\n (route) => route.name === action.payload.name\n );\n }\n\n if (index === -1) {\n return null;\n }\n\n return changeIndex(\n {\n ...state,\n routes: state.routes.map((route, i) => {\n if (i !== index) {\n return route;\n }\n\n let params;\n\n if (action.type === 'NAVIGATE' && action.payload.merge) {\n params =\n action.payload.params !== undefined ||\n routeParamList[route.name] !== undefined\n ? {\n ...routeParamList[route.name],\n ...route.params,\n ...action.payload.params,\n }\n : route.params;\n } else {\n params =\n routeParamList[route.name] !== undefined\n ? {\n ...routeParamList[route.name],\n ...action.payload.params,\n }\n : action.payload.params;\n }\n\n const path =\n action.type === 'NAVIGATE' && action.payload.path != null\n ? action.payload.path\n : route.path;\n\n return params !== route.params || path !== route.path\n ? { ...route, path, params }\n : route;\n }),\n },\n index,\n backBehavior,\n initialRouteName\n );\n }\n\n case 'GO_BACK': {\n if (state.history.length === 1) {\n return null;\n }\n\n const previousKey = state.history[state.history.length - 2].key;\n const index = state.routes.findIndex(\n (route) => route.key === previousKey\n );\n\n if (index === -1) {\n return null;\n }\n\n return {\n ...state,\n history: state.history.slice(0, -1),\n index,\n };\n }\n\n default:\n return BaseRouter.getStateForAction(state, action);\n }\n },\n\n shouldActionChangeFocus(action) {\n return action.type === 'NAVIGATE';\n },\n\n actionCreators: TabActions,\n };\n\n return router;\n}\n"]}
|
|
@@ -98,9 +98,10 @@ export default function StackRouter(options) {
|
|
|
98
98
|
|
|
99
99
|
getStateForRouteNamesChange(state, {
|
|
100
100
|
routeNames,
|
|
101
|
-
routeParamList
|
|
101
|
+
routeParamList,
|
|
102
|
+
routeKeyChanges
|
|
102
103
|
}) {
|
|
103
|
-
const routes = state.routes.filter(route => routeNames.includes(route.name));
|
|
104
|
+
const routes = state.routes.filter(route => routeNames.includes(route.name) && !routeKeyChanges.includes(route.name));
|
|
104
105
|
|
|
105
106
|
if (routes.length === 0) {
|
|
106
107
|
const initialRouteName = options.initialRouteName !== undefined && routeNames.includes(options.initialRouteName) ? options.initialRouteName : routeNames[0];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["StackRouter.tsx"],"names":["nanoid","BaseRouter","StackActions","replace","name","params","type","payload","push","pop","count","popToTop","StackRouter","options","router","getInitialState","routeNames","routeParamList","initialRouteName","undefined","includes","stale","key","index","routes","getRehydratedState","partialState","state","filter","route","map","length","getStateForRouteNamesChange","Math","min","getStateForRouteFocus","findIndex","r","slice","getStateForAction","action","target","source","i","getId","routeGetIdList","id","find","max","concat","path","merge","actionCreators"],"mappings":"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","sourcesContent":["import { nanoid } from 'nanoid/non-secure';\n\nimport BaseRouter from './BaseRouter';\nimport type {\n CommonNavigationAction,\n DefaultRouterOptions,\n NavigationState,\n ParamListBase,\n Route,\n Router,\n} from './types';\n\nexport type StackActionType =\n | {\n type: 'REPLACE';\n payload: { name: string; key?: string | undefined; params?: object };\n source?: string;\n target?: string;\n }\n | {\n type: 'PUSH';\n payload: { name: string; params?: object };\n source?: string;\n target?: string;\n }\n | {\n type: 'POP';\n payload: { count: number };\n source?: string;\n target?: string;\n }\n | {\n type: 'POP_TO_TOP';\n source?: string;\n target?: string;\n };\n\nexport type StackRouterOptions = DefaultRouterOptions;\n\nexport type StackNavigationState<ParamList extends ParamListBase> =\n NavigationState<ParamList> & {\n /**\n * Type of the router, in this case, it's stack.\n */\n type: 'stack';\n };\n\nexport type StackActionHelpers<ParamList extends ParamListBase> = {\n /**\n * Replace the current route with a new one.\n *\n * @param name Route name of the new route.\n * @param [params] Params object for the new route.\n */\n replace<RouteName extends keyof ParamList>(\n ...args: undefined extends ParamList[RouteName]\n ? [screen: RouteName] | [screen: RouteName, params: ParamList[RouteName]]\n : [screen: RouteName, params: ParamList[RouteName]]\n ): void;\n\n /**\n * Push a new screen onto the stack.\n *\n * @param name Name of the route for the tab.\n * @param [params] Params object for the route.\n */\n push<RouteName extends keyof ParamList>(\n ...args: undefined extends ParamList[RouteName]\n ? [screen: RouteName] | [screen: RouteName, params: ParamList[RouteName]]\n : [screen: RouteName, params: ParamList[RouteName]]\n ): void;\n\n /**\n * Pop a screen from the stack.\n */\n pop(count?: number): void;\n\n /**\n * Pop to the first route in the stack, dismissing all other screens.\n */\n popToTop(): void;\n};\n\nexport const StackActions = {\n replace(name: string, params?: object): StackActionType {\n return { type: 'REPLACE', payload: { name, params } };\n },\n push(name: string, params?: object): StackActionType {\n return { type: 'PUSH', payload: { name, params } };\n },\n pop(count: number = 1): StackActionType {\n return { type: 'POP', payload: { count } };\n },\n popToTop(): StackActionType {\n return { type: 'POP_TO_TOP' };\n },\n};\n\nexport default function StackRouter(options: StackRouterOptions) {\n const router: Router<\n StackNavigationState<ParamListBase>,\n CommonNavigationAction | StackActionType\n > = {\n ...BaseRouter,\n\n type: 'stack',\n\n getInitialState({ routeNames, routeParamList }) {\n const initialRouteName =\n options.initialRouteName !== undefined &&\n routeNames.includes(options.initialRouteName)\n ? options.initialRouteName\n : routeNames[0];\n\n return {\n stale: false,\n type: 'stack',\n key: `stack-${nanoid()}`,\n index: 0,\n routeNames,\n routes: [\n {\n key: `${initialRouteName}-${nanoid()}`,\n name: initialRouteName,\n params: routeParamList[initialRouteName],\n },\n ],\n };\n },\n\n getRehydratedState(partialState, { routeNames, routeParamList }) {\n let state = partialState;\n\n if (state.stale === false) {\n return state;\n }\n\n const routes = state.routes\n .filter((route) => routeNames.includes(route.name))\n .map(\n (route) =>\n ({\n ...route,\n key: route.key || `${route.name}-${nanoid()}`,\n params:\n routeParamList[route.name] !== undefined\n ? {\n ...routeParamList[route.name],\n ...route.params,\n }\n : route.params,\n } as Route<string>)\n );\n\n if (routes.length === 0) {\n const initialRouteName =\n options.initialRouteName !== undefined\n ? options.initialRouteName\n : routeNames[0];\n\n routes.push({\n key: `${initialRouteName}-${nanoid()}`,\n name: initialRouteName,\n params: routeParamList[initialRouteName],\n });\n }\n\n return {\n stale: false,\n type: 'stack',\n key: `stack-${nanoid()}`,\n index: routes.length - 1,\n routeNames,\n routes,\n };\n },\n\n getStateForRouteNamesChange(state, { routeNames, routeParamList }) {\n const routes = state.routes.filter((route) =>\n routeNames.includes(route.name)\n );\n\n if (routes.length === 0) {\n const initialRouteName =\n options.initialRouteName !== undefined &&\n routeNames.includes(options.initialRouteName)\n ? options.initialRouteName\n : routeNames[0];\n\n routes.push({\n key: `${initialRouteName}-${nanoid()}`,\n name: initialRouteName,\n params: routeParamList[initialRouteName],\n });\n }\n\n return {\n ...state,\n routeNames,\n routes,\n index: Math.min(state.index, routes.length - 1),\n };\n },\n\n getStateForRouteFocus(state, key) {\n const index = state.routes.findIndex((r) => r.key === key);\n\n if (index === -1 || index === state.index) {\n return state;\n }\n\n return {\n ...state,\n index,\n routes: state.routes.slice(0, index + 1),\n };\n },\n\n getStateForAction(state, action, options) {\n const { routeParamList } = options;\n\n switch (action.type) {\n case 'REPLACE': {\n const index =\n action.target === state.key && action.source\n ? state.routes.findIndex((r) => r.key === action.source)\n : state.index;\n\n if (index === -1) {\n return null;\n }\n\n const { name, key, params } = action.payload;\n\n if (!state.routeNames.includes(name)) {\n return null;\n }\n\n return {\n ...state,\n routes: state.routes.map((route, i) =>\n i === index\n ? {\n key: key !== undefined ? key : `${name}-${nanoid()}`,\n name,\n params:\n routeParamList[name] !== undefined\n ? {\n ...routeParamList[name],\n ...params,\n }\n : params,\n }\n : route\n ),\n };\n }\n\n case 'PUSH':\n if (state.routeNames.includes(action.payload.name)) {\n const getId = options.routeGetIdList[action.payload.name];\n const id = getId?.({ params: action.payload.params });\n\n const route = id\n ? state.routes.find(\n (route) =>\n route.name === action.payload.name &&\n id === getId?.({ params: route.params })\n )\n : undefined;\n\n let routes: Route<string>[];\n\n if (route) {\n routes = state.routes.filter((r) => r.key !== route.key);\n routes.push({\n ...route,\n params:\n routeParamList[action.payload.name] !== undefined\n ? {\n ...routeParamList[action.payload.name],\n ...action.payload.params,\n }\n : action.payload.params,\n });\n } else {\n routes = [\n ...state.routes,\n {\n key: `${action.payload.name}-${nanoid()}`,\n name: action.payload.name,\n params:\n routeParamList[action.payload.name] !== undefined\n ? {\n ...routeParamList[action.payload.name],\n ...action.payload.params,\n }\n : action.payload.params,\n },\n ];\n }\n\n return {\n ...state,\n index: routes.length - 1,\n routes,\n };\n }\n\n return null;\n\n case 'POP': {\n const index =\n action.target === state.key && action.source\n ? state.routes.findIndex((r) => r.key === action.source)\n : state.index;\n\n if (index > 0) {\n const count = Math.max(index - action.payload.count + 1, 1);\n const routes = state.routes\n .slice(0, count)\n .concat(state.routes.slice(index + 1));\n\n return {\n ...state,\n index: routes.length - 1,\n routes,\n };\n }\n\n return null;\n }\n\n case 'POP_TO_TOP':\n return router.getStateForAction(\n state,\n {\n type: 'POP',\n payload: { count: state.routes.length - 1 },\n },\n options\n );\n\n case 'NAVIGATE':\n if (\n action.payload.name !== undefined &&\n !state.routeNames.includes(action.payload.name)\n ) {\n return null;\n }\n\n if (action.payload.key || action.payload.name) {\n // If the route already exists, navigate to that\n let index = -1;\n\n const getId =\n // `getId` and `key` can't be used together\n action.payload.key === undefined &&\n action.payload.name !== undefined\n ? options.routeGetIdList[action.payload.name]\n : undefined;\n const id = getId?.({ params: action.payload.params });\n\n if (id) {\n index = state.routes.findIndex(\n (route) =>\n route.name === action.payload.name &&\n id === getId?.({ params: route.params })\n );\n } else if (\n (state.routes[state.index].name === action.payload.name &&\n action.payload.key === undefined) ||\n state.routes[state.index].key === action.payload.key\n ) {\n index = state.index;\n } else {\n for (let i = state.routes.length - 1; i >= 0; i--) {\n if (\n (state.routes[i].name === action.payload.name &&\n action.payload.key === undefined) ||\n state.routes[i].key === action.payload.key\n ) {\n index = i;\n break;\n }\n }\n }\n\n if (\n index === -1 &&\n action.payload.key &&\n action.payload.name === undefined\n ) {\n return null;\n }\n\n if (index === -1 && action.payload.name !== undefined) {\n const routes = [\n ...state.routes,\n {\n key:\n action.payload.key ?? `${action.payload.name}-${nanoid()}`,\n name: action.payload.name,\n path: action.payload.path,\n params:\n routeParamList[action.payload.name] !== undefined\n ? {\n ...routeParamList[action.payload.name],\n ...action.payload.params,\n }\n : action.payload.params,\n },\n ];\n\n return {\n ...state,\n routes,\n index: routes.length - 1,\n };\n }\n\n const route = state.routes[index];\n\n let params;\n\n if (action.payload.merge) {\n params =\n action.payload.params !== undefined ||\n routeParamList[route.name] !== undefined\n ? {\n ...routeParamList[route.name],\n ...route.params,\n ...action.payload.params,\n }\n : route.params;\n } else {\n params =\n routeParamList[route.name] !== undefined\n ? {\n ...routeParamList[route.name],\n ...action.payload.params,\n }\n : action.payload.params;\n }\n\n return {\n ...state,\n index,\n routes: [\n ...state.routes.slice(0, index),\n params !== route.params ||\n (action.payload.path && action.payload.path !== route.path)\n ? {\n ...route,\n path: action.payload.path ?? route.path,\n params,\n }\n : state.routes[index],\n ],\n };\n }\n\n return null;\n\n case 'GO_BACK':\n if (state.index > 0) {\n return router.getStateForAction(\n state,\n {\n type: 'POP',\n payload: { count: 1 },\n target: action.target,\n source: action.source,\n },\n options\n );\n }\n\n return null;\n\n default:\n return BaseRouter.getStateForAction(state, action);\n }\n },\n\n actionCreators: StackActions,\n };\n\n return router;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["StackRouter.tsx"],"names":["nanoid","BaseRouter","StackActions","replace","name","params","type","payload","push","pop","count","popToTop","StackRouter","options","router","getInitialState","routeNames","routeParamList","initialRouteName","undefined","includes","stale","key","index","routes","getRehydratedState","partialState","state","filter","route","map","length","getStateForRouteNamesChange","routeKeyChanges","Math","min","getStateForRouteFocus","findIndex","r","slice","getStateForAction","action","target","source","i","getId","routeGetIdList","id","find","max","concat","path","merge","actionCreators"],"mappings":"AAAA,SAASA,MAAT,QAAuB,mBAAvB;AAEA,OAAOC,UAAP,MAAuB,cAAvB;AAiFA,OAAO,MAAMC,YAAY,GAAG;AAC1BC,EAAAA,OAAO,CAACC,IAAD,EAAeC,MAAf,EAAiD;AACtD,WAAO;AAAEC,MAAAA,IAAI,EAAE,SAAR;AAAmBC,MAAAA,OAAO,EAAE;AAAEH,QAAAA,IAAF;AAAQC,QAAAA;AAAR;AAA5B,KAAP;AACD,GAHyB;;AAI1BG,EAAAA,IAAI,CAACJ,IAAD,EAAeC,MAAf,EAAiD;AACnD,WAAO;AAAEC,MAAAA,IAAI,EAAE,MAAR;AAAgBC,MAAAA,OAAO,EAAE;AAAEH,QAAAA,IAAF;AAAQC,QAAAA;AAAR;AAAzB,KAAP;AACD,GANyB;;AAO1BI,EAAAA,GAAG,CAACC,KAAa,GAAG,CAAjB,EAAqC;AACtC,WAAO;AAAEJ,MAAAA,IAAI,EAAE,KAAR;AAAeC,MAAAA,OAAO,EAAE;AAAEG,QAAAA;AAAF;AAAxB,KAAP;AACD,GATyB;;AAU1BC,EAAAA,QAAQ,GAAoB;AAC1B,WAAO;AAAEL,MAAAA,IAAI,EAAE;AAAR,KAAP;AACD;;AAZyB,CAArB;AAeP,eAAe,SAASM,WAAT,CAAqBC,OAArB,EAAkD;AAC/D,QAAMC,MAGL,GAAG,EACF,GAAGb,UADD;AAGFK,IAAAA,IAAI,EAAE,OAHJ;;AAKFS,IAAAA,eAAe,CAAC;AAAEC,MAAAA,UAAF;AAAcC,MAAAA;AAAd,KAAD,EAAiC;AAC9C,YAAMC,gBAAgB,GACpBL,OAAO,CAACK,gBAAR,KAA6BC,SAA7B,IACAH,UAAU,CAACI,QAAX,CAAoBP,OAAO,CAACK,gBAA5B,CADA,GAEIL,OAAO,CAACK,gBAFZ,GAGIF,UAAU,CAAC,CAAD,CAJhB;AAMA,aAAO;AACLK,QAAAA,KAAK,EAAE,KADF;AAELf,QAAAA,IAAI,EAAE,OAFD;AAGLgB,QAAAA,GAAG,EAAG,SAAQtB,MAAM,EAAG,EAHlB;AAILuB,QAAAA,KAAK,EAAE,CAJF;AAKLP,QAAAA,UALK;AAMLQ,QAAAA,MAAM,EAAE,CACN;AACEF,UAAAA,GAAG,EAAG,GAAEJ,gBAAiB,IAAGlB,MAAM,EAAG,EADvC;AAEEI,UAAAA,IAAI,EAAEc,gBAFR;AAGEb,UAAAA,MAAM,EAAEY,cAAc,CAACC,gBAAD;AAHxB,SADM;AANH,OAAP;AAcD,KA1BC;;AA4BFO,IAAAA,kBAAkB,CAACC,YAAD,EAAe;AAAEV,MAAAA,UAAF;AAAcC,MAAAA;AAAd,KAAf,EAA+C;AAC/D,UAAIU,KAAK,GAAGD,YAAZ;;AAEA,UAAIC,KAAK,CAACN,KAAN,KAAgB,KAApB,EAA2B;AACzB,eAAOM,KAAP;AACD;;AAED,YAAMH,MAAM,GAAGG,KAAK,CAACH,MAAN,CACZI,MADY,CACJC,KAAD,IAAWb,UAAU,CAACI,QAAX,CAAoBS,KAAK,CAACzB,IAA1B,CADN,EAEZ0B,GAFY,CAGVD,KAAD,KACG,EACC,GAAGA,KADJ;AAECP,QAAAA,GAAG,EAAEO,KAAK,CAACP,GAAN,IAAc,GAAEO,KAAK,CAACzB,IAAK,IAAGJ,MAAM,EAAG,EAF7C;AAGCK,QAAAA,MAAM,EACJY,cAAc,CAACY,KAAK,CAACzB,IAAP,CAAd,KAA+Be,SAA/B,GACI,EACE,GAAGF,cAAc,CAACY,KAAK,CAACzB,IAAP,CADnB;AAEE,aAAGyB,KAAK,CAACxB;AAFX,SADJ,GAKIwB,KAAK,CAACxB;AATb,OADH,CAHW,CAAf;;AAiBA,UAAImB,MAAM,CAACO,MAAP,KAAkB,CAAtB,EAAyB;AACvB,cAAMb,gBAAgB,GACpBL,OAAO,CAACK,gBAAR,KAA6BC,SAA7B,GACIN,OAAO,CAACK,gBADZ,GAEIF,UAAU,CAAC,CAAD,CAHhB;AAKAQ,QAAAA,MAAM,CAAChB,IAAP,CAAY;AACVc,UAAAA,GAAG,EAAG,GAAEJ,gBAAiB,IAAGlB,MAAM,EAAG,EAD3B;AAEVI,UAAAA,IAAI,EAAEc,gBAFI;AAGVb,UAAAA,MAAM,EAAEY,cAAc,CAACC,gBAAD;AAHZ,SAAZ;AAKD;;AAED,aAAO;AACLG,QAAAA,KAAK,EAAE,KADF;AAELf,QAAAA,IAAI,EAAE,OAFD;AAGLgB,QAAAA,GAAG,EAAG,SAAQtB,MAAM,EAAG,EAHlB;AAILuB,QAAAA,KAAK,EAAEC,MAAM,CAACO,MAAP,GAAgB,CAJlB;AAKLf,QAAAA,UALK;AAMLQ,QAAAA;AANK,OAAP;AAQD,KAzEC;;AA2EFQ,IAAAA,2BAA2B,CACzBL,KADyB,EAEzB;AAAEX,MAAAA,UAAF;AAAcC,MAAAA,cAAd;AAA8BgB,MAAAA;AAA9B,KAFyB,EAGzB;AACA,YAAMT,MAAM,GAAGG,KAAK,CAACH,MAAN,CAAaI,MAAb,CACZC,KAAD,IACEb,UAAU,CAACI,QAAX,CAAoBS,KAAK,CAACzB,IAA1B,KACA,CAAC6B,eAAe,CAACb,QAAhB,CAAyBS,KAAK,CAACzB,IAA/B,CAHU,CAAf;;AAMA,UAAIoB,MAAM,CAACO,MAAP,KAAkB,CAAtB,EAAyB;AACvB,cAAMb,gBAAgB,GACpBL,OAAO,CAACK,gBAAR,KAA6BC,SAA7B,IACAH,UAAU,CAACI,QAAX,CAAoBP,OAAO,CAACK,gBAA5B,CADA,GAEIL,OAAO,CAACK,gBAFZ,GAGIF,UAAU,CAAC,CAAD,CAJhB;AAMAQ,QAAAA,MAAM,CAAChB,IAAP,CAAY;AACVc,UAAAA,GAAG,EAAG,GAAEJ,gBAAiB,IAAGlB,MAAM,EAAG,EAD3B;AAEVI,UAAAA,IAAI,EAAEc,gBAFI;AAGVb,UAAAA,MAAM,EAAEY,cAAc,CAACC,gBAAD;AAHZ,SAAZ;AAKD;;AAED,aAAO,EACL,GAAGS,KADE;AAELX,QAAAA,UAFK;AAGLQ,QAAAA,MAHK;AAILD,QAAAA,KAAK,EAAEW,IAAI,CAACC,GAAL,CAASR,KAAK,CAACJ,KAAf,EAAsBC,MAAM,CAACO,MAAP,GAAgB,CAAtC;AAJF,OAAP;AAMD,KAzGC;;AA2GFK,IAAAA,qBAAqB,CAACT,KAAD,EAAQL,GAAR,EAAa;AAChC,YAAMC,KAAK,GAAGI,KAAK,CAACH,MAAN,CAAaa,SAAb,CAAwBC,CAAD,IAAOA,CAAC,CAAChB,GAAF,KAAUA,GAAxC,CAAd;;AAEA,UAAIC,KAAK,KAAK,CAAC,CAAX,IAAgBA,KAAK,KAAKI,KAAK,CAACJ,KAApC,EAA2C;AACzC,eAAOI,KAAP;AACD;;AAED,aAAO,EACL,GAAGA,KADE;AAELJ,QAAAA,KAFK;AAGLC,QAAAA,MAAM,EAAEG,KAAK,CAACH,MAAN,CAAae,KAAb,CAAmB,CAAnB,EAAsBhB,KAAK,GAAG,CAA9B;AAHH,OAAP;AAKD,KAvHC;;AAyHFiB,IAAAA,iBAAiB,CAACb,KAAD,EAAQc,MAAR,EAAgB5B,OAAhB,EAAyB;AACxC,YAAM;AAAEI,QAAAA;AAAF,UAAqBJ,OAA3B;;AAEA,cAAQ4B,MAAM,CAACnC,IAAf;AACE,aAAK,SAAL;AAAgB;AACd,kBAAMiB,KAAK,GACTkB,MAAM,CAACC,MAAP,KAAkBf,KAAK,CAACL,GAAxB,IAA+BmB,MAAM,CAACE,MAAtC,GACIhB,KAAK,CAACH,MAAN,CAAaa,SAAb,CAAwBC,CAAD,IAAOA,CAAC,CAAChB,GAAF,KAAUmB,MAAM,CAACE,MAA/C,CADJ,GAEIhB,KAAK,CAACJ,KAHZ;;AAKA,gBAAIA,KAAK,KAAK,CAAC,CAAf,EAAkB;AAChB,qBAAO,IAAP;AACD;;AAED,kBAAM;AAAEnB,cAAAA,IAAF;AAAQkB,cAAAA,GAAR;AAAajB,cAAAA;AAAb,gBAAwBoC,MAAM,CAAClC,OAArC;;AAEA,gBAAI,CAACoB,KAAK,CAACX,UAAN,CAAiBI,QAAjB,CAA0BhB,IAA1B,CAAL,EAAsC;AACpC,qBAAO,IAAP;AACD;;AAED,mBAAO,EACL,GAAGuB,KADE;AAELH,cAAAA,MAAM,EAAEG,KAAK,CAACH,MAAN,CAAaM,GAAb,CAAiB,CAACD,KAAD,EAAQe,CAAR,KACvBA,CAAC,KAAKrB,KAAN,GACI;AACED,gBAAAA,GAAG,EAAEA,GAAG,KAAKH,SAAR,GAAoBG,GAApB,GAA2B,GAAElB,IAAK,IAAGJ,MAAM,EAAG,EADrD;AAEEI,gBAAAA,IAFF;AAGEC,gBAAAA,MAAM,EACJY,cAAc,CAACb,IAAD,CAAd,KAAyBe,SAAzB,GACI,EACE,GAAGF,cAAc,CAACb,IAAD,CADnB;AAEE,qBAAGC;AAFL,iBADJ,GAKIA;AATR,eADJ,GAYIwB,KAbE;AAFH,aAAP;AAkBD;;AAED,aAAK,MAAL;AACE,cAAIF,KAAK,CAACX,UAAN,CAAiBI,QAAjB,CAA0BqB,MAAM,CAAClC,OAAP,CAAeH,IAAzC,CAAJ,EAAoD;AAClD,kBAAMyC,KAAK,GAAGhC,OAAO,CAACiC,cAAR,CAAuBL,MAAM,CAAClC,OAAP,CAAeH,IAAtC,CAAd;AACA,kBAAM2C,EAAE,GAAGF,KAAH,aAAGA,KAAH,uBAAGA,KAAK,CAAG;AAAExC,cAAAA,MAAM,EAAEoC,MAAM,CAAClC,OAAP,CAAeF;AAAzB,aAAH,CAAhB;AAEA,kBAAMwB,KAAK,GAAGkB,EAAE,GACZpB,KAAK,CAACH,MAAN,CAAawB,IAAb,CACGnB,KAAD,IACEA,KAAK,CAACzB,IAAN,KAAeqC,MAAM,CAAClC,OAAP,CAAeH,IAA9B,IACA2C,EAAE,MAAKF,KAAL,aAAKA,KAAL,uBAAKA,KAAK,CAAG;AAAExC,cAAAA,MAAM,EAAEwB,KAAK,CAACxB;AAAhB,aAAH,CAAV,CAHN,CADY,GAMZc,SANJ;AAQA,gBAAIK,MAAJ;;AAEA,gBAAIK,KAAJ,EAAW;AACTL,cAAAA,MAAM,GAAGG,KAAK,CAACH,MAAN,CAAaI,MAAb,CAAqBU,CAAD,IAAOA,CAAC,CAAChB,GAAF,KAAUO,KAAK,CAACP,GAA3C,CAAT;AACAE,cAAAA,MAAM,CAAChB,IAAP,CAAY,EACV,GAAGqB,KADO;AAEVxB,gBAAAA,MAAM,EACJY,cAAc,CAACwB,MAAM,CAAClC,OAAP,CAAeH,IAAhB,CAAd,KAAwCe,SAAxC,GACI,EACE,GAAGF,cAAc,CAACwB,MAAM,CAAClC,OAAP,CAAeH,IAAhB,CADnB;AAEE,qBAAGqC,MAAM,CAAClC,OAAP,CAAeF;AAFpB,iBADJ,GAKIoC,MAAM,CAAClC,OAAP,CAAeF;AARX,eAAZ;AAUD,aAZD,MAYO;AACLmB,cAAAA,MAAM,GAAG,CACP,GAAGG,KAAK,CAACH,MADF,EAEP;AACEF,gBAAAA,GAAG,EAAG,GAAEmB,MAAM,CAAClC,OAAP,CAAeH,IAAK,IAAGJ,MAAM,EAAG,EAD1C;AAEEI,gBAAAA,IAAI,EAAEqC,MAAM,CAAClC,OAAP,CAAeH,IAFvB;AAGEC,gBAAAA,MAAM,EACJY,cAAc,CAACwB,MAAM,CAAClC,OAAP,CAAeH,IAAhB,CAAd,KAAwCe,SAAxC,GACI,EACE,GAAGF,cAAc,CAACwB,MAAM,CAAClC,OAAP,CAAeH,IAAhB,CADnB;AAEE,qBAAGqC,MAAM,CAAClC,OAAP,CAAeF;AAFpB,iBADJ,GAKIoC,MAAM,CAAClC,OAAP,CAAeF;AATvB,eAFO,CAAT;AAcD;;AAED,mBAAO,EACL,GAAGsB,KADE;AAELJ,cAAAA,KAAK,EAAEC,MAAM,CAACO,MAAP,GAAgB,CAFlB;AAGLP,cAAAA;AAHK,aAAP;AAKD;;AAED,iBAAO,IAAP;;AAEF,aAAK,KAAL;AAAY;AACV,kBAAMD,KAAK,GACTkB,MAAM,CAACC,MAAP,KAAkBf,KAAK,CAACL,GAAxB,IAA+BmB,MAAM,CAACE,MAAtC,GACIhB,KAAK,CAACH,MAAN,CAAaa,SAAb,CAAwBC,CAAD,IAAOA,CAAC,CAAChB,GAAF,KAAUmB,MAAM,CAACE,MAA/C,CADJ,GAEIhB,KAAK,CAACJ,KAHZ;;AAKA,gBAAIA,KAAK,GAAG,CAAZ,EAAe;AACb,oBAAMb,KAAK,GAAGwB,IAAI,CAACe,GAAL,CAAS1B,KAAK,GAAGkB,MAAM,CAAClC,OAAP,CAAeG,KAAvB,GAA+B,CAAxC,EAA2C,CAA3C,CAAd;AACA,oBAAMc,MAAM,GAAGG,KAAK,CAACH,MAAN,CACZe,KADY,CACN,CADM,EACH7B,KADG,EAEZwC,MAFY,CAELvB,KAAK,CAACH,MAAN,CAAae,KAAb,CAAmBhB,KAAK,GAAG,CAA3B,CAFK,CAAf;AAIA,qBAAO,EACL,GAAGI,KADE;AAELJ,gBAAAA,KAAK,EAAEC,MAAM,CAACO,MAAP,GAAgB,CAFlB;AAGLP,gBAAAA;AAHK,eAAP;AAKD;;AAED,mBAAO,IAAP;AACD;;AAED,aAAK,YAAL;AACE,iBAAOV,MAAM,CAAC0B,iBAAP,CACLb,KADK,EAEL;AACErB,YAAAA,IAAI,EAAE,KADR;AAEEC,YAAAA,OAAO,EAAE;AAAEG,cAAAA,KAAK,EAAEiB,KAAK,CAACH,MAAN,CAAaO,MAAb,GAAsB;AAA/B;AAFX,WAFK,EAMLlB,OANK,CAAP;;AASF,aAAK,UAAL;AACE,cACE4B,MAAM,CAAClC,OAAP,CAAeH,IAAf,KAAwBe,SAAxB,IACA,CAACQ,KAAK,CAACX,UAAN,CAAiBI,QAAjB,CAA0BqB,MAAM,CAAClC,OAAP,CAAeH,IAAzC,CAFH,EAGE;AACA,mBAAO,IAAP;AACD;;AAED,cAAIqC,MAAM,CAAClC,OAAP,CAAee,GAAf,IAAsBmB,MAAM,CAAClC,OAAP,CAAeH,IAAzC,EAA+C;AAAA;;AAC7C;AACA,gBAAImB,KAAK,GAAG,CAAC,CAAb;AAEA,kBAAMsB,KAAK,GACT;AACAJ,YAAAA,MAAM,CAAClC,OAAP,CAAee,GAAf,KAAuBH,SAAvB,IACAsB,MAAM,CAAClC,OAAP,CAAeH,IAAf,KAAwBe,SADxB,GAEIN,OAAO,CAACiC,cAAR,CAAuBL,MAAM,CAAClC,OAAP,CAAeH,IAAtC,CAFJ,GAGIe,SALN;AAMA,kBAAM4B,EAAE,GAAGF,KAAH,aAAGA,KAAH,uBAAGA,KAAK,CAAG;AAAExC,cAAAA,MAAM,EAAEoC,MAAM,CAAClC,OAAP,CAAeF;AAAzB,aAAH,CAAhB;;AAEA,gBAAI0C,EAAJ,EAAQ;AACNxB,cAAAA,KAAK,GAAGI,KAAK,CAACH,MAAN,CAAaa,SAAb,CACLR,KAAD,IACEA,KAAK,CAACzB,IAAN,KAAeqC,MAAM,CAAClC,OAAP,CAAeH,IAA9B,IACA2C,EAAE,MAAKF,KAAL,aAAKA,KAAL,uBAAKA,KAAK,CAAG;AAAExC,gBAAAA,MAAM,EAAEwB,KAAK,CAACxB;AAAhB,eAAH,CAAV,CAHE,CAAR;AAKD,aAND,MAMO,IACJsB,KAAK,CAACH,MAAN,CAAaG,KAAK,CAACJ,KAAnB,EAA0BnB,IAA1B,KAAmCqC,MAAM,CAAClC,OAAP,CAAeH,IAAlD,IACCqC,MAAM,CAAClC,OAAP,CAAee,GAAf,KAAuBH,SADzB,IAEAQ,KAAK,CAACH,MAAN,CAAaG,KAAK,CAACJ,KAAnB,EAA0BD,GAA1B,KAAkCmB,MAAM,CAAClC,OAAP,CAAee,GAH5C,EAIL;AACAC,cAAAA,KAAK,GAAGI,KAAK,CAACJ,KAAd;AACD,aANM,MAMA;AACL,mBAAK,IAAIqB,CAAC,GAAGjB,KAAK,CAACH,MAAN,CAAaO,MAAb,GAAsB,CAAnC,EAAsCa,CAAC,IAAI,CAA3C,EAA8CA,CAAC,EAA/C,EAAmD;AACjD,oBACGjB,KAAK,CAACH,MAAN,CAAaoB,CAAb,EAAgBxC,IAAhB,KAAyBqC,MAAM,CAAClC,OAAP,CAAeH,IAAxC,IACCqC,MAAM,CAAClC,OAAP,CAAee,GAAf,KAAuBH,SADzB,IAEAQ,KAAK,CAACH,MAAN,CAAaoB,CAAb,EAAgBtB,GAAhB,KAAwBmB,MAAM,CAAClC,OAAP,CAAee,GAHzC,EAIE;AACAC,kBAAAA,KAAK,GAAGqB,CAAR;AACA;AACD;AACF;AACF;;AAED,gBACErB,KAAK,KAAK,CAAC,CAAX,IACAkB,MAAM,CAAClC,OAAP,CAAee,GADf,IAEAmB,MAAM,CAAClC,OAAP,CAAeH,IAAf,KAAwBe,SAH1B,EAIE;AACA,qBAAO,IAAP;AACD;;AAED,gBAAII,KAAK,KAAK,CAAC,CAAX,IAAgBkB,MAAM,CAAClC,OAAP,CAAeH,IAAf,KAAwBe,SAA5C,EAAuD;AAAA;;AACrD,oBAAMK,MAAM,GAAG,CACb,GAAGG,KAAK,CAACH,MADI,EAEb;AACEF,gBAAAA,GAAG,yBACDmB,MAAM,CAAClC,OAAP,CAAee,GADd,qEACsB,GAAEmB,MAAM,CAAClC,OAAP,CAAeH,IAAK,IAAGJ,MAAM,EAAG,EAF7D;AAGEI,gBAAAA,IAAI,EAAEqC,MAAM,CAAClC,OAAP,CAAeH,IAHvB;AAIE+C,gBAAAA,IAAI,EAAEV,MAAM,CAAClC,OAAP,CAAe4C,IAJvB;AAKE9C,gBAAAA,MAAM,EACJY,cAAc,CAACwB,MAAM,CAAClC,OAAP,CAAeH,IAAhB,CAAd,KAAwCe,SAAxC,GACI,EACE,GAAGF,cAAc,CAACwB,MAAM,CAAClC,OAAP,CAAeH,IAAhB,CADnB;AAEE,qBAAGqC,MAAM,CAAClC,OAAP,CAAeF;AAFpB,iBADJ,GAKIoC,MAAM,CAAClC,OAAP,CAAeF;AAXvB,eAFa,CAAf;AAiBA,qBAAO,EACL,GAAGsB,KADE;AAELH,gBAAAA,MAFK;AAGLD,gBAAAA,KAAK,EAAEC,MAAM,CAACO,MAAP,GAAgB;AAHlB,eAAP;AAKD;;AAED,kBAAMF,KAAK,GAAGF,KAAK,CAACH,MAAN,CAAaD,KAAb,CAAd;AAEA,gBAAIlB,MAAJ;;AAEA,gBAAIoC,MAAM,CAAClC,OAAP,CAAe6C,KAAnB,EAA0B;AACxB/C,cAAAA,MAAM,GACJoC,MAAM,CAAClC,OAAP,CAAeF,MAAf,KAA0Bc,SAA1B,IACAF,cAAc,CAACY,KAAK,CAACzB,IAAP,CAAd,KAA+Be,SAD/B,GAEI,EACE,GAAGF,cAAc,CAACY,KAAK,CAACzB,IAAP,CADnB;AAEE,mBAAGyB,KAAK,CAACxB,MAFX;AAGE,mBAAGoC,MAAM,CAAClC,OAAP,CAAeF;AAHpB,eAFJ,GAOIwB,KAAK,CAACxB,MARZ;AASD,aAVD,MAUO;AACLA,cAAAA,MAAM,GACJY,cAAc,CAACY,KAAK,CAACzB,IAAP,CAAd,KAA+Be,SAA/B,GACI,EACE,GAAGF,cAAc,CAACY,KAAK,CAACzB,IAAP,CADnB;AAEE,mBAAGqC,MAAM,CAAClC,OAAP,CAAeF;AAFpB,eADJ,GAKIoC,MAAM,CAAClC,OAAP,CAAeF,MANrB;AAOD;;AAED,mBAAO,EACL,GAAGsB,KADE;AAELJ,cAAAA,KAFK;AAGLC,cAAAA,MAAM,EAAE,CACN,GAAGG,KAAK,CAACH,MAAN,CAAae,KAAb,CAAmB,CAAnB,EAAsBhB,KAAtB,CADG,EAENlB,MAAM,KAAKwB,KAAK,CAACxB,MAAjB,IACCoC,MAAM,CAAClC,OAAP,CAAe4C,IAAf,IAAuBV,MAAM,CAAClC,OAAP,CAAe4C,IAAf,KAAwBtB,KAAK,CAACsB,IADtD,GAEI,EACE,GAAGtB,KADL;AAEEsB,gBAAAA,IAAI,0BAAEV,MAAM,CAAClC,OAAP,CAAe4C,IAAjB,uEAAyBtB,KAAK,CAACsB,IAFrC;AAGE9C,gBAAAA;AAHF,eAFJ,GAOIsB,KAAK,CAACH,MAAN,CAAaD,KAAb,CATE;AAHH,aAAP;AAeD;;AAED,iBAAO,IAAP;;AAEF,aAAK,SAAL;AACE,cAAII,KAAK,CAACJ,KAAN,GAAc,CAAlB,EAAqB;AACnB,mBAAOT,MAAM,CAAC0B,iBAAP,CACLb,KADK,EAEL;AACErB,cAAAA,IAAI,EAAE,KADR;AAEEC,cAAAA,OAAO,EAAE;AAAEG,gBAAAA,KAAK,EAAE;AAAT,eAFX;AAGEgC,cAAAA,MAAM,EAAED,MAAM,CAACC,MAHjB;AAIEC,cAAAA,MAAM,EAAEF,MAAM,CAACE;AAJjB,aAFK,EAQL9B,OARK,CAAP;AAUD;;AAED,iBAAO,IAAP;;AAEF;AACE,iBAAOZ,UAAU,CAACuC,iBAAX,CAA6Bb,KAA7B,EAAoCc,MAApC,CAAP;AApQJ;AAsQD,KAlYC;;AAoYFY,IAAAA,cAAc,EAAEnD;AApYd,GAHJ;AA0YA,SAAOY,MAAP;AACD","sourcesContent":["import { nanoid } from 'nanoid/non-secure';\n\nimport BaseRouter from './BaseRouter';\nimport type {\n CommonNavigationAction,\n DefaultRouterOptions,\n NavigationState,\n ParamListBase,\n Route,\n Router,\n} from './types';\n\nexport type StackActionType =\n | {\n type: 'REPLACE';\n payload: { name: string; key?: string | undefined; params?: object };\n source?: string;\n target?: string;\n }\n | {\n type: 'PUSH';\n payload: { name: string; params?: object };\n source?: string;\n target?: string;\n }\n | {\n type: 'POP';\n payload: { count: number };\n source?: string;\n target?: string;\n }\n | {\n type: 'POP_TO_TOP';\n source?: string;\n target?: string;\n };\n\nexport type StackRouterOptions = DefaultRouterOptions;\n\nexport type StackNavigationState<ParamList extends ParamListBase> =\n NavigationState<ParamList> & {\n /**\n * Type of the router, in this case, it's stack.\n */\n type: 'stack';\n };\n\nexport type StackActionHelpers<ParamList extends ParamListBase> = {\n /**\n * Replace the current route with a new one.\n *\n * @param name Route name of the new route.\n * @param [params] Params object for the new route.\n */\n replace<RouteName extends keyof ParamList>(\n ...args: undefined extends ParamList[RouteName]\n ? [screen: RouteName] | [screen: RouteName, params: ParamList[RouteName]]\n : [screen: RouteName, params: ParamList[RouteName]]\n ): void;\n\n /**\n * Push a new screen onto the stack.\n *\n * @param name Name of the route for the tab.\n * @param [params] Params object for the route.\n */\n push<RouteName extends keyof ParamList>(\n ...args: undefined extends ParamList[RouteName]\n ? [screen: RouteName] | [screen: RouteName, params: ParamList[RouteName]]\n : [screen: RouteName, params: ParamList[RouteName]]\n ): void;\n\n /**\n * Pop a screen from the stack.\n */\n pop(count?: number): void;\n\n /**\n * Pop to the first route in the stack, dismissing all other screens.\n */\n popToTop(): void;\n};\n\nexport const StackActions = {\n replace(name: string, params?: object): StackActionType {\n return { type: 'REPLACE', payload: { name, params } };\n },\n push(name: string, params?: object): StackActionType {\n return { type: 'PUSH', payload: { name, params } };\n },\n pop(count: number = 1): StackActionType {\n return { type: 'POP', payload: { count } };\n },\n popToTop(): StackActionType {\n return { type: 'POP_TO_TOP' };\n },\n};\n\nexport default function StackRouter(options: StackRouterOptions) {\n const router: Router<\n StackNavigationState<ParamListBase>,\n CommonNavigationAction | StackActionType\n > = {\n ...BaseRouter,\n\n type: 'stack',\n\n getInitialState({ routeNames, routeParamList }) {\n const initialRouteName =\n options.initialRouteName !== undefined &&\n routeNames.includes(options.initialRouteName)\n ? options.initialRouteName\n : routeNames[0];\n\n return {\n stale: false,\n type: 'stack',\n key: `stack-${nanoid()}`,\n index: 0,\n routeNames,\n routes: [\n {\n key: `${initialRouteName}-${nanoid()}`,\n name: initialRouteName,\n params: routeParamList[initialRouteName],\n },\n ],\n };\n },\n\n getRehydratedState(partialState, { routeNames, routeParamList }) {\n let state = partialState;\n\n if (state.stale === false) {\n return state;\n }\n\n const routes = state.routes\n .filter((route) => routeNames.includes(route.name))\n .map(\n (route) =>\n ({\n ...route,\n key: route.key || `${route.name}-${nanoid()}`,\n params:\n routeParamList[route.name] !== undefined\n ? {\n ...routeParamList[route.name],\n ...route.params,\n }\n : route.params,\n } as Route<string>)\n );\n\n if (routes.length === 0) {\n const initialRouteName =\n options.initialRouteName !== undefined\n ? options.initialRouteName\n : routeNames[0];\n\n routes.push({\n key: `${initialRouteName}-${nanoid()}`,\n name: initialRouteName,\n params: routeParamList[initialRouteName],\n });\n }\n\n return {\n stale: false,\n type: 'stack',\n key: `stack-${nanoid()}`,\n index: routes.length - 1,\n routeNames,\n routes,\n };\n },\n\n getStateForRouteNamesChange(\n state,\n { routeNames, routeParamList, routeKeyChanges }\n ) {\n const routes = state.routes.filter(\n (route) =>\n routeNames.includes(route.name) &&\n !routeKeyChanges.includes(route.name)\n );\n\n if (routes.length === 0) {\n const initialRouteName =\n options.initialRouteName !== undefined &&\n routeNames.includes(options.initialRouteName)\n ? options.initialRouteName\n : routeNames[0];\n\n routes.push({\n key: `${initialRouteName}-${nanoid()}`,\n name: initialRouteName,\n params: routeParamList[initialRouteName],\n });\n }\n\n return {\n ...state,\n routeNames,\n routes,\n index: Math.min(state.index, routes.length - 1),\n };\n },\n\n getStateForRouteFocus(state, key) {\n const index = state.routes.findIndex((r) => r.key === key);\n\n if (index === -1 || index === state.index) {\n return state;\n }\n\n return {\n ...state,\n index,\n routes: state.routes.slice(0, index + 1),\n };\n },\n\n getStateForAction(state, action, options) {\n const { routeParamList } = options;\n\n switch (action.type) {\n case 'REPLACE': {\n const index =\n action.target === state.key && action.source\n ? state.routes.findIndex((r) => r.key === action.source)\n : state.index;\n\n if (index === -1) {\n return null;\n }\n\n const { name, key, params } = action.payload;\n\n if (!state.routeNames.includes(name)) {\n return null;\n }\n\n return {\n ...state,\n routes: state.routes.map((route, i) =>\n i === index\n ? {\n key: key !== undefined ? key : `${name}-${nanoid()}`,\n name,\n params:\n routeParamList[name] !== undefined\n ? {\n ...routeParamList[name],\n ...params,\n }\n : params,\n }\n : route\n ),\n };\n }\n\n case 'PUSH':\n if (state.routeNames.includes(action.payload.name)) {\n const getId = options.routeGetIdList[action.payload.name];\n const id = getId?.({ params: action.payload.params });\n\n const route = id\n ? state.routes.find(\n (route) =>\n route.name === action.payload.name &&\n id === getId?.({ params: route.params })\n )\n : undefined;\n\n let routes: Route<string>[];\n\n if (route) {\n routes = state.routes.filter((r) => r.key !== route.key);\n routes.push({\n ...route,\n params:\n routeParamList[action.payload.name] !== undefined\n ? {\n ...routeParamList[action.payload.name],\n ...action.payload.params,\n }\n : action.payload.params,\n });\n } else {\n routes = [\n ...state.routes,\n {\n key: `${action.payload.name}-${nanoid()}`,\n name: action.payload.name,\n params:\n routeParamList[action.payload.name] !== undefined\n ? {\n ...routeParamList[action.payload.name],\n ...action.payload.params,\n }\n : action.payload.params,\n },\n ];\n }\n\n return {\n ...state,\n index: routes.length - 1,\n routes,\n };\n }\n\n return null;\n\n case 'POP': {\n const index =\n action.target === state.key && action.source\n ? state.routes.findIndex((r) => r.key === action.source)\n : state.index;\n\n if (index > 0) {\n const count = Math.max(index - action.payload.count + 1, 1);\n const routes = state.routes\n .slice(0, count)\n .concat(state.routes.slice(index + 1));\n\n return {\n ...state,\n index: routes.length - 1,\n routes,\n };\n }\n\n return null;\n }\n\n case 'POP_TO_TOP':\n return router.getStateForAction(\n state,\n {\n type: 'POP',\n payload: { count: state.routes.length - 1 },\n },\n options\n );\n\n case 'NAVIGATE':\n if (\n action.payload.name !== undefined &&\n !state.routeNames.includes(action.payload.name)\n ) {\n return null;\n }\n\n if (action.payload.key || action.payload.name) {\n // If the route already exists, navigate to that\n let index = -1;\n\n const getId =\n // `getId` and `key` can't be used together\n action.payload.key === undefined &&\n action.payload.name !== undefined\n ? options.routeGetIdList[action.payload.name]\n : undefined;\n const id = getId?.({ params: action.payload.params });\n\n if (id) {\n index = state.routes.findIndex(\n (route) =>\n route.name === action.payload.name &&\n id === getId?.({ params: route.params })\n );\n } else if (\n (state.routes[state.index].name === action.payload.name &&\n action.payload.key === undefined) ||\n state.routes[state.index].key === action.payload.key\n ) {\n index = state.index;\n } else {\n for (let i = state.routes.length - 1; i >= 0; i--) {\n if (\n (state.routes[i].name === action.payload.name &&\n action.payload.key === undefined) ||\n state.routes[i].key === action.payload.key\n ) {\n index = i;\n break;\n }\n }\n }\n\n if (\n index === -1 &&\n action.payload.key &&\n action.payload.name === undefined\n ) {\n return null;\n }\n\n if (index === -1 && action.payload.name !== undefined) {\n const routes = [\n ...state.routes,\n {\n key:\n action.payload.key ?? `${action.payload.name}-${nanoid()}`,\n name: action.payload.name,\n path: action.payload.path,\n params:\n routeParamList[action.payload.name] !== undefined\n ? {\n ...routeParamList[action.payload.name],\n ...action.payload.params,\n }\n : action.payload.params,\n },\n ];\n\n return {\n ...state,\n routes,\n index: routes.length - 1,\n };\n }\n\n const route = state.routes[index];\n\n let params;\n\n if (action.payload.merge) {\n params =\n action.payload.params !== undefined ||\n routeParamList[route.name] !== undefined\n ? {\n ...routeParamList[route.name],\n ...route.params,\n ...action.payload.params,\n }\n : route.params;\n } else {\n params =\n routeParamList[route.name] !== undefined\n ? {\n ...routeParamList[route.name],\n ...action.payload.params,\n }\n : action.payload.params;\n }\n\n return {\n ...state,\n index,\n routes: [\n ...state.routes.slice(0, index),\n params !== route.params ||\n (action.payload.path && action.payload.path !== route.path)\n ? {\n ...route,\n path: action.payload.path ?? route.path,\n params,\n }\n : state.routes[index],\n ],\n };\n }\n\n return null;\n\n case 'GO_BACK':\n if (state.index > 0) {\n return router.getStateForAction(\n state,\n {\n type: 'POP',\n payload: { count: 1 },\n target: action.target,\n source: action.source,\n },\n options\n );\n }\n\n return null;\n\n default:\n return BaseRouter.getStateForAction(state, action);\n }\n },\n\n actionCreators: StackActions,\n };\n\n return router;\n}\n"]}
|
package/lib/module/TabRouter.js
CHANGED
|
@@ -148,9 +148,10 @@ export default function TabRouter({
|
|
|
148
148
|
|
|
149
149
|
getStateForRouteNamesChange(state, {
|
|
150
150
|
routeNames,
|
|
151
|
-
routeParamList
|
|
151
|
+
routeParamList,
|
|
152
|
+
routeKeyChanges
|
|
152
153
|
}) {
|
|
153
|
-
const routes = routeNames.map(name => state.routes.find(r => r.name === name) || {
|
|
154
|
+
const routes = routeNames.map(name => state.routes.find(r => r.name === name && !routeKeyChanges.includes(r.name)) || {
|
|
154
155
|
name,
|
|
155
156
|
key: `${name}-${nanoid()}`,
|
|
156
157
|
params: routeParamList[name]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["TabRouter.tsx"],"names":["nanoid","BaseRouter","TYPE_ROUTE","TabActions","jumpTo","name","params","type","payload","getRouteHistory","routes","index","backBehavior","initialRouteName","history","key","initialRouteIndex","i","unshift","findIndex","route","changeIndex","state","currentKey","filter","it","concat","TabRouter","router","getInitialState","routeNames","routeParamList","undefined","includes","indexOf","map","stale","getRehydratedState","partialState","find","r","Math","min","max","length","getStateForRouteNamesChange","getStateForRouteFocus","getStateForAction","action","merge","path","previousKey","slice","shouldActionChangeFocus","actionCreators"],"mappings":"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","sourcesContent":["import { nanoid } from 'nanoid/non-secure';\n\nimport BaseRouter from './BaseRouter';\nimport type {\n CommonNavigationAction,\n DefaultRouterOptions,\n NavigationState,\n ParamListBase,\n PartialState,\n Route,\n Router,\n} from './types';\n\nexport type TabActionType = {\n type: 'JUMP_TO';\n payload: { name: string; params?: object };\n source?: string;\n target?: string;\n};\n\nexport type BackBehavior =\n | 'initialRoute'\n | 'firstRoute'\n | 'history'\n | 'order'\n | 'none';\n\nexport type TabRouterOptions = DefaultRouterOptions & {\n backBehavior?: BackBehavior;\n};\n\nexport type TabNavigationState<ParamList extends ParamListBase> = Omit<\n NavigationState<ParamList>,\n 'history'\n> & {\n /**\n * Type of the router, in this case, it's tab.\n */\n type: 'tab';\n /**\n * List of previously visited route keys.\n */\n history: { type: 'route'; key: string }[];\n};\n\nexport type TabActionHelpers<ParamList extends ParamListBase> = {\n /**\n * Jump to an existing tab.\n *\n * @param name Name of the route for the tab.\n * @param [params] Params object for the route.\n */\n jumpTo<RouteName extends Extract<keyof ParamList, string>>(\n ...args: undefined extends ParamList[RouteName]\n ? [screen: RouteName] | [screen: RouteName, params: ParamList[RouteName]]\n : [screen: RouteName, params: ParamList[RouteName]]\n ): void;\n};\n\nconst TYPE_ROUTE = 'route' as const;\n\nexport const TabActions = {\n jumpTo(name: string, params?: object): TabActionType {\n return { type: 'JUMP_TO', payload: { name, params } };\n },\n};\n\nconst getRouteHistory = (\n routes: Route<string>[],\n index: number,\n backBehavior: BackBehavior,\n initialRouteName: string | undefined\n) => {\n const history = [{ type: TYPE_ROUTE, key: routes[index].key }];\n let initialRouteIndex;\n\n switch (backBehavior) {\n case 'order':\n for (let i = index; i > 0; i--) {\n history.unshift({ type: TYPE_ROUTE, key: routes[i - 1].key });\n }\n break;\n case 'firstRoute':\n if (index !== 0) {\n history.unshift({\n type: TYPE_ROUTE,\n key: routes[0].key,\n });\n }\n break;\n case 'initialRoute':\n initialRouteIndex = routes.findIndex(\n (route) => route.name === initialRouteName\n );\n initialRouteIndex = initialRouteIndex === -1 ? 0 : initialRouteIndex;\n\n if (index !== initialRouteIndex) {\n history.unshift({\n type: TYPE_ROUTE,\n key: routes[initialRouteIndex].key,\n });\n }\n break;\n case 'history':\n // The history will fill up on navigation\n break;\n }\n\n return history;\n};\n\nconst changeIndex = (\n state: TabNavigationState<ParamListBase>,\n index: number,\n backBehavior: BackBehavior,\n initialRouteName: string | undefined\n) => {\n let history;\n\n if (backBehavior === 'history') {\n const currentKey = state.routes[index].key;\n\n history = state.history\n .filter((it) => (it.type === 'route' ? it.key !== currentKey : false))\n .concat({ type: TYPE_ROUTE, key: currentKey });\n } else {\n history = getRouteHistory(\n state.routes,\n index,\n backBehavior,\n initialRouteName\n );\n }\n\n return {\n ...state,\n index,\n history,\n };\n};\n\nexport default function TabRouter({\n initialRouteName,\n backBehavior = 'firstRoute',\n}: TabRouterOptions) {\n const router: Router<\n TabNavigationState<ParamListBase>,\n TabActionType | CommonNavigationAction\n > = {\n ...BaseRouter,\n\n type: 'tab',\n\n getInitialState({ routeNames, routeParamList }) {\n const index =\n initialRouteName !== undefined && routeNames.includes(initialRouteName)\n ? routeNames.indexOf(initialRouteName)\n : 0;\n\n const routes = routeNames.map((name) => ({\n name,\n key: `${name}-${nanoid()}`,\n params: routeParamList[name],\n }));\n\n const history = getRouteHistory(\n routes,\n index,\n backBehavior,\n initialRouteName\n );\n\n return {\n stale: false,\n type: 'tab',\n key: `tab-${nanoid()}`,\n index,\n routeNames,\n history,\n routes,\n };\n },\n\n getRehydratedState(partialState, { routeNames, routeParamList }) {\n let state = partialState;\n\n if (state.stale === false) {\n return state;\n }\n\n const routes = routeNames.map((name) => {\n const route = (\n state as PartialState<TabNavigationState<ParamListBase>>\n ).routes.find((r) => r.name === name);\n\n return {\n ...route,\n name,\n key:\n route && route.name === name && route.key\n ? route.key\n : `${name}-${nanoid()}`,\n params:\n routeParamList[name] !== undefined\n ? {\n ...routeParamList[name],\n ...(route ? route.params : undefined),\n }\n : route\n ? route.params\n : undefined,\n } as Route<string>;\n });\n\n const index = Math.min(\n Math.max(routeNames.indexOf(state.routes[state?.index ?? 0]?.name), 0),\n routes.length - 1\n );\n\n const history =\n state.history?.filter((it) => routes.find((r) => r.key === it.key)) ??\n [];\n\n return changeIndex(\n {\n stale: false,\n type: 'tab',\n key: `tab-${nanoid()}`,\n index,\n routeNames,\n history,\n routes,\n },\n index,\n backBehavior,\n initialRouteName\n );\n },\n\n getStateForRouteNamesChange(state, { routeNames, routeParamList }) {\n const routes = routeNames.map(\n (name) =>\n state.routes.find((r) => r.name === name) || {\n name,\n key: `${name}-${nanoid()}`,\n params: routeParamList[name],\n }\n );\n\n const index = Math.max(\n 0,\n routeNames.indexOf(state.routes[state.index].name)\n );\n\n let history = state.history.filter(\n // Type will always be 'route' for tabs, but could be different in a router extending this (e.g. drawer)\n (it) => it.type !== 'route' || routes.find((r) => r.key === it.key)\n );\n\n if (!history.length) {\n history = getRouteHistory(\n routes,\n index,\n backBehavior,\n initialRouteName\n );\n }\n\n return {\n ...state,\n history,\n routeNames,\n routes,\n index,\n };\n },\n\n getStateForRouteFocus(state, key) {\n const index = state.routes.findIndex((r) => r.key === key);\n\n if (index === -1 || index === state.index) {\n return state;\n }\n\n return changeIndex(state, index, backBehavior, initialRouteName);\n },\n\n getStateForAction(state, action, { routeParamList }) {\n switch (action.type) {\n case 'JUMP_TO':\n case 'NAVIGATE': {\n let index = -1;\n\n if (action.type === 'NAVIGATE' && action.payload.key) {\n index = state.routes.findIndex(\n (route) => route.key === action.payload.key\n );\n } else {\n index = state.routes.findIndex(\n (route) => route.name === action.payload.name\n );\n }\n\n if (index === -1) {\n return null;\n }\n\n return changeIndex(\n {\n ...state,\n routes: state.routes.map((route, i) => {\n if (i !== index) {\n return route;\n }\n\n let params;\n\n if (action.type === 'NAVIGATE' && action.payload.merge) {\n params =\n action.payload.params !== undefined ||\n routeParamList[route.name] !== undefined\n ? {\n ...routeParamList[route.name],\n ...route.params,\n ...action.payload.params,\n }\n : route.params;\n } else {\n params =\n routeParamList[route.name] !== undefined\n ? {\n ...routeParamList[route.name],\n ...action.payload.params,\n }\n : action.payload.params;\n }\n\n const path =\n action.type === 'NAVIGATE' && action.payload.path != null\n ? action.payload.path\n : route.path;\n\n return params !== route.params || path !== route.path\n ? { ...route, path, params }\n : route;\n }),\n },\n index,\n backBehavior,\n initialRouteName\n );\n }\n\n case 'GO_BACK': {\n if (state.history.length === 1) {\n return null;\n }\n\n const previousKey = state.history[state.history.length - 2].key;\n const index = state.routes.findIndex(\n (route) => route.key === previousKey\n );\n\n if (index === -1) {\n return null;\n }\n\n return {\n ...state,\n history: state.history.slice(0, -1),\n index,\n };\n }\n\n default:\n return BaseRouter.getStateForAction(state, action);\n }\n },\n\n shouldActionChangeFocus(action) {\n return action.type === 'NAVIGATE';\n },\n\n actionCreators: TabActions,\n };\n\n return router;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["TabRouter.tsx"],"names":["nanoid","BaseRouter","TYPE_ROUTE","TabActions","jumpTo","name","params","type","payload","getRouteHistory","routes","index","backBehavior","initialRouteName","history","key","initialRouteIndex","i","unshift","findIndex","route","changeIndex","state","currentKey","filter","it","concat","TabRouter","router","getInitialState","routeNames","routeParamList","undefined","includes","indexOf","map","stale","getRehydratedState","partialState","find","r","Math","min","max","length","getStateForRouteNamesChange","routeKeyChanges","getStateForRouteFocus","getStateForAction","action","merge","path","previousKey","slice","shouldActionChangeFocus","actionCreators"],"mappings":"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","sourcesContent":["import { nanoid } from 'nanoid/non-secure';\n\nimport BaseRouter from './BaseRouter';\nimport type {\n CommonNavigationAction,\n DefaultRouterOptions,\n NavigationState,\n ParamListBase,\n PartialState,\n Route,\n Router,\n} from './types';\n\nexport type TabActionType = {\n type: 'JUMP_TO';\n payload: { name: string; params?: object };\n source?: string;\n target?: string;\n};\n\nexport type BackBehavior =\n | 'initialRoute'\n | 'firstRoute'\n | 'history'\n | 'order'\n | 'none';\n\nexport type TabRouterOptions = DefaultRouterOptions & {\n backBehavior?: BackBehavior;\n};\n\nexport type TabNavigationState<ParamList extends ParamListBase> = Omit<\n NavigationState<ParamList>,\n 'history'\n> & {\n /**\n * Type of the router, in this case, it's tab.\n */\n type: 'tab';\n /**\n * List of previously visited route keys.\n */\n history: { type: 'route'; key: string }[];\n};\n\nexport type TabActionHelpers<ParamList extends ParamListBase> = {\n /**\n * Jump to an existing tab.\n *\n * @param name Name of the route for the tab.\n * @param [params] Params object for the route.\n */\n jumpTo<RouteName extends Extract<keyof ParamList, string>>(\n ...args: undefined extends ParamList[RouteName]\n ? [screen: RouteName] | [screen: RouteName, params: ParamList[RouteName]]\n : [screen: RouteName, params: ParamList[RouteName]]\n ): void;\n};\n\nconst TYPE_ROUTE = 'route' as const;\n\nexport const TabActions = {\n jumpTo(name: string, params?: object): TabActionType {\n return { type: 'JUMP_TO', payload: { name, params } };\n },\n};\n\nconst getRouteHistory = (\n routes: Route<string>[],\n index: number,\n backBehavior: BackBehavior,\n initialRouteName: string | undefined\n) => {\n const history = [{ type: TYPE_ROUTE, key: routes[index].key }];\n let initialRouteIndex;\n\n switch (backBehavior) {\n case 'order':\n for (let i = index; i > 0; i--) {\n history.unshift({ type: TYPE_ROUTE, key: routes[i - 1].key });\n }\n break;\n case 'firstRoute':\n if (index !== 0) {\n history.unshift({\n type: TYPE_ROUTE,\n key: routes[0].key,\n });\n }\n break;\n case 'initialRoute':\n initialRouteIndex = routes.findIndex(\n (route) => route.name === initialRouteName\n );\n initialRouteIndex = initialRouteIndex === -1 ? 0 : initialRouteIndex;\n\n if (index !== initialRouteIndex) {\n history.unshift({\n type: TYPE_ROUTE,\n key: routes[initialRouteIndex].key,\n });\n }\n break;\n case 'history':\n // The history will fill up on navigation\n break;\n }\n\n return history;\n};\n\nconst changeIndex = (\n state: TabNavigationState<ParamListBase>,\n index: number,\n backBehavior: BackBehavior,\n initialRouteName: string | undefined\n) => {\n let history;\n\n if (backBehavior === 'history') {\n const currentKey = state.routes[index].key;\n\n history = state.history\n .filter((it) => (it.type === 'route' ? it.key !== currentKey : false))\n .concat({ type: TYPE_ROUTE, key: currentKey });\n } else {\n history = getRouteHistory(\n state.routes,\n index,\n backBehavior,\n initialRouteName\n );\n }\n\n return {\n ...state,\n index,\n history,\n };\n};\n\nexport default function TabRouter({\n initialRouteName,\n backBehavior = 'firstRoute',\n}: TabRouterOptions) {\n const router: Router<\n TabNavigationState<ParamListBase>,\n TabActionType | CommonNavigationAction\n > = {\n ...BaseRouter,\n\n type: 'tab',\n\n getInitialState({ routeNames, routeParamList }) {\n const index =\n initialRouteName !== undefined && routeNames.includes(initialRouteName)\n ? routeNames.indexOf(initialRouteName)\n : 0;\n\n const routes = routeNames.map((name) => ({\n name,\n key: `${name}-${nanoid()}`,\n params: routeParamList[name],\n }));\n\n const history = getRouteHistory(\n routes,\n index,\n backBehavior,\n initialRouteName\n );\n\n return {\n stale: false,\n type: 'tab',\n key: `tab-${nanoid()}`,\n index,\n routeNames,\n history,\n routes,\n };\n },\n\n getRehydratedState(partialState, { routeNames, routeParamList }) {\n let state = partialState;\n\n if (state.stale === false) {\n return state;\n }\n\n const routes = routeNames.map((name) => {\n const route = (\n state as PartialState<TabNavigationState<ParamListBase>>\n ).routes.find((r) => r.name === name);\n\n return {\n ...route,\n name,\n key:\n route && route.name === name && route.key\n ? route.key\n : `${name}-${nanoid()}`,\n params:\n routeParamList[name] !== undefined\n ? {\n ...routeParamList[name],\n ...(route ? route.params : undefined),\n }\n : route\n ? route.params\n : undefined,\n } as Route<string>;\n });\n\n const index = Math.min(\n Math.max(routeNames.indexOf(state.routes[state?.index ?? 0]?.name), 0),\n routes.length - 1\n );\n\n const history =\n state.history?.filter((it) => routes.find((r) => r.key === it.key)) ??\n [];\n\n return changeIndex(\n {\n stale: false,\n type: 'tab',\n key: `tab-${nanoid()}`,\n index,\n routeNames,\n history,\n routes,\n },\n index,\n backBehavior,\n initialRouteName\n );\n },\n\n getStateForRouteNamesChange(\n state,\n { routeNames, routeParamList, routeKeyChanges }\n ) {\n const routes = routeNames.map(\n (name) =>\n state.routes.find(\n (r) => r.name === name && !routeKeyChanges.includes(r.name)\n ) || {\n name,\n key: `${name}-${nanoid()}`,\n params: routeParamList[name],\n }\n );\n\n const index = Math.max(\n 0,\n routeNames.indexOf(state.routes[state.index].name)\n );\n\n let history = state.history.filter(\n // Type will always be 'route' for tabs, but could be different in a router extending this (e.g. drawer)\n (it) => it.type !== 'route' || routes.find((r) => r.key === it.key)\n );\n\n if (!history.length) {\n history = getRouteHistory(\n routes,\n index,\n backBehavior,\n initialRouteName\n );\n }\n\n return {\n ...state,\n history,\n routeNames,\n routes,\n index,\n };\n },\n\n getStateForRouteFocus(state, key) {\n const index = state.routes.findIndex((r) => r.key === key);\n\n if (index === -1 || index === state.index) {\n return state;\n }\n\n return changeIndex(state, index, backBehavior, initialRouteName);\n },\n\n getStateForAction(state, action, { routeParamList }) {\n switch (action.type) {\n case 'JUMP_TO':\n case 'NAVIGATE': {\n let index = -1;\n\n if (action.type === 'NAVIGATE' && action.payload.key) {\n index = state.routes.findIndex(\n (route) => route.key === action.payload.key\n );\n } else {\n index = state.routes.findIndex(\n (route) => route.name === action.payload.name\n );\n }\n\n if (index === -1) {\n return null;\n }\n\n return changeIndex(\n {\n ...state,\n routes: state.routes.map((route, i) => {\n if (i !== index) {\n return route;\n }\n\n let params;\n\n if (action.type === 'NAVIGATE' && action.payload.merge) {\n params =\n action.payload.params !== undefined ||\n routeParamList[route.name] !== undefined\n ? {\n ...routeParamList[route.name],\n ...route.params,\n ...action.payload.params,\n }\n : route.params;\n } else {\n params =\n routeParamList[route.name] !== undefined\n ? {\n ...routeParamList[route.name],\n ...action.payload.params,\n }\n : action.payload.params;\n }\n\n const path =\n action.type === 'NAVIGATE' && action.payload.path != null\n ? action.payload.path\n : route.path;\n\n return params !== route.params || path !== route.path\n ? { ...route, path, params }\n : route;\n }),\n },\n index,\n backBehavior,\n initialRouteName\n );\n }\n\n case 'GO_BACK': {\n if (state.history.length === 1) {\n return null;\n }\n\n const previousKey = state.history[state.history.length - 2].key;\n const index = state.routes.findIndex(\n (route) => route.key === previousKey\n );\n\n if (index === -1) {\n return null;\n }\n\n return {\n ...state,\n history: state.history.slice(0, -1),\n index,\n };\n }\n\n default:\n return BaseRouter.getStateForAction(state, action);\n }\n },\n\n shouldActionChangeFocus(action) {\n return action.type === 'NAVIGATE';\n },\n\n actionCreators: TabActions,\n };\n\n return router;\n}\n"]}
|
|
@@ -138,7 +138,13 @@ export declare type Router<State extends NavigationState, Action extends Navigat
|
|
|
138
138
|
* @param options.routeNames New list of route names.
|
|
139
139
|
* @param options.routeParamsList Object containing params for each route.
|
|
140
140
|
*/
|
|
141
|
-
getStateForRouteNamesChange(state: State, options: RouterConfigOptions
|
|
141
|
+
getStateForRouteNamesChange(state: State, options: RouterConfigOptions & {
|
|
142
|
+
/**
|
|
143
|
+
* List of routes whose key has changed even if they still have the same name.
|
|
144
|
+
* This allows to remove screens declaratively.
|
|
145
|
+
*/
|
|
146
|
+
routeKeyChanges: string[];
|
|
147
|
+
}): State;
|
|
142
148
|
/**
|
|
143
149
|
* Take the current state and key of a route, and return a new state with the route focused
|
|
144
150
|
*
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@react-navigation/routers",
|
|
3
3
|
"description": "Routers to help build custom navigators",
|
|
4
|
-
"version": "6.0
|
|
4
|
+
"version": "6.1.0",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react",
|
|
7
7
|
"react-native",
|
|
@@ -57,5 +57,5 @@
|
|
|
57
57
|
]
|
|
58
58
|
]
|
|
59
59
|
},
|
|
60
|
-
"gitHead": "
|
|
60
|
+
"gitHead": "e77a5ab9d342a03cd8e20b54938700dfd4e23f42"
|
|
61
61
|
}
|
package/src/StackRouter.tsx
CHANGED
|
@@ -175,9 +175,14 @@ export default function StackRouter(options: StackRouterOptions) {
|
|
|
175
175
|
};
|
|
176
176
|
},
|
|
177
177
|
|
|
178
|
-
getStateForRouteNamesChange(
|
|
179
|
-
|
|
180
|
-
|
|
178
|
+
getStateForRouteNamesChange(
|
|
179
|
+
state,
|
|
180
|
+
{ routeNames, routeParamList, routeKeyChanges }
|
|
181
|
+
) {
|
|
182
|
+
const routes = state.routes.filter(
|
|
183
|
+
(route) =>
|
|
184
|
+
routeNames.includes(route.name) &&
|
|
185
|
+
!routeKeyChanges.includes(route.name)
|
|
181
186
|
);
|
|
182
187
|
|
|
183
188
|
if (routes.length === 0) {
|
package/src/TabRouter.tsx
CHANGED
|
@@ -237,10 +237,15 @@ export default function TabRouter({
|
|
|
237
237
|
);
|
|
238
238
|
},
|
|
239
239
|
|
|
240
|
-
getStateForRouteNamesChange(
|
|
240
|
+
getStateForRouteNamesChange(
|
|
241
|
+
state,
|
|
242
|
+
{ routeNames, routeParamList, routeKeyChanges }
|
|
243
|
+
) {
|
|
241
244
|
const routes = routeNames.map(
|
|
242
245
|
(name) =>
|
|
243
|
-
state.routes.find(
|
|
246
|
+
state.routes.find(
|
|
247
|
+
(r) => r.name === name && !routeKeyChanges.includes(r.name)
|
|
248
|
+
) || {
|
|
244
249
|
name,
|
|
245
250
|
key: `${name}-${nanoid()}`,
|
|
246
251
|
params: routeParamList[name],
|
package/src/types.tsx
CHANGED
|
@@ -182,7 +182,13 @@ export type Router<
|
|
|
182
182
|
*/
|
|
183
183
|
getStateForRouteNamesChange(
|
|
184
184
|
state: State,
|
|
185
|
-
options: RouterConfigOptions
|
|
185
|
+
options: RouterConfigOptions & {
|
|
186
|
+
/**
|
|
187
|
+
* List of routes whose key has changed even if they still have the same name.
|
|
188
|
+
* This allows to remove screens declaratively.
|
|
189
|
+
*/
|
|
190
|
+
routeKeyChanges: string[];
|
|
191
|
+
}
|
|
186
192
|
): State;
|
|
187
193
|
|
|
188
194
|
/**
|