mobx-route 0.0.76 → 0.0.78
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 +1 -0
- package/core/route/route.d.ts +2 -2
- package/core/route/route.d.ts.map +1 -1
- package/core/route/route.js +5 -5
- package/core/route/route.types.d.ts +4 -11
- package/core/route/route.types.d.ts.map +1 -1
- package/core/virtual-route/virtual-route.d.ts +8 -8
- package/core/virtual-route/virtual-route.d.ts.map +1 -1
- package/core/virtual-route/virtual-route.js +48 -24
- package/core/virtual-route/virtual-route.types.d.ts +11 -8
- package/core/virtual-route/virtual-route.types.d.ts.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
package/core/route/route.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { History, IQueryParams } from 'mobx-location-history';
|
|
2
2
|
import { ParamData, TokenData } from 'path-to-regexp';
|
|
3
3
|
import { AllPropertiesOptional, AnyObject, Maybe, MaybePromise } from 'yummies/utils/types';
|
|
4
|
-
import { AnyRoute,
|
|
4
|
+
import { AnyRoute, BeforeOpenFeedback, PreparedNavigationData, ExtractPathParams, RouteConfiguration, ParsedPathData, RouteNavigateParams } from './route.types.js';
|
|
5
5
|
/**
|
|
6
6
|
* Class for creating path based route.
|
|
7
7
|
*
|
|
@@ -85,7 +85,7 @@ export declare class Route<TPath extends string, TParams extends AnyObject = Ext
|
|
|
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<
|
|
88
|
+
protected beforeOpen(openData: PreparedNavigationData): 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":"AAUA,OAAO,EAEL,OAAO,EACP,YAAY,EACb,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAkB,SAAS,EAAS,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EACL,qBAAqB,EACrB,SAAS,EACT,KAAK,EACL,YAAY,EACb,MAAM,qBAAqB,CAAC;AAI7B,OAAO,EACL,QAAQ,EACR,
|
|
1
|
+
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../src/core/route/route.ts"],"names":[],"mappings":"AAUA,OAAO,EAEL,OAAO,EACP,YAAY,EACb,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAkB,SAAS,EAAS,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EACL,qBAAqB,EACrB,SAAS,EACT,KAAK,EACL,YAAY,EACb,MAAM,qBAAqB,CAAC;AAI7B,OAAO,EACL,QAAQ,EACR,kBAAkB,EAClB,sBAAsB,EACtB,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,mBAAmB,EACpB,MAAM,kBAAkB,CAAC;AAE1B;;;;GAIG;AACH,qBAAa,KAAK,CAChB,KAAK,SAAS,MAAM,EACpB,OAAO,SAAS,SAAS,GAAG,iBAAiB,CAAC,KAAK,CAAC,EACpD,YAAY,SAAS,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI;IA6B9C,IAAI,EAAE,KAAK;IAClB,SAAS,CAAC,MAAM,EAAE,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,CAAC;IA5BpE,SAAS,CAAC,eAAe,EAAE,eAAe,CAAC;IAC3C,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC;IAC3B,MAAM,EAAE,YAAY,CAAC;IAErB,KAAK,EAAE,YAAY,CAAC;IAEpB,OAAO,CAAC,UAAU,CAAwB;IAC1C,OAAO,CAAC,QAAQ,CAAC,CAA2B;IAC5C,OAAO,CAAC,SAAS,CAAC,CAA6B;IAE/C;;;;OAIG;IACH,OAAO,EAAE,OAAO,CAAC;IAEjB;;;;OAIG;IACH,MAAM,EAAE,OAAO,CAAC;IAEhB,QAAQ,EAAE,QAAQ,EAAE,CAAM;gBAGjB,IAAI,EAAE,KAAK,EACR,MAAM,GAAE,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,CAAM;IA6DzE,SAAS,KAAK,OAAO,uBAGpB;IAED,SAAS,KAAK,cAAc,IAAI,cAAc,CAAC,KAAK,CAAC,GAAG,IAAI,CAgC3D;IAED;;;;OAIG;IACH,IAAI,WAAW,IAAI,MAAM,GAAG,IAAI,CAE/B;IAED;;;;OAIG;IACH,IAAI,MAAM,IAAI,OAAO,GAAG,IAAI,CAkB3B;IAED;;;;OAIG;IACH,IAAI,QAAQ,YAQX;IAED;;;;OAIG;IACH,MAAM,CACJ,WAAW,SAAS,MAAM,EAC1B,OAAO,SAAS,SAAS,GAAG,iBAAiB,CAAC,GAAG,KAAK,GAAG,WAAW,EAAE,CAAC,EAEvE,IAAI,EAAE,WAAW,EACjB,MAAM,CAAC,EAAE,IAAI,CACX,kBAAkB,CAAC,GAAG,KAAK,GAAG,WAAW,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,EAC1D,QAAQ,CACT;IAqBH,WAAW,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE;IAIjC,cAAc,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE;IAIpC;;OAEG;IACH,IAAI,iBAAiB,IAAI,OAAO,CAI/B;IAED,SAAS,CAAC,aAAa,CACrB,MAAM,CAAC,EAAE,iBAAiB,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,SAAS,GACnD,SAAS,GAAG,SAAS;IAWxB,SAAS,CACP,GAAG,IAAI,EAAE,qBAAqB,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,SAAS,IAAI,GACjE,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,SAAS,CAAC,GAC7D,CAAC,MAAM,EAAE,iBAAiB,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE,SAAS,CAAC;IAiB3D;;;;OAIG;IACH,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,OAAO,CAAC,IAAI,CAAC;IAChB,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,OAAO,CAAC,EAAE,mBAAmB,CAAC,SAAS,CAAC;QACxC,KAAK,CAAC,EAAE,mBAAmB,CAAC,OAAO,CAAC;KACrC,GACD;QACE,MAAM,EAAE,iBAAiB,CAAC,KAAK,CAAC;QAChC,OAAO,CAAC,EAAE,mBAAmB,CAAC,SAAS,CAAC;QACxC,KAAK,CAAC,EAAE,mBAAmB,CAAC,OAAO,CAAC;KACrC,GACJ,OAAO,CAAC,IAAI,CAAC;IAChB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IACtE,IAAI,CACF,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,mBAAmB,CAAC,SAAS,CAAC,EACxC,KAAK,CAAC,EAAE,mBAAmB,CAAC,OAAO,CAAC,GACnC,OAAO,CAAC,IAAI,CAAC;IAoDhB,SAAS,CAAC,UAAU,CAClB,QAAQ,EAAE,sBAAsB,GAC/B,YAAY,CAAC,kBAAkB,CAAC;IAQnC,SAAS,CAAC,UAAU;IAQpB,SAAS,KAAK,SAAS,cAKtB;IAED,OAAO;CAGR"}
|
package/core/route/route.js
CHANGED
|
@@ -52,10 +52,10 @@ export class Route {
|
|
|
52
52
|
action(this, 'addChildren');
|
|
53
53
|
action(this, 'removeChildren');
|
|
54
54
|
makeObservable(this);
|
|
55
|
-
if (this.config.
|
|
56
|
-
when(() => this.isOpened, () => this.config.
|
|
55
|
+
if (this.config.afterOpen) {
|
|
56
|
+
when(() => this.isOpened, () => this.config.afterOpen(this.parsedPathData, this), this.abortController);
|
|
57
57
|
}
|
|
58
|
-
if (!config.
|
|
58
|
+
if (!config.afterOpen && !config.afterClose) {
|
|
59
59
|
return;
|
|
60
60
|
}
|
|
61
61
|
let firstReactionCall = true;
|
|
@@ -68,7 +68,7 @@ export class Route {
|
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
70
|
if (isOpened) {
|
|
71
|
-
config.
|
|
71
|
+
config.afterOpen?.(this.parsedPathData, this);
|
|
72
72
|
}
|
|
73
73
|
else {
|
|
74
74
|
config.afterClose?.();
|
|
@@ -142,7 +142,7 @@ export class Route {
|
|
|
142
142
|
* [**Documentation**](https://js2me.github.io/mobx-route/core/Route.html#isopened-boolean)
|
|
143
143
|
*/
|
|
144
144
|
get isOpened() {
|
|
145
|
-
if (this.parsedPathData === null) {
|
|
145
|
+
if (this.params === null || this.parsedPathData === null) {
|
|
146
146
|
return false;
|
|
147
147
|
}
|
|
148
148
|
return (!this.config.checkOpened || this.config.checkOpened(this.parsedPathData));
|
|
@@ -17,18 +17,11 @@ export type PreparedNavigationData<TParams extends AnyObject = AnyObject> = {
|
|
|
17
17
|
/**
|
|
18
18
|
* Returning `false` means ignore navigation
|
|
19
19
|
*/
|
|
20
|
-
export type
|
|
20
|
+
export type BeforeOpenFeedback = void | boolean | {
|
|
21
21
|
url: string;
|
|
22
22
|
state?: any;
|
|
23
23
|
replace?: boolean;
|
|
24
24
|
};
|
|
25
|
-
export type AfterLeaveFeedback = void | boolean | {
|
|
26
|
-
url: string;
|
|
27
|
-
state?: any;
|
|
28
|
-
replace?: boolean;
|
|
29
|
-
};
|
|
30
|
-
export type BeforeOpenHandler<TParams extends AnyObject = AnyObject> = (preparedNavigationData: PreparedNavigationData<TParams>) => MaybePromise<BeforeEnterFeedback>;
|
|
31
|
-
export type AfterCloseHandler = () => void;
|
|
32
25
|
export interface RouteConfiguration<TPath extends string, TParams extends AnyObject = ParsedPathParams<TPath>, TParentRoute extends AnyRoute | null = null> extends Partial<RouteGlobalConfig> {
|
|
33
26
|
abortSignal?: AbortSignal;
|
|
34
27
|
index?: boolean;
|
|
@@ -39,9 +32,9 @@ export interface RouteConfiguration<TPath extends string, TParams extends AnyObj
|
|
|
39
32
|
children?: AnyRoute[];
|
|
40
33
|
params?: (params: ExtractPathParams<TPath>) => TParams | null | false;
|
|
41
34
|
checkOpened?: (parsedPathData: ParsedPathData<NoInfer<TPath>>) => boolean;
|
|
42
|
-
beforeOpen?:
|
|
43
|
-
afterClose?:
|
|
44
|
-
|
|
35
|
+
beforeOpen?: (preparedNavigationData: PreparedNavigationData<NoInfer<TParams>>) => MaybePromise<BeforeOpenFeedback>;
|
|
36
|
+
afterClose?: () => void;
|
|
37
|
+
afterOpen?: (data: ParsedPathData<NoInfer<TPath>>, route: Route<NoInfer<TPath>, NoInfer<TParams>, NoInfer<TParentRoute>>) => void;
|
|
45
38
|
}
|
|
46
39
|
export type AnyRoute = Route<string, any, any>;
|
|
47
40
|
export type PathParam = string | number | boolean | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route.types.d.ts","sourceRoot":"","sources":["../../../src/core/route/route.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAE9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,MAAM,MAAM,sBAAsB,CAAC,OAAO,SAAS,SAAS,GAAG,SAAS,IAAI;IAC1E,KAAK,CAAC,EAAE,GAAG,CAAC;IAEZ;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,GAAG,EAAE,MAAM,CAAC;IAEZ,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"route.types.d.ts","sourceRoot":"","sources":["../../../src/core/route/route.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,31 +1,31 @@
|
|
|
1
1
|
import { IQueryParams } from 'mobx-location-history';
|
|
2
|
-
import { FnValue } from 'yummies/common';
|
|
3
2
|
import { AllPropertiesOptional, AnyObject, EmptyObject, Maybe } from 'yummies/utils/types';
|
|
4
|
-
import { VirtualRouteConfiguration } from './virtual-route.types.js';
|
|
3
|
+
import { VirtualOpenExtraParams, VirtualRouteConfiguration } from './virtual-route.types.js';
|
|
5
4
|
/**
|
|
6
5
|
* Class for creating routes with custom activation logic
|
|
7
6
|
*
|
|
8
7
|
* [**Documentation**](https://js2me.github.io/mobx-route/core/VirtualRoute.html)
|
|
9
8
|
*/
|
|
10
|
-
export declare class VirtualRoute<TParams extends AnyObject | EmptyObject = EmptyObject>
|
|
9
|
+
export declare class VirtualRoute<TParams extends AnyObject | EmptyObject = EmptyObject> {
|
|
11
10
|
protected config: VirtualRouteConfiguration<TParams>;
|
|
12
11
|
protected abortController: AbortController;
|
|
13
12
|
query: IQueryParams;
|
|
14
13
|
params: TParams | null;
|
|
15
|
-
private
|
|
14
|
+
private isLocalOpened;
|
|
15
|
+
private openChecker;
|
|
16
16
|
constructor(config?: VirtualRouteConfiguration<TParams>);
|
|
17
17
|
/**
|
|
18
18
|
* [**Documentation**](https://js2me.github.io/mobx-route/core/VirtualRoute.html#isopened-boolean)
|
|
19
19
|
*/
|
|
20
20
|
get isOpened(): boolean;
|
|
21
21
|
/**
|
|
22
|
-
* [**Documentation**](https://js2me.github.io/mobx-route/core/VirtualRoute.html#
|
|
22
|
+
* [**Documentation**](https://js2me.github.io/mobx-route/core/VirtualRoute.html#setopenchecker-openchecker-void)
|
|
23
23
|
*/
|
|
24
|
-
|
|
24
|
+
setOpenChecker(openChecker: Maybe<VirtualRouteConfiguration<TParams>['checkOpened']>): void;
|
|
25
25
|
/**
|
|
26
|
-
* [**Documentation**](https://js2me.github.io/mobx-route/core/VirtualRoute.html#open-params-query-void)
|
|
26
|
+
* [**Documentation**](https://js2me.github.io/mobx-route/core/VirtualRoute.html#open-params-extraparams-query-replace-promise-void)
|
|
27
27
|
*/
|
|
28
|
-
open(...args: AllPropertiesOptional<TParams> extends true ? [params?: Maybe<TParams>,
|
|
28
|
+
open(...args: AllPropertiesOptional<TParams> extends true ? [params?: Maybe<TParams>, extraParams?: VirtualOpenExtraParams] : [params: TParams, extraParams?: VirtualOpenExtraParams]): Promise<void>;
|
|
29
29
|
/**
|
|
30
30
|
* [**Documentation**](https://js2me.github.io/mobx-route/core/VirtualRoute.html#close-void)
|
|
31
31
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"virtual-route.d.ts","sourceRoot":"","sources":["../../../src/core/virtual-route/virtual-route.ts"],"names":[],"mappings":"
|
|
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,EACL,qBAAqB,EACrB,SAAS,EACT,WAAW,EACX,KAAK,EACN,MAAM,qBAAqB,CAAC;AAI7B,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EAC1B,MAAM,0BAA0B,CAAC;AAElC;;;;GAIG;AACH,qBAAa,YAAY,CACvB,OAAO,SAAS,SAAS,GAAG,WAAW,GAAG,WAAW;IAUzC,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,qBAAqB,CAAC,OAAO,CAAC,SAAS,IAAI,GAChD,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,32 +1,34 @@
|
|
|
1
1
|
import { LinkedAbortController } from 'linked-abort-controller';
|
|
2
|
-
import { action, computed, makeObservable, observable, reaction } from 'mobx';
|
|
3
|
-
import {
|
|
2
|
+
import { action, computed, makeObservable, observable, reaction, runInAction, } from 'mobx';
|
|
3
|
+
import { callFunction } from 'yummies/common';
|
|
4
4
|
import { routeConfig } from '../config/index.js';
|
|
5
5
|
/**
|
|
6
6
|
* Class for creating routes with custom activation logic
|
|
7
7
|
*
|
|
8
8
|
* [**Documentation**](https://js2me.github.io/mobx-route/core/VirtualRoute.html)
|
|
9
9
|
*/
|
|
10
|
-
export class VirtualRoute
|
|
10
|
+
export class VirtualRoute {
|
|
11
11
|
config;
|
|
12
12
|
abortController;
|
|
13
13
|
query;
|
|
14
14
|
params;
|
|
15
|
-
|
|
15
|
+
isLocalOpened;
|
|
16
|
+
openChecker;
|
|
16
17
|
constructor(config = {}) {
|
|
17
|
-
super(config.stringContent);
|
|
18
18
|
this.config = config;
|
|
19
19
|
this.abortController = new LinkedAbortController(config.abortSignal);
|
|
20
20
|
this.query = config.queryParams ?? routeConfig.get().queryParams;
|
|
21
|
-
this.params =
|
|
22
|
-
this.
|
|
21
|
+
this.params = callFunction(config.initialParams, this) ?? null;
|
|
22
|
+
this.openChecker = config.checkOpened;
|
|
23
|
+
this.isLocalOpened = observable.box(this.openChecker?.(this) ?? false);
|
|
23
24
|
observable(this, 'params');
|
|
24
|
-
observable.ref(this, '
|
|
25
|
+
observable.ref(this, '_isOpened');
|
|
25
26
|
computed.struct(this, 'isOpened');
|
|
27
|
+
action(this, 'setOpenChecker');
|
|
26
28
|
action(this, 'open');
|
|
27
29
|
action(this, 'close');
|
|
28
30
|
makeObservable(this);
|
|
29
|
-
if (config.
|
|
31
|
+
if (config.afterOpen || config.afterClose) {
|
|
30
32
|
let firstReactionCall = true;
|
|
31
33
|
reaction(() => this.isOpened, (isOpened) => {
|
|
32
34
|
if (firstReactionCall) {
|
|
@@ -37,7 +39,7 @@ export class VirtualRoute extends String {
|
|
|
37
39
|
}
|
|
38
40
|
}
|
|
39
41
|
if (isOpened) {
|
|
40
|
-
config.
|
|
42
|
+
config.afterOpen?.(this.params, this);
|
|
41
43
|
}
|
|
42
44
|
else {
|
|
43
45
|
config.afterClose?.();
|
|
@@ -52,35 +54,57 @@ export class VirtualRoute extends String {
|
|
|
52
54
|
* [**Documentation**](https://js2me.github.io/mobx-route/core/VirtualRoute.html#isopened-boolean)
|
|
53
55
|
*/
|
|
54
56
|
get isOpened() {
|
|
55
|
-
|
|
57
|
+
const isOuterOpened = this.openChecker == null || this.openChecker(this);
|
|
58
|
+
return this.isLocalOpened.get() && isOuterOpened;
|
|
56
59
|
}
|
|
57
60
|
/**
|
|
58
|
-
* [**Documentation**](https://js2me.github.io/mobx-route/core/VirtualRoute.html#
|
|
61
|
+
* [**Documentation**](https://js2me.github.io/mobx-route/core/VirtualRoute.html#setopenchecker-openchecker-void)
|
|
59
62
|
*/
|
|
60
|
-
|
|
61
|
-
this.
|
|
63
|
+
setOpenChecker(openChecker) {
|
|
64
|
+
this.openChecker = openChecker;
|
|
62
65
|
}
|
|
63
|
-
open(...args) {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
66
|
+
async open(...args) {
|
|
67
|
+
const params = (args[0] ?? {});
|
|
68
|
+
const extraParams = args[1];
|
|
69
|
+
if (this.config.beforeOpen) {
|
|
70
|
+
const beforeOpenResult = await this.config.beforeOpen(params, this);
|
|
71
|
+
if (beforeOpenResult === false) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
67
74
|
}
|
|
68
75
|
if (this.config.open == null) {
|
|
69
|
-
this.
|
|
76
|
+
this.isLocalOpened.set(true);
|
|
70
77
|
}
|
|
71
78
|
else {
|
|
72
|
-
|
|
79
|
+
const result = await this.config.open(params, this);
|
|
80
|
+
// because result can return void so this is truthy for opening state
|
|
81
|
+
this.isLocalOpened.set(result !== false);
|
|
73
82
|
}
|
|
83
|
+
if (!this.isLocalOpened) {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
if (extraParams?.query) {
|
|
87
|
+
this.query.update(extraParams.query, extraParams.replace);
|
|
88
|
+
}
|
|
89
|
+
runInAction(() => {
|
|
90
|
+
this.params = params;
|
|
91
|
+
});
|
|
74
92
|
}
|
|
75
93
|
/**
|
|
76
94
|
* [**Documentation**](https://js2me.github.io/mobx-route/core/VirtualRoute.html#close-void)
|
|
77
95
|
*/
|
|
78
96
|
close() {
|
|
79
|
-
if (this.config.close
|
|
80
|
-
this.
|
|
81
|
-
|
|
97
|
+
if (this.config.close == null) {
|
|
98
|
+
this.isLocalOpened.set(false);
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
const result = this.config.close(this);
|
|
102
|
+
// because result can return void so this is truthy for opening state
|
|
103
|
+
this.isLocalOpened.set(result !== false);
|
|
82
104
|
}
|
|
83
|
-
|
|
105
|
+
runInAction(() => {
|
|
106
|
+
this.params = null;
|
|
107
|
+
});
|
|
84
108
|
}
|
|
85
109
|
destroy() {
|
|
86
110
|
this.abortController.abort();
|
|
@@ -1,17 +1,20 @@
|
|
|
1
1
|
import { IQueryParams } from 'mobx-location-history';
|
|
2
|
-
import {
|
|
3
|
-
import { AllPropertiesOptional, AnyObject, EmptyObject, Maybe } from 'yummies/utils/types';
|
|
2
|
+
import { AllPropertiesOptional, AnyObject, EmptyObject, Maybe, MaybeFn, MaybePromise } from 'yummies/utils/types';
|
|
4
3
|
import type { VirtualRoute } from './virtual-route.js';
|
|
5
4
|
export type AnyVirtualRoute = VirtualRoute<any>;
|
|
5
|
+
export interface VirtualOpenExtraParams {
|
|
6
|
+
query?: AnyObject;
|
|
7
|
+
replace?: boolean;
|
|
8
|
+
}
|
|
6
9
|
export interface VirtualRouteConfiguration<TParams extends AnyObject | EmptyObject = EmptyObject> {
|
|
7
10
|
abortSignal?: AbortSignal;
|
|
8
11
|
queryParams?: IQueryParams;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
initialParams?: MaybeFn<Maybe<TParams>, [route: VirtualRoute<TParams>]>;
|
|
13
|
+
open?: (...args: AllPropertiesOptional<TParams> extends true ? [params: Maybe<TParams>, route: VirtualRoute<TParams>] : [params: TParams, route: VirtualRoute<TParams>]) => MaybePromise<boolean | void>;
|
|
14
|
+
close?: (route: VirtualRoute<TParams>) => boolean | void;
|
|
15
|
+
checkOpened?: (route: VirtualRoute<TParams>) => boolean;
|
|
16
|
+
beforeOpen?: (...args: AllPropertiesOptional<TParams> extends true ? [params: Maybe<TParams>, route: VirtualRoute<TParams>] : [params: TParams, route: VirtualRoute<TParams>]) => MaybePromise<void | boolean>;
|
|
14
17
|
afterClose?: () => void;
|
|
15
|
-
|
|
18
|
+
afterOpen?: (params: NoInfer<TParams>, route: VirtualRoute<NoInfer<TParams>>) => void;
|
|
16
19
|
}
|
|
17
20
|
//# sourceMappingURL=virtual-route.types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"virtual-route.types.d.ts","sourceRoot":"","sources":["../../../src/core/virtual-route/virtual-route.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,
|
|
1
|
+
{"version":3,"file":"virtual-route.types.d.ts","sourceRoot":"","sources":["../../../src/core/virtual-route/virtual-route.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EACL,qBAAqB,EACrB,SAAS,EACT,WAAW,EACX,KAAK,EACL,OAAO,EACP,YAAY,EACb,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,MAAM,MAAM,eAAe,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;AAEhD,MAAM,WAAW,sBAAsB;IACrC,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,yBAAyB,CACxC,OAAO,SAAS,SAAS,GAAG,WAAW,GAAG,WAAW;IAErD,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,WAAW,CAAC,EAAE,YAAY,CAAC;IAC3B,aAAa,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAIxE,IAAI,CAAC,EAAE,CACL,GAAG,IAAI,EAAE,qBAAqB,CAAC,OAAO,CAAC,SAAS,IAAI,GAChD,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,GACtD,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,KAChD,YAAY,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAGlC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,KAAK,OAAO,GAAG,IAAI,CAAC;IAEzD,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC;IACxD,UAAU,CAAC,EAAE,CACX,GAAG,IAAI,EAAE,qBAAqB,CAAC,OAAO,CAAC,SAAS,IAAI,GAChD,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,GACtD,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,KAChD,YAAY,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC;IAClC,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,SAAS,CAAC,EAAE,CACV,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,EACxB,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAClC,IAAI,CAAC;CACX"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mobx-route",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.78",
|
|
4
4
|
"keywords": [
|
|
5
5
|
"mobx",
|
|
6
6
|
"react",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"mobx-location-history": "^6.1.0",
|
|
27
27
|
"path-to-regexp": "^8.2.0",
|
|
28
28
|
"react-simple-loadable": "^2.1.0",
|
|
29
|
-
"yummies": "^3.2.
|
|
29
|
+
"yummies": "^3.2.13"
|
|
30
30
|
},
|
|
31
31
|
"peerDependencies": {
|
|
32
32
|
"@types/react": "^18.3.20",
|