mobx-route 0.0.8 → 0.0.10
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 +3 -0
- package/route/index.d.ts.map +1 -1
- package/route/index.js +3 -0
- package/route/route-group.d.ts +4 -2
- package/route/route-group.d.ts.map +1 -1
- package/route/route-group.js +18 -2
- package/route/route.d.ts +5 -4
- package/route/route.d.ts.map +1 -1
- package/route/route.js +10 -8
- package/route/route.test.js +36 -22
- package/route/route.types.d.ts +2 -1
- package/route/route.types.d.ts.map +1 -1
- package/route/virtual-route.d.ts +10 -0
- package/route/virtual-route.d.ts.map +1 -0
- package/route/virtual-route.js +19 -0
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.10",
|
|
4
4
|
"keywords": [
|
|
5
5
|
"mobx",
|
|
6
6
|
"react",
|
|
@@ -80,6 +80,11 @@
|
|
|
80
80
|
"default": "./route/route.js",
|
|
81
81
|
"types": "./route/route.d.ts"
|
|
82
82
|
},
|
|
83
|
+
"./route/virtual-route": {
|
|
84
|
+
"import": "./route/virtual-route.js",
|
|
85
|
+
"default": "./route/virtual-route.js",
|
|
86
|
+
"types": "./route/virtual-route.d.ts"
|
|
87
|
+
},
|
|
83
88
|
"./package.json": "./package.json"
|
|
84
89
|
},
|
|
85
90
|
"files": [
|
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;AACvC,cAAc,oBAAoB,CAAC"}
|
package/route/index.js
CHANGED
package/route/route-group.d.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { AnyRouteGroup } from './route-group.types.js';
|
|
2
2
|
import { AnyRoute } from './route.types.js';
|
|
3
|
-
|
|
3
|
+
import { VirtualRoute } from './virtual-route.js';
|
|
4
|
+
export declare class RouteGroup<TGrouppedRoutes extends Record<string, AnyRoute | AnyRouteGroup | VirtualRoute>> {
|
|
4
5
|
routes: TGrouppedRoutes;
|
|
5
6
|
constructor(routes: TGrouppedRoutes);
|
|
6
|
-
get
|
|
7
|
+
get isOpened(): boolean;
|
|
8
|
+
open(...args: any[]): void;
|
|
7
9
|
}
|
|
8
10
|
//# sourceMappingURL=route-group.d.ts.map
|
|
@@ -1 +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;
|
|
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;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,qBAAa,UAAU,CACrB,eAAe,SAAS,MAAM,CAC5B,MAAM,EACN,QAAQ,GAAG,aAAa,GAAG,YAAY,CACxC;IAEkB,MAAM,EAAE,eAAe;gBAAvB,MAAM,EAAE,eAAe;IAM1C,IAAI,QAAQ,IAAI,OAAO,CAGtB;IAED,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE;CAiBpB"}
|
package/route/route-group.js
CHANGED
|
@@ -7,8 +7,24 @@ export class RouteGroup {
|
|
|
7
7
|
observable.shallow(this, 'routes');
|
|
8
8
|
makeObservable(this);
|
|
9
9
|
}
|
|
10
|
-
get
|
|
10
|
+
get isOpened() {
|
|
11
11
|
const routes = Object.values(this.routes);
|
|
12
|
-
return routes.some((route) => route.
|
|
12
|
+
return routes.some((route) => route.isOpened);
|
|
13
|
+
}
|
|
14
|
+
open(...args) {
|
|
15
|
+
let lastGroupRoute;
|
|
16
|
+
for (const routeName in this.routes) {
|
|
17
|
+
const route = this.routes[routeName];
|
|
18
|
+
if (route instanceof RouteGroup) {
|
|
19
|
+
lastGroupRoute = route;
|
|
20
|
+
}
|
|
21
|
+
else if ('isIndex' in route && route.isIndex) {
|
|
22
|
+
route.open(...args);
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
if (lastGroupRoute) {
|
|
27
|
+
lastGroupRoute.open();
|
|
28
|
+
}
|
|
13
29
|
}
|
|
14
30
|
}
|
package/route/route.d.ts
CHANGED
|
@@ -11,8 +11,9 @@ export declare class Route<TPath extends string, TParentRoute extends Route<any,
|
|
|
11
11
|
private _tokenData;
|
|
12
12
|
children: AnyRoute[];
|
|
13
13
|
constructor(path: TPath, config?: RouteConfiguration<TParentRoute>);
|
|
14
|
-
get
|
|
15
|
-
get
|
|
14
|
+
get data(): RouteMatchesData<TPath> | null;
|
|
15
|
+
get isOpened(): boolean;
|
|
16
|
+
get isIndex(): boolean;
|
|
16
17
|
extend<TExtendPath extends string>(path: TExtendPath, config?: Omit<RouteConfiguration<any>, 'parent'>): Route<`${TPath}${TExtendPath}`, this>;
|
|
17
18
|
addChildren(...children: AnyRoute[]): void;
|
|
18
19
|
removeChildren(...childrenToRemove: AnyRoute[]): void;
|
|
@@ -23,11 +24,11 @@ export declare class Route<TPath extends string, TParentRoute extends Route<any,
|
|
|
23
24
|
params?: ExtractPathParams<TPath> | null | undefined,
|
|
24
25
|
query?: Record<string, any>
|
|
25
26
|
] : [params: ExtractPathParams<TPath>, query?: Record<string, any>]): string;
|
|
26
|
-
|
|
27
|
+
open(...args: AllPropertiesOptional<ExtractPathParams<TPath>> extends true ? [
|
|
27
28
|
params?: ExtractPathParams<TPath> | null | undefined,
|
|
28
29
|
navigateParams?: RouteNavigateParams
|
|
29
30
|
] : [params: ExtractPathParams<TPath>, navigateParams?: RouteNavigateParams]): void;
|
|
30
|
-
|
|
31
|
+
open(url: string, navigateParams?: RouteNavigateParams): void;
|
|
31
32
|
protected get tokenData(): TokenData;
|
|
32
33
|
private static _globalConfiguration;
|
|
33
34
|
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,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,
|
|
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,IAAI,OAAO,YAEV;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,WAKpB;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
|
@@ -23,7 +23,7 @@ export class Route {
|
|
|
23
23
|
action(this, 'removeChildren');
|
|
24
24
|
makeObservable(this);
|
|
25
25
|
}
|
|
26
|
-
get
|
|
26
|
+
get data() {
|
|
27
27
|
let pathname = this.location.pathname;
|
|
28
28
|
if (this.baseUrl) {
|
|
29
29
|
if (!pathname.startsWith(this.baseUrl)) {
|
|
@@ -40,8 +40,11 @@ export class Route {
|
|
|
40
40
|
}
|
|
41
41
|
return parsed;
|
|
42
42
|
}
|
|
43
|
-
get
|
|
44
|
-
return this.
|
|
43
|
+
get isOpened() {
|
|
44
|
+
return this.data !== null;
|
|
45
|
+
}
|
|
46
|
+
get isIndex() {
|
|
47
|
+
return !!this.config.index;
|
|
45
48
|
}
|
|
46
49
|
extend(path, config) {
|
|
47
50
|
const extendedChild = new Route(`${this.path}${path}`, {
|
|
@@ -59,7 +62,7 @@ export class Route {
|
|
|
59
62
|
this.children = this.children.filter((child) => !childrenToRemove.includes(child));
|
|
60
63
|
}
|
|
61
64
|
get hasChildrenMatches() {
|
|
62
|
-
return this.children.some((child) => child.
|
|
65
|
+
return this.children.some((child) => child.isOpened);
|
|
63
66
|
}
|
|
64
67
|
processParams(params) {
|
|
65
68
|
if (params == null)
|
|
@@ -72,9 +75,8 @@ export class Route {
|
|
|
72
75
|
}, {});
|
|
73
76
|
}
|
|
74
77
|
get baseUrl() {
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
: this.config.baseUrl;
|
|
78
|
+
const usedBaseUrl = this.config.baseUrl ?? Route.globalConfiguration.baseUrl;
|
|
79
|
+
return !usedBaseUrl || usedBaseUrl === '/' ? '' : usedBaseUrl;
|
|
78
80
|
}
|
|
79
81
|
createUrl(...args) {
|
|
80
82
|
const pathParams = args[0];
|
|
@@ -87,7 +89,7 @@ export class Route {
|
|
|
87
89
|
buildSearchString(queryParams || {}),
|
|
88
90
|
].join('');
|
|
89
91
|
}
|
|
90
|
-
|
|
92
|
+
open(...args) {
|
|
91
93
|
const url = typeof args[0] === 'string'
|
|
92
94
|
? args[0]
|
|
93
95
|
: this.createUrl(args[0], args[1]?.query);
|
package/route/route.test.js
CHANGED
|
@@ -33,42 +33,42 @@ describe('route', () => {
|
|
|
33
33
|
});
|
|
34
34
|
it('empty string', () => {
|
|
35
35
|
const route = new Route('');
|
|
36
|
-
expect(route.
|
|
36
|
+
expect(route.isOpened).toBe(true);
|
|
37
37
|
});
|
|
38
38
|
it('/test', () => {
|
|
39
39
|
const route = new Route('/test');
|
|
40
|
-
route.
|
|
40
|
+
route.open();
|
|
41
41
|
expect(history.pushStateSpy).toBeCalledWith(null, '', '/test');
|
|
42
42
|
});
|
|
43
43
|
it('/test/:id/:bar{/:bar3}', () => {
|
|
44
44
|
const route = new Route('/test/:id/:bar{/:bar3}');
|
|
45
|
-
route.
|
|
45
|
+
route.open({
|
|
46
46
|
id: 1,
|
|
47
47
|
bar: 'barg',
|
|
48
48
|
});
|
|
49
49
|
expect(history.pushStateSpy).toBeCalledWith(null, '', '/test/1/barg');
|
|
50
|
-
expectTypeOf(route.
|
|
51
|
-
expectTypeOf(route.
|
|
50
|
+
expectTypeOf(route.open).toBeFunction();
|
|
51
|
+
expectTypeOf(route.open).parameter(0).toEqualTypeOf();
|
|
52
52
|
});
|
|
53
53
|
it('/test/*splat', () => {
|
|
54
54
|
const route = new Route('/test/*splat');
|
|
55
|
-
route.
|
|
55
|
+
route.open({
|
|
56
56
|
splat: [1, 2, 3],
|
|
57
57
|
});
|
|
58
58
|
expect(history.pushStateSpy).toBeCalledWith(null, '', '/test/1/2/3');
|
|
59
59
|
});
|
|
60
60
|
it('/users{/:id}/delete', () => {
|
|
61
61
|
const route = new Route('/users{/:id}/delete');
|
|
62
|
-
route.
|
|
62
|
+
route.open({
|
|
63
63
|
id: 1,
|
|
64
64
|
});
|
|
65
65
|
expect(history.pushStateSpy).toBeCalledWith(null, '', '/users/1/delete');
|
|
66
66
|
history.resetMocks();
|
|
67
|
-
route.
|
|
67
|
+
route.open();
|
|
68
68
|
expect(history.pushStateSpy).toBeCalledWith(null, '', '/users/delete');
|
|
69
69
|
history.resetMocks();
|
|
70
70
|
const childRoute = route.extend('/push/:id1{/:bar}');
|
|
71
|
-
childRoute.
|
|
71
|
+
childRoute.open({
|
|
72
72
|
id1: 1,
|
|
73
73
|
bar: 2,
|
|
74
74
|
id: 3,
|
|
@@ -77,15 +77,15 @@ describe('route', () => {
|
|
|
77
77
|
});
|
|
78
78
|
it('/posts{/:slug}/*rest', () => {
|
|
79
79
|
const route = new Route('/posts{/:slug}/*rest');
|
|
80
|
-
route.
|
|
80
|
+
route.open({
|
|
81
81
|
slug: true,
|
|
82
82
|
rest: [1, 2, 3, 'bar'],
|
|
83
83
|
});
|
|
84
84
|
expect(history.pushStateSpy).toBeCalledWith(null, '', '/posts/true/1/2/3/bar');
|
|
85
85
|
const otherRoute = new Route('/kek/pek');
|
|
86
|
-
expect(otherRoute.
|
|
87
|
-
expect(route.
|
|
88
|
-
expect(route.
|
|
86
|
+
expect(otherRoute.isOpened).toBe(false);
|
|
87
|
+
expect(route.isOpened).toBe(true);
|
|
88
|
+
expect(route.data).toEqual({
|
|
89
89
|
path: '/posts/true/1/2/3/bar',
|
|
90
90
|
params: {
|
|
91
91
|
rest: ['1', '2', '3', 'bar'],
|
|
@@ -95,18 +95,18 @@ describe('route', () => {
|
|
|
95
95
|
});
|
|
96
96
|
it('/test/:id/:bar + baseUrl + query params', () => {
|
|
97
97
|
const route = new Route('/test/:id/:bar', { baseUrl: '/mobx-view-model' });
|
|
98
|
-
route.
|
|
98
|
+
route.open({
|
|
99
99
|
id: 1,
|
|
100
100
|
bar: 'barg',
|
|
101
101
|
}, {
|
|
102
102
|
query: { a: 1 },
|
|
103
103
|
});
|
|
104
104
|
expect(history.pushStateSpy).toBeCalledWith(null, '', '/mobx-view-model/test/1/barg?a=1');
|
|
105
|
-
expect(route.
|
|
105
|
+
expect(route.isOpened).toBe(true);
|
|
106
106
|
});
|
|
107
107
|
it('/test/:id/:bar + baseUrl + query params + (query params tests)', () => {
|
|
108
108
|
const route = new Route('/test/:id/:bar', { baseUrl: '/mobx-view-model' });
|
|
109
|
-
route.
|
|
109
|
+
route.open({
|
|
110
110
|
id: 1,
|
|
111
111
|
bar: 'barg',
|
|
112
112
|
}, {
|
|
@@ -119,23 +119,37 @@ describe('route', () => {
|
|
|
119
119
|
it('hierarchy test', () => {
|
|
120
120
|
const routes = {
|
|
121
121
|
private: new RouteGroup({
|
|
122
|
+
index: new Route('/', { index: true }),
|
|
122
123
|
techreview: new Route('/techreview'),
|
|
123
124
|
techreviewTemplates: new Route('/techreview-templates'),
|
|
124
125
|
employee: new Route('/employee'),
|
|
125
126
|
matrices: new Route('/matrices'),
|
|
126
127
|
orgstructure: new Route('/orgstructure'),
|
|
127
|
-
roles: new
|
|
128
|
+
roles: new RouteGroup({
|
|
129
|
+
index: new Route('/roles', { index: true }),
|
|
130
|
+
list: new Route('/roles/list'),
|
|
131
|
+
create: new Route('/roles/create'),
|
|
132
|
+
edit: new Route('/roles/edit/:id'),
|
|
133
|
+
}),
|
|
128
134
|
account: new Route('/account'),
|
|
129
135
|
}),
|
|
130
136
|
notFound: new Route('/not-found'),
|
|
131
137
|
noAccess: new Route('/no-access'),
|
|
132
138
|
login: new Route('/login'),
|
|
133
139
|
};
|
|
134
|
-
expect(routes.private.
|
|
135
|
-
expect(routes.private.routes.matrices.
|
|
140
|
+
expect(routes.private.isOpened).toBe(false);
|
|
141
|
+
expect(routes.private.routes.matrices.isOpened).toBe(false);
|
|
136
142
|
history.pushState(null, '', '/matrices');
|
|
137
|
-
|
|
138
|
-
expect(routes.private.
|
|
139
|
-
expect(routes.private.routes.
|
|
143
|
+
history.resetMocks();
|
|
144
|
+
expect(routes.private.isOpened).toBe(true);
|
|
145
|
+
expect(routes.private.routes.matrices.isOpened).toBe(true);
|
|
146
|
+
expect(routes.private.routes.techreview.isOpened).toBe(false);
|
|
147
|
+
routes.private.routes.index.open();
|
|
148
|
+
expect(routes.private.isOpened).toBe(true);
|
|
149
|
+
expect(routes.private.routes.index.isOpened).toBe(true);
|
|
150
|
+
expect(routes.private.routes.techreview.isOpened).toBe(false);
|
|
151
|
+
expect(history.pushStateSpy).toBeCalledWith(null, '', '/');
|
|
152
|
+
expect(location.href).toBe('http://localhost:3000/');
|
|
153
|
+
history.resetMocks();
|
|
140
154
|
});
|
|
141
155
|
});
|
package/route/route.types.d.ts
CHANGED
|
@@ -5,9 +5,10 @@ export interface RouteGlobalConfiguration {
|
|
|
5
5
|
history: IMobxHistory;
|
|
6
6
|
location: IMobxLocation;
|
|
7
7
|
queryParams: IQueryParams;
|
|
8
|
+
baseUrl?: string;
|
|
8
9
|
}
|
|
9
10
|
export interface RouteConfiguration<TParentRoute extends AnyRoute | null = null> extends Partial<RouteGlobalConfiguration> {
|
|
10
|
-
|
|
11
|
+
index?: boolean;
|
|
11
12
|
meta?: Record<string, any>;
|
|
12
13
|
parseOptions?: ParseOptions;
|
|
13
14
|
parent?: TParentRoute;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route.types.d.ts","sourceRoot":"","sources":["../../src/route/route.types.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,aAAa,EACb,YAAY,EACb,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,YAAY,CAAC;IACtB,QAAQ,EAAE,aAAa,CAAC;IACxB,WAAW,EAAE,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"route.types.d.ts","sourceRoot":"","sources":["../../src/route/route.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { FnValue } from 'yummies/common';
|
|
2
|
+
export declare class VirtualRoute {
|
|
3
|
+
private isOpenedResolver?;
|
|
4
|
+
constructor(isOpenedResolver?: FnValue<boolean>);
|
|
5
|
+
get isOpened(): boolean;
|
|
6
|
+
setResolver(isOpenedResolver: FnValue<boolean>): void;
|
|
7
|
+
open(): void;
|
|
8
|
+
close(): void;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=virtual-route.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"virtual-route.d.ts","sourceRoot":"","sources":["../../src/route/virtual-route.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAkB,MAAM,gBAAgB,CAAC;AAGzD,qBAAa,YAAY;IACvB,OAAO,CAAC,gBAAgB,CAAC,CAA0B;gBAEvC,gBAAgB,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC;IAI/C,IAAI,QAAQ,YAIX;IAED,WAAW,CAAC,gBAAgB,EAAE,OAAO,CAAC,OAAO,CAAC;IAI9C,IAAI;IAIJ,KAAK;CAGN"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { resolveFnValue } from 'yummies/common';
|
|
2
|
+
export class VirtualRoute {
|
|
3
|
+
isOpenedResolver;
|
|
4
|
+
constructor(isOpenedResolver) {
|
|
5
|
+
this.isOpenedResolver = isOpenedResolver;
|
|
6
|
+
}
|
|
7
|
+
get isOpened() {
|
|
8
|
+
return (this.isOpenedResolver != null && resolveFnValue(this.isOpenedResolver));
|
|
9
|
+
}
|
|
10
|
+
setResolver(isOpenedResolver) {
|
|
11
|
+
this.isOpenedResolver = isOpenedResolver;
|
|
12
|
+
}
|
|
13
|
+
open() {
|
|
14
|
+
this.isOpenedResolver = true;
|
|
15
|
+
}
|
|
16
|
+
close() {
|
|
17
|
+
this.isOpenedResolver = false;
|
|
18
|
+
}
|
|
19
|
+
}
|