{"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","previousKey","slice","shouldActionChangeFocus","actionCreators"],"mappings":"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","sourcesContent":["import { nanoid } from 'nanoid/non-secure';\nimport BaseRouter from './BaseRouter';\nimport type {\n NavigationState,\n PartialState,\n CommonNavigationAction,\n Router,\n DefaultRouterOptions,\n Route,\n ParamListBase,\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 = Omit<\n NavigationState,\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 = {\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>(\n ...args: undefined extends ParamList[RouteName]\n ? [RouteName] | [RouteName, ParamList[RouteName]]\n : [RouteName, 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[],\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,\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 = 'history',\n}: TabRouterOptions) {\n const router: Router<\n TabNavigationState,\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 = (state as PartialState<\n TabNavigationState\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;\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:\n action.payload.params !== undefined\n ? state.routes.map((route, i) => {\n if (i !== index) {\n return route;\n }\n\n let params;\n\n if (\n action.type === 'NAVIGATE' &&\n action.payload.merge === false\n ) {\n params =\n routeParamList[route.name] !== undefined\n ? {\n ...routeParamList[route.name],\n ...action.payload.params,\n }\n : action.payload.params;\n } else {\n params = action.payload.params\n ? {\n ...route.params,\n ...action.payload.params,\n }\n : route.params;\n }\n\n return params !== route.params\n ? { ...route, params }\n : route;\n })\n : state.routes,\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"]}