mobx-route 0.4.0 → 0.6.0

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.
@@ -1,15 +1,15 @@
1
1
  import { History, IQueryParams } from 'mobx-location-history';
2
2
  import { ParamData, TokenData } from 'path-to-regexp';
3
3
  import { IsPartial, AnyObject, Maybe, MaybePromise } from 'yummies/utils/types';
4
- import { AnyRoute, BeforeOpenFeedback, PreparedNavigationData, ExtractPathParams, RouteConfiguration, ParsedPathData, RouteNavigateParams, IRoute } from './route.types.js';
4
+ import { AnyRoute, BeforeOpenFeedback, PreparedNavigationData, InputPathParams, RouteConfiguration, ParsedPathData, RouteNavigateParams, IRoute, ParsedPathParams } from './route.types.js';
5
5
  /**
6
6
  * Class for creating path based route.
7
7
  *
8
8
  * [**Documentation**](https://js2me.github.io/mobx-route/core/Route.html)
9
9
  */
10
- export declare class Route<TPath extends string, TParams extends AnyObject = ExtractPathParams<TPath>, TParentRoute extends Route<any, any, any> | null = null> implements IRoute<TPath> {
10
+ export declare class Route<TPath extends string, TInputParams extends InputPathParams<TPath> = InputPathParams<TPath>, TOutputParams extends AnyObject = ParsedPathParams<TPath>, TParentRoute extends Route<any, any, any, any> | null = null> implements IRoute<TPath, TInputParams, TOutputParams> {
11
11
  path: TPath;
12
- protected config: RouteConfiguration<TPath, TParams, TParentRoute>;
12
+ protected config: RouteConfiguration<TPath, TInputParams, TOutputParams, TParentRoute>;
13
13
  protected abortController: AbortController;
14
14
  protected history: History;
15
15
  parent: TParentRoute;
@@ -30,7 +30,7 @@ export declare class Route<TPath extends string, TParams extends AnyObject = Ext
30
30
  */
31
31
  isHash: boolean;
32
32
  children: AnyRoute[];
33
- constructor(path: TPath, config?: RouteConfiguration<TPath, TParams, TParentRoute>);
33
+ constructor(path: TPath, config?: RouteConfiguration<TPath, TInputParams, TOutputParams, TParentRoute>);
34
34
  protected get baseUrl(): string | undefined;
35
35
  protected get parsedPathData(): ParsedPathData<TPath> | null;
36
36
  /**
@@ -44,7 +44,7 @@ export declare class Route<TPath extends string, TParams extends AnyObject = Ext
44
44
  *
45
45
  * [**Documentation**](https://js2me.github.io/mobx-route/core/Route.html#params-parsedpathparams-null)
46
46
  */
47
- get params(): TParams | null;
47
+ get params(): TOutputParams | null;
48
48
  /**
49
49
  * Defines the "open" state for this route.
50
50
  *
@@ -56,36 +56,36 @@ export declare class Route<TPath extends string, TParams extends AnyObject = Ext
56
56
  *
57
57
  * [**Documentation**](https://js2me.github.io/mobx-route/core/Route.html#extend-path-config-route)
58
58
  */
59
- extend<TExtendPath extends string, TParams extends AnyObject = ExtractPathParams<`${TPath}${TExtendPath}`>>(path: TExtendPath, config?: Omit<RouteConfiguration<`${TPath}${TExtendPath}`, TParams, any>, 'parent'>): Route<`${TPath}${TExtendPath}`, TParams, this>;
59
+ extend<TExtendPath extends string, TInputParams extends InputPathParams<`${TPath}${TExtendPath}`> = InputPathParams<`${TPath}${TExtendPath}`>, TOutputParams extends AnyObject = ParsedPathParams<`${TPath}${TExtendPath}`>>(path: TExtendPath, config?: Omit<RouteConfiguration<`${TPath}${TExtendPath}`, TInputParams, TOutputParams, any>, 'parent'>): Route<`${TPath}${TExtendPath}`, TInputParams, TOutputParams, this>;
60
60
  addChildren(...routes: AnyRoute[]): void;
61
61
  removeChildren(...routes: AnyRoute[]): void;
62
62
  /**
63
63
  * [**Documentation**](https://js2me.github.io/mobx-route/core/Route.html#hasopenedchildren-boolean)
64
64
  */
65
65
  get hasOpenedChildren(): boolean;
66
- protected processParams(params?: ExtractPathParams<TPath> | null | undefined): ParamData | undefined;
67
- createUrl(...args: IsPartial<ExtractPathParams<TPath>> extends true ? [params?: Maybe<ExtractPathParams<TPath>>, query?: AnyObject] : [params: ExtractPathParams<TPath>, query?: AnyObject]): string;
66
+ protected processParams(params?: TInputParams | null | undefined): ParamData | undefined;
67
+ createUrl(...args: IsPartial<TInputParams> extends true ? [params?: Maybe<TInputParams>, query?: AnyObject] : [params: TInputParams, query?: AnyObject]): string;
68
68
  /**
69
69
  * Navigates to this route.
70
70
  *
71
71
  * [**Documentation**](https://js2me.github.io/mobx-route/core/Route.html#open-args)
72
72
  */
73
- open(...args: IsPartial<ExtractPathParams<TPath>> extends true ? [
74
- params?: ExtractPathParams<TPath> | null | undefined,
73
+ open(...args: IsPartial<TInputParams> extends true ? [
74
+ params?: TInputParams | null | undefined,
75
75
  navigateParams?: RouteNavigateParams
76
- ] : [params: ExtractPathParams<TPath>, navigateParams?: RouteNavigateParams]): Promise<void>;
77
- open(...args: IsPartial<ExtractPathParams<TPath>> extends true ? [
78
- params?: ExtractPathParams<TPath> | null | undefined,
76
+ ] : [params: TInputParams, navigateParams?: RouteNavigateParams]): Promise<void>;
77
+ open(...args: IsPartial<TInputParams> extends true ? [
78
+ params?: TInputParams | null | undefined,
79
79
  replace?: RouteNavigateParams['replace'],
80
80
  query?: RouteNavigateParams['query']
81
81
  ] : [
82
- params: ExtractPathParams<TPath>,
82
+ params: TInputParams,
83
83
  replace?: RouteNavigateParams['replace'],
84
84
  query?: RouteNavigateParams['query']
85
85
  ]): Promise<void>;
86
86
  open(url: string, navigateParams?: RouteNavigateParams): Promise<void>;
87
87
  open(url: string, replace?: RouteNavigateParams['replace'], query?: RouteNavigateParams['query']): Promise<void>;
88
- protected beforeOpen(openData: PreparedNavigationData): MaybePromise<BeforeOpenFeedback>;
88
+ protected beforeOpen(openData: PreparedNavigationData<TInputParams>): MaybePromise<BeforeOpenFeedback>;
89
89
  protected afterClose(): true | void;
90
90
  protected get tokenData(): TokenData;
91
91
  destroy(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../src/core/route/route.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../src/core/route/route.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  /* eslint-disable prefer-const */
2
2
  import { LinkedAbortController } from 'linked-abort-controller';
3
- import { action, computed, makeObservable, observable, reaction, when, } from 'mobx';
3
+ import { action, computed, makeObservable, observable, onBecomeObserved, onBecomeUnobserved, reaction, } from 'mobx';
4
4
  import { buildSearchString, } from 'mobx-location-history';
5
5
  import { compile, match, parse } from 'path-to-regexp';
6
6
  import { routeConfig } from '../config/config.js';
@@ -52,30 +52,34 @@ export class Route {
52
52
  action(this, 'addChildren');
53
53
  action(this, 'removeChildren');
54
54
  makeObservable(this);
55
- if (this.config.afterOpen) {
56
- when(() => this.isOpened, () => this.config.afterOpen(this.parsedPathData, this), this.abortController);
57
- }
58
- if (!config.afterOpen && !config.afterClose) {
59
- return;
60
- }
55
+ let dispose;
61
56
  let firstReactionCall = true;
62
- reaction(() => this.isOpened, (isOpened) => {
63
- if (firstReactionCall) {
64
- firstReactionCall = false;
65
- // ignore first 'afterClose' callback call
66
- if (!isOpened) {
67
- return;
68
- }
69
- }
70
- if (isOpened) {
71
- config.afterOpen?.(this.parsedPathData, this);
57
+ onBecomeObserved(this, 'isOpened', () => {
58
+ if (!config.afterOpen && !config.afterClose) {
59
+ return;
72
60
  }
73
- else {
74
- config.afterClose?.();
75
- }
76
- }, {
77
- signal: this.abortController.signal,
78
- fireImmediately: true,
61
+ dispose = reaction(() => this.isOpened, (isOpened) => {
62
+ if (firstReactionCall) {
63
+ firstReactionCall = false;
64
+ // ignore first 'afterClose' callback call
65
+ if (!isOpened) {
66
+ return;
67
+ }
68
+ }
69
+ if (isOpened) {
70
+ config.afterOpen?.(this.parsedPathData, this);
71
+ }
72
+ else {
73
+ config.afterClose?.();
74
+ }
75
+ }, {
76
+ signal: this.abortController.signal,
77
+ fireImmediately: true,
78
+ });
79
+ });
80
+ onBecomeUnobserved(this, 'isOpened', () => {
81
+ dispose?.();
82
+ dispose = undefined;
79
83
  });
80
84
  }
81
85
  get baseUrl() {
@@ -1 +1 @@
1
- {"version":3,"file":"route.test.d.ts","sourceRoot":"","sources":["../../../src/core/route/route.test.ts"],"names":[],"mappings":"AAGA,OAAO,EAAwB,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAStE,eAAO,MAAM,WAAW,GAAI,SAAS,OAAO;;;;;;;;;;;;;;;;CAgB3C,CAAC"}
1
+ {"version":3,"file":"route.test.d.ts","sourceRoot":"","sources":["../../../src/core/route/route.test.ts"],"names":[],"mappings":"AAIA,OAAO,EAAwB,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAStE,eAAO,MAAM,WAAW,GAAI,SAAS,OAAO;;;;;;;;;;;;;;;;CAgB3C,CAAC"}
@@ -1,3 +1,4 @@
1
+ /* eslint-disable @typescript-eslint/ban-types */
1
2
  /* eslint-disable sonarjs/no-dead-store */
2
3
  /* eslint-disable sonarjs/sonar-no-unused-vars */
3
4
  /* eslint-disable @typescript-eslint/no-unused-vars */
@@ -181,4 +182,37 @@ describe('route', () => {
181
182
  expect(routeB.isOpened).toBe(false);
182
183
  expect(routeC.isOpened).toBe(true);
183
184
  });
185
+ it('test param typings (no options)', () => {
186
+ const foo = new Route('/foo/:bar/:baz', {});
187
+ expectTypeOf(foo.open).toBeFunction();
188
+ expectTypeOf(foo.open)
189
+ .parameter(0)
190
+ .toEqualTypeOf();
191
+ expectTypeOf(foo.params).toEqualTypeOf();
192
+ expect(foo).toBeDefined();
193
+ });
194
+ it('test param typings (with options)', () => {
195
+ const foo = new Route('/foo/:bar/:baz', {
196
+ params: (params) => {
197
+ return {
198
+ bad: 1,
199
+ };
200
+ },
201
+ });
202
+ expectTypeOf(foo.open).toBeFunction();
203
+ expectTypeOf(foo.open)
204
+ .parameter(0)
205
+ .toEqualTypeOf();
206
+ expectTypeOf(foo.params).toEqualTypeOf();
207
+ expect(foo).toBeDefined();
208
+ });
209
+ it('test customized param typings', () => {
210
+ const foo = new Route('/', {});
211
+ expectTypeOf(foo.open).toBeFunction();
212
+ expectTypeOf(foo.open)
213
+ .parameter(0)
214
+ .toEqualTypeOf();
215
+ expectTypeOf(foo.params).toEqualTypeOf();
216
+ expect(foo).toBeDefined();
217
+ });
184
218
  });
@@ -2,6 +2,7 @@ import { ParseOptions } from 'path-to-regexp';
2
2
  import { IsPartial, AnyObject, Maybe, MaybePromise } from 'yummies/utils/types';
3
3
  import { RouteGlobalConfig } from '../config/config.types.js';
4
4
  import { AnyAbstractRouteEntity } from '../route-group/route-group.types.js';
5
+ import { VirtualRoute } from '../virtual-route/virtual-route.js';
5
6
  import { Route } from './route.js';
6
7
  export type PreparedNavigationData<TParams extends AnyObject = AnyObject> = {
7
8
  state?: any;
@@ -27,7 +28,7 @@ export interface AbstractPathRoute<TPath extends string = string> {
27
28
  isOpened: boolean;
28
29
  path: TPath;
29
30
  }
30
- export interface RouteConfiguration<TPath extends string, TParams extends AnyObject = ParsedPathParams<TPath>, TParentRoute extends Route<string, any, any> | null = null> extends Partial<RouteGlobalConfig> {
31
+ export interface RouteConfiguration<TPath extends string, TInputParams extends InputPathParams<TPath> = InputPathParams<TPath>, TOutputParams extends AnyObject = ParsedPathParams<TPath>, TParentRoute extends Route<string, any, any, any> | null = null> extends Partial<RouteGlobalConfig> {
31
32
  abortSignal?: AbortSignal;
32
33
  index?: boolean;
33
34
  hash?: boolean;
@@ -35,14 +36,14 @@ export interface RouteConfiguration<TPath extends string, TParams extends AnyObj
35
36
  parseOptions?: ParseOptions;
36
37
  parent?: TParentRoute;
37
38
  children?: AnyRoute[];
38
- params?: (params: ExtractPathParams<TPath>) => TParams | null | false;
39
+ params?: (params: ParsedPathParams<TPath>) => TOutputParams | null | false;
39
40
  checkOpened?: (parsedPathData: ParsedPathData<NoInfer<TPath>>) => boolean;
40
- beforeOpen?: (preparedNavigationData: PreparedNavigationData<NoInfer<TParams>>) => MaybePromise<BeforeOpenFeedback>;
41
+ beforeOpen?: (preparedNavigationData: PreparedNavigationData<NoInfer<TInputParams>>) => MaybePromise<BeforeOpenFeedback>;
41
42
  afterClose?: () => void;
42
- afterOpen?: (data: ParsedPathData<NoInfer<TPath>>, route: Route<NoInfer<TPath>, NoInfer<TParams>, NoInfer<TParentRoute>>) => void;
43
+ afterOpen?: (data: ParsedPathData<NoInfer<TPath>>, route: Route<NoInfer<TPath>, NoInfer<TInputParams>, NoInfer<TOutputParams>, NoInfer<TParentRoute>>) => void;
43
44
  }
44
45
  export type AnyRoute = IRoute;
45
- export interface IRoute<TPath extends string = string> {
46
+ export interface IRoute<TPath extends string = string, TInputParams extends InputPathParams<TPath> = InputPathParams<TPath>, TOutputParams extends AnyObject = ParsedPathParams<TPath>> {
46
47
  isOpened: boolean;
47
48
  path: TPath;
48
49
  /**
@@ -54,27 +55,27 @@ export interface IRoute<TPath extends string = string> {
54
55
  *
55
56
  * [**Documentation**](https://js2me.github.io/mobx-route/core/Route.html#open-args)
56
57
  */
57
- open(...args: IsPartial<ExtractPathParams<TPath>> extends true ? [
58
- params?: ExtractPathParams<TPath> | null | undefined,
58
+ open(...args: IsPartial<TInputParams> extends true ? [
59
+ params?: TInputParams | null | undefined,
59
60
  navigateParams?: RouteNavigateParams
60
- ] : [params: ExtractPathParams<TPath>, navigateParams?: RouteNavigateParams]): Promise<void>;
61
- open(...args: IsPartial<ExtractPathParams<TPath>> extends true ? [
62
- params?: ExtractPathParams<TPath> | null | undefined,
61
+ ] : [params: TInputParams, navigateParams?: RouteNavigateParams]): Promise<void>;
62
+ open(...args: IsPartial<TInputParams> extends true ? [
63
+ params?: TInputParams | null | undefined,
63
64
  replace?: RouteNavigateParams['replace'],
64
65
  query?: RouteNavigateParams['query']
65
66
  ] : [
66
- params: ExtractPathParams<TPath>,
67
+ params: TInputParams,
67
68
  replace?: RouteNavigateParams['replace'],
68
69
  query?: RouteNavigateParams['query']
69
70
  ]): Promise<void>;
70
71
  open(url: string, navigateParams?: RouteNavigateParams): Promise<void>;
71
72
  open(url: string, replace?: RouteNavigateParams['replace'], query?: RouteNavigateParams['query']): Promise<void>;
72
- createUrl(...args: IsPartial<ExtractPathParams<TPath>> extends true ? [params?: Maybe<ExtractPathParams<TPath>>, query?: AnyObject] : [params: ExtractPathParams<TPath>, query?: AnyObject]): string;
73
+ createUrl(...args: IsPartial<TInputParams> extends true ? [params?: Maybe<TInputParams>, query?: AnyObject] : [params: TInputParams, query?: AnyObject]): string;
73
74
  destroy(): void;
74
- params: any;
75
+ readonly params: TOutputParams | null;
75
76
  }
76
- export type PathParam = string | number | boolean | null;
77
- export type PathParsedParam = string;
77
+ export type InputPathParam = string | number | boolean | null;
78
+ export type ParsedPathParam = string;
78
79
  type Simplify<T> = T extends infer U ? {
79
80
  [K in keyof U]: U[K];
80
81
  } : never;
@@ -83,20 +84,15 @@ export type RouteParams<TRoute extends AnyAbstractRouteEntity> = TRoute extends
83
84
  } ? ParsedPathParams<TRoute['path']> : TRoute extends {
84
85
  params: infer TParams;
85
86
  } ? Exclude<TParams, null> : AnyObject;
86
- export type ParsedPathParams<Path extends string> = Simplify<Path extends `${infer Prefix}{${infer Optional}}${infer Suffix}` ? ParsedPathParams<`${Prefix}${Suffix}`> & Partial<ParsedPathParams<Optional>> : Path extends `${infer PartA}/${infer PartB}` ? ParsedPathParams<PartA> & ParsedPathParams<PartB> : Path extends `:${infer Param}?` ? {
87
- [K in Param]?: PathParsedParam;
87
+ export type PathToObject<Path extends string, PropertyValue = string> = Simplify<Path extends `${infer Prefix}{${infer Optional}}${infer Suffix}` ? PathToObject<`${Prefix}${Suffix}`, PropertyValue> & Partial<PathToObject<Optional, PropertyValue>> : Path extends `${infer PartA}/${infer PartB}` ? PathToObject<PartA, PropertyValue> & PathToObject<PartB, PropertyValue> : Path extends `:${infer Param}?` ? {
88
+ [K in Param]?: PropertyValue;
88
89
  } : Path extends `:${infer Param}` ? {
89
- [K in Param]: PathParsedParam;
90
+ [K in Param]: PropertyValue;
90
91
  } : Path extends `*${infer Wildcard}` ? {
91
- [K in Wildcard]: PathParsedParam[];
92
- } : {}>;
93
- export type ExtractPathParams<Path extends string> = Simplify<Path extends `${infer Prefix}{${infer Optional}}${infer Suffix}` ? ExtractPathParams<`${Prefix}${Suffix}`> & Partial<ExtractPathParams<Optional>> : Path extends `${infer PartA}/${infer PartB}` ? ExtractPathParams<PartA> & ExtractPathParams<PartB> : Path extends `:${infer Param}?` ? {
94
- [K in Param]?: PathParam;
95
- } : Path extends `:${infer Param}` ? {
96
- [K in Param]: PathParam;
97
- } : Path extends `*${infer Wildcard}` ? {
98
- [K in Wildcard]: PathParam[];
92
+ [K in Wildcard]: PropertyValue[];
99
93
  } : {}>;
94
+ export type ParsedPathParams<Path extends string> = PathToObject<Path, ParsedPathParam>;
95
+ export type InputPathParams<Path extends string> = PathToObject<Path, InputPathParam>;
100
96
  export interface RouteNavigateParams {
101
97
  replace?: boolean;
102
98
  state?: any;
@@ -106,5 +102,8 @@ export interface ParsedPathData<TPath extends string> {
106
102
  path: string;
107
103
  params: ParsedPathParams<TPath>;
108
104
  }
105
+ export type InferPath<T extends AnyRoute> = T extends IRoute<infer TPath, any, any> ? TPath : never;
106
+ export type InferInputParams<T extends AnyRoute> = T extends VirtualRoute<infer TParams> ? TParams : T extends IRoute<any, infer TInputParams, any> ? TInputParams : never;
107
+ export type InferParams<T extends AnyRoute> = T extends VirtualRoute<infer TParams> ? TParams : T extends IRoute<any, any, infer TParams> ? TParams : never;
109
108
  export {};
110
109
  //# sourceMappingURL=route.types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"route.types.d.ts","sourceRoot":"","sources":["../../../src/core/route/route.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"route.types.d.ts","sourceRoot":"","sources":["../../../src/core/route/route.types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"virtual-route.d.ts","sourceRoot":"","sources":["../../../src/core/virtual-route/virtual-route.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAI/E,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,yBAAyB,EAC1B,MAAM,0BAA0B,CAAC;AAElC;;;;GAIG;AACH,qBAAa,YAAY,CAAC,OAAO,SAAS,SAAS,GAAG,WAAW,GAAG,WAAW,CAC7E,YAAW,oBAAoB,CAAC,OAAO,CAAC;IAU5B,SAAS,CAAC,MAAM,EAAE,yBAAyB,CAAC,OAAO,CAAC;IARhE,SAAS,CAAC,eAAe,EAAE,eAAe,CAAC;IAC3C,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IAEvB,OAAO,CAAC,aAAa,CAA4B;IAEjD,OAAO,CAAC,WAAW,CAA2D;gBAExD,MAAM,GAAE,yBAAyB,CAAC,OAAO,CAAM;IA2CrE;;OAEG;IACH,IAAI,QAAQ,YAGX;IAED;;OAEG;IACH,cAAc,CACZ,WAAW,EAAE,KAAK,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC;IAKvE;;OAEG;IACH,IAAI,CACF,GAAG,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,SAAS,IAAI,GACpC,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,EAAE,sBAAsB,CAAC,GAC/D,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,sBAAsB,CAAC,GAC1D,OAAO,CAAC,IAAI,CAAC;IAiChB;;OAEG;IACH,KAAK;IAcL,OAAO;CAGR"}
1
+ {"version":3,"file":"virtual-route.d.ts","sourceRoot":"","sources":["../../../src/core/virtual-route/virtual-route.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAI/E,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,yBAAyB,EAC1B,MAAM,0BAA0B,CAAC;AAElC;;;;GAIG;AACH,qBAAa,YAAY,CAAC,OAAO,SAAS,SAAS,GAAG,WAAW,GAAG,WAAW,CAC7E,YAAW,oBAAoB,CAAC,OAAO,CAAC;IAU5B,SAAS,CAAC,MAAM,EAAE,yBAAyB,CAAC,OAAO,CAAC;IARhE,SAAS,CAAC,eAAe,EAAE,eAAe,CAAC;IAC3C,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IAEvB,OAAO,CAAC,aAAa,CAA4B;IAEjD,OAAO,CAAC,WAAW,CAA2D;gBAExD,MAAM,GAAE,yBAAyB,CAAC,OAAO,CAAM;IAmDrE;;OAEG;IACH,IAAI,QAAQ,YAGX;IAED;;OAEG;IACH,cAAc,CACZ,WAAW,EAAE,KAAK,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC;IAKvE;;OAEG;IACH,IAAI,CACF,GAAG,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,SAAS,IAAI,GACpC,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,EAAE,sBAAsB,CAAC,GAC/D,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,sBAAsB,CAAC,GAC1D,OAAO,CAAC,IAAI,CAAC;IAiChB;;OAEG;IACH,KAAK;IAcL,OAAO;CAGR"}
@@ -1,5 +1,5 @@
1
1
  import { LinkedAbortController } from 'linked-abort-controller';
2
- import { action, computed, makeObservable, observable, reaction, runInAction, } from 'mobx';
2
+ import { action, computed, makeObservable, observable, onBecomeObserved, onBecomeUnobserved, reaction, runInAction, } from 'mobx';
3
3
  import { callFunction } from 'yummies/common';
4
4
  import { routeConfig } from '../config/index.js';
5
5
  /**
@@ -28,9 +28,13 @@ export class VirtualRoute {
28
28
  action(this, 'open');
29
29
  action(this, 'close');
30
30
  makeObservable(this);
31
- if (config.afterOpen || config.afterClose) {
32
- let firstReactionCall = true;
33
- reaction(() => this.isOpened, (isOpened) => {
31
+ let dispose;
32
+ let firstReactionCall = true;
33
+ onBecomeObserved(this, 'isOpened', () => {
34
+ if (!config.afterOpen && !config.afterClose) {
35
+ return;
36
+ }
37
+ dispose = reaction(() => this.isOpened, (isOpened) => {
34
38
  if (firstReactionCall) {
35
39
  firstReactionCall = false;
36
40
  // ignore first 'afterClose' callback call
@@ -48,7 +52,11 @@ export class VirtualRoute {
48
52
  signal: this.abortController.signal,
49
53
  fireImmediately: true,
50
54
  });
51
- }
55
+ });
56
+ onBecomeUnobserved(this, 'isOpened', () => {
57
+ dispose?.();
58
+ dispose = undefined;
59
+ });
52
60
  }
53
61
  /**
54
62
  * [**Documentation**](https://js2me.github.io/mobx-route/core/VirtualRoute.html#isopened-boolean)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mobx-route",
3
- "version": "0.4.0",
3
+ "version": "0.6.0",
4
4
  "keywords": [
5
5
  "mobx",
6
6
  "react",
@@ -1,15 +1,15 @@
1
1
  import { AnchorHTMLAttributes, ReactNode } from 'react';
2
2
  import { IsPartial } from 'yummies/utils/types';
3
- import { AnyRoute, ExtractPathParams, RouteNavigateParams } from '../../core/index.js';
3
+ import { AnyRoute, InputPathParams, RouteNavigateParams } from '../../core/index.js';
4
4
  interface LinkAnchorProps extends Omit<AnchorHTMLAttributes<HTMLAnchorElement>, 'href'> {
5
5
  asChild?: boolean;
6
6
  }
7
7
  type LinkPathRouteProps<TRoute extends AnyRoute> = {
8
8
  to: TRoute;
9
- } & (IsPartial<ExtractPathParams<TRoute['path']>> extends true ? {
10
- params?: ExtractPathParams<TRoute['path']> | null | undefined;
9
+ } & (IsPartial<InputPathParams<TRoute['path']>> extends true ? {
10
+ params?: InputPathParams<TRoute['path']> | null | undefined;
11
11
  } : {
12
- params: ExtractPathParams<TRoute['path']>;
12
+ params: InputPathParams<TRoute['path']>;
13
13
  });
14
14
  type LinkSimpleRouteProps = {
15
15
  to: string;
@@ -1 +1 @@
1
- {"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../../src/react/components/link.tsx"],"names":[],"mappings":"AAGA,OAAO,EACL,oBAAoB,EAKpB,SAAS,EACV,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,SAAS,EAAa,MAAM,qBAAqB,CAAC;AAE3D,OAAO,EACL,QAAQ,EACR,iBAAiB,EAEjB,mBAAmB,EACpB,MAAM,qBAAqB,CAAC;AAE7B,UAAU,eACR,SAAQ,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC7D,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,KAAK,kBAAkB,CAAC,MAAM,SAAS,QAAQ,IAAI;IACjD,EAAE,EAAE,MAAM,CAAC;CACZ,GAAG,CAAC,SAAS,CAAC,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,IAAI,GAC1D;IAEE,MAAM,CAAC,EAAE,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;CAC/D,GACD;IAAE,MAAM,EAAE,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;CAAE,CAAC,CAAC;AAEnD,KAAK,oBAAoB,GACrB;IACE,EAAE,EAAE,MAAM,CAAC;CACZ,GACD;IACE,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEN,MAAM,MAAM,SAAS,CAAC,MAAM,SAAS,QAAQ,IAAI,eAAe,GAC9D,mBAAmB,GACnB,CAAC,kBAAkB,CAAC,MAAM,CAAC,GAAG,oBAAoB,CAAC,CAAC;AAEtD,KAAK,iBAAiB,GAAG,CAAC,MAAM,SAAS,QAAQ,EAC/C,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,KACrB,SAAS,CAAC;AAEf,eAAO,MAAM,IAAI,EAkED,iBAAiB,CAAC"}
1
+ {"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../../src/react/components/link.tsx"],"names":[],"mappings":"AAGA,OAAO,EACL,oBAAoB,EAKpB,SAAS,EACV,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,SAAS,EAAa,MAAM,qBAAqB,CAAC;AAE3D,OAAO,EACL,QAAQ,EACR,eAAe,EAEf,mBAAmB,EACpB,MAAM,qBAAqB,CAAC;AAE7B,UAAU,eACR,SAAQ,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC7D,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,KAAK,kBAAkB,CAAC,MAAM,SAAS,QAAQ,IAAI;IACjD,EAAE,EAAE,MAAM,CAAC;CACZ,GAAG,CAAC,SAAS,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,IAAI,GACxD;IAEE,MAAM,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;CAC7D,GACD;IAAE,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;CAAE,CAAC,CAAC;AAEjD,KAAK,oBAAoB,GACrB;IACE,EAAE,EAAE,MAAM,CAAC;CACZ,GACD;IACE,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEN,MAAM,MAAM,SAAS,CAAC,MAAM,SAAS,QAAQ,IAAI,eAAe,GAC9D,mBAAmB,GACnB,CAAC,kBAAkB,CAAC,MAAM,CAAC,GAAG,oBAAoB,CAAC,CAAC;AAEtD,KAAK,iBAAiB,GAAG,CAAC,MAAM,SAAS,QAAQ,EAC/C,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,KACrB,SAAS,CAAC;AAEf,eAAO,MAAM,IAAI,EAkED,iBAAiB,CAAC"}