@t8/react-pending 1.0.29 → 1.0.30
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/index.cjs +82 -88
- package/dist/index.mjs +82 -88
- package/package.json +3 -3
package/dist/index.cjs
CHANGED
|
@@ -2,34 +2,29 @@ let react = require("react");
|
|
|
2
2
|
let __t8_react_store = require("@t8/react-store");
|
|
3
3
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
4
4
|
|
|
5
|
-
//#region src/PendingStateContext.ts
|
|
6
5
|
const PendingStateContext = (0, react.createContext)(/* @__PURE__ */ new Map());
|
|
7
6
|
|
|
8
|
-
//#endregion
|
|
9
|
-
//#region src/PendingStateProvider.tsx
|
|
10
7
|
const PendingStateProvider = ({ value, children }) => {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
8
|
+
let defaultValueRef = (0, react.useRef)(null);
|
|
9
|
+
let resolvedValue = (0, react.useMemo)(() => {
|
|
10
|
+
if (value instanceof Map) return value;
|
|
11
|
+
if (typeof value === "object" && value !== null) return new Map(Object.entries(value).map(([key, state]) => [key, new __t8_react_store.Store(state)]));
|
|
12
|
+
if (defaultValueRef.current === null) defaultValueRef.current = /* @__PURE__ */ new Map();
|
|
13
|
+
return defaultValueRef.current;
|
|
14
|
+
}, [value]);
|
|
15
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PendingStateContext.Provider, {
|
|
16
|
+
value: resolvedValue,
|
|
17
|
+
children
|
|
18
|
+
});
|
|
22
19
|
};
|
|
23
20
|
|
|
24
|
-
//#endregion
|
|
25
|
-
//#region src/usePendingState.ts
|
|
26
21
|
function createState(initialized = false, complete = false, error) {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
22
|
+
return {
|
|
23
|
+
initialized,
|
|
24
|
+
complete,
|
|
25
|
+
error,
|
|
26
|
+
time: Date.now()
|
|
27
|
+
};
|
|
33
28
|
}
|
|
34
29
|
/**
|
|
35
30
|
* Returns an instance of an action's state and the functions to update it.
|
|
@@ -46,73 +41,72 @@ function createState(initialized = false, complete = false, error) {
|
|
|
46
41
|
* an another state value.
|
|
47
42
|
*/
|
|
48
43
|
function usePendingState(store) {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
44
|
+
let storeMap = (0, react.useContext)(PendingStateContext);
|
|
45
|
+
let storeRef = (0, react.useRef)(null);
|
|
46
|
+
let [storeItemInited, setStoreItemInited] = (0, react.useState)(false);
|
|
47
|
+
let [state, setState] = (0, __t8_react_store.useStore)((0, react.useMemo)(() => {
|
|
48
|
+
if ((0, __t8_react_store.isStore)(store)) return store;
|
|
49
|
+
if (typeof store === "string") {
|
|
50
|
+
let storeItem = storeMap.get(store);
|
|
51
|
+
if (!storeItem) {
|
|
52
|
+
storeItem = new __t8_react_store.Store(createState());
|
|
53
|
+
storeMap.set(store, storeItem);
|
|
54
|
+
if (!storeItemInited) setStoreItemInited(true);
|
|
55
|
+
}
|
|
56
|
+
return storeItem;
|
|
57
|
+
}
|
|
58
|
+
if (!storeRef.current) storeRef.current = new __t8_react_store.Store(createState());
|
|
59
|
+
return storeRef.current;
|
|
60
|
+
}, [
|
|
61
|
+
store,
|
|
62
|
+
storeMap,
|
|
63
|
+
storeItemInited
|
|
64
|
+
]));
|
|
65
|
+
return [
|
|
66
|
+
state,
|
|
67
|
+
(0, react.useCallback)((value, options) => {
|
|
68
|
+
if (value instanceof Promise) {
|
|
69
|
+
let delayedPending = null;
|
|
70
|
+
if (!options?.silent) {
|
|
71
|
+
let delay = options?.delay;
|
|
72
|
+
if (delay === void 0) setState((prevState) => ({
|
|
73
|
+
...prevState,
|
|
74
|
+
...createState(true, false)
|
|
75
|
+
}));
|
|
76
|
+
else delayedPending = setTimeout(() => {
|
|
77
|
+
setState((prevState) => ({
|
|
78
|
+
...prevState,
|
|
79
|
+
...createState(true, false)
|
|
80
|
+
}));
|
|
81
|
+
delayedPending = null;
|
|
82
|
+
}, delay);
|
|
83
|
+
}
|
|
84
|
+
return value.then((resolvedValue) => {
|
|
85
|
+
if (delayedPending !== null) clearTimeout(delayedPending);
|
|
86
|
+
setState((prevState) => ({
|
|
87
|
+
...prevState,
|
|
88
|
+
...createState(true, true)
|
|
89
|
+
}));
|
|
90
|
+
return resolvedValue;
|
|
91
|
+
}).catch((error) => {
|
|
92
|
+
if (delayedPending !== null) clearTimeout(delayedPending);
|
|
93
|
+
setState((prevState) => ({
|
|
94
|
+
...prevState,
|
|
95
|
+
...createState(true, true, error)
|
|
96
|
+
}));
|
|
97
|
+
if (options?.throws) throw error;
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
setState((prevState) => ({
|
|
101
|
+
...prevState,
|
|
102
|
+
...createState(true, true)
|
|
103
|
+
}));
|
|
104
|
+
return value;
|
|
105
|
+
}, [setState]),
|
|
106
|
+
setState
|
|
107
|
+
];
|
|
113
108
|
}
|
|
114
109
|
|
|
115
|
-
//#endregion
|
|
116
110
|
exports.PendingStateContext = PendingStateContext;
|
|
117
111
|
exports.PendingStateProvider = PendingStateProvider;
|
|
118
|
-
exports.usePendingState = usePendingState;
|
|
112
|
+
exports.usePendingState = usePendingState;
|
package/dist/index.mjs
CHANGED
|
@@ -2,34 +2,29 @@ import { createContext, useCallback, useContext, useMemo, useRef, useState } fro
|
|
|
2
2
|
import { Store, isStore, useStore } from "@t8/react-store";
|
|
3
3
|
import { jsx } from "react/jsx-runtime";
|
|
4
4
|
|
|
5
|
-
//#region src/PendingStateContext.ts
|
|
6
5
|
const PendingStateContext = createContext(/* @__PURE__ */ new Map());
|
|
7
6
|
|
|
8
|
-
//#endregion
|
|
9
|
-
//#region src/PendingStateProvider.tsx
|
|
10
7
|
const PendingStateProvider = ({ value, children }) => {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
8
|
+
let defaultValueRef = useRef(null);
|
|
9
|
+
let resolvedValue = useMemo(() => {
|
|
10
|
+
if (value instanceof Map) return value;
|
|
11
|
+
if (typeof value === "object" && value !== null) return new Map(Object.entries(value).map(([key, state]) => [key, new Store(state)]));
|
|
12
|
+
if (defaultValueRef.current === null) defaultValueRef.current = /* @__PURE__ */ new Map();
|
|
13
|
+
return defaultValueRef.current;
|
|
14
|
+
}, [value]);
|
|
15
|
+
return /* @__PURE__ */ jsx(PendingStateContext.Provider, {
|
|
16
|
+
value: resolvedValue,
|
|
17
|
+
children
|
|
18
|
+
});
|
|
22
19
|
};
|
|
23
20
|
|
|
24
|
-
//#endregion
|
|
25
|
-
//#region src/usePendingState.ts
|
|
26
21
|
function createState(initialized = false, complete = false, error) {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
22
|
+
return {
|
|
23
|
+
initialized,
|
|
24
|
+
complete,
|
|
25
|
+
error,
|
|
26
|
+
time: Date.now()
|
|
27
|
+
};
|
|
33
28
|
}
|
|
34
29
|
/**
|
|
35
30
|
* Returns an instance of an action's state and the functions to update it.
|
|
@@ -46,71 +41,70 @@ function createState(initialized = false, complete = false, error) {
|
|
|
46
41
|
* an another state value.
|
|
47
42
|
*/
|
|
48
43
|
function usePendingState(store) {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
44
|
+
let storeMap = useContext(PendingStateContext);
|
|
45
|
+
let storeRef = useRef(null);
|
|
46
|
+
let [storeItemInited, setStoreItemInited] = useState(false);
|
|
47
|
+
let [state, setState] = useStore(useMemo(() => {
|
|
48
|
+
if (isStore(store)) return store;
|
|
49
|
+
if (typeof store === "string") {
|
|
50
|
+
let storeItem = storeMap.get(store);
|
|
51
|
+
if (!storeItem) {
|
|
52
|
+
storeItem = new Store(createState());
|
|
53
|
+
storeMap.set(store, storeItem);
|
|
54
|
+
if (!storeItemInited) setStoreItemInited(true);
|
|
55
|
+
}
|
|
56
|
+
return storeItem;
|
|
57
|
+
}
|
|
58
|
+
if (!storeRef.current) storeRef.current = new Store(createState());
|
|
59
|
+
return storeRef.current;
|
|
60
|
+
}, [
|
|
61
|
+
store,
|
|
62
|
+
storeMap,
|
|
63
|
+
storeItemInited
|
|
64
|
+
]));
|
|
65
|
+
return [
|
|
66
|
+
state,
|
|
67
|
+
useCallback((value, options) => {
|
|
68
|
+
if (value instanceof Promise) {
|
|
69
|
+
let delayedPending = null;
|
|
70
|
+
if (!options?.silent) {
|
|
71
|
+
let delay = options?.delay;
|
|
72
|
+
if (delay === void 0) setState((prevState) => ({
|
|
73
|
+
...prevState,
|
|
74
|
+
...createState(true, false)
|
|
75
|
+
}));
|
|
76
|
+
else delayedPending = setTimeout(() => {
|
|
77
|
+
setState((prevState) => ({
|
|
78
|
+
...prevState,
|
|
79
|
+
...createState(true, false)
|
|
80
|
+
}));
|
|
81
|
+
delayedPending = null;
|
|
82
|
+
}, delay);
|
|
83
|
+
}
|
|
84
|
+
return value.then((resolvedValue) => {
|
|
85
|
+
if (delayedPending !== null) clearTimeout(delayedPending);
|
|
86
|
+
setState((prevState) => ({
|
|
87
|
+
...prevState,
|
|
88
|
+
...createState(true, true)
|
|
89
|
+
}));
|
|
90
|
+
return resolvedValue;
|
|
91
|
+
}).catch((error) => {
|
|
92
|
+
if (delayedPending !== null) clearTimeout(delayedPending);
|
|
93
|
+
setState((prevState) => ({
|
|
94
|
+
...prevState,
|
|
95
|
+
...createState(true, true, error)
|
|
96
|
+
}));
|
|
97
|
+
if (options?.throws) throw error;
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
setState((prevState) => ({
|
|
101
|
+
...prevState,
|
|
102
|
+
...createState(true, true)
|
|
103
|
+
}));
|
|
104
|
+
return value;
|
|
105
|
+
}, [setState]),
|
|
106
|
+
setState
|
|
107
|
+
];
|
|
113
108
|
}
|
|
114
109
|
|
|
115
|
-
|
|
116
|
-
export { PendingStateContext, PendingStateProvider, usePendingState };
|
|
110
|
+
export { PendingStateContext, PendingStateProvider, usePendingState };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@t8/react-pending",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.30",
|
|
4
4
|
"description": "Concise async action state tracking for React apps",
|
|
5
5
|
"main": "./dist/index.cjs",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
@@ -29,13 +29,13 @@
|
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
31
|
"@playwright/test": "^1.56.0",
|
|
32
|
-
"@t8/serve": "^0.1.
|
|
32
|
+
"@t8/serve": "^0.1.38",
|
|
33
33
|
"@types/node": "^24.10.2",
|
|
34
34
|
"@types/react": "^19.2.7",
|
|
35
35
|
"@types/react-dom": "^19.2.3",
|
|
36
36
|
"react-dom": "^19.2.1"
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@t8/react-store": "^1.2.
|
|
39
|
+
"@t8/react-store": "^1.2.6"
|
|
40
40
|
}
|
|
41
41
|
}
|