mobx-route 0.0.7 → 0.0.9
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/components/link.js +1 -1
- package/package.json +6 -1
- package/route/index.d.ts +2 -0
- package/route/index.d.ts.map +1 -1
- package/route/index.js +2 -0
- package/route/route-group.d.ts +8 -0
- package/route/route-group.d.ts.map +1 -0
- package/route/route-group.js +14 -0
- package/route/route-group.types.d.ts +3 -0
- package/route/route-group.types.d.ts.map +1 -0
- package/route/route-group.types.js +1 -0
- package/route/route.d.ts +10 -6
- package/route/route.d.ts.map +1 -1
- package/route/route.js +25 -6
- package/route/route.test.js +42 -16
- package/route/route.types.d.ts +2 -0
- package/route/route.types.d.ts.map +1 -1
package/components/link.js
CHANGED
|
@@ -14,7 +14,7 @@ export const Link = observer(forwardRef(({ route, asChild, query, replace, child
|
|
|
14
14
|
anchorProps.onClick?.(event);
|
|
15
15
|
if (!event.defaultPrevented) {
|
|
16
16
|
event.preventDefault();
|
|
17
|
-
route.
|
|
17
|
+
route.open(href, { replace, query });
|
|
18
18
|
}
|
|
19
19
|
};
|
|
20
20
|
return asChild && isValidElement(children) ? (
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mobx-route",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.9",
|
|
4
4
|
"keywords": [
|
|
5
5
|
"mobx",
|
|
6
6
|
"react",
|
|
@@ -65,6 +65,11 @@
|
|
|
65
65
|
"default": "./route/index.js",
|
|
66
66
|
"types": "./route/index.d.ts"
|
|
67
67
|
},
|
|
68
|
+
"./route/route-group": {
|
|
69
|
+
"import": "./route/route-group.js",
|
|
70
|
+
"default": "./route/route-group.js",
|
|
71
|
+
"types": "./route/route-group.d.ts"
|
|
72
|
+
},
|
|
68
73
|
"./route/route.test": {
|
|
69
74
|
"import": "./route/route.test.js",
|
|
70
75
|
"default": "./route/route.test.js",
|
package/route/index.d.ts
CHANGED
package/route/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/route/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/route/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC"}
|
package/route/index.js
CHANGED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { AnyRouteGroup } from './route-group.types.js';
|
|
2
|
+
import { AnyRoute } from './route.types.js';
|
|
3
|
+
export declare class RouteGroup<TGrouppedRoutes extends Record<string, AnyRoute | AnyRouteGroup>> {
|
|
4
|
+
routes: TGrouppedRoutes;
|
|
5
|
+
constructor(routes: TGrouppedRoutes);
|
|
6
|
+
get isOpened(): boolean;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=route-group.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route-group.d.ts","sourceRoot":"","sources":["../../src/route/route-group.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,qBAAa,UAAU,CACrB,eAAe,SAAS,MAAM,CAAC,MAAM,EAAE,QAAQ,GAAG,aAAa,CAAC;IAE7C,MAAM,EAAE,eAAe;gBAAvB,MAAM,EAAE,eAAe;IAM1C,IAAI,QAAQ,IAAI,OAAO,CAGtB;CACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { computed, makeObservable, observable } from 'mobx';
|
|
2
|
+
export class RouteGroup {
|
|
3
|
+
routes;
|
|
4
|
+
constructor(routes) {
|
|
5
|
+
this.routes = routes;
|
|
6
|
+
computed.struct(this, 'isMatches');
|
|
7
|
+
observable.shallow(this, 'routes');
|
|
8
|
+
makeObservable(this);
|
|
9
|
+
}
|
|
10
|
+
get isOpened() {
|
|
11
|
+
const routes = Object.values(this.routes);
|
|
12
|
+
return routes.some((route) => route.isOpened);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route-group.types.d.ts","sourceRoot":"","sources":["../../src/route/route-group.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/route/route.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { IMobxHistory, IMobxLocation, IQueryParams } from 'mobx-location-history';
|
|
2
2
|
import { ParamData, TokenData } from 'path-to-regexp';
|
|
3
3
|
import { AllPropertiesOptional } from 'yummies/utils/types';
|
|
4
|
-
import { ExtractPathParams, RouteConfiguration, RouteGlobalConfiguration, RouteMatchesData, RouteNavigateParams } from './route.types.js';
|
|
4
|
+
import { AnyRoute, ExtractPathParams, RouteConfiguration, RouteGlobalConfiguration, RouteMatchesData, RouteNavigateParams } from './route.types.js';
|
|
5
5
|
export declare class Route<TPath extends string, TParentRoute extends Route<any, any> | null = null> {
|
|
6
6
|
path: TPath;
|
|
7
7
|
protected config: RouteConfiguration<TParentRoute>;
|
|
@@ -9,21 +9,25 @@ export declare class Route<TPath extends string, TParentRoute extends Route<any,
|
|
|
9
9
|
protected location: IMobxLocation;
|
|
10
10
|
query: IQueryParams;
|
|
11
11
|
private _tokenData;
|
|
12
|
+
children: AnyRoute[];
|
|
12
13
|
constructor(path: TPath, config?: RouteConfiguration<TParentRoute>);
|
|
13
|
-
get
|
|
14
|
-
get
|
|
15
|
-
extend<
|
|
14
|
+
get data(): RouteMatchesData<TPath> | null;
|
|
15
|
+
get isOpened(): boolean;
|
|
16
|
+
extend<TExtendPath extends string>(path: TExtendPath, config?: Omit<RouteConfiguration<any>, 'parent'>): Route<`${TPath}${TExtendPath}`, this>;
|
|
17
|
+
addChildren(...children: AnyRoute[]): void;
|
|
18
|
+
removeChildren(...childrenToRemove: AnyRoute[]): void;
|
|
19
|
+
get hasChildrenMatches(): boolean;
|
|
16
20
|
protected processParams(params?: ExtractPathParams<TPath> | null | undefined): ParamData | undefined;
|
|
17
21
|
protected get baseUrl(): string;
|
|
18
22
|
createUrl(...args: AllPropertiesOptional<ExtractPathParams<TPath>> extends true ? [
|
|
19
23
|
params?: ExtractPathParams<TPath> | null | undefined,
|
|
20
24
|
query?: Record<string, any>
|
|
21
25
|
] : [params: ExtractPathParams<TPath>, query?: Record<string, any>]): string;
|
|
22
|
-
|
|
26
|
+
open(...args: AllPropertiesOptional<ExtractPathParams<TPath>> extends true ? [
|
|
23
27
|
params?: ExtractPathParams<TPath> | null | undefined,
|
|
24
28
|
navigateParams?: RouteNavigateParams
|
|
25
29
|
] : [params: ExtractPathParams<TPath>, navigateParams?: RouteNavigateParams]): void;
|
|
26
|
-
|
|
30
|
+
open(url: string, navigateParams?: RouteNavigateParams): void;
|
|
27
31
|
protected get tokenData(): TokenData;
|
|
28
32
|
private static _globalConfiguration;
|
|
29
33
|
static setGlobalConfiguration(globalConfiguration: Partial<RouteGlobalConfiguration>): void;
|
package/route/route.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../src/route/route.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,YAAY,EACZ,aAAa,EACb,YAAY,EAIb,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAkB,SAAS,EAAS,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,wBAAwB,EACxB,gBAAgB,EAChB,mBAAmB,EACpB,MAAM,kBAAkB,CAAC;AAE1B,qBAAa,KAAK,CAChB,KAAK,SAAS,MAAM,EACpB,YAAY,SAAS,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../src/route/route.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,YAAY,EACZ,aAAa,EACb,YAAY,EAIb,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAkB,SAAS,EAAS,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,EACL,QAAQ,EACR,iBAAiB,EACjB,kBAAkB,EAClB,wBAAwB,EACxB,gBAAgB,EAChB,mBAAmB,EACpB,MAAM,kBAAkB,CAAC;AAE1B,qBAAa,KAAK,CAChB,KAAK,SAAS,MAAM,EACpB,YAAY,SAAS,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI;IAYzC,IAAI,EAAE,KAAK;IAClB,SAAS,CAAC,MAAM,EAAE,kBAAkB,CAAC,YAAY,CAAC;IAXpD,SAAS,CAAC,OAAO,EAAE,YAAY,CAAC;IAChC,SAAS,CAAC,QAAQ,EAAE,aAAa,CAAC;IAElC,KAAK,EAAE,YAAY,CAAC;IAEpB,OAAO,CAAC,UAAU,CAAwB;IAE1C,QAAQ,EAAE,QAAQ,EAAE,CAAM;gBAGjB,IAAI,EAAE,KAAK,EACR,MAAM,GAAE,kBAAkB,CAAC,YAAY,CAAM;IAgBzD,IAAI,IAAI,IAAI,gBAAgB,CAAC,KAAK,CAAC,GAAG,IAAI,CAsBzC;IAED,IAAI,QAAQ,YAEX;IAED,MAAM,CAAC,WAAW,SAAS,MAAM,EAC/B,IAAI,EAAE,WAAW,EACjB,MAAM,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC;IAmBlD,WAAW,CAAC,GAAG,QAAQ,EAAE,QAAQ,EAAE;IAInC,cAAc,CAAC,GAAG,gBAAgB,EAAE,QAAQ,EAAE;IAM9C,IAAI,kBAAkB,YAErB;IAED,SAAS,CAAC,aAAa,CACrB,MAAM,CAAC,EAAE,iBAAiB,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,SAAS,GACnD,SAAS,GAAG,SAAS;IAWxB,SAAS,KAAK,OAAO,WAIpB;IAED,SAAS,CACP,GAAG,IAAI,EAAE,qBAAqB,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,SAAS,IAAI,GACjE;QACE,MAAM,CAAC,EAAE,iBAAiB,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,SAAS;QACpD,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;KAC5B,GACD,CAAC,MAAM,EAAE,iBAAiB,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAerE,IAAI,CACF,GAAG,IAAI,EAAE,qBAAqB,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,SAAS,IAAI,GACjE;QACE,MAAM,CAAC,EAAE,iBAAiB,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,SAAS;QACpD,cAAc,CAAC,EAAE,mBAAmB;KACrC,GACD,CAAC,MAAM,EAAE,iBAAiB,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC,EAAE,mBAAmB,CAAC,GAC3E,IAAI;IAEP,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,mBAAmB,GAAG,IAAI;IAc7D,SAAS,KAAK,SAAS,cAKtB;IAED,OAAO,CAAC,MAAM,CAAC,oBAAoB,CAAuC;IAE1E,MAAM,CAAC,sBAAsB,CAC3B,mBAAmB,EAAE,OAAO,CAAC,wBAAwB,CAAC;IAgBxD,MAAM,KAAK,mBAAmB,6BAM7B;CACF"}
|
package/route/route.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { computed, makeObservable } from 'mobx';
|
|
1
|
+
import { action, computed, makeObservable, observable } from 'mobx';
|
|
2
2
|
import { buildSearchString, MobxHistory, MobxLocation, QueryParams, } from 'mobx-location-history';
|
|
3
3
|
import { compile, match, parse } from 'path-to-regexp';
|
|
4
4
|
export class Route {
|
|
@@ -8,6 +8,7 @@ export class Route {
|
|
|
8
8
|
location;
|
|
9
9
|
query;
|
|
10
10
|
_tokenData;
|
|
11
|
+
children = [];
|
|
11
12
|
constructor(path, config = {}) {
|
|
12
13
|
this.path = path;
|
|
13
14
|
this.config = config;
|
|
@@ -16,9 +17,13 @@ export class Route {
|
|
|
16
17
|
this.query = config.queryParams ?? Route.globalConfiguration.queryParams;
|
|
17
18
|
computed.struct(this, 'isMatches');
|
|
18
19
|
computed.struct(this, 'matchData');
|
|
20
|
+
computed.struct(this, 'hasChildrenMatches');
|
|
21
|
+
observable(this, 'children');
|
|
22
|
+
action(this, 'addChildren');
|
|
23
|
+
action(this, 'removeChildren');
|
|
19
24
|
makeObservable(this);
|
|
20
25
|
}
|
|
21
|
-
get
|
|
26
|
+
get data() {
|
|
22
27
|
let pathname = this.location.pathname;
|
|
23
28
|
if (this.baseUrl) {
|
|
24
29
|
if (!pathname.startsWith(this.baseUrl)) {
|
|
@@ -26,21 +31,35 @@ export class Route {
|
|
|
26
31
|
}
|
|
27
32
|
pathname = pathname.replace(this.baseUrl, '');
|
|
28
33
|
}
|
|
34
|
+
if (this.path === '' && pathname === '/') {
|
|
35
|
+
return { params: {}, path: pathname };
|
|
36
|
+
}
|
|
29
37
|
const parsed = match(this.tokenData)(pathname);
|
|
30
38
|
if (parsed === false) {
|
|
31
39
|
return null;
|
|
32
40
|
}
|
|
33
41
|
return parsed;
|
|
34
42
|
}
|
|
35
|
-
get
|
|
36
|
-
return this.
|
|
43
|
+
get isOpened() {
|
|
44
|
+
return this.data !== null;
|
|
37
45
|
}
|
|
38
46
|
extend(path, config) {
|
|
39
|
-
|
|
47
|
+
const extendedChild = new Route(`${this.path}${path}`, {
|
|
40
48
|
...this.config,
|
|
41
49
|
...config,
|
|
42
50
|
parent: this,
|
|
43
51
|
});
|
|
52
|
+
this.addChildren(extendedChild);
|
|
53
|
+
return extendedChild;
|
|
54
|
+
}
|
|
55
|
+
addChildren(...children) {
|
|
56
|
+
this.children.push(...children);
|
|
57
|
+
}
|
|
58
|
+
removeChildren(...childrenToRemove) {
|
|
59
|
+
this.children = this.children.filter((child) => !childrenToRemove.includes(child));
|
|
60
|
+
}
|
|
61
|
+
get hasChildrenMatches() {
|
|
62
|
+
return this.children.some((child) => child.isOpened);
|
|
44
63
|
}
|
|
45
64
|
processParams(params) {
|
|
46
65
|
if (params == null)
|
|
@@ -68,7 +87,7 @@ export class Route {
|
|
|
68
87
|
buildSearchString(queryParams || {}),
|
|
69
88
|
].join('');
|
|
70
89
|
}
|
|
71
|
-
|
|
90
|
+
open(...args) {
|
|
72
91
|
const url = typeof args[0] === 'string'
|
|
73
92
|
? args[0]
|
|
74
93
|
: this.createUrl(args[0], args[1]?.query);
|
package/route/route.test.js
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
|
+
/* eslint-disable sonarjs/no-dead-store */
|
|
2
|
+
/* eslint-disable sonarjs/sonar-no-unused-vars */
|
|
3
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
1
4
|
import { MobxHistory, MobxLocation } from 'mobx-location-history';
|
|
2
5
|
import { beforeEach, describe, expect, expectTypeOf, it, vi } from 'vitest';
|
|
6
|
+
import { RouteGroup } from './route-group.js';
|
|
3
7
|
import { Route } from './route.js';
|
|
4
8
|
class MobxHistoryMock extends MobxHistory {
|
|
5
9
|
pushStateSpy = vi.fn();
|
|
@@ -29,42 +33,42 @@ describe('route', () => {
|
|
|
29
33
|
});
|
|
30
34
|
it('empty string', () => {
|
|
31
35
|
const route = new Route('');
|
|
32
|
-
expect(route.
|
|
36
|
+
expect(route.isOpened).toBe(true);
|
|
33
37
|
});
|
|
34
38
|
it('/test', () => {
|
|
35
39
|
const route = new Route('/test');
|
|
36
|
-
route.
|
|
40
|
+
route.open();
|
|
37
41
|
expect(history.pushStateSpy).toBeCalledWith(null, '', '/test');
|
|
38
42
|
});
|
|
39
43
|
it('/test/:id/:bar{/:bar3}', () => {
|
|
40
44
|
const route = new Route('/test/:id/:bar{/:bar3}');
|
|
41
|
-
route.
|
|
45
|
+
route.open({
|
|
42
46
|
id: 1,
|
|
43
47
|
bar: 'barg',
|
|
44
48
|
});
|
|
45
49
|
expect(history.pushStateSpy).toBeCalledWith(null, '', '/test/1/barg');
|
|
46
|
-
expectTypeOf(route.
|
|
47
|
-
expectTypeOf(route.
|
|
50
|
+
expectTypeOf(route.open).toBeFunction();
|
|
51
|
+
expectTypeOf(route.open).parameter(0).toEqualTypeOf();
|
|
48
52
|
});
|
|
49
53
|
it('/test/*splat', () => {
|
|
50
54
|
const route = new Route('/test/*splat');
|
|
51
|
-
route.
|
|
55
|
+
route.open({
|
|
52
56
|
splat: [1, 2, 3],
|
|
53
57
|
});
|
|
54
58
|
expect(history.pushStateSpy).toBeCalledWith(null, '', '/test/1/2/3');
|
|
55
59
|
});
|
|
56
60
|
it('/users{/:id}/delete', () => {
|
|
57
61
|
const route = new Route('/users{/:id}/delete');
|
|
58
|
-
route.
|
|
62
|
+
route.open({
|
|
59
63
|
id: 1,
|
|
60
64
|
});
|
|
61
65
|
expect(history.pushStateSpy).toBeCalledWith(null, '', '/users/1/delete');
|
|
62
66
|
history.resetMocks();
|
|
63
|
-
route.
|
|
67
|
+
route.open();
|
|
64
68
|
expect(history.pushStateSpy).toBeCalledWith(null, '', '/users/delete');
|
|
65
69
|
history.resetMocks();
|
|
66
70
|
const childRoute = route.extend('/push/:id1{/:bar}');
|
|
67
|
-
childRoute.
|
|
71
|
+
childRoute.open({
|
|
68
72
|
id1: 1,
|
|
69
73
|
bar: 2,
|
|
70
74
|
id: 3,
|
|
@@ -73,15 +77,15 @@ describe('route', () => {
|
|
|
73
77
|
});
|
|
74
78
|
it('/posts{/:slug}/*rest', () => {
|
|
75
79
|
const route = new Route('/posts{/:slug}/*rest');
|
|
76
|
-
route.
|
|
80
|
+
route.open({
|
|
77
81
|
slug: true,
|
|
78
82
|
rest: [1, 2, 3, 'bar'],
|
|
79
83
|
});
|
|
80
84
|
expect(history.pushStateSpy).toBeCalledWith(null, '', '/posts/true/1/2/3/bar');
|
|
81
85
|
const otherRoute = new Route('/kek/pek');
|
|
82
|
-
expect(otherRoute.
|
|
83
|
-
expect(route.
|
|
84
|
-
expect(route.
|
|
86
|
+
expect(otherRoute.isOpened).toBe(false);
|
|
87
|
+
expect(route.isOpened).toBe(true);
|
|
88
|
+
expect(route.data).toEqual({
|
|
85
89
|
path: '/posts/true/1/2/3/bar',
|
|
86
90
|
params: {
|
|
87
91
|
rest: ['1', '2', '3', 'bar'],
|
|
@@ -91,18 +95,18 @@ describe('route', () => {
|
|
|
91
95
|
});
|
|
92
96
|
it('/test/:id/:bar + baseUrl + query params', () => {
|
|
93
97
|
const route = new Route('/test/:id/:bar', { baseUrl: '/mobx-view-model' });
|
|
94
|
-
route.
|
|
98
|
+
route.open({
|
|
95
99
|
id: 1,
|
|
96
100
|
bar: 'barg',
|
|
97
101
|
}, {
|
|
98
102
|
query: { a: 1 },
|
|
99
103
|
});
|
|
100
104
|
expect(history.pushStateSpy).toBeCalledWith(null, '', '/mobx-view-model/test/1/barg?a=1');
|
|
101
|
-
expect(route.
|
|
105
|
+
expect(route.isOpened).toBe(true);
|
|
102
106
|
});
|
|
103
107
|
it('/test/:id/:bar + baseUrl + query params + (query params tests)', () => {
|
|
104
108
|
const route = new Route('/test/:id/:bar', { baseUrl: '/mobx-view-model' });
|
|
105
|
-
route.
|
|
109
|
+
route.open({
|
|
106
110
|
id: 1,
|
|
107
111
|
bar: 'barg',
|
|
108
112
|
}, {
|
|
@@ -112,4 +116,26 @@ describe('route', () => {
|
|
|
112
116
|
expect(location.search).toBe('?a=3&b=1%2C2%2C3');
|
|
113
117
|
expect(route.query.data).toEqual({ a: '3', b: '1,2,3' });
|
|
114
118
|
});
|
|
119
|
+
it('hierarchy test', () => {
|
|
120
|
+
const routes = {
|
|
121
|
+
private: new RouteGroup({
|
|
122
|
+
techreview: new Route('/techreview'),
|
|
123
|
+
techreviewTemplates: new Route('/techreview-templates'),
|
|
124
|
+
employee: new Route('/employee'),
|
|
125
|
+
matrices: new Route('/matrices'),
|
|
126
|
+
orgstructure: new Route('/orgstructure'),
|
|
127
|
+
roles: new Route('/roles'),
|
|
128
|
+
account: new Route('/account'),
|
|
129
|
+
}),
|
|
130
|
+
notFound: new Route('/not-found'),
|
|
131
|
+
noAccess: new Route('/no-access'),
|
|
132
|
+
login: new Route('/login'),
|
|
133
|
+
};
|
|
134
|
+
expect(routes.private.isOpened).toBe(false);
|
|
135
|
+
expect(routes.private.routes.matrices.isOpened).toBe(false);
|
|
136
|
+
history.pushState(null, '', '/matrices');
|
|
137
|
+
expect(routes.private.isOpened).toBe(true);
|
|
138
|
+
expect(routes.private.routes.matrices.isOpened).toBe(true);
|
|
139
|
+
expect(routes.private.routes.techreview.isOpened).toBe(false);
|
|
140
|
+
});
|
|
115
141
|
});
|
package/route/route.types.d.ts
CHANGED
|
@@ -7,10 +7,12 @@ export interface RouteGlobalConfiguration {
|
|
|
7
7
|
queryParams: IQueryParams;
|
|
8
8
|
}
|
|
9
9
|
export interface RouteConfiguration<TParentRoute extends AnyRoute | null = null> extends Partial<RouteGlobalConfiguration> {
|
|
10
|
+
index?: boolean;
|
|
10
11
|
baseUrl?: string;
|
|
11
12
|
meta?: Record<string, any>;
|
|
12
13
|
parseOptions?: ParseOptions;
|
|
13
14
|
parent?: TParentRoute;
|
|
15
|
+
children?: AnyRoute[];
|
|
14
16
|
}
|
|
15
17
|
export type AnyRoute = Route<any, any>;
|
|
16
18
|
export type PathParam = string | number | boolean | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route.types.d.ts","sourceRoot":"","sources":["../../src/route/route.types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"route.types.d.ts","sourceRoot":"","sources":["../../src/route/route.types.ts"],"names":[],"mappings":"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"}
|