@ionic/react-router 7.5.3-dev.11698858201.14165f23 → 7.5.3-dev.11699994454.1cbf1283
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/dist/index.js +910 -4
- package/dist/index.js.map +1 -7
- package/dist/types/ReactRouter/IonReactHashRouter.d.ts +23 -0
- package/dist/types/ReactRouter/IonReactMemoryRouter.d.ts +23 -0
- package/dist/types/ReactRouter/IonReactRouter.d.ts +23 -0
- package/dist/types/ReactRouter/IonRouteInner.d.ts +5 -0
- package/dist/types/ReactRouter/IonRouter.d.ts +44 -0
- package/dist/types/ReactRouter/ReactRouterViewStack.d.ts +12 -0
- package/dist/types/ReactRouter/StackManager.d.ts +30 -0
- package/dist/types/ReactRouter/clonePageElement.d.ts +1 -0
- package/dist/types/index.d.ts +3 -0
- package/package.json +9 -5
- package/dist/ReactRouter/IonReactHashRouter.js +0 -37
- package/dist/ReactRouter/IonReactHashRouter.js.map +0 -7
- package/dist/ReactRouter/IonReactMemoryRouter.js +0 -35
- package/dist/ReactRouter/IonReactMemoryRouter.js.map +0 -7
- package/dist/ReactRouter/IonReactRouter.js +0 -37
- package/dist/ReactRouter/IonReactRouter.js.map +0 -7
- package/dist/ReactRouter/IonRouteInner.js +0 -27
- package/dist/ReactRouter/IonRouteInner.js.map +0 -7
- package/dist/ReactRouter/IonRouter.js +0 -250
- package/dist/ReactRouter/IonRouter.js.map +0 -7
- package/dist/ReactRouter/ReactRouterViewStack.js +0 -160
- package/dist/ReactRouter/ReactRouterViewStack.js.map +0 -7
- package/dist/ReactRouter/StackManager.js +0 -270
- package/dist/ReactRouter/StackManager.js.map +0 -7
- package/dist/ReactRouter/clonePageElement.js +0 -21
- package/dist/ReactRouter/clonePageElement.js.map +0 -7
|
@@ -1,250 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
import { LocationHistory, NavManager, RouteManagerContext, generateId, getConfig } from "@ionic/react";
|
|
3
|
-
import React from "react";
|
|
4
|
-
import { withRouter } from "react-router-dom";
|
|
5
|
-
import { IonRouteInner } from "./IonRouteInner";
|
|
6
|
-
import { ReactRouterViewStack } from "./ReactRouterViewStack";
|
|
7
|
-
import StackManager from "./StackManager";
|
|
8
|
-
class IonRouterInner extends React.PureComponent {
|
|
9
|
-
constructor(props) {
|
|
10
|
-
super(props);
|
|
11
|
-
this.exitViewFromOtherOutletHandlers = [];
|
|
12
|
-
this.locationHistory = new LocationHistory();
|
|
13
|
-
this.viewStack = new ReactRouterViewStack();
|
|
14
|
-
this.routeMangerContextState = {
|
|
15
|
-
canGoBack: () => this.locationHistory.canGoBack(),
|
|
16
|
-
clearOutlet: this.viewStack.clear,
|
|
17
|
-
findViewItemByPathname: this.viewStack.findViewItemByPathname,
|
|
18
|
-
getChildrenToRender: this.viewStack.getChildrenToRender,
|
|
19
|
-
goBack: () => this.handleNavigateBack(),
|
|
20
|
-
createViewItem: this.viewStack.createViewItem,
|
|
21
|
-
findViewItemByRouteInfo: this.viewStack.findViewItemByRouteInfo,
|
|
22
|
-
findLeavingViewItemByRouteInfo: this.viewStack.findLeavingViewItemByRouteInfo,
|
|
23
|
-
addViewItem: this.viewStack.add,
|
|
24
|
-
unMountViewItem: this.viewStack.remove
|
|
25
|
-
};
|
|
26
|
-
const routeInfo = {
|
|
27
|
-
id: generateId("routeInfo"),
|
|
28
|
-
pathname: this.props.location.pathname,
|
|
29
|
-
search: this.props.location.search
|
|
30
|
-
};
|
|
31
|
-
this.locationHistory.add(routeInfo);
|
|
32
|
-
this.handleChangeTab = this.handleChangeTab.bind(this);
|
|
33
|
-
this.handleResetTab = this.handleResetTab.bind(this);
|
|
34
|
-
this.handleNativeBack = this.handleNativeBack.bind(this);
|
|
35
|
-
this.handleNavigate = this.handleNavigate.bind(this);
|
|
36
|
-
this.handleNavigateBack = this.handleNavigateBack.bind(this);
|
|
37
|
-
this.props.registerHistoryListener(this.handleHistoryChange.bind(this));
|
|
38
|
-
this.handleSetCurrentTab = this.handleSetCurrentTab.bind(this);
|
|
39
|
-
this.state = {
|
|
40
|
-
routeInfo
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
handleChangeTab(tab, path, routeOptions) {
|
|
44
|
-
if (!path) {
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
const routeInfo = this.locationHistory.getCurrentRouteInfoForTab(tab);
|
|
48
|
-
const [pathname, search] = path.split("?");
|
|
49
|
-
if (routeInfo) {
|
|
50
|
-
this.incomingRouteParams = { ...routeInfo, routeAction: "push", routeDirection: "none" };
|
|
51
|
-
if (routeInfo.pathname === pathname) {
|
|
52
|
-
this.incomingRouteParams.routeOptions = routeOptions;
|
|
53
|
-
this.props.history.push(routeInfo.pathname + (routeInfo.search || ""));
|
|
54
|
-
} else {
|
|
55
|
-
this.incomingRouteParams.pathname = pathname;
|
|
56
|
-
this.incomingRouteParams.search = search ? "?" + search : void 0;
|
|
57
|
-
this.incomingRouteParams.routeOptions = routeOptions;
|
|
58
|
-
this.props.history.push(pathname + (search ? "?" + search : ""));
|
|
59
|
-
}
|
|
60
|
-
} else {
|
|
61
|
-
this.handleNavigate(pathname, "push", "none", void 0, routeOptions, tab);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
handleHistoryChange(location, action) {
|
|
65
|
-
let leavingLocationInfo;
|
|
66
|
-
if (this.incomingRouteParams) {
|
|
67
|
-
if (this.incomingRouteParams.routeAction === "replace") {
|
|
68
|
-
leavingLocationInfo = this.locationHistory.previous();
|
|
69
|
-
} else {
|
|
70
|
-
leavingLocationInfo = this.locationHistory.current();
|
|
71
|
-
}
|
|
72
|
-
} else {
|
|
73
|
-
leavingLocationInfo = this.locationHistory.current();
|
|
74
|
-
}
|
|
75
|
-
const leavingUrl = leavingLocationInfo.pathname + leavingLocationInfo.search;
|
|
76
|
-
if (leavingUrl !== location.pathname) {
|
|
77
|
-
if (!this.incomingRouteParams) {
|
|
78
|
-
if (action === "REPLACE") {
|
|
79
|
-
this.incomingRouteParams = {
|
|
80
|
-
routeAction: "replace",
|
|
81
|
-
routeDirection: "none",
|
|
82
|
-
tab: this.currentTab
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
if (action === "POP") {
|
|
86
|
-
const currentRoute = this.locationHistory.current();
|
|
87
|
-
if (currentRoute && currentRoute.pushedByRoute) {
|
|
88
|
-
const prevInfo = this.locationHistory.findLastLocation(currentRoute);
|
|
89
|
-
this.incomingRouteParams = { ...prevInfo, routeAction: "pop", routeDirection: "back" };
|
|
90
|
-
} else {
|
|
91
|
-
this.incomingRouteParams = {
|
|
92
|
-
routeAction: "pop",
|
|
93
|
-
routeDirection: "none",
|
|
94
|
-
tab: this.currentTab
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
if (!this.incomingRouteParams) {
|
|
99
|
-
this.incomingRouteParams = {
|
|
100
|
-
routeAction: "push",
|
|
101
|
-
routeDirection: location.state?.direction || "forward",
|
|
102
|
-
routeOptions: location.state?.routerOptions,
|
|
103
|
-
tab: this.currentTab
|
|
104
|
-
};
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
let routeInfo;
|
|
108
|
-
if (this.incomingRouteParams?.id) {
|
|
109
|
-
routeInfo = {
|
|
110
|
-
...this.incomingRouteParams,
|
|
111
|
-
lastPathname: leavingLocationInfo.pathname
|
|
112
|
-
};
|
|
113
|
-
this.locationHistory.add(routeInfo);
|
|
114
|
-
} else {
|
|
115
|
-
const isPushed = this.incomingRouteParams.routeAction === "push" && this.incomingRouteParams.routeDirection === "forward";
|
|
116
|
-
routeInfo = {
|
|
117
|
-
id: generateId("routeInfo"),
|
|
118
|
-
...this.incomingRouteParams,
|
|
119
|
-
lastPathname: leavingLocationInfo.pathname,
|
|
120
|
-
pathname: location.pathname,
|
|
121
|
-
search: location.search,
|
|
122
|
-
params: this.props.match.params,
|
|
123
|
-
prevRouteLastPathname: leavingLocationInfo.lastPathname
|
|
124
|
-
};
|
|
125
|
-
if (isPushed) {
|
|
126
|
-
routeInfo.tab = leavingLocationInfo.tab;
|
|
127
|
-
routeInfo.pushedByRoute = leavingLocationInfo.pathname;
|
|
128
|
-
} else if (routeInfo.routeAction === "pop") {
|
|
129
|
-
const r = this.locationHistory.findLastLocation(routeInfo);
|
|
130
|
-
routeInfo.pushedByRoute = r?.pushedByRoute;
|
|
131
|
-
} else if (routeInfo.routeAction === "push" && routeInfo.tab !== leavingLocationInfo.tab) {
|
|
132
|
-
const lastRoute = this.locationHistory.getCurrentRouteInfoForTab(routeInfo.tab);
|
|
133
|
-
routeInfo.pushedByRoute = lastRoute?.pushedByRoute;
|
|
134
|
-
} else if (routeInfo.routeAction === "replace") {
|
|
135
|
-
const currentRouteInfo = this.locationHistory.current();
|
|
136
|
-
const currentPushedBy = currentRouteInfo?.pushedByRoute;
|
|
137
|
-
const pushedByRoute = currentPushedBy !== void 0 && currentPushedBy !== routeInfo.pathname ? currentPushedBy : routeInfo.pushedByRoute;
|
|
138
|
-
routeInfo.lastPathname = currentRouteInfo?.pathname || routeInfo.lastPathname;
|
|
139
|
-
routeInfo.prevRouteLastPathname = currentRouteInfo?.lastPathname;
|
|
140
|
-
routeInfo.pushedByRoute = pushedByRoute;
|
|
141
|
-
routeInfo.routeDirection = currentRouteInfo?.routeDirection || routeInfo.routeDirection;
|
|
142
|
-
routeInfo.routeAnimation = currentRouteInfo?.routeAnimation || routeInfo.routeAnimation;
|
|
143
|
-
}
|
|
144
|
-
this.locationHistory.add(routeInfo);
|
|
145
|
-
}
|
|
146
|
-
this.setState({
|
|
147
|
-
routeInfo
|
|
148
|
-
});
|
|
149
|
-
}
|
|
150
|
-
this.incomingRouteParams = void 0;
|
|
151
|
-
}
|
|
152
|
-
/**
|
|
153
|
-
* history@4.x uses goBack(), history@5.x uses back()
|
|
154
|
-
* TODO: If support for React Router <=5 is dropped
|
|
155
|
-
* this logic is no longer needed. We can just
|
|
156
|
-
* assume back() is available.
|
|
157
|
-
*/
|
|
158
|
-
handleNativeBack() {
|
|
159
|
-
const history = this.props.history;
|
|
160
|
-
const goBack = history.goBack || history.back;
|
|
161
|
-
goBack();
|
|
162
|
-
}
|
|
163
|
-
handleNavigate(path, routeAction, routeDirection, routeAnimation, routeOptions, tab) {
|
|
164
|
-
this.incomingRouteParams = Object.assign(this.incomingRouteParams || {}, {
|
|
165
|
-
routeAction,
|
|
166
|
-
routeDirection,
|
|
167
|
-
routeOptions,
|
|
168
|
-
routeAnimation,
|
|
169
|
-
tab
|
|
170
|
-
});
|
|
171
|
-
if (routeAction === "push") {
|
|
172
|
-
this.props.history.push(path);
|
|
173
|
-
} else {
|
|
174
|
-
this.props.history.replace(path);
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
handleNavigateBack(defaultHref = "/", routeAnimation) {
|
|
178
|
-
const config = getConfig();
|
|
179
|
-
defaultHref = defaultHref ? defaultHref : config && config.get("backButtonDefaultHref");
|
|
180
|
-
const routeInfo = this.locationHistory.current();
|
|
181
|
-
if (routeInfo && routeInfo.pushedByRoute) {
|
|
182
|
-
const prevInfo = this.locationHistory.findLastLocation(routeInfo);
|
|
183
|
-
if (prevInfo) {
|
|
184
|
-
this.incomingRouteParams = {
|
|
185
|
-
...prevInfo,
|
|
186
|
-
routeAction: "pop",
|
|
187
|
-
routeDirection: "back",
|
|
188
|
-
routeAnimation: routeAnimation || routeInfo.routeAnimation
|
|
189
|
-
};
|
|
190
|
-
if (routeInfo.lastPathname === routeInfo.pushedByRoute || /**
|
|
191
|
-
* We need to exclude tab switches/tab
|
|
192
|
-
* context changes here because tabbed
|
|
193
|
-
* navigation is not linear, but router.back()
|
|
194
|
-
* will go back in a linear fashion.
|
|
195
|
-
*/
|
|
196
|
-
prevInfo.pathname === routeInfo.pushedByRoute && routeInfo.tab === "" && prevInfo.tab === "") {
|
|
197
|
-
const history = this.props.history;
|
|
198
|
-
const goBack = history.goBack || history.back;
|
|
199
|
-
goBack();
|
|
200
|
-
} else {
|
|
201
|
-
this.handleNavigate(prevInfo.pathname + (prevInfo.search || ""), "pop", "back", routeAnimation);
|
|
202
|
-
}
|
|
203
|
-
} else {
|
|
204
|
-
this.handleNavigate(defaultHref, "pop", "back", routeAnimation);
|
|
205
|
-
}
|
|
206
|
-
} else {
|
|
207
|
-
this.handleNavigate(defaultHref, "pop", "back", routeAnimation);
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
handleResetTab(tab, originalHref, originalRouteOptions) {
|
|
211
|
-
const routeInfo = this.locationHistory.getFirstRouteInfoForTab(tab);
|
|
212
|
-
if (routeInfo) {
|
|
213
|
-
const newRouteInfo = { ...routeInfo };
|
|
214
|
-
newRouteInfo.pathname = originalHref;
|
|
215
|
-
newRouteInfo.routeOptions = originalRouteOptions;
|
|
216
|
-
this.incomingRouteParams = { ...newRouteInfo, routeAction: "pop", routeDirection: "back" };
|
|
217
|
-
this.props.history.push(newRouteInfo.pathname + (newRouteInfo.search || ""));
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
handleSetCurrentTab(tab) {
|
|
221
|
-
this.currentTab = tab;
|
|
222
|
-
const ri = { ...this.locationHistory.current() };
|
|
223
|
-
if (ri.tab !== tab) {
|
|
224
|
-
ri.tab = tab;
|
|
225
|
-
this.locationHistory.update(ri);
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
render() {
|
|
229
|
-
return /* @__PURE__ */ React.createElement(RouteManagerContext.Provider, { value: this.routeMangerContextState }, /* @__PURE__ */ React.createElement(
|
|
230
|
-
NavManager,
|
|
231
|
-
{
|
|
232
|
-
ionRoute: IonRouteInner,
|
|
233
|
-
ionRedirect: {},
|
|
234
|
-
stackManager: StackManager,
|
|
235
|
-
routeInfo: this.state.routeInfo,
|
|
236
|
-
onNativeBack: this.handleNativeBack,
|
|
237
|
-
onNavigateBack: this.handleNavigateBack,
|
|
238
|
-
onNavigate: this.handleNavigate,
|
|
239
|
-
onSetCurrentTab: this.handleSetCurrentTab,
|
|
240
|
-
onChangeTab: this.handleChangeTab,
|
|
241
|
-
onResetTab: this.handleResetTab,
|
|
242
|
-
locationHistory: this.locationHistory
|
|
243
|
-
},
|
|
244
|
-
this.props.children
|
|
245
|
-
));
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
export const IonRouter = withRouter(IonRouterInner);
|
|
249
|
-
IonRouter.displayName = "IonRouter";
|
|
250
|
-
//# sourceMappingURL=IonRouter.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/ReactRouter/IonRouter.tsx"],
|
|
4
|
-
"sourcesContent": ["import type {\n AnimationBuilder,\n RouteAction,\n RouteInfo,\n RouteManagerContextState,\n RouterDirection,\n ViewItem,\n} from '@ionic/react';\nimport { LocationHistory, NavManager, RouteManagerContext, generateId, getConfig } from '@ionic/react';\nimport type { Action as HistoryAction, Location as HistoryLocation } from 'history';\nimport React from 'react';\nimport type { RouteComponentProps } from 'react-router-dom';\nimport { withRouter } from 'react-router-dom';\n\nimport { IonRouteInner } from './IonRouteInner';\nimport { ReactRouterViewStack } from './ReactRouterViewStack';\nimport StackManager from './StackManager';\n\nexport interface LocationState {\n direction?: RouterDirection;\n routerOptions?: { as?: string; unmount?: boolean };\n}\n\ninterface IonRouteProps extends RouteComponentProps<{}, {}, LocationState> {\n registerHistoryListener: (cb: (location: HistoryLocation<any>, action: HistoryAction) => void) => void;\n}\n\ninterface IonRouteState {\n routeInfo: RouteInfo;\n}\n\nclass IonRouterInner extends React.PureComponent<IonRouteProps, IonRouteState> {\n currentTab?: string;\n exitViewFromOtherOutletHandlers: ((pathname: string) => ViewItem | undefined)[] = [];\n incomingRouteParams?: Partial<RouteInfo>;\n locationHistory = new LocationHistory();\n viewStack = new ReactRouterViewStack();\n routeMangerContextState: RouteManagerContextState = {\n canGoBack: () => this.locationHistory.canGoBack(),\n clearOutlet: this.viewStack.clear,\n findViewItemByPathname: this.viewStack.findViewItemByPathname,\n getChildrenToRender: this.viewStack.getChildrenToRender,\n goBack: () => this.handleNavigateBack(),\n createViewItem: this.viewStack.createViewItem,\n findViewItemByRouteInfo: this.viewStack.findViewItemByRouteInfo,\n findLeavingViewItemByRouteInfo: this.viewStack.findLeavingViewItemByRouteInfo,\n addViewItem: this.viewStack.add,\n unMountViewItem: this.viewStack.remove,\n };\n\n constructor(props: IonRouteProps) {\n super(props);\n\n const routeInfo = {\n id: generateId('routeInfo'),\n pathname: this.props.location.pathname,\n search: this.props.location.search,\n };\n\n this.locationHistory.add(routeInfo);\n this.handleChangeTab = this.handleChangeTab.bind(this);\n this.handleResetTab = this.handleResetTab.bind(this);\n this.handleNativeBack = this.handleNativeBack.bind(this);\n this.handleNavigate = this.handleNavigate.bind(this);\n this.handleNavigateBack = this.handleNavigateBack.bind(this);\n this.props.registerHistoryListener(this.handleHistoryChange.bind(this));\n this.handleSetCurrentTab = this.handleSetCurrentTab.bind(this);\n\n this.state = {\n routeInfo,\n };\n }\n\n handleChangeTab(tab: string, path?: string, routeOptions?: any) {\n if (!path) {\n return;\n }\n\n const routeInfo = this.locationHistory.getCurrentRouteInfoForTab(tab);\n const [pathname, search] = path.split('?');\n if (routeInfo) {\n this.incomingRouteParams = { ...routeInfo, routeAction: 'push', routeDirection: 'none' };\n if (routeInfo.pathname === pathname) {\n this.incomingRouteParams.routeOptions = routeOptions;\n this.props.history.push(routeInfo.pathname + (routeInfo.search || ''));\n } else {\n this.incomingRouteParams.pathname = pathname;\n this.incomingRouteParams.search = search ? '?' + search : undefined;\n this.incomingRouteParams.routeOptions = routeOptions;\n this.props.history.push(pathname + (search ? '?' + search : ''));\n }\n } else {\n this.handleNavigate(pathname, 'push', 'none', undefined, routeOptions, tab);\n }\n }\n\n handleHistoryChange(location: HistoryLocation<LocationState>, action: HistoryAction) {\n let leavingLocationInfo: RouteInfo;\n if (this.incomingRouteParams) {\n if (this.incomingRouteParams.routeAction === 'replace') {\n leavingLocationInfo = this.locationHistory.previous();\n } else {\n leavingLocationInfo = this.locationHistory.current();\n }\n } else {\n leavingLocationInfo = this.locationHistory.current();\n }\n\n const leavingUrl = leavingLocationInfo.pathname + leavingLocationInfo.search;\n if (leavingUrl !== location.pathname) {\n if (!this.incomingRouteParams) {\n if (action === 'REPLACE') {\n this.incomingRouteParams = {\n routeAction: 'replace',\n routeDirection: 'none',\n tab: this.currentTab,\n };\n }\n if (action === 'POP') {\n const currentRoute = this.locationHistory.current();\n if (currentRoute && currentRoute.pushedByRoute) {\n const prevInfo = this.locationHistory.findLastLocation(currentRoute);\n this.incomingRouteParams = { ...prevInfo, routeAction: 'pop', routeDirection: 'back' };\n } else {\n this.incomingRouteParams = {\n routeAction: 'pop',\n routeDirection: 'none',\n tab: this.currentTab,\n };\n }\n }\n if (!this.incomingRouteParams) {\n this.incomingRouteParams = {\n routeAction: 'push',\n routeDirection: location.state?.direction || 'forward',\n routeOptions: location.state?.routerOptions,\n tab: this.currentTab,\n };\n }\n }\n\n let routeInfo: RouteInfo;\n\n if (this.incomingRouteParams?.id) {\n routeInfo = {\n ...(this.incomingRouteParams as RouteInfo),\n lastPathname: leavingLocationInfo.pathname,\n };\n this.locationHistory.add(routeInfo);\n } else {\n const isPushed =\n this.incomingRouteParams.routeAction === 'push' && this.incomingRouteParams.routeDirection === 'forward';\n routeInfo = {\n id: generateId('routeInfo'),\n ...this.incomingRouteParams,\n lastPathname: leavingLocationInfo.pathname,\n pathname: location.pathname,\n search: location.search,\n params: this.props.match.params,\n prevRouteLastPathname: leavingLocationInfo.lastPathname,\n };\n if (isPushed) {\n routeInfo.tab = leavingLocationInfo.tab;\n routeInfo.pushedByRoute = leavingLocationInfo.pathname;\n } else if (routeInfo.routeAction === 'pop') {\n const r = this.locationHistory.findLastLocation(routeInfo);\n routeInfo.pushedByRoute = r?.pushedByRoute;\n } else if (routeInfo.routeAction === 'push' && routeInfo.tab !== leavingLocationInfo.tab) {\n // If we are switching tabs grab the last route info for the tab and use its pushedByRoute\n const lastRoute = this.locationHistory.getCurrentRouteInfoForTab(routeInfo.tab);\n routeInfo.pushedByRoute = lastRoute?.pushedByRoute;\n } else if (routeInfo.routeAction === 'replace') {\n // Make sure to set the lastPathname, etc.. to the current route so the page transitions out\n const currentRouteInfo = this.locationHistory.current();\n\n /**\n * If going from /home to /child, then replacing from\n * /child to /home, we don't want the route info to\n * say that /home was pushed by /home which is not correct.\n */\n const currentPushedBy = currentRouteInfo?.pushedByRoute;\n const pushedByRoute =\n currentPushedBy !== undefined && currentPushedBy !== routeInfo.pathname\n ? currentPushedBy\n : routeInfo.pushedByRoute;\n\n routeInfo.lastPathname = currentRouteInfo?.pathname || routeInfo.lastPathname;\n routeInfo.prevRouteLastPathname = currentRouteInfo?.lastPathname;\n routeInfo.pushedByRoute = pushedByRoute;\n routeInfo.routeDirection = currentRouteInfo?.routeDirection || routeInfo.routeDirection;\n routeInfo.routeAnimation = currentRouteInfo?.routeAnimation || routeInfo.routeAnimation;\n }\n\n this.locationHistory.add(routeInfo);\n }\n\n this.setState({\n routeInfo,\n });\n }\n\n this.incomingRouteParams = undefined;\n }\n\n /**\n * history@4.x uses goBack(), history@5.x uses back()\n * TODO: If support for React Router <=5 is dropped\n * this logic is no longer needed. We can just\n * assume back() is available.\n */\n handleNativeBack() {\n const history = this.props.history as any;\n const goBack = history.goBack || history.back;\n goBack();\n }\n\n handleNavigate(\n path: string,\n routeAction: RouteAction,\n routeDirection?: RouterDirection,\n routeAnimation?: AnimationBuilder,\n routeOptions?: any,\n tab?: string\n ) {\n this.incomingRouteParams = Object.assign(this.incomingRouteParams || {}, {\n routeAction,\n routeDirection,\n routeOptions,\n routeAnimation,\n tab,\n });\n\n if (routeAction === 'push') {\n this.props.history.push(path);\n } else {\n this.props.history.replace(path);\n }\n }\n\n handleNavigateBack(defaultHref: string | RouteInfo = '/', routeAnimation?: AnimationBuilder) {\n const config = getConfig();\n defaultHref = defaultHref ? defaultHref : config && config.get('backButtonDefaultHref' as any);\n const routeInfo = this.locationHistory.current();\n if (routeInfo && routeInfo.pushedByRoute) {\n const prevInfo = this.locationHistory.findLastLocation(routeInfo);\n if (prevInfo) {\n this.incomingRouteParams = {\n ...prevInfo,\n routeAction: 'pop',\n routeDirection: 'back',\n routeAnimation: routeAnimation || routeInfo.routeAnimation,\n };\n if (\n routeInfo.lastPathname === routeInfo.pushedByRoute ||\n /**\n * We need to exclude tab switches/tab\n * context changes here because tabbed\n * navigation is not linear, but router.back()\n * will go back in a linear fashion.\n */\n (prevInfo.pathname === routeInfo.pushedByRoute && routeInfo.tab === '' && prevInfo.tab === '')\n ) {\n /**\n * history@4.x uses goBack(), history@5.x uses back()\n * TODO: If support for React Router <=5 is dropped\n * this logic is no longer needed. We can just\n * assume back() is available.\n */\n const history = this.props.history as any;\n const goBack = history.goBack || history.back;\n goBack();\n } else {\n this.handleNavigate(prevInfo.pathname + (prevInfo.search || ''), 'pop', 'back', routeAnimation);\n }\n } else {\n this.handleNavigate(defaultHref as string, 'pop', 'back', routeAnimation);\n }\n } else {\n this.handleNavigate(defaultHref as string, 'pop', 'back', routeAnimation);\n }\n }\n\n handleResetTab(tab: string, originalHref: string, originalRouteOptions: any) {\n const routeInfo = this.locationHistory.getFirstRouteInfoForTab(tab);\n if (routeInfo) {\n const newRouteInfo = { ...routeInfo };\n newRouteInfo.pathname = originalHref;\n newRouteInfo.routeOptions = originalRouteOptions;\n this.incomingRouteParams = { ...newRouteInfo, routeAction: 'pop', routeDirection: 'back' };\n this.props.history.push(newRouteInfo.pathname + (newRouteInfo.search || ''));\n }\n }\n\n handleSetCurrentTab(tab: string) {\n this.currentTab = tab;\n const ri = { ...this.locationHistory.current() };\n if (ri.tab !== tab) {\n ri.tab = tab;\n this.locationHistory.update(ri);\n }\n }\n\n render() {\n return (\n <RouteManagerContext.Provider value={this.routeMangerContextState}>\n <NavManager\n ionRoute={IonRouteInner}\n ionRedirect={{}}\n stackManager={StackManager}\n routeInfo={this.state.routeInfo!}\n onNativeBack={this.handleNativeBack}\n onNavigateBack={this.handleNavigateBack}\n onNavigate={this.handleNavigate}\n onSetCurrentTab={this.handleSetCurrentTab}\n onChangeTab={this.handleChangeTab}\n onResetTab={this.handleResetTab}\n locationHistory={this.locationHistory}\n >\n {this.props.children}\n </NavManager>\n </RouteManagerContext.Provider>\n );\n }\n}\n\nexport const IonRouter = withRouter(IonRouterInner);\nIonRouter.displayName = 'IonRouter';\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,160 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
import { IonRoute, ViewLifeCycleManager, ViewStacks, generateId } from "@ionic/react";
|
|
3
|
-
import React from "react";
|
|
4
|
-
import { matchPath } from "react-router";
|
|
5
|
-
export class ReactRouterViewStack extends ViewStacks {
|
|
6
|
-
constructor() {
|
|
7
|
-
super();
|
|
8
|
-
this.createViewItem = this.createViewItem.bind(this);
|
|
9
|
-
this.findViewItemByRouteInfo = this.findViewItemByRouteInfo.bind(this);
|
|
10
|
-
this.findLeavingViewItemByRouteInfo = this.findLeavingViewItemByRouteInfo.bind(this);
|
|
11
|
-
this.getChildrenToRender = this.getChildrenToRender.bind(this);
|
|
12
|
-
this.findViewItemByPathname = this.findViewItemByPathname.bind(this);
|
|
13
|
-
}
|
|
14
|
-
createViewItem(outletId, reactElement, routeInfo, page) {
|
|
15
|
-
const viewItem = {
|
|
16
|
-
id: generateId("viewItem"),
|
|
17
|
-
outletId,
|
|
18
|
-
ionPageElement: page,
|
|
19
|
-
reactElement,
|
|
20
|
-
mount: true,
|
|
21
|
-
ionRoute: false
|
|
22
|
-
};
|
|
23
|
-
const matchProps = {
|
|
24
|
-
exact: reactElement.props.exact,
|
|
25
|
-
path: reactElement.props.path || reactElement.props.from,
|
|
26
|
-
component: reactElement.props.component
|
|
27
|
-
};
|
|
28
|
-
const match = matchPath(routeInfo.pathname, matchProps);
|
|
29
|
-
if (reactElement.type === IonRoute) {
|
|
30
|
-
viewItem.ionRoute = true;
|
|
31
|
-
viewItem.disableIonPageManagement = reactElement.props.disableIonPageManagement;
|
|
32
|
-
}
|
|
33
|
-
viewItem.routeData = {
|
|
34
|
-
match,
|
|
35
|
-
childProps: reactElement.props
|
|
36
|
-
};
|
|
37
|
-
return viewItem;
|
|
38
|
-
}
|
|
39
|
-
getChildrenToRender(outletId, ionRouterOutlet, routeInfo) {
|
|
40
|
-
const viewItems = this.getViewItemsForOutlet(outletId);
|
|
41
|
-
React.Children.forEach(ionRouterOutlet.props.children, (child) => {
|
|
42
|
-
const viewItem = viewItems.find((v) => {
|
|
43
|
-
return matchComponent(child, v.routeData.childProps.path || v.routeData.childProps.from);
|
|
44
|
-
});
|
|
45
|
-
if (viewItem) {
|
|
46
|
-
viewItem.reactElement = child;
|
|
47
|
-
}
|
|
48
|
-
});
|
|
49
|
-
const children = viewItems.map((viewItem) => {
|
|
50
|
-
let clonedChild;
|
|
51
|
-
if (viewItem.ionRoute && !viewItem.disableIonPageManagement) {
|
|
52
|
-
clonedChild = /* @__PURE__ */ React.createElement(
|
|
53
|
-
ViewLifeCycleManager,
|
|
54
|
-
{
|
|
55
|
-
key: `view-${viewItem.id}`,
|
|
56
|
-
mount: viewItem.mount,
|
|
57
|
-
removeView: () => this.remove(viewItem)
|
|
58
|
-
},
|
|
59
|
-
React.cloneElement(viewItem.reactElement, {
|
|
60
|
-
computedMatch: viewItem.routeData.match
|
|
61
|
-
})
|
|
62
|
-
);
|
|
63
|
-
} else {
|
|
64
|
-
const match = matchComponent(viewItem.reactElement, routeInfo.pathname);
|
|
65
|
-
clonedChild = /* @__PURE__ */ React.createElement(
|
|
66
|
-
ViewLifeCycleManager,
|
|
67
|
-
{
|
|
68
|
-
key: `view-${viewItem.id}`,
|
|
69
|
-
mount: viewItem.mount,
|
|
70
|
-
removeView: () => this.remove(viewItem)
|
|
71
|
-
},
|
|
72
|
-
React.cloneElement(viewItem.reactElement, {
|
|
73
|
-
computedMatch: viewItem.routeData.match
|
|
74
|
-
})
|
|
75
|
-
);
|
|
76
|
-
if (!match && viewItem.routeData.match) {
|
|
77
|
-
viewItem.routeData.match = void 0;
|
|
78
|
-
viewItem.mount = false;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
return clonedChild;
|
|
82
|
-
});
|
|
83
|
-
return children;
|
|
84
|
-
}
|
|
85
|
-
findViewItemByRouteInfo(routeInfo, outletId, updateMatch) {
|
|
86
|
-
const { viewItem, match } = this.findViewItemByPath(routeInfo.pathname, outletId);
|
|
87
|
-
const shouldUpdateMatch = updateMatch === void 0 || updateMatch === true;
|
|
88
|
-
if (shouldUpdateMatch && viewItem && match) {
|
|
89
|
-
viewItem.routeData.match = match;
|
|
90
|
-
}
|
|
91
|
-
return viewItem;
|
|
92
|
-
}
|
|
93
|
-
findLeavingViewItemByRouteInfo(routeInfo, outletId, mustBeIonRoute = true) {
|
|
94
|
-
const { viewItem } = this.findViewItemByPath(routeInfo.lastPathname, outletId, false, mustBeIonRoute);
|
|
95
|
-
return viewItem;
|
|
96
|
-
}
|
|
97
|
-
findViewItemByPathname(pathname, outletId) {
|
|
98
|
-
const { viewItem } = this.findViewItemByPath(pathname, outletId);
|
|
99
|
-
return viewItem;
|
|
100
|
-
}
|
|
101
|
-
findViewItemByPath(pathname, outletId, forceExact, mustBeIonRoute) {
|
|
102
|
-
let viewItem;
|
|
103
|
-
let match;
|
|
104
|
-
let viewStack;
|
|
105
|
-
if (outletId) {
|
|
106
|
-
viewStack = this.getViewItemsForOutlet(outletId);
|
|
107
|
-
viewStack.some(matchView);
|
|
108
|
-
if (!viewItem) {
|
|
109
|
-
viewStack.some(matchDefaultRoute);
|
|
110
|
-
}
|
|
111
|
-
} else {
|
|
112
|
-
const viewItems = this.getAllViewItems();
|
|
113
|
-
viewItems.some(matchView);
|
|
114
|
-
if (!viewItem) {
|
|
115
|
-
viewItems.some(matchDefaultRoute);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
return { viewItem, match };
|
|
119
|
-
function matchView(v) {
|
|
120
|
-
if (mustBeIonRoute && !v.ionRoute) {
|
|
121
|
-
return false;
|
|
122
|
-
}
|
|
123
|
-
const matchProps = {
|
|
124
|
-
exact: forceExact ? true : v.routeData.childProps.exact,
|
|
125
|
-
path: v.routeData.childProps.path || v.routeData.childProps.from,
|
|
126
|
-
component: v.routeData.childProps.component
|
|
127
|
-
};
|
|
128
|
-
const myMatch = matchPath(pathname, matchProps);
|
|
129
|
-
if (myMatch) {
|
|
130
|
-
viewItem = v;
|
|
131
|
-
match = myMatch;
|
|
132
|
-
return true;
|
|
133
|
-
}
|
|
134
|
-
return false;
|
|
135
|
-
}
|
|
136
|
-
function matchDefaultRoute(v) {
|
|
137
|
-
if (!v.routeData.childProps.path && !v.routeData.childProps.from) {
|
|
138
|
-
match = {
|
|
139
|
-
path: pathname,
|
|
140
|
-
url: pathname,
|
|
141
|
-
isExact: true,
|
|
142
|
-
params: {}
|
|
143
|
-
};
|
|
144
|
-
viewItem = v;
|
|
145
|
-
return true;
|
|
146
|
-
}
|
|
147
|
-
return false;
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
function matchComponent(node, pathname, forceExact) {
|
|
152
|
-
const matchProps = {
|
|
153
|
-
exact: forceExact ? true : node.props.exact,
|
|
154
|
-
path: node.props.path || node.props.from,
|
|
155
|
-
component: node.props.component
|
|
156
|
-
};
|
|
157
|
-
const match = matchPath(pathname, matchProps);
|
|
158
|
-
return match;
|
|
159
|
-
}
|
|
160
|
-
//# sourceMappingURL=ReactRouterViewStack.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/ReactRouter/ReactRouterViewStack.tsx"],
|
|
4
|
-
"sourcesContent": ["import type { RouteInfo, ViewItem } from '@ionic/react';\nimport { IonRoute, ViewLifeCycleManager, ViewStacks, generateId } from '@ionic/react';\nimport React from 'react';\nimport { matchPath } from 'react-router';\n\nexport class ReactRouterViewStack extends ViewStacks {\n constructor() {\n super();\n this.createViewItem = this.createViewItem.bind(this);\n this.findViewItemByRouteInfo = this.findViewItemByRouteInfo.bind(this);\n this.findLeavingViewItemByRouteInfo = this.findLeavingViewItemByRouteInfo.bind(this);\n this.getChildrenToRender = this.getChildrenToRender.bind(this);\n this.findViewItemByPathname = this.findViewItemByPathname.bind(this);\n }\n\n createViewItem(outletId: string, reactElement: React.ReactElement, routeInfo: RouteInfo, page?: HTMLElement) {\n const viewItem: ViewItem = {\n id: generateId('viewItem'),\n outletId,\n ionPageElement: page,\n reactElement,\n mount: true,\n ionRoute: false,\n };\n\n const matchProps = {\n exact: reactElement.props.exact,\n path: reactElement.props.path || reactElement.props.from,\n component: reactElement.props.component,\n };\n\n const match = matchPath(routeInfo.pathname, matchProps);\n\n if (reactElement.type === IonRoute) {\n viewItem.ionRoute = true;\n viewItem.disableIonPageManagement = reactElement.props.disableIonPageManagement;\n }\n\n viewItem.routeData = {\n match,\n childProps: reactElement.props,\n };\n\n return viewItem;\n }\n\n getChildrenToRender(outletId: string, ionRouterOutlet: React.ReactElement, routeInfo: RouteInfo) {\n const viewItems = this.getViewItemsForOutlet(outletId);\n\n // Sync latest routes with viewItems\n React.Children.forEach(ionRouterOutlet.props.children, (child: React.ReactElement) => {\n const viewItem = viewItems.find((v) => {\n return matchComponent(child, v.routeData.childProps.path || v.routeData.childProps.from);\n });\n if (viewItem) {\n viewItem.reactElement = child;\n }\n });\n\n const children = viewItems.map((viewItem) => {\n let clonedChild;\n if (viewItem.ionRoute && !viewItem.disableIonPageManagement) {\n clonedChild = (\n <ViewLifeCycleManager\n key={`view-${viewItem.id}`}\n mount={viewItem.mount}\n removeView={() => this.remove(viewItem)}\n >\n {React.cloneElement(viewItem.reactElement, {\n computedMatch: viewItem.routeData.match,\n })}\n </ViewLifeCycleManager>\n );\n } else {\n const match = matchComponent(viewItem.reactElement, routeInfo.pathname);\n clonedChild = (\n <ViewLifeCycleManager\n key={`view-${viewItem.id}`}\n mount={viewItem.mount}\n removeView={() => this.remove(viewItem)}\n >\n {React.cloneElement(viewItem.reactElement, {\n computedMatch: viewItem.routeData.match,\n })}\n </ViewLifeCycleManager>\n );\n\n if (!match && viewItem.routeData.match) {\n viewItem.routeData.match = undefined;\n viewItem.mount = false;\n }\n }\n\n return clonedChild;\n });\n return children;\n }\n\n findViewItemByRouteInfo(routeInfo: RouteInfo, outletId?: string, updateMatch?: boolean) {\n const { viewItem, match } = this.findViewItemByPath(routeInfo.pathname, outletId);\n const shouldUpdateMatch = updateMatch === undefined || updateMatch === true;\n if (shouldUpdateMatch && viewItem && match) {\n viewItem.routeData.match = match;\n }\n return viewItem;\n }\n\n findLeavingViewItemByRouteInfo(routeInfo: RouteInfo, outletId?: string, mustBeIonRoute = true) {\n const { viewItem } = this.findViewItemByPath(routeInfo.lastPathname!, outletId, false, mustBeIonRoute);\n return viewItem;\n }\n\n findViewItemByPathname(pathname: string, outletId?: string) {\n const { viewItem } = this.findViewItemByPath(pathname, outletId);\n return viewItem;\n }\n\n private findViewItemByPath(pathname: string, outletId?: string, forceExact?: boolean, mustBeIonRoute?: boolean) {\n let viewItem: ViewItem | undefined;\n let match: ReturnType<typeof matchPath> | undefined;\n let viewStack: ViewItem[];\n\n if (outletId) {\n viewStack = this.getViewItemsForOutlet(outletId);\n viewStack.some(matchView);\n if (!viewItem) {\n viewStack.some(matchDefaultRoute);\n }\n } else {\n const viewItems = this.getAllViewItems();\n viewItems.some(matchView);\n if (!viewItem) {\n viewItems.some(matchDefaultRoute);\n }\n }\n\n return { viewItem, match };\n\n function matchView(v: ViewItem) {\n if (mustBeIonRoute && !v.ionRoute) {\n return false;\n }\n const matchProps = {\n exact: forceExact ? true : v.routeData.childProps.exact,\n path: v.routeData.childProps.path || v.routeData.childProps.from,\n component: v.routeData.childProps.component,\n };\n const myMatch = matchPath(pathname, matchProps);\n if (myMatch) {\n viewItem = v;\n match = myMatch;\n return true;\n }\n return false;\n }\n\n function matchDefaultRoute(v: ViewItem) {\n // try to find a route that doesn't have a path or from prop, that will be our default route\n if (!v.routeData.childProps.path && !v.routeData.childProps.from) {\n match = {\n path: pathname,\n url: pathname,\n isExact: true,\n params: {},\n };\n viewItem = v;\n return true;\n }\n return false;\n }\n }\n}\n\nfunction matchComponent(node: React.ReactElement, pathname: string, forceExact?: boolean) {\n const matchProps = {\n exact: forceExact ? true : node.props.exact,\n path: node.props.path || node.props.from,\n component: node.props.component,\n };\n const match = matchPath(pathname, matchProps);\n\n return match;\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|