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.
@@ -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.navigate(href, { replace, query });
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.8",
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
@@ -1,3 +1,6 @@
1
1
  export * from './route.types.js';
2
2
  export * from './route.js';
3
+ export * from './route-group.js';
4
+ export * from './route-group.types.js';
5
+ export * from './virtual-route.js';
3
6
  //# sourceMappingURL=index.d.ts.map
@@ -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
@@ -1,2 +1,5 @@
1
1
  export * from './route.types.js';
2
2
  export * from './route.js';
3
+ export * from './route-group.js';
4
+ export * from './route-group.types.js';
5
+ export * from './virtual-route.js';
@@ -1,8 +1,10 @@
1
1
  import { AnyRouteGroup } from './route-group.types.js';
2
2
  import { AnyRoute } from './route.types.js';
3
- export declare class RouteGroup<TGrouppedRoutes extends Record<string, AnyRoute | AnyRouteGroup>> {
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 isMatches(): boolean;
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;AAE5C,qBAAa,UAAU,CACrB,eAAe,SAAS,MAAM,CAAC,MAAM,EAAE,QAAQ,GAAG,aAAa,CAAC;IAE7C,MAAM,EAAE,eAAe;gBAAvB,MAAM,EAAE,eAAe;IAM1C,IAAI,SAAS,IAAI,OAAO,CAGvB;CACF"}
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"}
@@ -7,8 +7,24 @@ export class RouteGroup {
7
7
  observable.shallow(this, 'routes');
8
8
  makeObservable(this);
9
9
  }
10
- get isMatches() {
10
+ get isOpened() {
11
11
  const routes = Object.values(this.routes);
12
- return routes.some((route) => route.isMatches);
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 match(): RouteMatchesData<TPath> | null;
15
- get isMatches(): boolean;
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
- navigate(...args: AllPropertiesOptional<ExtractPathParams<TPath>> extends true ? [
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
- navigate(url: string, navigateParams?: RouteNavigateParams): void;
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;
@@ -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,KAAK,IAAI,gBAAgB,CAAC,KAAK,CAAC,GAAG,IAAI,CAsB1C;IAED,IAAI,SAAS,YAEZ;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,QAAQ,CACN,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,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,mBAAmB,GAAG,IAAI;IAcjE,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"}
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 match() {
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 isMatches() {
44
- return this.match !== null;
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.isMatches);
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
- return !this.config.baseUrl || this.config.baseUrl === '/'
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
- navigate(...args) {
92
+ open(...args) {
91
93
  const url = typeof args[0] === 'string'
92
94
  ? args[0]
93
95
  : this.createUrl(args[0], args[1]?.query);
@@ -33,42 +33,42 @@ describe('route', () => {
33
33
  });
34
34
  it('empty string', () => {
35
35
  const route = new Route('');
36
- expect(route.isMatches).toBe(true);
36
+ expect(route.isOpened).toBe(true);
37
37
  });
38
38
  it('/test', () => {
39
39
  const route = new Route('/test');
40
- route.navigate();
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.navigate({
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.navigate).toBeFunction();
51
- expectTypeOf(route.navigate).parameter(0).toEqualTypeOf();
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.navigate({
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.navigate({
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.navigate();
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.navigate({
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.navigate({
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.isMatches).toBe(false);
87
- expect(route.isMatches).toBe(true);
88
- expect(route.match).toEqual({
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.navigate({
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.isMatches).toBe(true);
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.navigate({
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 Route('/roles'),
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.isMatches).toBe(false);
135
- expect(routes.private.routes.matrices.isMatches).toBe(false);
140
+ expect(routes.private.isOpened).toBe(false);
141
+ expect(routes.private.routes.matrices.isOpened).toBe(false);
136
142
  history.pushState(null, '', '/matrices');
137
- expect(routes.private.isMatches).toBe(true);
138
- expect(routes.private.routes.matrices.isMatches).toBe(true);
139
- expect(routes.private.routes.techreview.isMatches).toBe(false);
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
  });
@@ -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
- baseUrl?: string;
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":"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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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"}
@@ -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
+ }