@react-navigation/routers 6.0.1 → 6.1.1
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/CommonActions.js +5 -5
- package/lib/commonjs/CommonActions.js.map +1 -1
- package/lib/commonjs/DrawerRouter.js +82 -61
- package/lib/commonjs/DrawerRouter.js.map +1 -1
- package/lib/commonjs/StackRouter.js +20 -15
- package/lib/commonjs/StackRouter.js.map +1 -1
- package/lib/commonjs/TabRouter.js +28 -21
- package/lib/commonjs/TabRouter.js.map +1 -1
- package/lib/commonjs/index.js +1 -1
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/CommonActions.js +5 -5
- package/lib/module/CommonActions.js.map +1 -1
- package/lib/module/DrawerRouter.js +80 -60
- package/lib/module/DrawerRouter.js.map +1 -1
- package/lib/module/StackRouter.js +19 -14
- package/lib/module/StackRouter.js.map +1 -1
- package/lib/module/TabRouter.js +27 -20
- package/lib/module/TabRouter.js.map +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/src/DrawerRouter.d.ts +7 -2
- package/lib/typescript/src/StackRouter.d.ts +2 -2
- package/lib/typescript/src/TabRouter.d.ts +1 -1
- package/lib/typescript/src/index.d.ts +1 -1
- package/lib/typescript/src/types.d.ts +7 -1
- package/package.json +3 -3
- package/src/DrawerRouter.tsx +89 -57
- package/src/StackRouter.tsx +8 -3
- package/src/TabRouter.tsx +7 -2
- package/src/index.tsx +1 -0
- package/src/types.tsx +7 -1
package/lib/module/TabRouter.js
CHANGED
|
@@ -82,17 +82,19 @@ const changeIndex = (state, index, backBehavior, initialRouteName) => {
|
|
|
82
82
|
};
|
|
83
83
|
};
|
|
84
84
|
|
|
85
|
-
export default function TabRouter({
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
85
|
+
export default function TabRouter(_ref) {
|
|
86
|
+
let {
|
|
87
|
+
initialRouteName,
|
|
88
|
+
backBehavior = 'firstRoute'
|
|
89
|
+
} = _ref;
|
|
89
90
|
const router = { ...BaseRouter,
|
|
90
91
|
type: 'tab',
|
|
91
92
|
|
|
92
|
-
getInitialState({
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
93
|
+
getInitialState(_ref2) {
|
|
94
|
+
let {
|
|
95
|
+
routeNames,
|
|
96
|
+
routeParamList
|
|
97
|
+
} = _ref2;
|
|
96
98
|
const index = initialRouteName !== undefined && routeNames.includes(initialRouteName) ? routeNames.indexOf(initialRouteName) : 0;
|
|
97
99
|
const routes = routeNames.map(name => ({
|
|
98
100
|
name,
|
|
@@ -111,12 +113,13 @@ export default function TabRouter({
|
|
|
111
113
|
};
|
|
112
114
|
},
|
|
113
115
|
|
|
114
|
-
getRehydratedState(partialState, {
|
|
115
|
-
routeNames,
|
|
116
|
-
routeParamList
|
|
117
|
-
}) {
|
|
116
|
+
getRehydratedState(partialState, _ref3) {
|
|
118
117
|
var _state$routes, _state$index, _state$history$filter, _state$history;
|
|
119
118
|
|
|
119
|
+
let {
|
|
120
|
+
routeNames,
|
|
121
|
+
routeParamList
|
|
122
|
+
} = _ref3;
|
|
120
123
|
let state = partialState;
|
|
121
124
|
|
|
122
125
|
if (state.stale === false) {
|
|
@@ -146,11 +149,13 @@ export default function TabRouter({
|
|
|
146
149
|
}, index, backBehavior, initialRouteName);
|
|
147
150
|
},
|
|
148
151
|
|
|
149
|
-
getStateForRouteNamesChange(state, {
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
152
|
+
getStateForRouteNamesChange(state, _ref4) {
|
|
153
|
+
let {
|
|
154
|
+
routeNames,
|
|
155
|
+
routeParamList,
|
|
156
|
+
routeKeyChanges
|
|
157
|
+
} = _ref4;
|
|
158
|
+
const routes = routeNames.map(name => state.routes.find(r => r.name === name && !routeKeyChanges.includes(r.name)) || {
|
|
154
159
|
name,
|
|
155
160
|
key: `${name}-${nanoid()}`,
|
|
156
161
|
params: routeParamList[name]
|
|
@@ -181,9 +186,11 @@ export default function TabRouter({
|
|
|
181
186
|
return changeIndex(state, index, backBehavior, initialRouteName);
|
|
182
187
|
},
|
|
183
188
|
|
|
184
|
-
getStateForAction(state, action, {
|
|
185
|
-
|
|
186
|
-
|
|
189
|
+
getStateForAction(state, action, _ref5) {
|
|
190
|
+
let {
|
|
191
|
+
routeParamList
|
|
192
|
+
} = _ref5;
|
|
193
|
+
|
|
187
194
|
switch (action.type) {
|
|
188
195
|
case 'JUMP_TO':
|
|
189
196
|
case 'NAVIGATE':
|
|
@@ -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"]}
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.tsx"],"names":["CommonActions","default","BaseRouter","DrawerActions","DrawerRouter","StackActions","StackRouter","TabActions","TabRouter"],"mappings":"AAAA,OAAO,KAAKA,aAAZ,MAA+B,iBAA/B;AAEA,SAASA,aAAT;AAEA,SAASC,OAAO,IAAIC,UAApB,QAAsC,cAAtC;
|
|
1
|
+
{"version":3,"sources":["index.tsx"],"names":["CommonActions","default","BaseRouter","DrawerActions","DrawerRouter","StackActions","StackRouter","TabActions","TabRouter"],"mappings":"AAAA,OAAO,KAAKA,aAAZ,MAA+B,iBAA/B;AAEA,SAASA,aAAT;AAEA,SAASC,OAAO,IAAIC,UAApB,QAAsC,cAAtC;AAQA,SAASC,aAAT,EAAwBF,OAAO,IAAIG,YAAnC,QAAuD,gBAAvD;AAOA,SAASC,YAAT,EAAuBJ,OAAO,IAAIK,WAAlC,QAAqD,eAArD;AAOA,SAASC,UAAT,EAAqBN,OAAO,IAAIO,SAAhC,QAAiD,aAAjD;AACA,cAAc,SAAd","sourcesContent":["import * as CommonActions from './CommonActions';\n\nexport { CommonActions };\n\nexport { default as BaseRouter } from './BaseRouter';\nexport type {\n DrawerActionHelpers,\n DrawerActionType,\n DrawerNavigationState,\n DrawerRouterOptions,\n DrawerStatus,\n} from './DrawerRouter';\nexport { DrawerActions, default as DrawerRouter } from './DrawerRouter';\nexport type {\n StackActionHelpers,\n StackActionType,\n StackNavigationState,\n StackRouterOptions,\n} from './StackRouter';\nexport { StackActions, default as StackRouter } from './StackRouter';\nexport type {\n TabActionHelpers,\n TabActionType,\n TabNavigationState,\n TabRouterOptions,\n} from './TabRouter';\nexport { TabActions, default as TabRouter } from './TabRouter';\nexport * from './types';\n"]}
|
|
@@ -1,18 +1,23 @@
|
|
|
1
1
|
import { TabActionHelpers, TabActionType, TabNavigationState, TabRouterOptions } from './TabRouter';
|
|
2
2
|
import type { CommonNavigationAction, ParamListBase, Router } from './types';
|
|
3
|
+
export declare type DrawerStatus = 'open' | 'closed';
|
|
3
4
|
export declare type DrawerActionType = TabActionType | {
|
|
4
5
|
type: 'OPEN_DRAWER' | 'CLOSE_DRAWER' | 'TOGGLE_DRAWER';
|
|
5
6
|
source?: string;
|
|
6
7
|
target?: string;
|
|
7
8
|
};
|
|
8
9
|
export declare type DrawerRouterOptions = TabRouterOptions & {
|
|
9
|
-
defaultStatus?:
|
|
10
|
+
defaultStatus?: DrawerStatus;
|
|
10
11
|
};
|
|
11
12
|
export declare type DrawerNavigationState<ParamList extends ParamListBase> = Omit<TabNavigationState<ParamList>, 'type' | 'history'> & {
|
|
12
13
|
/**
|
|
13
14
|
* Type of the router, in this case, it's drawer.
|
|
14
15
|
*/
|
|
15
16
|
type: 'drawer';
|
|
17
|
+
/**
|
|
18
|
+
* Default status of the drawer.
|
|
19
|
+
*/
|
|
20
|
+
default: DrawerStatus;
|
|
16
21
|
/**
|
|
17
22
|
* List of previously visited route keys and drawer open status.
|
|
18
23
|
*/
|
|
@@ -21,7 +26,7 @@ export declare type DrawerNavigationState<ParamList extends ParamListBase> = Omi
|
|
|
21
26
|
key: string;
|
|
22
27
|
} | {
|
|
23
28
|
type: 'drawer';
|
|
24
|
-
status:
|
|
29
|
+
status: DrawerStatus;
|
|
25
30
|
})[];
|
|
26
31
|
};
|
|
27
32
|
export declare type DrawerActionHelpers<ParamList extends ParamListBase> = TabActionHelpers<ParamList> & {
|
|
@@ -60,8 +60,8 @@ export declare type StackActionHelpers<ParamList extends ParamListBase> = {
|
|
|
60
60
|
popToTop(): void;
|
|
61
61
|
};
|
|
62
62
|
export declare const StackActions: {
|
|
63
|
-
replace(name: string, params?: object
|
|
64
|
-
push(name: string, params?: object
|
|
63
|
+
replace(name: string, params?: object): StackActionType;
|
|
64
|
+
push(name: string, params?: object): StackActionType;
|
|
65
65
|
pop(count?: number): StackActionType;
|
|
66
66
|
popToTop(): StackActionType;
|
|
67
67
|
};
|
|
@@ -35,6 +35,6 @@ export declare type TabActionHelpers<ParamList extends ParamListBase> = {
|
|
|
35
35
|
jumpTo<RouteName extends Extract<keyof ParamList, string>>(...args: undefined extends ParamList[RouteName] ? [screen: RouteName] | [screen: RouteName, params: ParamList[RouteName]] : [screen: RouteName, params: ParamList[RouteName]]): void;
|
|
36
36
|
};
|
|
37
37
|
export declare const TabActions: {
|
|
38
|
-
jumpTo(name: string, params?: object
|
|
38
|
+
jumpTo(name: string, params?: object): TabActionType;
|
|
39
39
|
};
|
|
40
40
|
export default function TabRouter({ initialRouteName, backBehavior, }: TabRouterOptions): Router<TabNavigationState<ParamListBase>, import("./CommonActions").Action | TabActionType>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as CommonActions from './CommonActions';
|
|
2
2
|
export { CommonActions };
|
|
3
3
|
export { default as BaseRouter } from './BaseRouter';
|
|
4
|
-
export type { DrawerActionHelpers, DrawerActionType, DrawerNavigationState, DrawerRouterOptions, } from './DrawerRouter';
|
|
4
|
+
export type { DrawerActionHelpers, DrawerActionType, DrawerNavigationState, DrawerRouterOptions, DrawerStatus, } from './DrawerRouter';
|
|
5
5
|
export { DrawerActions, default as DrawerRouter } from './DrawerRouter';
|
|
6
6
|
export type { StackActionHelpers, StackActionType, StackNavigationState, StackRouterOptions, } from './StackRouter';
|
|
7
7
|
export { StackActions, default as StackRouter } from './StackRouter';
|
|
@@ -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.
|
|
4
|
+
"version": "6.1.1",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react",
|
|
7
7
|
"react-native",
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
"devDependencies": {
|
|
42
42
|
"del-cli": "^3.0.1",
|
|
43
43
|
"react-native-builder-bob": "^0.18.1",
|
|
44
|
-
"typescript": "^4.
|
|
44
|
+
"typescript": "^4.7.4"
|
|
45
45
|
},
|
|
46
46
|
"react-native-builder-bob": {
|
|
47
47
|
"source": "src",
|
|
@@ -57,5 +57,5 @@
|
|
|
57
57
|
]
|
|
58
58
|
]
|
|
59
59
|
},
|
|
60
|
-
"gitHead": "
|
|
60
|
+
"gitHead": "f20e54feaa1f8e81d9e72042d18c046af537298e"
|
|
61
61
|
}
|
package/src/DrawerRouter.tsx
CHANGED
|
@@ -13,6 +13,7 @@ import type {
|
|
|
13
13
|
PartialState,
|
|
14
14
|
Router,
|
|
15
15
|
} from './types';
|
|
16
|
+
export type DrawerStatus = 'open' | 'closed';
|
|
16
17
|
|
|
17
18
|
export type DrawerActionType =
|
|
18
19
|
| TabActionType
|
|
@@ -23,7 +24,7 @@ export type DrawerActionType =
|
|
|
23
24
|
};
|
|
24
25
|
|
|
25
26
|
export type DrawerRouterOptions = TabRouterOptions & {
|
|
26
|
-
defaultStatus?:
|
|
27
|
+
defaultStatus?: DrawerStatus;
|
|
27
28
|
};
|
|
28
29
|
|
|
29
30
|
export type DrawerNavigationState<ParamList extends ParamListBase> = Omit<
|
|
@@ -34,12 +35,16 @@ export type DrawerNavigationState<ParamList extends ParamListBase> = Omit<
|
|
|
34
35
|
* Type of the router, in this case, it's drawer.
|
|
35
36
|
*/
|
|
36
37
|
type: 'drawer';
|
|
38
|
+
/**
|
|
39
|
+
* Default status of the drawer.
|
|
40
|
+
*/
|
|
41
|
+
default: DrawerStatus;
|
|
37
42
|
/**
|
|
38
43
|
* List of previously visited route keys and drawer open status.
|
|
39
44
|
*/
|
|
40
45
|
history: (
|
|
41
46
|
| { type: 'route'; key: string }
|
|
42
|
-
| { type: 'drawer'; status:
|
|
47
|
+
| { type: 'drawer'; status: DrawerStatus }
|
|
43
48
|
)[];
|
|
44
49
|
};
|
|
45
50
|
|
|
@@ -74,40 +79,8 @@ export const DrawerActions = {
|
|
|
74
79
|
},
|
|
75
80
|
};
|
|
76
81
|
|
|
77
|
-
const isDrawerOpen = (
|
|
78
|
-
state:
|
|
79
|
-
| DrawerNavigationState<ParamListBase>
|
|
80
|
-
| PartialState<DrawerNavigationState<ParamListBase>>
|
|
81
|
-
) => Boolean(state.history?.some((it) => it.type === 'drawer'));
|
|
82
|
-
|
|
83
|
-
const openDrawer = (
|
|
84
|
-
state: DrawerNavigationState<ParamListBase>
|
|
85
|
-
): DrawerNavigationState<ParamListBase> => {
|
|
86
|
-
if (isDrawerOpen(state)) {
|
|
87
|
-
return state;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
return {
|
|
91
|
-
...state,
|
|
92
|
-
history: [...state.history, { type: 'drawer', status: 'open' }],
|
|
93
|
-
};
|
|
94
|
-
};
|
|
95
|
-
|
|
96
|
-
const closeDrawer = (
|
|
97
|
-
state: DrawerNavigationState<ParamListBase>
|
|
98
|
-
): DrawerNavigationState<ParamListBase> => {
|
|
99
|
-
if (!isDrawerOpen(state)) {
|
|
100
|
-
return state;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
return {
|
|
104
|
-
...state,
|
|
105
|
-
history: state.history.filter((it) => it.type !== 'drawer'),
|
|
106
|
-
};
|
|
107
|
-
};
|
|
108
|
-
|
|
109
82
|
export default function DrawerRouter({
|
|
110
|
-
defaultStatus,
|
|
83
|
+
defaultStatus = 'closed',
|
|
111
84
|
...rest
|
|
112
85
|
}: DrawerRouterOptions): Router<
|
|
113
86
|
DrawerNavigationState<ParamListBase>,
|
|
@@ -118,24 +91,79 @@ export default function DrawerRouter({
|
|
|
118
91
|
TabActionType | CommonNavigationAction
|
|
119
92
|
>;
|
|
120
93
|
|
|
94
|
+
const isDrawerInHistory = (
|
|
95
|
+
state:
|
|
96
|
+
| DrawerNavigationState<ParamListBase>
|
|
97
|
+
| PartialState<DrawerNavigationState<ParamListBase>>
|
|
98
|
+
) => Boolean(state.history?.some((it) => it.type === 'drawer'));
|
|
99
|
+
|
|
100
|
+
const addDrawerToHistory = (
|
|
101
|
+
state: DrawerNavigationState<ParamListBase>
|
|
102
|
+
): DrawerNavigationState<ParamListBase> => {
|
|
103
|
+
if (isDrawerInHistory(state)) {
|
|
104
|
+
return state;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
return {
|
|
108
|
+
...state,
|
|
109
|
+
history: [
|
|
110
|
+
...state.history,
|
|
111
|
+
{
|
|
112
|
+
type: 'drawer',
|
|
113
|
+
status: defaultStatus === 'open' ? 'closed' : 'open',
|
|
114
|
+
},
|
|
115
|
+
],
|
|
116
|
+
};
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
const removeDrawerFromHistory = (
|
|
120
|
+
state: DrawerNavigationState<ParamListBase>
|
|
121
|
+
): DrawerNavigationState<ParamListBase> => {
|
|
122
|
+
if (!isDrawerInHistory(state)) {
|
|
123
|
+
return state;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
return {
|
|
127
|
+
...state,
|
|
128
|
+
history: state.history.filter((it) => it.type !== 'drawer'),
|
|
129
|
+
};
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
const openDrawer = (
|
|
133
|
+
state: DrawerNavigationState<ParamListBase>
|
|
134
|
+
): DrawerNavigationState<ParamListBase> => {
|
|
135
|
+
if (defaultStatus === 'open') {
|
|
136
|
+
return removeDrawerFromHistory(state);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
return addDrawerToHistory(state);
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
const closeDrawer = (
|
|
143
|
+
state: DrawerNavigationState<ParamListBase>
|
|
144
|
+
): DrawerNavigationState<ParamListBase> => {
|
|
145
|
+
if (defaultStatus === 'open') {
|
|
146
|
+
return addDrawerToHistory(state);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
return removeDrawerFromHistory(state);
|
|
150
|
+
};
|
|
151
|
+
|
|
121
152
|
return {
|
|
122
153
|
...router,
|
|
123
154
|
|
|
124
155
|
type: 'drawer',
|
|
125
156
|
|
|
126
157
|
getInitialState({ routeNames, routeParamList, routeGetIdList }) {
|
|
127
|
-
|
|
158
|
+
const state = router.getInitialState({
|
|
128
159
|
routeNames,
|
|
129
160
|
routeParamList,
|
|
130
161
|
routeGetIdList,
|
|
131
162
|
});
|
|
132
163
|
|
|
133
|
-
if (defaultStatus === 'open') {
|
|
134
|
-
state = openDrawer(state);
|
|
135
|
-
}
|
|
136
|
-
|
|
137
164
|
return {
|
|
138
165
|
...state,
|
|
166
|
+
default: defaultStatus,
|
|
139
167
|
stale: false,
|
|
140
168
|
type: 'drawer',
|
|
141
169
|
key: `drawer-${nanoid()}`,
|
|
@@ -156,12 +184,15 @@ export default function DrawerRouter({
|
|
|
156
184
|
routeGetIdList,
|
|
157
185
|
});
|
|
158
186
|
|
|
159
|
-
if (
|
|
160
|
-
|
|
187
|
+
if (isDrawerInHistory(partialState)) {
|
|
188
|
+
// Re-sync the drawer entry in history to correct it if it was wrong
|
|
189
|
+
state = removeDrawerFromHistory(state);
|
|
190
|
+
state = addDrawerToHistory(state);
|
|
161
191
|
}
|
|
162
192
|
|
|
163
193
|
return {
|
|
164
194
|
...state,
|
|
195
|
+
default: defaultStatus,
|
|
165
196
|
type: 'drawer',
|
|
166
197
|
key: `drawer-${nanoid()}`,
|
|
167
198
|
};
|
|
@@ -170,10 +201,6 @@ export default function DrawerRouter({
|
|
|
170
201
|
getStateForRouteFocus(state, key) {
|
|
171
202
|
const result = router.getStateForRouteFocus(state, key);
|
|
172
203
|
|
|
173
|
-
if (defaultStatus === 'open') {
|
|
174
|
-
return openDrawer(result);
|
|
175
|
-
}
|
|
176
|
-
|
|
177
204
|
return closeDrawer(result);
|
|
178
205
|
},
|
|
179
206
|
|
|
@@ -186,21 +213,26 @@ export default function DrawerRouter({
|
|
|
186
213
|
return closeDrawer(state);
|
|
187
214
|
|
|
188
215
|
case 'TOGGLE_DRAWER':
|
|
189
|
-
if (
|
|
190
|
-
return
|
|
216
|
+
if (isDrawerInHistory(state)) {
|
|
217
|
+
return removeDrawerFromHistory(state);
|
|
191
218
|
}
|
|
192
219
|
|
|
193
|
-
return
|
|
220
|
+
return addDrawerToHistory(state);
|
|
221
|
+
|
|
222
|
+
case 'JUMP_TO':
|
|
223
|
+
case 'NAVIGATE': {
|
|
224
|
+
const result = router.getStateForAction(state, action, options);
|
|
225
|
+
|
|
226
|
+
if (result != null && result.index !== state.index) {
|
|
227
|
+
return closeDrawer(result as DrawerNavigationState<ParamListBase>);
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
return result;
|
|
231
|
+
}
|
|
194
232
|
|
|
195
233
|
case 'GO_BACK':
|
|
196
|
-
if (
|
|
197
|
-
|
|
198
|
-
return openDrawer(state);
|
|
199
|
-
}
|
|
200
|
-
} else {
|
|
201
|
-
if (isDrawerOpen(state)) {
|
|
202
|
-
return closeDrawer(state);
|
|
203
|
-
}
|
|
234
|
+
if (isDrawerInHistory(state)) {
|
|
235
|
+
return removeDrawerFromHistory(state);
|
|
204
236
|
}
|
|
205
237
|
|
|
206
238
|
return router.getStateForAction(state, action, options);
|
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/index.tsx
CHANGED
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
|
/**
|