@react-navigation/routers 7.6.0 → 7.6.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/module/BaseRouter.js +50 -45
- package/lib/module/BaseRouter.js.map +1 -1
- package/lib/module/DrawerRouter.js +15 -14
- package/lib/module/DrawerRouter.js.map +1 -1
- package/lib/module/SwitchRouter.js +352 -0
- package/lib/module/SwitchRouter.js.map +1 -0
- package/lib/module/TabRouter.js +14 -300
- package/lib/module/TabRouter.js.map +1 -1
- package/lib/typescript/src/BaseRouter.d.ts +3 -1
- package/lib/typescript/src/BaseRouter.d.ts.map +1 -1
- package/lib/typescript/src/DrawerRouter.d.ts +1 -0
- package/lib/typescript/src/DrawerRouter.d.ts.map +1 -1
- package/lib/typescript/src/SwitchRouter.d.ts +78 -0
- package/lib/typescript/src/SwitchRouter.d.ts.map +1 -0
- package/lib/typescript/src/TabRouter.d.ts +4 -24
- package/lib/typescript/src/TabRouter.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/BaseRouter.tsx +74 -59
- package/src/DrawerRouter.tsx +21 -19
- package/src/SwitchRouter.tsx +580 -0
- package/src/TabRouter.tsx +24 -473
package/lib/module/BaseRouter.js
CHANGED
|
@@ -1,56 +1,61 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import { nanoid } from 'nanoid/non-secure';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
{
|
|
14
|
-
|
|
15
|
-
|
|
4
|
+
function getStateForAction(state, action) {
|
|
5
|
+
switch (action.type) {
|
|
6
|
+
case 'SET_PARAMS':
|
|
7
|
+
case 'REPLACE_PARAMS':
|
|
8
|
+
{
|
|
9
|
+
const index = action.source ? state.routes.findIndex(r => r.key === action.source) : state.index;
|
|
10
|
+
if (index === -1) {
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
return {
|
|
14
|
+
...state,
|
|
15
|
+
routes: state.routes.map((r, i) => i === index ? {
|
|
16
|
+
...r,
|
|
17
|
+
params: action.type === 'REPLACE_PARAMS' ? action.payload.params : {
|
|
18
|
+
...r.params,
|
|
19
|
+
...action.payload.params
|
|
20
|
+
}
|
|
21
|
+
} : r)
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
case 'RESET':
|
|
25
|
+
{
|
|
26
|
+
const nextState = action.payload;
|
|
27
|
+
if (nextState == null) {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
const routeNamesSet = new Set(state.routeNames);
|
|
31
|
+
if (nextState.routes.length === 0 || nextState.routes.some(route => !routeNamesSet.has(route.name))) {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
if (nextState.stale === false) {
|
|
35
|
+
if (state.routeNames.length !== nextState.routeNames.length || nextState.routeNames.some(name => !routeNamesSet.has(name)) || !Number.isInteger(nextState.index) || nextState.index < 0 || nextState.index >= nextState.routes.length) {
|
|
16
36
|
return null;
|
|
17
37
|
}
|
|
18
38
|
return {
|
|
19
|
-
...
|
|
20
|
-
routes:
|
|
21
|
-
...
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
...action.payload.params
|
|
25
|
-
}
|
|
26
|
-
} : r)
|
|
39
|
+
...nextState,
|
|
40
|
+
routes: nextState.routes.map(route => 'key' in route && route.key ? route : {
|
|
41
|
+
...route,
|
|
42
|
+
key: `${route.name}-${nanoid()}`
|
|
43
|
+
})
|
|
27
44
|
};
|
|
28
45
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
routes: nextState.routes.map(route => route.key ? route : {
|
|
43
|
-
...route,
|
|
44
|
-
key: `${route.name}-${nanoid()}`
|
|
45
|
-
})
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
return nextState;
|
|
49
|
-
}
|
|
50
|
-
default:
|
|
51
|
-
return null;
|
|
52
|
-
}
|
|
53
|
-
},
|
|
46
|
+
return nextState;
|
|
47
|
+
}
|
|
48
|
+
default:
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Base router object that can be used when writing custom routers.
|
|
55
|
+
* This provides few helper methods to handle common actions such as `RESET`.
|
|
56
|
+
*/
|
|
57
|
+
export const BaseRouter = {
|
|
58
|
+
getStateForAction,
|
|
54
59
|
shouldActionChangeFocus(action) {
|
|
55
60
|
return action.type === 'NAVIGATE' || action.type === 'NAVIGATE_DEPRECATED';
|
|
56
61
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["nanoid","
|
|
1
|
+
{"version":3,"names":["nanoid","getStateForAction","state","action","type","index","source","routes","findIndex","r","key","map","i","params","payload","nextState","routeNamesSet","Set","routeNames","length","some","route","has","name","stale","Number","isInteger","BaseRouter","shouldActionChangeFocus"],"sourceRoot":"../../src","sources":["BaseRouter.tsx"],"mappings":";;AAAA,SAASA,MAAM,QAAQ,mBAAmB;AAY1C,SAASC,iBAAiBA,CACxBC,KAAsB,EACtBC,MAA8B,EAC9B;EACA,QAAQA,MAAM,CAACC,IAAI;IACjB,KAAK,YAAY;IACjB,KAAK,gBAAgB;MAAE;QACrB,MAAMC,KAAK,GAAGF,MAAM,CAACG,MAAM,GACvBJ,KAAK,CAACK,MAAM,CAACC,SAAS,CAAEC,CAAC,IAAKA,CAAC,CAACC,GAAG,KAAKP,MAAM,CAACG,MAAM,CAAC,GACtDJ,KAAK,CAACG,KAAK;QAEf,IAAIA,KAAK,KAAK,CAAC,CAAC,EAAE;UAChB,OAAO,IAAI;QACb;QAEA,OAAO;UACL,GAAGH,KAAK;UACRK,MAAM,EAAEL,KAAK,CAACK,MAAM,CAACI,GAAG,CAAC,CAACF,CAAC,EAAEG,CAAC,KAC5BA,CAAC,KAAKP,KAAK,GACP;YACE,GAAGI,CAAC;YACJI,MAAM,EACJV,MAAM,CAACC,IAAI,KAAK,gBAAgB,GAC5BD,MAAM,CAACW,OAAO,CAACD,MAAM,GACrB;cAAE,GAAGJ,CAAC,CAACI,MAAM;cAAE,GAAGV,MAAM,CAACW,OAAO,CAACD;YAAO;UAChD,CAAC,GACDJ,CACN;QACF,CAAC;MACH;IAEA,KAAK,OAAO;MAAE;QACZ,MAAMM,SAAS,GAAGZ,MAAM,CAACW,OAAO;QAEhC,IAAIC,SAAS,IAAI,IAAI,EAAE;UACrB,OAAO,IAAI;QACb;QAEA,MAAMC,aAAa,GAAG,IAAIC,GAAG,CAACf,KAAK,CAACgB,UAAU,CAAC;QAE/C,IACEH,SAAS,CAACR,MAAM,CAACY,MAAM,KAAK,CAAC,IAC7BJ,SAAS,CAACR,MAAM,CAACa,IAAI,CAClBC,KAAuB,IAAK,CAACL,aAAa,CAACM,GAAG,CAACD,KAAK,CAACE,IAAI,CAC5D,CAAC,EACD;UACA,OAAO,IAAI;QACb;QAEA,IAAIR,SAAS,CAACS,KAAK,KAAK,KAAK,EAAE;UAC7B,IACEtB,KAAK,CAACgB,UAAU,CAACC,MAAM,KAAKJ,SAAS,CAACG,UAAU,CAACC,MAAM,IACvDJ,SAAS,CAACG,UAAU,CAACE,IAAI,CAAEG,IAAI,IAAK,CAACP,aAAa,CAACM,GAAG,CAACC,IAAI,CAAC,CAAC,IAC7D,CAACE,MAAM,CAACC,SAAS,CAACX,SAAS,CAACV,KAAK,CAAC,IAClCU,SAAS,CAACV,KAAK,GAAG,CAAC,IACnBU,SAAS,CAACV,KAAK,IAAIU,SAAS,CAACR,MAAM,CAACY,MAAM,EAC1C;YACA,OAAO,IAAI;UACb;UAEA,OAAO;YACL,GAAGJ,SAAS;YACZR,MAAM,EAAEQ,SAAS,CAACR,MAAM,CAACI,GAAG,CAAEU,KAAK,IACjC,KAAK,IAAIA,KAAK,IAAIA,KAAK,CAACX,GAAG,GACvBW,KAAK,GACL;cAAE,GAAGA,KAAK;cAAEX,GAAG,EAAE,GAAGW,KAAK,CAACE,IAAI,IAAIvB,MAAM,CAAC,CAAC;YAAG,CACnD;UACF,CAAC;QACH;QAEA,OAAOe,SAAS;MAClB;IAEA;MACE,OAAO,IAAI;EACf;AACF;;AAEA;AACA;AACA;AACA;AACA,OAAO,MAAMY,UAAU,GAAG;EACxB1B,iBAAiB;EAEjB2B,uBAAuBA,CAACzB,MAA8B,EAAE;IACtD,OAAOA,MAAM,CAACC,IAAI,KAAK,UAAU,IAAID,MAAM,CAACC,IAAI,KAAK,qBAAqB;EAC5E;AACF,CAAC","ignoreList":[]}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import { nanoid } from 'nanoid/non-secure';
|
|
4
|
-
import {
|
|
4
|
+
import { SwitchRouter } from "./SwitchRouter.js";
|
|
5
|
+
import { TabActions } from "./TabRouter.js";
|
|
5
6
|
export const DrawerActions = {
|
|
6
7
|
...TabActions,
|
|
7
8
|
openDrawer() {
|
|
@@ -24,7 +25,7 @@ export function DrawerRouter({
|
|
|
24
25
|
defaultStatus = 'closed',
|
|
25
26
|
...rest
|
|
26
27
|
}) {
|
|
27
|
-
const router =
|
|
28
|
+
const router = SwitchRouter(rest);
|
|
28
29
|
const isDrawerInHistory = state => Boolean(state.history?.some(it => it.type === 'drawer'));
|
|
29
30
|
const addDrawerToHistory = state => {
|
|
30
31
|
if (isDrawerInHistory(state)) {
|
|
@@ -88,22 +89,22 @@ export function DrawerRouter({
|
|
|
88
89
|
if (partialState.stale === false) {
|
|
89
90
|
return partialState;
|
|
90
91
|
}
|
|
91
|
-
let state =
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
92
|
+
let state = {
|
|
93
|
+
...router.getRehydratedState(partialState, {
|
|
94
|
+
routeNames,
|
|
95
|
+
routeParamList,
|
|
96
|
+
routeGetIdList
|
|
97
|
+
}),
|
|
98
|
+
default: defaultStatus,
|
|
99
|
+
type: 'drawer',
|
|
100
|
+
key: `drawer-${nanoid()}`
|
|
101
|
+
};
|
|
96
102
|
if (isDrawerInHistory(partialState)) {
|
|
97
103
|
// Re-sync the drawer entry in history to correct it if it was wrong
|
|
98
104
|
state = removeDrawerFromHistory(state);
|
|
99
105
|
state = addDrawerToHistory(state);
|
|
100
106
|
}
|
|
101
|
-
return
|
|
102
|
-
...state,
|
|
103
|
-
default: defaultStatus,
|
|
104
|
-
type: 'drawer',
|
|
105
|
-
key: `drawer-${nanoid()}`
|
|
106
|
-
};
|
|
107
|
+
return state;
|
|
107
108
|
},
|
|
108
109
|
getStateForRouteFocus(state, key) {
|
|
109
110
|
const result = router.getStateForRouteFocus(state, key);
|
|
@@ -125,7 +126,7 @@ export function DrawerRouter({
|
|
|
125
126
|
case 'NAVIGATE_DEPRECATED':
|
|
126
127
|
{
|
|
127
128
|
const result = router.getStateForAction(state, action, options);
|
|
128
|
-
if (result != null && result.index !== state.index) {
|
|
129
|
+
if (result != null && result.stale === false && result.index !== state.index) {
|
|
129
130
|
return closeDrawer(result);
|
|
130
131
|
}
|
|
131
132
|
return result;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["nanoid","
|
|
1
|
+
{"version":3,"names":["nanoid","SwitchRouter","TabActions","DrawerActions","openDrawer","type","closeDrawer","toggleDrawer","DrawerRouter","defaultStatus","rest","router","isDrawerInHistory","state","Boolean","history","some","it","addDrawerToHistory","status","removeDrawerFromHistory","filter","getInitialState","routeNames","routeParamList","routeGetIdList","default","stale","key","getRehydratedState","partialState","getStateForRouteFocus","result","getStateForAction","action","options","index","actionCreators"],"sourceRoot":"../../src","sources":["DrawerRouter.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,352 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { nanoid } from 'nanoid/non-secure';
|
|
4
|
+
import { BaseRouter } from "./BaseRouter.js";
|
|
5
|
+
import { createParamsFromAction } from "./createParamsFromAction.js";
|
|
6
|
+
const TYPE_ROUTE = 'route';
|
|
7
|
+
const getRouteHistory = (routes, index, backBehavior, initialRouteName) => {
|
|
8
|
+
const history = [{
|
|
9
|
+
type: TYPE_ROUTE,
|
|
10
|
+
key: routes[index].key,
|
|
11
|
+
params: backBehavior === 'fullHistory' ? routes[index].params : undefined
|
|
12
|
+
}];
|
|
13
|
+
let initialRouteIndex;
|
|
14
|
+
switch (backBehavior) {
|
|
15
|
+
case 'order':
|
|
16
|
+
for (let i = index; i > 0; i--) {
|
|
17
|
+
history.unshift({
|
|
18
|
+
type: TYPE_ROUTE,
|
|
19
|
+
key: routes[i - 1].key
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
break;
|
|
23
|
+
case 'firstRoute':
|
|
24
|
+
if (index !== 0) {
|
|
25
|
+
history.unshift({
|
|
26
|
+
type: TYPE_ROUTE,
|
|
27
|
+
key: routes[0].key
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
break;
|
|
31
|
+
case 'initialRoute':
|
|
32
|
+
initialRouteIndex = routes.findIndex(route => route.name === initialRouteName);
|
|
33
|
+
initialRouteIndex = initialRouteIndex === -1 ? 0 : initialRouteIndex;
|
|
34
|
+
if (index !== initialRouteIndex) {
|
|
35
|
+
history.unshift({
|
|
36
|
+
type: TYPE_ROUTE,
|
|
37
|
+
key: routes[initialRouteIndex].key
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
break;
|
|
41
|
+
case 'history':
|
|
42
|
+
case 'fullHistory':
|
|
43
|
+
// The history will fill up on navigation
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
return history;
|
|
47
|
+
};
|
|
48
|
+
const changeIndex = (state, index, backBehavior, initialRouteName) => {
|
|
49
|
+
let history = state.history;
|
|
50
|
+
if (backBehavior === 'history' || backBehavior === 'fullHistory') {
|
|
51
|
+
const currentRoute = state.routes[index];
|
|
52
|
+
if (backBehavior === 'history') {
|
|
53
|
+
// Remove the existing key from the history to de-duplicate it
|
|
54
|
+
history = history.filter(it => it.type === 'route' ? it.key !== currentRoute.key : true);
|
|
55
|
+
} else if (backBehavior === 'fullHistory') {
|
|
56
|
+
const lastHistoryRouteItemIndex = history.findLastIndex(item => item.type === 'route');
|
|
57
|
+
const lastHistoryRouteItem = history[lastHistoryRouteItemIndex];
|
|
58
|
+
if (lastHistoryRouteItem?.type === 'route' && currentRoute.key === lastHistoryRouteItem.key) {
|
|
59
|
+
// For full-history, only remove if it matches the last route
|
|
60
|
+
// Useful for drawer, if current route was in history, then drawer state changed
|
|
61
|
+
// Then we only need to move the route to the front
|
|
62
|
+
history = [...history.slice(0, lastHistoryRouteItemIndex), ...history.slice(lastHistoryRouteItemIndex + 1)];
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
history = history.concat({
|
|
66
|
+
type: TYPE_ROUTE,
|
|
67
|
+
key: currentRoute.key,
|
|
68
|
+
params: backBehavior === 'fullHistory' ? currentRoute.params : undefined
|
|
69
|
+
});
|
|
70
|
+
} else {
|
|
71
|
+
// Preserve non-route entries (e.g. drawer status) when rebuilding the history
|
|
72
|
+
history = [...state.history.filter(it => it.type !== 'route'), ...getRouteHistory(state.routes, index, backBehavior, initialRouteName)];
|
|
73
|
+
}
|
|
74
|
+
return {
|
|
75
|
+
index,
|
|
76
|
+
history
|
|
77
|
+
};
|
|
78
|
+
};
|
|
79
|
+
export function SwitchRouter({
|
|
80
|
+
initialRouteName,
|
|
81
|
+
backBehavior = 'firstRoute'
|
|
82
|
+
}) {
|
|
83
|
+
const router = {
|
|
84
|
+
...BaseRouter,
|
|
85
|
+
getInitialState({
|
|
86
|
+
routeNames,
|
|
87
|
+
routeParamList
|
|
88
|
+
}) {
|
|
89
|
+
const index = initialRouteName !== undefined && routeNames.includes(initialRouteName) ? routeNames.indexOf(initialRouteName) : 0;
|
|
90
|
+
const routes = routeNames.map(name => ({
|
|
91
|
+
name,
|
|
92
|
+
key: `${name}-${nanoid()}`,
|
|
93
|
+
params: routeParamList[name]
|
|
94
|
+
}));
|
|
95
|
+
return {
|
|
96
|
+
stale: false,
|
|
97
|
+
key: nanoid(),
|
|
98
|
+
index,
|
|
99
|
+
routeNames,
|
|
100
|
+
history: getRouteHistory(routes, index, backBehavior, initialRouteName),
|
|
101
|
+
routes,
|
|
102
|
+
preloadedRouteKeys: []
|
|
103
|
+
};
|
|
104
|
+
},
|
|
105
|
+
getRehydratedState(state, {
|
|
106
|
+
routeNames,
|
|
107
|
+
routeParamList
|
|
108
|
+
}) {
|
|
109
|
+
const routes = routeNames.map(name => {
|
|
110
|
+
const route = state.routes.find(r => r.name === name);
|
|
111
|
+
return {
|
|
112
|
+
...route,
|
|
113
|
+
name,
|
|
114
|
+
key: route && route.name === name && route.key ? route.key : `${name}-${nanoid()}`,
|
|
115
|
+
params: routeParamList[name] !== undefined ? {
|
|
116
|
+
...routeParamList[name],
|
|
117
|
+
...(route ? route.params : undefined)
|
|
118
|
+
} : route ? route.params : undefined
|
|
119
|
+
};
|
|
120
|
+
});
|
|
121
|
+
const index = Math.min(Math.max(routeNames.indexOf(state.routes[state.index ?? 0]?.name), 0), routes.length - 1);
|
|
122
|
+
const routeKeys = routes.map(route => route.key);
|
|
123
|
+
const history = [];
|
|
124
|
+
for (const item of state.history ?? []) {
|
|
125
|
+
if (item.type === 'route' && routeKeys.includes(item.key)) {
|
|
126
|
+
history.push(item);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
const stateData = {
|
|
130
|
+
stale: false,
|
|
131
|
+
key: nanoid(),
|
|
132
|
+
index,
|
|
133
|
+
routeNames,
|
|
134
|
+
history,
|
|
135
|
+
routes,
|
|
136
|
+
preloadedRouteKeys: state.preloadedRouteKeys?.filter(key => routeKeys.includes(key)) ?? []
|
|
137
|
+
};
|
|
138
|
+
return {
|
|
139
|
+
...stateData,
|
|
140
|
+
...changeIndex(stateData, index, backBehavior, initialRouteName)
|
|
141
|
+
};
|
|
142
|
+
},
|
|
143
|
+
getStateForRouteNamesChange(state, {
|
|
144
|
+
routeNames,
|
|
145
|
+
routeParamList,
|
|
146
|
+
routeKeyChanges
|
|
147
|
+
}) {
|
|
148
|
+
const routes = routeNames.map(name => state.routes.find(r => r.name === name && !routeKeyChanges.includes(r.name)) ?? {
|
|
149
|
+
name,
|
|
150
|
+
key: `${name}-${nanoid()}`,
|
|
151
|
+
params: routeParamList[name]
|
|
152
|
+
});
|
|
153
|
+
const routeKeys = new Set(routes.map(route => route.key));
|
|
154
|
+
const currentRoute = state.routes[state.index];
|
|
155
|
+
if (currentRoute == null) {
|
|
156
|
+
throw new Error(`Couldn't find a route at index ${state.index}.`);
|
|
157
|
+
}
|
|
158
|
+
const history = state.history.filter(
|
|
159
|
+
// Type will always be 'route' for tabs, but could be different in a router extending this (e.g. drawer)
|
|
160
|
+
item => item.type !== 'route' || routeKeys.has(item.key));
|
|
161
|
+
let index = routeNames.indexOf(currentRoute.name);
|
|
162
|
+
if (index === -1) {
|
|
163
|
+
// The focused route was removed, so focus the most recently visited surviving route
|
|
164
|
+
const previousRouteItem = history.findLast(item => item.type === 'route');
|
|
165
|
+
index = Math.max(0, routes.findIndex(route => route.key === previousRouteItem?.key));
|
|
166
|
+
}
|
|
167
|
+
return {
|
|
168
|
+
...state,
|
|
169
|
+
routeNames,
|
|
170
|
+
routes,
|
|
171
|
+
...changeIndex({
|
|
172
|
+
routes,
|
|
173
|
+
history
|
|
174
|
+
}, index, backBehavior, initialRouteName),
|
|
175
|
+
preloadedRouteKeys: state.preloadedRouteKeys.filter(key => routeKeys.has(key))
|
|
176
|
+
};
|
|
177
|
+
},
|
|
178
|
+
getStateForRouteFocus(state, key) {
|
|
179
|
+
const index = state.routes.findIndex(r => r.key === key);
|
|
180
|
+
if (index === -1 || index === state.index) {
|
|
181
|
+
return state;
|
|
182
|
+
}
|
|
183
|
+
return {
|
|
184
|
+
...state,
|
|
185
|
+
...changeIndex(state, index, backBehavior, initialRouteName)
|
|
186
|
+
};
|
|
187
|
+
},
|
|
188
|
+
getStateForAction(state, action, {
|
|
189
|
+
routeParamList,
|
|
190
|
+
routeGetIdList
|
|
191
|
+
}) {
|
|
192
|
+
switch (action.type) {
|
|
193
|
+
case 'JUMP_TO':
|
|
194
|
+
case 'NAVIGATE':
|
|
195
|
+
case 'NAVIGATE_DEPRECATED':
|
|
196
|
+
{
|
|
197
|
+
const index = state.routes.findIndex(route => route.name === action.payload.name);
|
|
198
|
+
if (index === -1) {
|
|
199
|
+
return null;
|
|
200
|
+
}
|
|
201
|
+
const route = state.routes[index];
|
|
202
|
+
if (route == null) {
|
|
203
|
+
throw new Error(`Couldn't find a route at index ${index}.`);
|
|
204
|
+
}
|
|
205
|
+
const getId = routeGetIdList[route.name];
|
|
206
|
+
const currentId = getId?.({
|
|
207
|
+
params: route.params
|
|
208
|
+
});
|
|
209
|
+
const nextId = getId?.({
|
|
210
|
+
params: action.payload.params
|
|
211
|
+
});
|
|
212
|
+
const key = currentId === nextId ? route.key : `${route.name}-${nanoid()}`;
|
|
213
|
+
let params;
|
|
214
|
+
if ((action.type === 'NAVIGATE' || action.type === 'NAVIGATE_DEPRECATED') && action.payload.merge && currentId === nextId) {
|
|
215
|
+
params = action.payload.params !== undefined || routeParamList[route.name] !== undefined ? {
|
|
216
|
+
...routeParamList[route.name],
|
|
217
|
+
...route.params,
|
|
218
|
+
...action.payload.params
|
|
219
|
+
} : route.params;
|
|
220
|
+
} else {
|
|
221
|
+
params = createParamsFromAction({
|
|
222
|
+
action,
|
|
223
|
+
routeParamList
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
const path = action.type === 'NAVIGATE' && action.payload.path != null ? action.payload.path : route.path;
|
|
227
|
+
const nextRoute = params !== route.params || path !== route.path || key !== route.key ? {
|
|
228
|
+
...route,
|
|
229
|
+
key,
|
|
230
|
+
path,
|
|
231
|
+
params
|
|
232
|
+
} : route;
|
|
233
|
+
const routes = state.routes.map((item, routeIndex) => routeIndex === index ? nextRoute : item);
|
|
234
|
+
const updatedState = {
|
|
235
|
+
...state,
|
|
236
|
+
routes,
|
|
237
|
+
history: key === route.key ? state.history : state.history.filter(it => it.type !== 'route' || it.key !== route.key)
|
|
238
|
+
};
|
|
239
|
+
return {
|
|
240
|
+
...updatedState,
|
|
241
|
+
...changeIndex(updatedState, index, backBehavior, initialRouteName),
|
|
242
|
+
preloadedRouteKeys: updatedState.preloadedRouteKeys.filter(key => key !== route.key && key !== nextRoute.key)
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
case 'SET_PARAMS':
|
|
246
|
+
case 'REPLACE_PARAMS':
|
|
247
|
+
{
|
|
248
|
+
const nextState = BaseRouter.getStateForAction(state, action);
|
|
249
|
+
if (nextState !== null) {
|
|
250
|
+
const index = nextState.index;
|
|
251
|
+
if (index != null) {
|
|
252
|
+
const focusedRoute = nextState.routes[index];
|
|
253
|
+
const historyItemIndex = state.history.findLastIndex(item => item.type === 'route' && item.key === focusedRoute.key);
|
|
254
|
+
let updatedHistory = state.history;
|
|
255
|
+
if (historyItemIndex !== -1) {
|
|
256
|
+
updatedHistory = [...state.history];
|
|
257
|
+
const item = updatedHistory[historyItemIndex];
|
|
258
|
+
if (item.type === 'route') {
|
|
259
|
+
updatedHistory[historyItemIndex] = {
|
|
260
|
+
...item,
|
|
261
|
+
params: focusedRoute.params
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
return {
|
|
266
|
+
...nextState,
|
|
267
|
+
history: updatedHistory
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
return nextState;
|
|
272
|
+
}
|
|
273
|
+
case 'GO_BACK':
|
|
274
|
+
{
|
|
275
|
+
if (state.history.length === 1) {
|
|
276
|
+
return null;
|
|
277
|
+
}
|
|
278
|
+
const previousHistoryItem = state.history[state.history.length - 2];
|
|
279
|
+
if (previousHistoryItem?.type !== 'route') {
|
|
280
|
+
return null;
|
|
281
|
+
}
|
|
282
|
+
const previousKey = previousHistoryItem.key;
|
|
283
|
+
const index = state.routes.findLastIndex(route => route.key === previousKey);
|
|
284
|
+
if (index === -1) {
|
|
285
|
+
return null;
|
|
286
|
+
}
|
|
287
|
+
let routes = state.routes;
|
|
288
|
+
if (backBehavior === 'fullHistory' && routes[index].params !== previousHistoryItem.params) {
|
|
289
|
+
routes = [...state.routes];
|
|
290
|
+
routes[index] = {
|
|
291
|
+
...routes[index],
|
|
292
|
+
params: previousHistoryItem.params
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
return {
|
|
296
|
+
...state,
|
|
297
|
+
routes,
|
|
298
|
+
preloadedRouteKeys: state.preloadedRouteKeys.filter(key => key !== state.routes[index].key),
|
|
299
|
+
history: state.history.slice(0, -1),
|
|
300
|
+
index
|
|
301
|
+
};
|
|
302
|
+
}
|
|
303
|
+
case 'PRELOAD':
|
|
304
|
+
{
|
|
305
|
+
const routeIndex = state.routes.findIndex(route => route.name === action.payload.name);
|
|
306
|
+
if (routeIndex === -1) {
|
|
307
|
+
return null;
|
|
308
|
+
}
|
|
309
|
+
const route = state.routes[routeIndex];
|
|
310
|
+
const getId = routeGetIdList[route.name];
|
|
311
|
+
const currentId = getId?.({
|
|
312
|
+
params: route.params
|
|
313
|
+
});
|
|
314
|
+
const nextId = getId?.({
|
|
315
|
+
params: action.payload.params
|
|
316
|
+
});
|
|
317
|
+
const key = currentId === nextId ? route.key : `${route.name}-${nanoid()}`;
|
|
318
|
+
const params = createParamsFromAction({
|
|
319
|
+
action,
|
|
320
|
+
routeParamList
|
|
321
|
+
});
|
|
322
|
+
const newRoute = params !== route.params ? {
|
|
323
|
+
...route,
|
|
324
|
+
key,
|
|
325
|
+
params
|
|
326
|
+
} : route;
|
|
327
|
+
let history = state.history;
|
|
328
|
+
if (key !== route.key) {
|
|
329
|
+
history = history.filter(record => record.type !== 'route' || record.key !== route.key);
|
|
330
|
+
if (routeIndex === state.index) {
|
|
331
|
+
history = history.concat({
|
|
332
|
+
type: TYPE_ROUTE,
|
|
333
|
+
key: newRoute.key,
|
|
334
|
+
params: backBehavior === 'fullHistory' ? newRoute.params : undefined
|
|
335
|
+
});
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
return {
|
|
339
|
+
...state,
|
|
340
|
+
preloadedRouteKeys: state.preloadedRouteKeys.filter(key => key !== route.key).concat(newRoute.key),
|
|
341
|
+
routes: state.routes.map((route, index) => index === routeIndex ? newRoute : route),
|
|
342
|
+
history
|
|
343
|
+
};
|
|
344
|
+
}
|
|
345
|
+
default:
|
|
346
|
+
return BaseRouter.getStateForAction(state, action);
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
};
|
|
350
|
+
return router;
|
|
351
|
+
}
|
|
352
|
+
//# sourceMappingURL=SwitchRouter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["nanoid","BaseRouter","createParamsFromAction","TYPE_ROUTE","getRouteHistory","routes","index","backBehavior","initialRouteName","history","type","key","params","undefined","initialRouteIndex","i","unshift","findIndex","route","name","changeIndex","state","currentRoute","filter","it","lastHistoryRouteItemIndex","findLastIndex","item","lastHistoryRouteItem","slice","concat","SwitchRouter","router","getInitialState","routeNames","routeParamList","includes","indexOf","map","stale","preloadedRouteKeys","getRehydratedState","find","r","Math","min","max","length","routeKeys","push","stateData","getStateForRouteNamesChange","routeKeyChanges","Set","Error","has","previousRouteItem","findLast","getStateForRouteFocus","getStateForAction","action","routeGetIdList","payload","getId","currentId","nextId","merge","path","nextRoute","routeIndex","updatedState","nextState","focusedRoute","historyItemIndex","updatedHistory","previousHistoryItem","previousKey","newRoute","record"],"sourceRoot":"../../src","sources":["SwitchRouter.tsx"],"mappings":"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","ignoreList":[]}
|