@dooboostore/dom-render 1.0.108 → 1.0.110
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 +27 -1451
- package/dist/cjs/DomRender.js +41 -26
- package/dist/cjs/DomRender.js.map +2 -2
- package/dist/cjs/DomRenderProxy.js +134 -62
- package/dist/cjs/DomRenderProxy.js.map +2 -2
- package/dist/cjs/bundle-entry.js +32 -21
- package/dist/cjs/bundle-entry.js.map +2 -2
- package/dist/cjs/components/ComponentBase.js +24 -6
- package/dist/cjs/components/ComponentBase.js.map +2 -2
- package/dist/cjs/components/ComponentRouterBase.js +11 -1
- package/dist/cjs/components/ComponentRouterBase.js.map +2 -2
- package/dist/cjs/components/appender/Appender.js +0 -3
- package/dist/cjs/components/appender/Appender.js.map +2 -2
- package/dist/cjs/components/checkbox/CheckBox.js.map +2 -2
- package/dist/cjs/components/choose/Choose.js +7 -1
- package/dist/cjs/components/choose/Choose.js.map +2 -2
- package/dist/cjs/components/details/Details.js +2 -2
- package/dist/cjs/components/details/Details.js.map +2 -2
- package/dist/cjs/components/forOf/ForOf.js.map +2 -2
- package/dist/cjs/components/if/If.js +2 -2
- package/dist/cjs/components/if/If.js.map +2 -2
- package/dist/cjs/components/input/Input.js +2 -2
- package/dist/cjs/components/input/Input.js.map +2 -2
- package/dist/cjs/components/promise/PromiseSwitch.js +6 -6
- package/dist/cjs/components/promise/PromiseSwitch.js.map +2 -2
- package/dist/cjs/components/radio/Radio.js.map +2 -2
- package/dist/cjs/components/router/Route.js +2 -2
- package/dist/cjs/components/router/Route.js.map +2 -2
- package/dist/cjs/components/router/RouterOutlet.js +17 -3
- package/dist/cjs/components/router/RouterOutlet.js.map +2 -2
- package/dist/cjs/components/select/Select.js +26 -12
- package/dist/cjs/components/select/Select.js.map +2 -2
- package/dist/cjs/components/this/This.js +2 -2
- package/dist/cjs/components/this/This.js.map +2 -2
- package/dist/cjs/components/timer/Timer.js +15 -13
- package/dist/cjs/components/timer/Timer.js.map +2 -2
- package/dist/cjs/decorators/DomRenderNoProxy.js +2 -1
- package/dist/cjs/decorators/DomRenderNoProxy.js.map +2 -2
- package/dist/cjs/events/EventManager.js +9 -2
- package/dist/cjs/events/EventManager.js.map +2 -2
- package/dist/cjs/lifecycle/OnInitRender.js.map +1 -1
- package/dist/cjs/lifecycle/OnRawSetRendered.js +26 -0
- package/dist/cjs/lifecycle/OnRawSetRendered.js.map +7 -0
- package/dist/cjs/lifecycle/index.js +1 -0
- package/dist/cjs/lifecycle/index.js.map +2 -2
- package/dist/cjs/operators/DrForOf.js +24 -11
- package/dist/cjs/operators/DrForOf.js.map +2 -2
- package/dist/cjs/operators/DrIf.js +1 -2
- package/dist/cjs/operators/DrIf.js.map +2 -2
- package/dist/cjs/operators/DrInnerText.js +2 -2
- package/dist/cjs/operators/DrInnerText.js.map +2 -2
- package/dist/cjs/operators/DrTargetElement.js +2 -0
- package/dist/cjs/operators/DrTargetElement.js.map +2 -2
- package/dist/cjs/operators/OperatorExecuter.js +1 -2
- package/dist/cjs/operators/OperatorExecuter.js.map +2 -2
- package/dist/cjs/package.json +5 -0
- package/dist/cjs/rawsets/RawSet.js +392 -115
- package/dist/cjs/rawsets/RawSet.js.map +3 -3
- package/dist/cjs/rawsets/Render.js.map +1 -1
- package/dist/cjs/routers/PathRouter.js +13 -7
- package/dist/cjs/routers/PathRouter.js.map +2 -2
- package/dist/cjs/routers/Router.js +76 -36
- package/dist/cjs/routers/Router.js.map +3 -3
- package/dist/esm/DomRender.js +41 -26
- package/dist/esm/DomRender.js.map +2 -2
- package/dist/esm/DomRenderProxy.js +134 -62
- package/dist/esm/DomRenderProxy.js.map +2 -2
- package/dist/esm/bundle-entry.js +22 -21
- package/dist/esm/bundle-entry.js.map +2 -2
- package/dist/esm/components/ComponentBase.js +24 -6
- package/dist/esm/components/ComponentBase.js.map +2 -2
- package/dist/esm/components/ComponentRouterBase.js +11 -1
- package/dist/esm/components/ComponentRouterBase.js.map +2 -2
- package/dist/esm/components/appender/Appender.js +0 -3
- package/dist/esm/components/appender/Appender.js.map +2 -2
- package/dist/esm/components/checkbox/CheckBox.js.map +2 -2
- package/dist/esm/components/choose/Choose.js +7 -1
- package/dist/esm/components/choose/Choose.js.map +2 -2
- package/dist/esm/components/details/Details.js +2 -2
- package/dist/esm/components/details/Details.js.map +2 -2
- package/dist/esm/components/forOf/ForOf.js.map +2 -2
- package/dist/esm/components/if/If.js +2 -2
- package/dist/esm/components/if/If.js.map +2 -2
- package/dist/esm/components/input/Input.js +2 -2
- package/dist/esm/components/input/Input.js.map +2 -2
- package/dist/esm/components/promise/PromiseSwitch.js +6 -6
- package/dist/esm/components/promise/PromiseSwitch.js.map +2 -2
- package/dist/esm/components/radio/Radio.js.map +2 -2
- package/dist/esm/components/router/Route.js +2 -2
- package/dist/esm/components/router/Route.js.map +2 -2
- package/dist/esm/components/router/RouterOutlet.js +18 -4
- package/dist/esm/components/router/RouterOutlet.js.map +2 -2
- package/dist/esm/components/select/Select.js +26 -12
- package/dist/esm/components/select/Select.js.map +2 -2
- package/dist/esm/components/this/This.js +2 -2
- package/dist/esm/components/this/This.js.map +2 -2
- package/dist/esm/components/timer/Timer.js +15 -13
- package/dist/esm/components/timer/Timer.js.map +2 -2
- package/dist/esm/decorators/DomRenderNoProxy.js +2 -1
- package/dist/esm/decorators/DomRenderNoProxy.js.map +2 -2
- package/dist/esm/events/EventManager.js +9 -2
- package/dist/esm/events/EventManager.js.map +2 -2
- package/dist/esm/lifecycle/OnInitRender.js.map +1 -1
- package/dist/esm/lifecycle/OnRawSetRendered.js +7 -0
- package/dist/esm/lifecycle/OnRawSetRendered.js.map +7 -0
- package/dist/esm/lifecycle/index.js +1 -0
- package/dist/esm/lifecycle/index.js.map +2 -2
- package/dist/esm/operators/DrForOf.js +24 -11
- package/dist/esm/operators/DrForOf.js.map +2 -2
- package/dist/esm/operators/DrIf.js +1 -2
- package/dist/esm/operators/DrIf.js.map +2 -2
- package/dist/esm/operators/DrInnerText.js +2 -2
- package/dist/esm/operators/DrInnerText.js.map +2 -2
- package/dist/esm/operators/DrTargetElement.js +2 -0
- package/dist/esm/operators/DrTargetElement.js.map +2 -2
- package/dist/esm/operators/OperatorExecuter.js +1 -2
- package/dist/esm/operators/OperatorExecuter.js.map +2 -2
- package/dist/esm/rawsets/RawSet.js +392 -115
- package/dist/esm/rawsets/RawSet.js.map +3 -3
- package/dist/esm/routers/PathRouter.js +13 -7
- package/dist/esm/routers/PathRouter.js.map +2 -2
- package/dist/esm/routers/Router.js +76 -36
- package/dist/esm/routers/Router.js.map +3 -3
- package/dist/esm-bundle/dooboostore-dom-render.esm.js +14023 -6402
- package/dist/esm-bundle/dooboostore-dom-render.esm.js.map +4 -4
- package/dist/types/DomRender.d.ts +11 -5
- package/dist/types/DomRender.d.ts.map +1 -1
- package/dist/types/DomRenderProxy.d.ts +2 -2
- package/dist/types/DomRenderProxy.d.ts.map +1 -1
- package/dist/types/bundle-entry.d.ts +5 -2
- package/dist/types/bundle-entry.d.ts.map +1 -1
- package/dist/types/components/ComponentBase.d.ts +8 -2
- package/dist/types/components/ComponentBase.d.ts.map +1 -1
- package/dist/types/components/ComponentRouterBase.d.ts +8 -0
- package/dist/types/components/ComponentRouterBase.d.ts.map +1 -1
- package/dist/types/components/appender/Appender.d.ts +0 -2
- package/dist/types/components/appender/Appender.d.ts.map +1 -1
- package/dist/types/components/checkbox/CheckBox.d.ts.map +1 -1
- package/dist/types/components/choose/Choose.d.ts.map +1 -1
- package/dist/types/components/details/Details.d.ts +1 -1
- package/dist/types/components/details/Details.d.ts.map +1 -1
- package/dist/types/components/forOf/ForOf.d.ts.map +1 -1
- package/dist/types/components/if/If.d.ts +1 -1
- package/dist/types/components/if/If.d.ts.map +1 -1
- package/dist/types/components/index.d.ts +2 -1
- package/dist/types/components/index.d.ts.map +1 -1
- package/dist/types/components/input/Input.d.ts +1 -1
- package/dist/types/components/input/Input.d.ts.map +1 -1
- package/dist/types/components/promise/PromiseSwitch.d.ts +1 -1
- package/dist/types/components/promise/PromiseSwitch.d.ts.map +1 -1
- package/dist/types/components/radio/Radio.d.ts.map +1 -1
- package/dist/types/components/router/Route.d.ts +1 -1
- package/dist/types/components/router/Route.d.ts.map +1 -1
- package/dist/types/components/router/RouterOutlet.d.ts +6 -2
- package/dist/types/components/router/RouterOutlet.d.ts.map +1 -1
- package/dist/types/components/select/Select.d.ts +5 -5
- package/dist/types/components/select/Select.d.ts.map +1 -1
- package/dist/types/components/this/This.d.ts +1 -1
- package/dist/types/components/this/This.d.ts.map +1 -1
- package/dist/types/components/timer/Timer.d.ts +6 -4
- package/dist/types/components/timer/Timer.d.ts.map +1 -1
- package/dist/types/decorators/DomRenderNoProxy.d.ts.map +1 -1
- package/dist/types/events/EventManager.d.ts +8 -0
- package/dist/types/events/EventManager.d.ts.map +1 -1
- package/dist/types/index.d.ts +0 -100
- package/dist/types/lifecycle/OnInitRender.d.ts +1 -1
- package/dist/types/lifecycle/OnInitRender.d.ts.map +1 -1
- package/dist/types/lifecycle/OnRawSetRendered.d.ts +10 -0
- package/dist/types/lifecycle/OnRawSetRendered.d.ts.map +1 -0
- package/dist/types/lifecycle/index.d.ts +1 -0
- package/dist/types/lifecycle/index.d.ts.map +1 -1
- package/dist/types/operators/DrForOf.d.ts.map +1 -1
- package/dist/types/operators/DrInnerText.d.ts.map +1 -1
- package/dist/types/operators/DrTargetElement.d.ts.map +1 -1
- package/dist/types/operators/OperatorExecuter.d.ts.map +1 -1
- package/dist/types/rawsets/RawSet.d.ts +17 -9
- package/dist/types/rawsets/RawSet.d.ts.map +1 -1
- package/dist/types/rawsets/Render.d.ts +1 -0
- package/dist/types/rawsets/Render.d.ts.map +1 -1
- package/dist/types/routers/PathRouter.d.ts.map +1 -1
- package/dist/types/routers/Router.d.ts +11 -14
- package/dist/types/routers/Router.d.ts.map +1 -1
- package/dist/umd-bundle/dooboostore-dom-render.umd.js +14104 -6502
- package/dist/umd-bundle/dooboostore-dom-render.umd.js.map +4 -4
- package/package.json +9 -8
- package/src/DomRender.ts +62 -34
- package/src/DomRenderProxy.ts +275 -142
- package/src/bundle-entry.ts +5 -3
- package/src/components/ComponentBase.ts +33 -11
- package/src/components/ComponentRouterBase.ts +17 -2
- package/src/components/appender/Appender.ts +0 -5
- package/src/components/checkbox/CheckBox.ts +22 -25
- package/src/components/choose/Choose.ts +19 -18
- package/src/components/details/Details.ts +40 -43
- package/src/components/forOf/ForOf.ts +6 -9
- package/src/components/if/If.ts +9 -11
- package/src/components/input/Input.ts +16 -22
- package/src/components/promise/PromiseSwitch.ts +67 -66
- package/src/components/radio/Radio.ts +23 -28
- package/src/components/router/Route.ts +10 -13
- package/src/components/router/RouterOutlet.ts +29 -8
- package/src/components/select/Select.ts +47 -33
- package/src/components/this/This.ts +13 -12
- package/src/components/timer/Timer.ts +29 -65
- package/src/decorators/DomRenderNoProxy.ts +3 -1
- package/src/events/EventManager.ts +15 -4
- package/src/lifecycle/OnInitRender.ts +1 -1
- package/src/lifecycle/OnRawSetRendered.ts +15 -0
- package/src/lifecycle/index.ts +1 -0
- package/src/node_modules/.bin/acorn +17 -0
- package/src/node_modules/.bin/browserslist +17 -0
- package/src/node_modules/.bin/eslint +17 -0
- package/src/node_modules/.bin/sbf +17 -0
- package/src/node_modules/.bin/ts-node +17 -0
- package/src/node_modules/.bin/ts-node-cwd +17 -0
- package/src/node_modules/.bin/ts-node-dev +17 -0
- package/src/node_modules/.bin/ts-node-esm +17 -0
- package/src/node_modules/.bin/ts-node-script +17 -0
- package/src/node_modules/.bin/ts-node-transpile-only +17 -0
- package/src/node_modules/.bin/ts-script +17 -0
- package/src/node_modules/.bin/tsc +17 -0
- package/src/node_modules/.bin/tsnd +17 -0
- package/src/node_modules/.bin/tsserver +17 -0
- package/src/node_modules/.bin/webpack +17 -0
- package/src/node_modules/.bin/webpack-cli +17 -0
- package/src/node_modules/.bin/webpack-dev-server +17 -0
- package/src/operators/DrForOf.ts +25 -10
- package/src/operators/DrIf.ts +1 -1
- package/src/operators/DrInnerText.ts +2 -1
- package/src/operators/DrTargetElement.ts +14 -0
- package/src/operators/OperatorExecuter.ts +1 -2
- package/src/rawsets/RawSet.ts +709 -295
- package/src/rawsets/Render.ts +1 -0
- package/src/routers/PathRouter.ts +14 -7
- package/src/routers/Router.ts +107 -61
- package/types.d.ts +0 -2825
package/src/rawsets/Render.ts
CHANGED
|
@@ -6,7 +6,11 @@ export class PathRouter extends Router {
|
|
|
6
6
|
}
|
|
7
7
|
|
|
8
8
|
getSearchParams(data?:{delete?:string[], append?:[[string, string]]}): URLSearchParams {
|
|
9
|
-
|
|
9
|
+
if (!this.config.window.document?.location?.href) {
|
|
10
|
+
return new URLSearchParams();
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const searchParams = (new URL(this.config.window.document.location?.href)).searchParams;
|
|
10
14
|
data?.delete?.forEach(it => {
|
|
11
15
|
searchParams.delete(it);
|
|
12
16
|
})
|
|
@@ -34,7 +38,7 @@ export class PathRouter extends Router {
|
|
|
34
38
|
pushDeleteHashSearchParam(name: string, data?: any, title?: string) {
|
|
35
39
|
const s = this.getHashSearchParams({delete: [name]});
|
|
36
40
|
const size = Array.from(s.entries()).length;
|
|
37
|
-
const href = `${this.config.window.location
|
|
41
|
+
const href = `${this.config.window.location?.pathname??'/'}${this.config.window.location?.search}${size > 0 ? '#' + s.toString() : ''}`;
|
|
38
42
|
super.pushState(data, title, href);
|
|
39
43
|
}
|
|
40
44
|
|
|
@@ -50,7 +54,7 @@ export class PathRouter extends Router {
|
|
|
50
54
|
replaceDeleteHashSearchParam(name: string | string[], data?: any, title?: string) {
|
|
51
55
|
const s = this.getHashSearchParams({delete: Array.isArray(name) ? name : [name]});
|
|
52
56
|
const size = Array.from(s.entries()).length;
|
|
53
|
-
const href = `${this.config.window.location
|
|
57
|
+
const href = `${this.config.window.location?.pathname??'/'}${this.config.window.location?.search}${size > 0 ? '#' + s.toString() : ''}`;
|
|
54
58
|
super.replaceState(data, title, href);
|
|
55
59
|
}
|
|
56
60
|
|
|
@@ -61,21 +65,24 @@ export class PathRouter extends Router {
|
|
|
61
65
|
|
|
62
66
|
|
|
63
67
|
getUrl(): string {
|
|
64
|
-
|
|
68
|
+
if (!this.config.window.document?.location?.href) {
|
|
69
|
+
return '/';
|
|
70
|
+
}
|
|
71
|
+
const url = new URL(this.config.window.document.location?.href);
|
|
65
72
|
return url.pathname + url.search;
|
|
66
73
|
}
|
|
67
74
|
|
|
68
75
|
getHref(): string {
|
|
69
|
-
return this.config.window.location
|
|
76
|
+
return this.config.window.location?.href??'/';
|
|
70
77
|
}
|
|
71
78
|
|
|
72
79
|
getPathName(): string {
|
|
73
|
-
return this.config.window.location
|
|
80
|
+
return this.config.window.location?.pathname??'/';
|
|
74
81
|
}
|
|
75
82
|
|
|
76
83
|
getHashSearchParams(data?:{delete?:string[], append?:[[string, string]]}): URLSearchParams {
|
|
77
84
|
// http://local.com/#wow=222&wow=bb&z=2
|
|
78
|
-
const searchParams = new URLSearchParams(this.config.window.location
|
|
85
|
+
const searchParams = new URLSearchParams(this.config.window.location?.hash.slice(1)??'');
|
|
79
86
|
|
|
80
87
|
data?.delete?.forEach(it => {
|
|
81
88
|
searchParams.delete(it);
|
package/src/routers/Router.ts
CHANGED
|
@@ -11,29 +11,49 @@ export type RouteData = {
|
|
|
11
11
|
searchParams: URLSearchParams;
|
|
12
12
|
pathData?: any;
|
|
13
13
|
router: Router;
|
|
14
|
-
currentTarget?:PopCurrentState;
|
|
15
14
|
}
|
|
16
|
-
|
|
17
|
-
export type
|
|
18
|
-
export const isPopStateCurrentTargetDomrenderRouter = (obj: any): obj is PopStateCurrentTargetDomrenderRouter =>
|
|
19
|
-
obj?.currentTargetName === 'domRenderRouter';
|
|
20
|
-
|
|
21
|
-
export type RouterConfig<T = any> = { rootObject?: T, window: Window, disableAttach?: boolean,
|
|
22
|
-
// changeStateConvertDate?:(data: any)=>any
|
|
23
|
-
};
|
|
15
|
+
|
|
16
|
+
export type RouterConfig<T = any> = { rootObject?: T, window: Window, firstUrl?: string};
|
|
24
17
|
export type ChangeStateResult = {data?: any}
|
|
25
18
|
export type RouteAction = string | { path?: string, searchParams?: ToURLSearchParamsParams };
|
|
26
19
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
console.log('popstate-------!!', event.state, this.domRenderConfig.window.history.state)
|
|
30
|
-
})
|
|
31
|
-
*/
|
|
20
|
+
type RouterEventType = RouteData & { triggerPoint: 'start' | 'end' };
|
|
21
|
+
|
|
32
22
|
export abstract class Router<T = any> {
|
|
33
|
-
private behaviorSubject: BehaviorSubject<
|
|
23
|
+
private behaviorSubject: BehaviorSubject<RouterEventType>;
|
|
34
24
|
private _config: RouterConfig<T>;
|
|
35
25
|
|
|
36
|
-
|
|
26
|
+
constructor(config: RouterConfig<any>) {
|
|
27
|
+
this._config = config;
|
|
28
|
+
|
|
29
|
+
let routeData: RouterEventType;
|
|
30
|
+
if (config?.firstUrl) {
|
|
31
|
+
const path = config.firstUrl.split('?');
|
|
32
|
+
routeData = {
|
|
33
|
+
url: config.firstUrl,
|
|
34
|
+
path: path[0],
|
|
35
|
+
searchParams: new URLSearchParams(path[1]??''),
|
|
36
|
+
router: this,
|
|
37
|
+
triggerPoint: 'end'
|
|
38
|
+
}
|
|
39
|
+
this.behaviorSubject = new BehaviorSubject<RouterEventType>(routeData);
|
|
40
|
+
this.go(config.firstUrl);
|
|
41
|
+
} else {
|
|
42
|
+
routeData = {...this.getRouteData(), triggerPoint: 'end'};
|
|
43
|
+
this.behaviorSubject = new BehaviorSubject<RouterEventType>(routeData);
|
|
44
|
+
}
|
|
45
|
+
this.config.window.addEventListener('popstate', (event: PopStateEvent) => {
|
|
46
|
+
// domrender에서 발생하지 않은 즉 back, previous 일떄에도 이벤트가도록 처리
|
|
47
|
+
// if(!isPopStateCurrentTargetDomrenderRouter(event.state)) {
|
|
48
|
+
// console.log('-------');
|
|
49
|
+
const routeData: RouterEventType = {...this.getRouteData(), triggerPoint: 'end'};
|
|
50
|
+
this.behaviorSubject.next(routeData);
|
|
51
|
+
// }
|
|
52
|
+
})
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
get observable(): Observable<RouterEventType> {
|
|
37
57
|
return this.behaviorSubject.asObservable();
|
|
38
58
|
}
|
|
39
59
|
|
|
@@ -45,18 +65,6 @@ export abstract class Router<T = any> {
|
|
|
45
65
|
return this._config;
|
|
46
66
|
}
|
|
47
67
|
|
|
48
|
-
constructor(config: RouterConfig<any>) {
|
|
49
|
-
this._config = config;
|
|
50
|
-
this.behaviorSubject = new BehaviorSubject<RouteData>(this.getRouteData());
|
|
51
|
-
this.config.window.addEventListener('popstate', (event: PopStateEvent) => {
|
|
52
|
-
if(!isPopStateCurrentTargetDomrenderRouter(event.state)) {
|
|
53
|
-
// console.log('-------');
|
|
54
|
-
const routeData = this.getRouteData();
|
|
55
|
-
this.behaviorSubject.next(routeData);
|
|
56
|
-
}
|
|
57
|
-
})
|
|
58
|
-
}
|
|
59
|
-
|
|
60
68
|
public getSearchFirstParamsObject<T = any>(defaultValue?: T) {
|
|
61
69
|
const a = ConvertUtils.toObject<T>(this.getSearchParams(), {firstValue: true});
|
|
62
70
|
return Object.assign({}, defaultValue, a);
|
|
@@ -66,13 +74,13 @@ export abstract class Router<T = any> {
|
|
|
66
74
|
return ConvertUtils.toObject<T>(this.getHashSearchParams(), {firstValue: true});
|
|
67
75
|
}
|
|
68
76
|
|
|
69
|
-
async attach(): Promise<void> {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
}
|
|
77
|
+
// async attach(): Promise<void> {
|
|
78
|
+
// // const proxy = getDomRenderProxy(this.config.rootObject)
|
|
79
|
+
// // if (proxy) {
|
|
80
|
+
// // const key = `___${EventManager.ROUTER_VARNAME}`;
|
|
81
|
+
// // await proxy.render(key);
|
|
82
|
+
// // }
|
|
83
|
+
// }
|
|
76
84
|
|
|
77
85
|
testRegexp(regexp?: string): boolean {
|
|
78
86
|
if (regexp) {
|
|
@@ -91,10 +99,32 @@ export abstract class Router<T = any> {
|
|
|
91
99
|
}
|
|
92
100
|
}
|
|
93
101
|
|
|
94
|
-
getRouteData(config?: {
|
|
102
|
+
getRouteData(config?: {pathOrUrl?: string, urlExpression?: string}): RouteData {
|
|
103
|
+
|
|
104
|
+
let path = '';
|
|
105
|
+
let url ='';
|
|
106
|
+
if (config?.pathOrUrl) {
|
|
107
|
+
let isUrl = false;
|
|
108
|
+
try {
|
|
109
|
+
new URL(config.pathOrUrl);
|
|
110
|
+
isUrl = true;
|
|
111
|
+
} catch {
|
|
112
|
+
isUrl = false;
|
|
113
|
+
}
|
|
114
|
+
if(isUrl){
|
|
115
|
+
const u = new URL(config.pathOrUrl);
|
|
116
|
+
path = u.pathname;
|
|
117
|
+
url = u.pathname + u.search;
|
|
118
|
+
} else {
|
|
119
|
+
path = config.pathOrUrl.split('?')[0];
|
|
120
|
+
}
|
|
121
|
+
} else {
|
|
122
|
+
path = this.getPathName();
|
|
123
|
+
url = this.getUrl();
|
|
124
|
+
}
|
|
95
125
|
const newVar = {
|
|
96
|
-
path:
|
|
97
|
-
url:
|
|
126
|
+
path: path,
|
|
127
|
+
url: url,
|
|
98
128
|
searchParams: this.getSearchParams()
|
|
99
129
|
} as RouteData;
|
|
100
130
|
|
|
@@ -109,43 +139,58 @@ export abstract class Router<T = any> {
|
|
|
109
139
|
}
|
|
110
140
|
}
|
|
111
141
|
newVar.router = this;
|
|
112
|
-
newVar.currentTarget = config?.currentTarget;
|
|
142
|
+
// newVar.currentTarget = config?.currentTarget;
|
|
113
143
|
return Object.freeze(newVar);
|
|
114
144
|
}
|
|
115
145
|
|
|
116
146
|
pushState(data: any, title: string | undefined, path: string):ChangeStateResult {
|
|
117
147
|
// data = this.config.changeStateConvertDate?this.config.changeStateConvertDate(data): data;
|
|
118
148
|
// console.log('--->pushState', data);
|
|
119
|
-
this.
|
|
120
|
-
this.
|
|
149
|
+
this.behaviorSubject.next({ ...this.getRouteData({pathOrUrl:path}), triggerPoint: 'start' });
|
|
150
|
+
this.config.window.history?.pushState(data, title ?? '', path);
|
|
151
|
+
this.behaviorSubject.next({ ...this.getRouteData({pathOrUrl:path}), triggerPoint: 'end' });
|
|
121
152
|
return {data};
|
|
122
153
|
}
|
|
123
154
|
|
|
124
155
|
replaceState(data: any, title: string | undefined, path: string):ChangeStateResult {
|
|
125
156
|
// data = this.config.changeStateConvertDate?this.config.changeStateConvertDate(data): data;
|
|
126
157
|
// console.log('--->replaceState', data);
|
|
127
|
-
this.
|
|
128
|
-
this.
|
|
158
|
+
this.behaviorSubject.next({ ...this.getRouteData({pathOrUrl:path}), triggerPoint: 'start' });
|
|
159
|
+
this.config.window.history?.replaceState(data, title ?? '', path);
|
|
160
|
+
this.behaviorSubject.next({ ...this.getRouteData({pathOrUrl:path}), triggerPoint: 'end' });
|
|
129
161
|
return {data};
|
|
130
162
|
}
|
|
131
163
|
|
|
132
|
-
|
|
133
|
-
this.config.window.
|
|
164
|
+
getData(): any {
|
|
165
|
+
return this.config.window.history?.state;
|
|
134
166
|
}
|
|
135
167
|
|
|
136
|
-
|
|
137
|
-
|
|
168
|
+
getPathData(urlExpression: string, currentUrl = this.getPathName()): any {
|
|
169
|
+
return Expression.Path.pathNameData(currentUrl, urlExpression);
|
|
138
170
|
}
|
|
139
171
|
|
|
140
|
-
|
|
141
|
-
|
|
172
|
+
back(): void {
|
|
173
|
+
this.behaviorSubject.next({...this.getRouteData(),triggerPoint:'start'});
|
|
174
|
+
this.config.window.history.back();
|
|
175
|
+
//en부분은 constructo의 this.config.window.addEventListener('popstate' 에서 받아서 처리된다 호출된다.
|
|
142
176
|
}
|
|
143
177
|
|
|
144
|
-
|
|
145
|
-
|
|
178
|
+
forward(): void {
|
|
179
|
+
this.behaviorSubject.next({...this.getRouteData(),triggerPoint:'start'});
|
|
180
|
+
this.config.window.history?.forward();
|
|
181
|
+
//end부분은 constructor의 this.config.window.addEventListener('popstate' 에서 받아서 처리된다 호출된다.
|
|
146
182
|
}
|
|
147
183
|
|
|
148
|
-
|
|
184
|
+
go(i: number): void;
|
|
185
|
+
async go(config: string | { path: RouteAction, data?: any, replace?: boolean, title?: string, scrollToTop?: boolean } | string): Promise<void> ;
|
|
186
|
+
go(config: number | string | { path: RouteAction, data?: any, replace?: boolean, title?: string, scrollToTop?: boolean } | string): Promise<void> | void {
|
|
187
|
+
if (typeof config === 'number') {
|
|
188
|
+
this.behaviorSubject.next({...this.getRouteData(),triggerPoint:'start'});
|
|
189
|
+
this.config.window.history?.go(config);
|
|
190
|
+
//end부분은 constructor의 this.config.window.addEventListener('popstate' 에서 받아서 처리된다 호출된다.
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
|
|
149
194
|
if (typeof config === 'string') {
|
|
150
195
|
config = { path: config };
|
|
151
196
|
}
|
|
@@ -156,24 +201,25 @@ export abstract class Router<T = any> {
|
|
|
156
201
|
} else {
|
|
157
202
|
this.push(config.path, config.data, config.title);
|
|
158
203
|
}
|
|
159
|
-
if (!this.config.disableAttach) {
|
|
160
|
-
|
|
161
|
-
}
|
|
162
|
-
|
|
204
|
+
// if (!this.config.disableAttach) {
|
|
205
|
+
// await this.attach();
|
|
206
|
+
// }
|
|
207
|
+
|
|
163
208
|
// 스크롤 제어 (기본값: true - 맨 위로 스크롤)
|
|
164
209
|
if (config.scrollToTop !== false) {
|
|
165
210
|
try {
|
|
166
|
-
|
|
211
|
+
this._config.window?.scrollTo?.(0, 0);
|
|
167
212
|
}catch (e){}
|
|
168
213
|
}
|
|
169
|
-
|
|
214
|
+
|
|
170
215
|
// console.log('----------', data, config)
|
|
171
|
-
if (!config.disabledPopEvent) {
|
|
172
|
-
|
|
173
|
-
}
|
|
216
|
+
// if (!config.disabledPopEvent) {
|
|
217
|
+
// this.dispatchPopStateEvent(config?.data);
|
|
218
|
+
// }
|
|
174
219
|
}
|
|
175
220
|
|
|
176
221
|
toUrl(data: RouteAction) {
|
|
222
|
+
console.log('toUrl', data);
|
|
177
223
|
let targetPath: string;
|
|
178
224
|
if (typeof data === 'string') {
|
|
179
225
|
targetPath = data;
|