@tinkoff/router 0.1.57 → 0.1.58
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/README.md +6 -8
- package/lib/index.js +17 -17
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @tinkoff/router
|
|
2
2
|
|
|
3
|
-
Библиотека роутинга. Может работать как на сервере, так и на клиенте. Предназначена прежде всего для
|
|
3
|
+
Библиотека роутинга. Может работать как на сервере, так и на клиенте. Предназначена прежде всего для построения изморфных приложений.
|
|
4
4
|
|
|
5
5
|
## Подключение
|
|
6
6
|
|
|
@@ -22,7 +22,7 @@ const router = new Router();
|
|
|
22
22
|
|
|
23
23
|
Основные функции:
|
|
24
24
|
|
|
25
|
-
- Библиотека поддерживает варианты работы как на
|
|
25
|
+
- Библиотека поддерживает варианты работы как на сервере, так и на клиенте.
|
|
26
26
|
- Есть возможность использовать ралзичные варианты клиентского перехода: со спа-переходами или без.
|
|
27
27
|
- Для проверки доступности роута при конкретных условиях есть Guards.
|
|
28
28
|
- Можно подписываться на разные этапы перехода через хуки
|
|
@@ -50,7 +50,7 @@ const noSpaRouter = new NoSpaRouter();
|
|
|
50
50
|
|
|
51
51
|
### Router Guards
|
|
52
52
|
|
|
53
|
-
Гуарды позволяют контроллировать доступность того или иного роута для конретного перехода. Из гуарда можно заблокировать переход или
|
|
53
|
+
Гуарды позволяют контроллировать доступность того или иного роута для конретного перехода. Из гуарда можно заблокировать переход или иницировать редирект.
|
|
54
54
|
|
|
55
55
|
```ts
|
|
56
56
|
import { NavigationGuard } from '@tinkoff/router';
|
|
@@ -150,7 +150,7 @@ router.updateCurrentRoute({ query: { a: 'a' }, preserveQuery: true });
|
|
|
150
150
|
router.getCurrentUrl().query; // { a: 'a', c: 'c' }
|
|
151
151
|
```
|
|
152
152
|
|
|
153
|
-
Если в качестве значения для конкретного ключа query передать undefined, то это значение
|
|
153
|
+
Если в качестве значения для конкретного ключа query передать undefined, то это значение очистится в новом query:
|
|
154
154
|
|
|
155
155
|
```ts
|
|
156
156
|
router.getCurrentUrl().query; // { a: 'a', b: 'b' }
|
|
@@ -182,7 +182,7 @@ export const Component = () => {
|
|
|
182
182
|
|
|
183
183
|
#### useUrl
|
|
184
184
|
|
|
185
|
-
Позволяет получить текущий активный
|
|
185
|
+
Позволяет получить текущий активный URL приложения
|
|
186
186
|
|
|
187
187
|
```ts
|
|
188
188
|
import React from 'react';
|
|
@@ -197,7 +197,7 @@ export const Component = () => {
|
|
|
197
197
|
|
|
198
198
|
#### useNavigate
|
|
199
199
|
|
|
200
|
-
Создаёт
|
|
200
|
+
Создаёт колбек с вызовом навигации, который можно передать в дочерние компоненты или повесить как обработчик событий
|
|
201
201
|
|
|
202
202
|
```ts
|
|
203
203
|
export const Cmp = () => {
|
|
@@ -229,5 +229,3 @@ export const WrapLink = () => {
|
|
|
229
229
|
return <Link url="/test/">Click me</Link>;
|
|
230
230
|
};
|
|
231
231
|
```
|
|
232
|
-
|
|
233
|
-
## How to
|
package/lib/index.js
CHANGED
|
@@ -46,7 +46,7 @@ const normalizeManySlashes = (hrefOrPath) => {
|
|
|
46
46
|
return [href.replace(/\/+/g, '/').replace(/^(\w+):\//, '$1://'), ...search].join('?');
|
|
47
47
|
};
|
|
48
48
|
const isSameHost = typeof window === 'undefined'
|
|
49
|
-
? T__default[
|
|
49
|
+
? T__default["default"]
|
|
50
50
|
: (url) => {
|
|
51
51
|
return !url.host || url.host === window.location.host;
|
|
52
52
|
};
|
|
@@ -106,7 +106,7 @@ const parse = (part) => {
|
|
|
106
106
|
};
|
|
107
107
|
const makePath = (pathname, params) => {
|
|
108
108
|
const parts = getParts(pathname);
|
|
109
|
-
const result = map__default[
|
|
109
|
+
const result = map__default["default"]((part) => {
|
|
110
110
|
var _a;
|
|
111
111
|
if (isHistoryFallback(part) || isWildcard(part)) {
|
|
112
112
|
throw new Error(`Pathname should be only a string with dynamic parameters, not a special string, got ${pathname}`);
|
|
@@ -137,11 +137,11 @@ const makePath = (pathname, params) => {
|
|
|
137
137
|
|
|
138
138
|
// eslint-disable-next-line import/no-mutable-exports
|
|
139
139
|
exports.logger = {
|
|
140
|
-
trace: noop__default[
|
|
141
|
-
debug: noop__default[
|
|
142
|
-
info: noop__default[
|
|
143
|
-
warn: noop__default[
|
|
144
|
-
error: noop__default[
|
|
140
|
+
trace: noop__default["default"],
|
|
141
|
+
debug: noop__default["default"],
|
|
142
|
+
info: noop__default["default"],
|
|
143
|
+
warn: noop__default["default"],
|
|
144
|
+
error: noop__default["default"],
|
|
145
145
|
};
|
|
146
146
|
const setLogger = (newLogger) => {
|
|
147
147
|
exports.logger = newLogger;
|
|
@@ -440,7 +440,7 @@ class AbstractRouter {
|
|
|
440
440
|
if (result === false) {
|
|
441
441
|
return this.block(navigation);
|
|
442
442
|
}
|
|
443
|
-
if (isString__default[
|
|
443
|
+
if (isString__default["default"](result) || isObject__default["default"](result)) {
|
|
444
444
|
return this.redirect(navigation, makeNavigateOptions(result));
|
|
445
445
|
}
|
|
446
446
|
}
|
|
@@ -558,7 +558,7 @@ const createNavigationRoute = (route, pathname, params) => {
|
|
|
558
558
|
class RouteTree {
|
|
559
559
|
constructor(routes) {
|
|
560
560
|
this.tree = createTree();
|
|
561
|
-
each__default[
|
|
561
|
+
each__default["default"]((route) => this.addRoute(route), routes);
|
|
562
562
|
}
|
|
563
563
|
// eslint-disable-next-line max-statements
|
|
564
564
|
addRoute(route) {
|
|
@@ -578,7 +578,7 @@ class RouteTree {
|
|
|
578
578
|
if (parsed.type === 3 /* parameter */) {
|
|
579
579
|
const { paramName, regexp, optional } = parsed;
|
|
580
580
|
// prevent from creating new entries for same route
|
|
581
|
-
const found = find__default[
|
|
581
|
+
const found = find__default["default"]((par) => par.key === part, currentTree.parameters);
|
|
582
582
|
if (found) {
|
|
583
583
|
currentTree = found.tree;
|
|
584
584
|
}
|
|
@@ -592,7 +592,7 @@ class RouteTree {
|
|
|
592
592
|
};
|
|
593
593
|
if (regexp && !optional) {
|
|
594
594
|
// insert parameters with regexp before
|
|
595
|
-
const index = findIndex__default[
|
|
595
|
+
const index = findIndex__default["default"]((par) => !par.regexp, currentTree.parameters);
|
|
596
596
|
currentTree.parameters.splice(index, 0, parameter);
|
|
597
597
|
}
|
|
598
598
|
else {
|
|
@@ -768,8 +768,8 @@ const wrapHistory = ({ onNavigate }) => {
|
|
|
768
768
|
history: () => {
|
|
769
769
|
throw new Error('Method not implemented');
|
|
770
770
|
},
|
|
771
|
-
init: noop__default[
|
|
772
|
-
subscribe: noop__default[
|
|
771
|
+
init: noop__default["default"],
|
|
772
|
+
subscribe: noop__default["default"],
|
|
773
773
|
};
|
|
774
774
|
}
|
|
775
775
|
let browserHistory = window.history;
|
|
@@ -1054,9 +1054,9 @@ const Provider = ({ router, children, }) => {
|
|
|
1054
1054
|
setState({ route: to, url });
|
|
1055
1055
|
});
|
|
1056
1056
|
}, [router]);
|
|
1057
|
-
return (React__default[
|
|
1058
|
-
React__default[
|
|
1059
|
-
React__default[
|
|
1057
|
+
return (React__default["default"].createElement(RouterContext.Provider, { value: router },
|
|
1058
|
+
React__default["default"].createElement(RouteContext.Provider, { value: state.route },
|
|
1059
|
+
React__default["default"].createElement(UrlContext.Provider, { value: state.url }, children))));
|
|
1060
1060
|
};
|
|
1061
1061
|
Provider.displayName = 'Provider';
|
|
1062
1062
|
|
|
@@ -1108,7 +1108,7 @@ function Link(props) {
|
|
|
1108
1108
|
}
|
|
1109
1109
|
return (
|
|
1110
1110
|
// eslint-disable-next-line react/jsx-props-no-spreading
|
|
1111
|
-
React__default[
|
|
1111
|
+
React__default["default"].createElement("a", Object.assign({}, otherProps, extraProps), children));
|
|
1112
1112
|
}
|
|
1113
1113
|
Link.displayName = 'Link';
|
|
1114
1114
|
|