@pihanga2/core 0.3.2 → 0.3.4
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/dist/card.d.ts +4 -2
- package/dist/card.d.ts.map +1 -1
- package/dist/card.js +16 -10
- package/dist/card.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/dist/reducer.d.ts.map +1 -1
- package/dist/reducer.js +65 -18
- package/dist/reducer.js.map +1 -1
- package/dist/redux.d.ts.map +1 -1
- package/dist/redux.js.map +1 -1
- package/dist/register_cards.d.ts +2 -2
- package/dist/register_cards.d.ts.map +1 -1
- package/dist/register_cards.js +1 -1
- package/dist/register_cards.js.map +1 -1
- package/dist/router.d.ts +11 -5
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +33 -28
- package/dist/router.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types.d.ts +5 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +2 -2
- package/src/card.tsx +33 -21
- package/src/index.ts +94 -76
- package/src/reducer.ts +133 -76
- package/src/redux.ts +26 -25
- package/src/register_cards.ts +28 -25
- package/src/router.ts +129 -100
- package/src/types.ts +14 -10
package/dist/router.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { createBrowserHistory } from
|
|
2
|
-
import { getLogger } from
|
|
3
|
-
import { registerActions } from
|
|
1
|
+
import { createBrowserHistory } from "history";
|
|
2
|
+
import { getLogger } from "./logger";
|
|
3
|
+
import { createOnAction, registerActions } from "./redux";
|
|
4
|
+
import { DEF_REDUCER_PRIORITY, } from "./types";
|
|
4
5
|
const logger = getLogger("router");
|
|
5
6
|
export const browserHistory = createBrowserHistory();
|
|
6
7
|
// type Route = {
|
|
@@ -9,33 +10,38 @@ export const browserHistory = createBrowserHistory();
|
|
|
9
10
|
// url: string
|
|
10
11
|
// fromBrowser?: boolean
|
|
11
12
|
// }
|
|
12
|
-
export const ACTION_TYPES = registerActions(
|
|
13
|
+
export const ACTION_TYPES = registerActions("pi/router", [
|
|
14
|
+
"show_page",
|
|
15
|
+
"navigate_to_page",
|
|
16
|
+
]);
|
|
13
17
|
export const onShowPage = createOnAction(ACTION_TYPES.SHOW_PAGE);
|
|
14
18
|
export const showPage = (dispatch, path, query) => {
|
|
15
19
|
dispatch(createShowPageAction(path, query));
|
|
16
20
|
};
|
|
17
21
|
export const createShowPageAction = (path, query) => ({
|
|
18
22
|
type: ACTION_TYPES.SHOW_PAGE,
|
|
19
|
-
path,
|
|
23
|
+
path,
|
|
24
|
+
query,
|
|
25
|
+
fromBrowser: false,
|
|
20
26
|
});
|
|
21
27
|
export const onNavigateToPage = createOnAction(ACTION_TYPES.NAVIGATE_TO_PAGE);
|
|
22
28
|
export const ON_INIT_ACTION = "pi/start";
|
|
23
29
|
export const onInit = createOnAction(ON_INIT_ACTION);
|
|
24
|
-
export function currentRoute(pathPrefix =
|
|
30
|
+
export function currentRoute(pathPrefix = "") {
|
|
25
31
|
const f = route_functions(pathPrefix);
|
|
26
32
|
const r2 = f.url2route(window.location.href);
|
|
27
33
|
const r = f.location2route(browserHistory.location);
|
|
28
34
|
return r;
|
|
29
35
|
}
|
|
30
|
-
export function init(reducer, pathPrefix =
|
|
36
|
+
export function init(reducer, pathPrefix = "") {
|
|
31
37
|
let workingURL;
|
|
32
38
|
const f = route_functions(pathPrefix);
|
|
33
39
|
browserHistory.listen(({ action, location }) => {
|
|
34
40
|
// location is an object like window.location
|
|
35
41
|
const { url } = f.location2route(location);
|
|
36
42
|
if (workingURL !== url) {
|
|
37
|
-
logger.info(
|
|
38
|
-
setTimeout(() => navigateToPage(url, action ===
|
|
43
|
+
logger.info("browser history:", url, action);
|
|
44
|
+
setTimeout(() => navigateToPage(url, action === "POP"));
|
|
39
45
|
}
|
|
40
46
|
});
|
|
41
47
|
function browserPath() {
|
|
@@ -60,7 +66,7 @@ export function init(reducer, pathPrefix = '') {
|
|
|
60
66
|
...r,
|
|
61
67
|
});
|
|
62
68
|
return state;
|
|
63
|
-
});
|
|
69
|
+
}, DEF_REDUCER_PRIORITY, "@builtin:router:NAVIGATE_TO_PAGE");
|
|
64
70
|
reducer.register(ACTION_TYPES.SHOW_PAGE, (state, { path, query = {}, fromBrowser = false }) => {
|
|
65
71
|
const route = f.pathl2route(path, query);
|
|
66
72
|
workingURL = route.url;
|
|
@@ -75,17 +81,16 @@ export function init(reducer, pathPrefix = '') {
|
|
|
75
81
|
fromBrowser,
|
|
76
82
|
};
|
|
77
83
|
return state;
|
|
78
|
-
});
|
|
79
|
-
reducer.register(
|
|
84
|
+
}, DEF_REDUCER_PRIORITY, "@builtin:router:SHOW_PAGE");
|
|
85
|
+
reducer.register("@@INIT", (state) => {
|
|
80
86
|
const url = browserPath().url;
|
|
81
87
|
logger.info(`Request navigation to '${url}'`);
|
|
82
88
|
setTimeout(() => navigateToPage(url, true));
|
|
83
89
|
return state;
|
|
84
|
-
});
|
|
90
|
+
}, DEF_REDUCER_PRIORITY, "@builtin:router:@@INIT");
|
|
85
91
|
return f.location2route(browserHistory.location);
|
|
86
92
|
}
|
|
87
|
-
|
|
88
|
-
function route_functions(pathPrefix = '') {
|
|
93
|
+
function route_functions(pathPrefix = "") {
|
|
89
94
|
const location2route = (location) => {
|
|
90
95
|
const [p, s] = [location.pathname, location.search];
|
|
91
96
|
const url = s ? `${p}${s}` : p;
|
|
@@ -93,34 +98,39 @@ function route_functions(pathPrefix = '') {
|
|
|
93
98
|
};
|
|
94
99
|
const url2route = (url) => {
|
|
95
100
|
const [pn, search] = url.split("?");
|
|
96
|
-
const path = pn
|
|
101
|
+
const path = pn
|
|
102
|
+
.substring(pathPrefix.length)
|
|
103
|
+
.split("/")
|
|
104
|
+
.filter((s) => s !== "");
|
|
97
105
|
const query = {};
|
|
98
106
|
const s = search;
|
|
99
107
|
if (s && s.length > 0) {
|
|
100
|
-
s.split(
|
|
101
|
-
const [k, v] = el.split(
|
|
108
|
+
s.split("&").forEach((el) => {
|
|
109
|
+
const [k, v] = el.split("=");
|
|
102
110
|
query[decodeURI(k)] = v ? decodeURI(v) : true;
|
|
103
111
|
});
|
|
104
112
|
}
|
|
105
113
|
return { url, path, query };
|
|
106
114
|
};
|
|
107
115
|
const pathl2route = (path, query) => {
|
|
108
|
-
let url = `${pathPrefix}/${path.join(
|
|
116
|
+
let url = `${pathPrefix}/${path.join("/")}`;
|
|
109
117
|
if (query) {
|
|
110
118
|
const qa = Object.entries(query);
|
|
111
119
|
if (qa.length > 0) {
|
|
112
|
-
const s = qa
|
|
120
|
+
const s = qa
|
|
121
|
+
.map(([k, v]) => {
|
|
113
122
|
const n = encodeURI(k);
|
|
114
|
-
if (typeof v ===
|
|
123
|
+
if (typeof v === "boolean") {
|
|
115
124
|
return n;
|
|
116
125
|
}
|
|
117
|
-
else if (typeof v ===
|
|
126
|
+
else if (typeof v === "number") {
|
|
118
127
|
return `${n}=${v}`;
|
|
119
128
|
}
|
|
120
129
|
else {
|
|
121
130
|
return `${n}=${encodeURI(v)}`;
|
|
122
131
|
}
|
|
123
|
-
})
|
|
132
|
+
})
|
|
133
|
+
.join("&");
|
|
124
134
|
url = `${url}?${s}`;
|
|
125
135
|
}
|
|
126
136
|
}
|
|
@@ -128,9 +138,4 @@ function route_functions(pathPrefix = '') {
|
|
|
128
138
|
};
|
|
129
139
|
return { location2route, url2route, pathl2route };
|
|
130
140
|
}
|
|
131
|
-
function createOnAction(actionType) {
|
|
132
|
-
return (register, f) => {
|
|
133
|
-
register.reducer.register(actionType, f);
|
|
134
|
-
};
|
|
135
|
-
}
|
|
136
141
|
//# sourceMappingURL=router.js.map
|
package/dist/router.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["../src/card.tsx","../src/index.ts","../src/logger.ts","../src/reducer.ts","../src/redux.ts","../src/register_cards.ts","../src/root.tsx","../src/router.ts","../src/store.ts","../src/types.ts","../src/rest/delete.ts","../src/rest/enums.ts","../src/rest/get.ts","../src/rest/index.ts","../src/rest/postputpatch.ts","../src/rest/types.ts","../src/rest/utils.ts"],"version":"5.
|
|
1
|
+
{"root":["../src/card.tsx","../src/index.ts","../src/logger.ts","../src/reducer.ts","../src/redux.ts","../src/register_cards.ts","../src/root.tsx","../src/router.ts","../src/store.ts","../src/types.ts","../src/rest/delete.ts","../src/rest/enums.ts","../src/rest/get.ts","../src/rest/index.ts","../src/rest/postputpatch.ts","../src/rest/types.ts","../src/rest/utils.ts"],"version":"5.7.2"}
|
package/dist/types.d.ts
CHANGED
|
@@ -35,8 +35,9 @@ export interface PiReducer {
|
|
|
35
35
|
dispatch: DispatchF;
|
|
36
36
|
dispatchFromReducer: DispatchF;
|
|
37
37
|
}
|
|
38
|
+
export declare const DEF_REDUCER_PRIORITY = 0;
|
|
38
39
|
export type PiRegisterReducerF = <S extends ReduxState, A extends ReduxAction>(eventType: string, mapper: ReduceF<S, A>, // (state: S, action: A, dispatch: DispatchF) => S,
|
|
39
|
-
priority?: number, key?: string) => PiReducerCancelF;
|
|
40
|
+
priority?: number, key?: string, targetMapper?: ReduceF<S, A>) => PiReducerCancelF;
|
|
40
41
|
export type PiReducerCancelF = () => void;
|
|
41
42
|
export type PiRegisterOneShotReducerF = <S extends ReduxState, A extends ReduxAction>(eventType: string, mapper: ReduceOnceF<S, A>, priority?: number) => void;
|
|
42
43
|
export type PiDefCtxtProps = {
|
|
@@ -74,12 +75,12 @@ export type StateMapperContext<C> = {
|
|
|
74
75
|
};
|
|
75
76
|
export type PiMapProps<CType, S extends ReduxState, EType = {}, C = PiDefCtxtProps> = {
|
|
76
77
|
[Property in keyof CType]: CType[Property] | StateMapper<CType[Property], S, C>;
|
|
77
|
-
} & EventHandler<EType, S> & EventMapper<EType>;
|
|
78
|
+
} & EventHandler<EType, S> & EventMapper<EType, C>;
|
|
78
79
|
export type EventHandler<T, S extends ReduxState> = {
|
|
79
80
|
[Key in keyof T]?: ReduceF<S, T[Key] & ReduxAction>;
|
|
80
81
|
};
|
|
81
|
-
export type EventMapper<T> = {
|
|
82
|
-
[Key in keyof T as `${Key & string}Mapper`]?: (ev: T[Key]) => ReduxAction | null;
|
|
82
|
+
export type EventMapper<T, C = PiDefCtxtProps> = {
|
|
83
|
+
[Key in keyof T as `${Key & string}Mapper`]?: (ev: T[Key], ctxt: C) => ReduxAction | null;
|
|
83
84
|
};
|
|
84
85
|
export type GenericCardParameterT = unknown | StateMapper<unknown, ReduxState, unknown>;
|
|
85
86
|
export type PiCardDef = {
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,KAAK,CAAC;IAEb,OAAO,CAAC,EAAE;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export
|
|
1
|
+
export const DEF_REDUCER_PRIORITY = 0;
|
|
2
2
|
//# sourceMappingURL=types.js.map
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAkDA,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC"}
|
package/package.json
CHANGED
package/src/card.tsx
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import React, {
|
|
2
|
-
import {
|
|
1
|
+
import React, {useEffect, useId} from "react";
|
|
2
|
+
import {useDispatch, useSelector, useStore} from "react-redux";
|
|
3
3
|
import equal from "deep-equal";
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import {getLogger} from "./logger";
|
|
6
6
|
import {
|
|
7
7
|
CSSModuleClasses,
|
|
8
8
|
CardProp,
|
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
StateMapper,
|
|
17
17
|
StateMapperContext,
|
|
18
18
|
} from "./types";
|
|
19
|
-
import {
|
|
19
|
+
import {Action, AnyAction, Dispatch} from "@reduxjs/toolkit";
|
|
20
20
|
import {
|
|
21
21
|
_createCardMapping,
|
|
22
22
|
_updateCardMapping,
|
|
@@ -34,7 +34,7 @@ const logger = getLogger("card");
|
|
|
34
34
|
// cardName: PiCardRef
|
|
35
35
|
// } & { [k: string]: any }
|
|
36
36
|
|
|
37
|
-
type CompProps = {
|
|
37
|
+
type CompProps = {[k: string]: any};
|
|
38
38
|
type CardInfo = {
|
|
39
39
|
mapping: Mapping;
|
|
40
40
|
cardType: PiRegisterComponent;
|
|
@@ -71,13 +71,19 @@ export function Card(props: CardProp): JSX.Element {
|
|
|
71
71
|
|
|
72
72
|
export function usePiReducer<S extends ReduxState, A extends ReduxAction>(
|
|
73
73
|
eventType: string,
|
|
74
|
-
mapper: ReduceF<S, A
|
|
74
|
+
mapper: ReduceF<S, A>, // (state: S, action: A, dispatch: DispatchF) => S,
|
|
75
|
+
cardName: string
|
|
75
76
|
) {
|
|
76
77
|
const store = useStore();
|
|
77
|
-
|
|
78
|
+
let key: string;
|
|
79
|
+
if (cardName !== "") {
|
|
80
|
+
key = `inside card '${cardName}'`;
|
|
81
|
+
} else {
|
|
82
|
+
key = useId();
|
|
83
|
+
}
|
|
78
84
|
useEffect(() => {
|
|
79
85
|
const r = (store as any).piReducer as PiReducer;
|
|
80
|
-
return r.register(eventType, mapper, 0,
|
|
86
|
+
return r.register(eventType, mapper, 0, key);
|
|
81
87
|
});
|
|
82
88
|
}
|
|
83
89
|
|
|
@@ -133,7 +139,13 @@ function GenericCard(
|
|
|
133
139
|
);
|
|
134
140
|
const dispatch = useDispatch();
|
|
135
141
|
|
|
136
|
-
const extCardProps = appendEventHandlers(
|
|
142
|
+
const extCardProps = appendEventHandlers(
|
|
143
|
+
info,
|
|
144
|
+
cardProps,
|
|
145
|
+
cardName,
|
|
146
|
+
props,
|
|
147
|
+
dispatch
|
|
148
|
+
);
|
|
137
149
|
extCardProps._cls = cls_f(cardName, info.mapping.cardType);
|
|
138
150
|
return React.createElement(
|
|
139
151
|
info.cardType.component,
|
|
@@ -168,7 +180,7 @@ function getCardInfo(cardName: string): [CardInfo?, JSX.Element?] {
|
|
|
168
180
|
return [undefined, renderUnknownCardType(mapping.cardType)];
|
|
169
181
|
}
|
|
170
182
|
}
|
|
171
|
-
const info = {
|
|
183
|
+
const info = {mapping, cardType};
|
|
172
184
|
return [info, undefined];
|
|
173
185
|
}
|
|
174
186
|
|
|
@@ -205,7 +217,7 @@ function getCardProps(
|
|
|
205
217
|
return cprops;
|
|
206
218
|
}
|
|
207
219
|
|
|
208
|
-
function cls_f(
|
|
220
|
+
export function cls_f(
|
|
209
221
|
cardName: string,
|
|
210
222
|
cardComp: string,
|
|
211
223
|
prefix: string = "pi"
|
|
@@ -247,6 +259,7 @@ function appendEventHandlers(
|
|
|
247
259
|
info: CardInfo,
|
|
248
260
|
cardProps: CompProps,
|
|
249
261
|
cardName: string,
|
|
262
|
+
ctxtProps: CardProp,
|
|
250
263
|
dispatch: Dispatch<Action>
|
|
251
264
|
): CompProps {
|
|
252
265
|
RegisterCardState.props(cardName, cardProps, dispatch);
|
|
@@ -266,7 +279,7 @@ function appendEventHandlers(
|
|
|
266
279
|
logger.debug("setup mapper", cardName);
|
|
267
280
|
cp[name] = (a: AnyAction) => {
|
|
268
281
|
a.cardID = cardName;
|
|
269
|
-
const a2 = m(a);
|
|
282
|
+
const a2 = m(a, ctxtProps);
|
|
270
283
|
if (a2) dispatch(a2);
|
|
271
284
|
};
|
|
272
285
|
} else {
|
|
@@ -299,7 +312,7 @@ type CardState = {
|
|
|
299
312
|
dispatch: Dispatch<Action>
|
|
300
313
|
) => void;
|
|
301
314
|
changed: (cardName: string, isUnchanged: boolean, props: CompProps) => void;
|
|
302
|
-
reducer:
|
|
315
|
+
reducer: ReduceF<ReduxState, Action>;
|
|
303
316
|
};
|
|
304
317
|
|
|
305
318
|
export const RegisterCardState = createCardState();
|
|
@@ -310,7 +323,7 @@ function createCardState(): CardState {
|
|
|
310
323
|
changedAt: number;
|
|
311
324
|
reportedAt: number;
|
|
312
325
|
};
|
|
313
|
-
const s: {
|
|
326
|
+
const s: {[name: string]: S} = {};
|
|
314
327
|
let dispatch: Dispatch<Action>;
|
|
315
328
|
let timer: number;
|
|
316
329
|
let lastReport = 0;
|
|
@@ -342,7 +355,7 @@ function createCardState(): CardState {
|
|
|
342
355
|
);
|
|
343
356
|
if (changed.length > 0) {
|
|
344
357
|
clearTimeout(timer); // just in case
|
|
345
|
-
dispatch({
|
|
358
|
+
dispatch({type: UPDATE_STATE_ACTION});
|
|
346
359
|
}
|
|
347
360
|
}
|
|
348
361
|
}, 1000);
|
|
@@ -369,7 +382,7 @@ function createCardState(): CardState {
|
|
|
369
382
|
resetTimer();
|
|
370
383
|
}
|
|
371
384
|
};
|
|
372
|
-
const reducer = (state: ReduxState)
|
|
385
|
+
const reducer = (state: ReduxState) => {
|
|
373
386
|
const pi = Object.values(s)
|
|
374
387
|
.filter((s) => s.reportedAt > lastReport)
|
|
375
388
|
.reduce((p, s) => {
|
|
@@ -384,12 +397,11 @@ function createCardState(): CardState {
|
|
|
384
397
|
delete props._cls;
|
|
385
398
|
p[name] = props;
|
|
386
399
|
return p;
|
|
387
|
-
}, {} as {
|
|
388
|
-
state.pihanga = pi;
|
|
400
|
+
}, {} as {[k: string]: any});
|
|
401
|
+
(state.pihanga ??= {}).cards = pi;
|
|
389
402
|
lastReport = Date.now();
|
|
390
|
-
return state;
|
|
391
403
|
};
|
|
392
|
-
return {
|
|
404
|
+
return {props, changed, reducer};
|
|
393
405
|
}
|
|
394
406
|
|
|
395
407
|
function copySafeProps(props: CompProps): CompProps {
|
|
@@ -421,7 +433,7 @@ function makeSafe(v: any): any {
|
|
|
421
433
|
return Object.entries(v).reduce((p, [k, v]) => {
|
|
422
434
|
p[k] = makeSafe(v);
|
|
423
435
|
return p;
|
|
424
|
-
}, {} as {
|
|
436
|
+
}, {} as {[k: string]: any});
|
|
425
437
|
}
|
|
426
438
|
logger.warn(">>> reject", v, typeof v);
|
|
427
439
|
return "...";
|