@tarojs/router 3.3.8 → 3.3.12
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 +65 -27
- package/dist/index.js.map +1 -1
- package/dist/router.esm.js +58 -27
- package/dist/router.esm.js.map +1 -1
- package/package.json +3 -3
package/dist/router.esm.js
CHANGED
|
@@ -45,7 +45,7 @@ function setHistoryMode(mode, base = '/') {
|
|
|
45
45
|
history = createHashHistory(options);
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
|
-
function
|
|
48
|
+
function prependBasename(url = '') {
|
|
49
49
|
return basename.replace(/\/$/, '') + '/' + url.replace(/^\//, '');
|
|
50
50
|
}
|
|
51
51
|
|
|
@@ -78,34 +78,44 @@ const throttle = (fn, threshold) => {
|
|
|
78
78
|
lastTime = now;
|
|
79
79
|
}
|
|
80
80
|
};
|
|
81
|
+
};
|
|
82
|
+
const stripBasename = (path, basename) => path.startsWith(basename) ? path.replace(basename, '') : path;
|
|
83
|
+
const isTabBar = (config) => {
|
|
84
|
+
var _a, _b;
|
|
85
|
+
const { customRoutes = {}, basename = '', pathname } = config.router;
|
|
86
|
+
const routePath = stripBasename(pathname, basename);
|
|
87
|
+
const pagePath = ((_a = Object.entries(customRoutes).find(([, target]) => target === routePath)) === null || _a === void 0 ? void 0 : _a[0]) || routePath;
|
|
88
|
+
return !!pagePath && (((_b = config.tabBar) === null || _b === void 0 ? void 0 : _b.list) || []).some(t => t.pagePath === pagePath);
|
|
81
89
|
};
|
|
82
90
|
|
|
83
91
|
function processNavigateUrl(option) {
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
let parameters = '';
|
|
87
|
-
if (matches && matches.length) {
|
|
88
|
-
parameters = matches[0];
|
|
89
|
-
url = url.replace(parameters, '');
|
|
90
|
-
}
|
|
92
|
+
const pathPieces = J(option.url);
|
|
93
|
+
// 处理自定义路由
|
|
91
94
|
Object.keys(routesAlias).forEach(key => {
|
|
92
|
-
if (addLeadingSlash(key) === addLeadingSlash(
|
|
93
|
-
|
|
95
|
+
if (addLeadingSlash(key) === addLeadingSlash(pathPieces.pathname)) {
|
|
96
|
+
pathPieces.pathname = routesAlias[key];
|
|
94
97
|
}
|
|
95
98
|
});
|
|
99
|
+
// 处理 basename
|
|
100
|
+
pathPieces.pathname = prependBasename(pathPieces.pathname);
|
|
101
|
+
// hack fix history v5 bug: https://github.com/remix-run/history/issues/814
|
|
102
|
+
if (!pathPieces.search)
|
|
103
|
+
pathPieces.search = '';
|
|
104
|
+
return pathPieces;
|
|
96
105
|
}
|
|
97
106
|
function navigate(option, method) {
|
|
98
107
|
const { success, complete, fail } = option;
|
|
99
108
|
let failReason;
|
|
100
|
-
if (option.url) {
|
|
101
|
-
processNavigateUrl(option);
|
|
102
|
-
}
|
|
103
109
|
try {
|
|
104
|
-
if (
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
110
|
+
if ('url' in option) {
|
|
111
|
+
const pathPieces = processNavigateUrl(option);
|
|
112
|
+
const state = { timestamp: Date.now() };
|
|
113
|
+
if (method === 'navigateTo') {
|
|
114
|
+
history.push(pathPieces, state);
|
|
115
|
+
}
|
|
116
|
+
else if (method === 'redirectTo') {
|
|
117
|
+
history.replace(pathPieces, state);
|
|
118
|
+
}
|
|
109
119
|
}
|
|
110
120
|
else if (method === 'navigateBack') {
|
|
111
121
|
setHistoryBackDelta(option.delta);
|
|
@@ -143,9 +153,11 @@ function navigateBack(options = { delta: 1 }) {
|
|
|
143
153
|
return navigate(options, 'navigateBack');
|
|
144
154
|
}
|
|
145
155
|
function switchTab(option) {
|
|
146
|
-
|
|
156
|
+
// TODO: 清除掉所有的栈去目标页面
|
|
157
|
+
return redirectTo(option);
|
|
147
158
|
}
|
|
148
159
|
function reLaunch(option) {
|
|
160
|
+
// TODO: 清除掉所有的栈去目标页面
|
|
149
161
|
return redirectTo(option);
|
|
150
162
|
}
|
|
151
163
|
function getCurrentPages() {
|
|
@@ -815,6 +827,9 @@ function initTabbar(config) {
|
|
|
815
827
|
tabbar.conf.custom = false;
|
|
816
828
|
tabbar.conf.customRoutes = {};
|
|
817
829
|
}
|
|
830
|
+
if (typeof routerConfig.basename !== 'undefined') {
|
|
831
|
+
tabbar.conf.basename = routerConfig.basename;
|
|
832
|
+
}
|
|
818
833
|
const container = document.getElementById('container');
|
|
819
834
|
// eslint-disable-next-line no-unused-expressions
|
|
820
835
|
container === null || container === void 0 ? void 0 : container.appendChild(tabbar);
|
|
@@ -1600,21 +1615,37 @@ function createRouter(app, config, framework) {
|
|
|
1600
1615
|
shouldLoad = true;
|
|
1601
1616
|
}
|
|
1602
1617
|
else if (action === 'REPLACE') {
|
|
1603
|
-
|
|
1618
|
+
if (isTabBar(config)) {
|
|
1619
|
+
hidePage(Current.page);
|
|
1620
|
+
const pathname = stripBasename(config.router.pathname, basename);
|
|
1621
|
+
const prevIndex = stacks.findIndex((r) => {
|
|
1622
|
+
var _a;
|
|
1623
|
+
return ((_a = r.path) === null || _a === void 0 ? void 0 : _a.replace(/\?.*/g, '')) === pathname;
|
|
1624
|
+
});
|
|
1625
|
+
if (prevIndex > -1) {
|
|
1626
|
+
// tabbar 页且之前出现过,直接复用
|
|
1627
|
+
const prev = stacks[prevIndex];
|
|
1628
|
+
return showPage(prev, pageConfig, prevIndex);
|
|
1629
|
+
}
|
|
1630
|
+
}
|
|
1631
|
+
else {
|
|
1632
|
+
unloadPage(Current.page);
|
|
1633
|
+
}
|
|
1604
1634
|
shouldLoad = true;
|
|
1605
1635
|
}
|
|
1606
1636
|
if (shouldLoad) {
|
|
1607
1637
|
const el = (_c = element.default) !== null && _c !== void 0 ? _c : element;
|
|
1608
|
-
const
|
|
1609
|
-
delete
|
|
1610
|
-
delete
|
|
1611
|
-
const pathname =
|
|
1612
|
-
const
|
|
1613
|
-
|
|
1638
|
+
const loadConfig = Object.assign({}, pageConfig);
|
|
1639
|
+
delete loadConfig['path'];
|
|
1640
|
+
delete loadConfig['load'];
|
|
1641
|
+
const pathname = stripBasename(config.router.pathname, basename);
|
|
1642
|
+
const routerIndex = stacks.length;
|
|
1643
|
+
const page = createPageConfig(enablePullDownRefresh ? (_d = runtimeHooks.createPullDownComponent) === null || _d === void 0 ? void 0 : _d.call(runtimeHooks, el, location.pathname, framework, routerConfig.PullDownRefresh) : el, pathname + stringify(qs(routerIndex)), {}, loadConfig);
|
|
1644
|
+
loadPage(page, pageConfig, routerIndex);
|
|
1614
1645
|
}
|
|
1615
1646
|
}, 500);
|
|
1616
1647
|
if (history.location.pathname === '/') {
|
|
1617
|
-
history.replace(
|
|
1648
|
+
history.replace(prependBasename(routes[0].path + history.location.search));
|
|
1618
1649
|
}
|
|
1619
1650
|
render({ location: history.location, action: r.Push });
|
|
1620
1651
|
app.onShow(qs(stacks.length));
|