@oimdb/react 2.0.1 → 2.1.1
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 +98 -58
- package/dist/index.d.cts +6 -2
- package/dist/index.d.ts +6 -2
- package/dist/index.js +37 -0
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -30,8 +30,11 @@ __export(index_exports, {
|
|
|
30
30
|
useSelectEntitiesByIndexKeysSetBased: () => useSelectEntitiesByIndexKeysSetBased,
|
|
31
31
|
useSelectEntitiesByPks: () => useSelectEntitiesByPks,
|
|
32
32
|
useSelectEntityByPk: () => useSelectEntityByPk,
|
|
33
|
+
useSelectEntityByPkSignal: () => useSelectEntityByPkSignal,
|
|
33
34
|
useSelectPksByIndexKeyArrayBased: () => useSelectPksByIndexKeyArrayBased,
|
|
35
|
+
useSelectPksByIndexKeyArrayBasedSignal: () => useSelectPksByIndexKeyArrayBasedSignal,
|
|
34
36
|
useSelectPksByIndexKeySetBased: () => useSelectPksByIndexKeySetBased,
|
|
37
|
+
useSelectPksByIndexKeySetBasedSignal: () => useSelectPksByIndexKeySetBasedSignal,
|
|
35
38
|
useSelectPksByIndexKeysArrayBased: () => useSelectPksByIndexKeysArrayBased,
|
|
36
39
|
useSelectPksByIndexKeysSetBased: () => useSelectPksByIndexKeysSetBased,
|
|
37
40
|
useSelectValueByObjectKey: () => useSelectValueByObjectKey,
|
|
@@ -40,18 +43,52 @@ __export(index_exports, {
|
|
|
40
43
|
module.exports = __toCommonJS(index_exports);
|
|
41
44
|
|
|
42
45
|
// src/hooks/index.ts
|
|
43
|
-
var import_react = require("react");
|
|
44
46
|
var import_react2 = require("react");
|
|
47
|
+
var import_react3 = require("react");
|
|
48
|
+
|
|
49
|
+
// src/hooks/signal.ts
|
|
50
|
+
var import_react = require("react");
|
|
51
|
+
var useIsomorphicLayoutEffect = typeof window !== "undefined" ? import_react.useLayoutEffect : import_react.useEffect;
|
|
52
|
+
function useForceUpdate() {
|
|
53
|
+
const [, force] = (0, import_react.useReducer)((c) => c + 1 | 0, 0);
|
|
54
|
+
return force;
|
|
55
|
+
}
|
|
56
|
+
var useSelectEntityByPkSignal = (reactiveCollection, pk) => {
|
|
57
|
+
const force = useForceUpdate();
|
|
58
|
+
useIsomorphicLayoutEffect(
|
|
59
|
+
() => reactiveCollection.subscribeOnKey(pk, force),
|
|
60
|
+
[reactiveCollection, pk]
|
|
61
|
+
);
|
|
62
|
+
return reactiveCollection.getOneByPk(pk);
|
|
63
|
+
};
|
|
64
|
+
var useSelectPksByIndexKeyArrayBasedSignal = (reactiveIndex, key) => {
|
|
65
|
+
const force = useForceUpdate();
|
|
66
|
+
useIsomorphicLayoutEffect(
|
|
67
|
+
() => reactiveIndex.subscribeOnKey(key, force),
|
|
68
|
+
[reactiveIndex, key]
|
|
69
|
+
);
|
|
70
|
+
return reactiveIndex.getPksByKey(key);
|
|
71
|
+
};
|
|
72
|
+
var useSelectPksByIndexKeySetBasedSignal = (reactiveIndex, key) => {
|
|
73
|
+
const force = useForceUpdate();
|
|
74
|
+
useIsomorphicLayoutEffect(
|
|
75
|
+
() => reactiveIndex.subscribeOnKey(key, force),
|
|
76
|
+
[reactiveIndex, key]
|
|
77
|
+
);
|
|
78
|
+
return reactiveIndex.getPksByKey(key);
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
// src/hooks/index.ts
|
|
45
82
|
var EMPTY_ARRAY = [];
|
|
46
83
|
var useSelectPksByIndexKeysSetBased = (reactiveIndex, keys) => {
|
|
47
|
-
const prevKeysRef = (0,
|
|
84
|
+
const prevKeysRef = (0, import_react2.useRef)();
|
|
48
85
|
const keysAreEqual = arraysEqual(prevKeysRef.current || EMPTY_ARRAY, keys);
|
|
49
86
|
if (!keysAreEqual) {
|
|
50
87
|
prevKeysRef.current = keys;
|
|
51
88
|
}
|
|
52
89
|
const stableKeys = keysAreEqual ? prevKeysRef.current ?? keys : keys;
|
|
53
|
-
const snapshotValueRef = (0,
|
|
54
|
-
const subscribe = (0,
|
|
90
|
+
const snapshotValueRef = (0, import_react2.useRef)();
|
|
91
|
+
const subscribe = (0, import_react2.useMemo)(() => {
|
|
55
92
|
snapshotValueRef.current = stableKeys.map((key) => Array.from(reactiveIndex.getPksByKey(key))).flat();
|
|
56
93
|
return (onStoreChange) => {
|
|
57
94
|
const updateSnapshot = () => {
|
|
@@ -67,17 +104,17 @@ var useSelectPksByIndexKeysSetBased = (reactiveIndex, keys) => {
|
|
|
67
104
|
};
|
|
68
105
|
};
|
|
69
106
|
}, [reactiveIndex, stableKeys]);
|
|
70
|
-
const getSnapshot = (0,
|
|
107
|
+
const getSnapshot = (0, import_react2.useMemo)(() => {
|
|
71
108
|
return () => {
|
|
72
109
|
return snapshotValueRef.current;
|
|
73
110
|
};
|
|
74
111
|
}, []);
|
|
75
|
-
const snapshot = (0,
|
|
112
|
+
const snapshot = (0, import_react3.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
|
|
76
113
|
return snapshot;
|
|
77
114
|
};
|
|
78
115
|
var useSelectPksByIndexKeySetBased = (reactiveIndex, key) => {
|
|
79
|
-
const snapshotValueRef = (0,
|
|
80
|
-
const subscribe = (0,
|
|
116
|
+
const snapshotValueRef = (0, import_react2.useRef)();
|
|
117
|
+
const subscribe = (0, import_react2.useMemo)(() => {
|
|
81
118
|
snapshotValueRef.current = reactiveIndex.getPksByKey(key);
|
|
82
119
|
return (onStoreChange) => {
|
|
83
120
|
const updateSnapshot = () => {
|
|
@@ -87,23 +124,23 @@ var useSelectPksByIndexKeySetBased = (reactiveIndex, key) => {
|
|
|
87
124
|
return reactiveIndex.subscribeOnKey(key, updateSnapshot);
|
|
88
125
|
};
|
|
89
126
|
}, [key, reactiveIndex]);
|
|
90
|
-
const getSnapshot = (0,
|
|
127
|
+
const getSnapshot = (0, import_react2.useMemo)(() => {
|
|
91
128
|
return () => {
|
|
92
129
|
return snapshotValueRef.current;
|
|
93
130
|
};
|
|
94
131
|
}, []);
|
|
95
|
-
const snapshot = (0,
|
|
132
|
+
const snapshot = (0, import_react3.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
|
|
96
133
|
return snapshot;
|
|
97
134
|
};
|
|
98
135
|
var useSelectPksByIndexKeysArrayBased = (reactiveIndex, keys) => {
|
|
99
|
-
const prevKeysRef = (0,
|
|
136
|
+
const prevKeysRef = (0, import_react2.useRef)();
|
|
100
137
|
const keysAreEqual = arraysEqual(prevKeysRef.current || EMPTY_ARRAY, keys);
|
|
101
138
|
if (!keysAreEqual) {
|
|
102
139
|
prevKeysRef.current = keys;
|
|
103
140
|
}
|
|
104
141
|
const stableKeys = keysAreEqual ? prevKeysRef.current ?? keys : keys;
|
|
105
|
-
const snapshotValueRef = (0,
|
|
106
|
-
const subscribe = (0,
|
|
142
|
+
const snapshotValueRef = (0, import_react2.useRef)();
|
|
143
|
+
const subscribe = (0, import_react2.useMemo)(() => {
|
|
107
144
|
snapshotValueRef.current = stableKeys.map((key) => reactiveIndex.getPksByKey(key)).flat();
|
|
108
145
|
return (onStoreChange) => {
|
|
109
146
|
const updateSnapshot = () => {
|
|
@@ -119,22 +156,22 @@ var useSelectPksByIndexKeysArrayBased = (reactiveIndex, keys) => {
|
|
|
119
156
|
};
|
|
120
157
|
};
|
|
121
158
|
}, [reactiveIndex, stableKeys]);
|
|
122
|
-
const getSnapshot = (0,
|
|
159
|
+
const getSnapshot = (0, import_react2.useMemo)(() => {
|
|
123
160
|
return () => {
|
|
124
161
|
return snapshotValueRef.current;
|
|
125
162
|
};
|
|
126
163
|
}, []);
|
|
127
|
-
const snapshot = (0,
|
|
164
|
+
const snapshot = (0, import_react3.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
|
|
128
165
|
return snapshot;
|
|
129
166
|
};
|
|
130
167
|
var useSelectPksByIndexKeyArrayBased = (reactiveIndex, key) => {
|
|
131
|
-
const prevKeyRef = (0,
|
|
168
|
+
const prevKeyRef = (0, import_react2.useRef)();
|
|
132
169
|
const keyAreEqual = prevKeyRef.current === key;
|
|
133
170
|
if (!keyAreEqual) {
|
|
134
171
|
prevKeyRef.current = key;
|
|
135
172
|
}
|
|
136
|
-
const snapshotValueRef = (0,
|
|
137
|
-
const subscribe = (0,
|
|
173
|
+
const snapshotValueRef = (0, import_react2.useRef)();
|
|
174
|
+
const subscribe = (0, import_react2.useMemo)(() => {
|
|
138
175
|
snapshotValueRef.current = reactiveIndex.getPksByKey(key);
|
|
139
176
|
return (onStoreChange) => {
|
|
140
177
|
const prevKey = prevKeyRef.current;
|
|
@@ -155,49 +192,49 @@ var useSelectPksByIndexKeyArrayBased = (reactiveIndex, key) => {
|
|
|
155
192
|
};
|
|
156
193
|
};
|
|
157
194
|
}, [key, reactiveIndex]);
|
|
158
|
-
const getSnapshot = (0,
|
|
195
|
+
const getSnapshot = (0, import_react2.useMemo)(() => {
|
|
159
196
|
return () => {
|
|
160
197
|
return snapshotValueRef.current;
|
|
161
198
|
};
|
|
162
199
|
}, []);
|
|
163
|
-
const snapshot = (0,
|
|
200
|
+
const snapshot = (0, import_react3.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
|
|
164
201
|
return snapshot;
|
|
165
202
|
};
|
|
166
203
|
var useSelectEntityByPk = (reactiveCollection, pk) => {
|
|
167
|
-
const getSnapshot = (0,
|
|
204
|
+
const getSnapshot = (0, import_react2.useMemo)(
|
|
168
205
|
() => () => reactiveCollection.getOneByPk(pk),
|
|
169
206
|
[pk, reactiveCollection]
|
|
170
207
|
);
|
|
171
|
-
const subscribe = (0,
|
|
208
|
+
const subscribe = (0, import_react2.useMemo)(() => {
|
|
172
209
|
return (onStoreChange) => {
|
|
173
210
|
return reactiveCollection.subscribeOnKey(pk, onStoreChange);
|
|
174
211
|
};
|
|
175
212
|
}, [pk, reactiveCollection]);
|
|
176
|
-
const snapshot = (0,
|
|
213
|
+
const snapshot = (0, import_react3.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
|
|
177
214
|
return snapshot;
|
|
178
215
|
};
|
|
179
216
|
var useSelectValueByObjectKey = (reactiveObject, key) => {
|
|
180
|
-
const getSnapshot = (0,
|
|
217
|
+
const getSnapshot = (0, import_react2.useMemo)(
|
|
181
218
|
() => () => reactiveObject.get(key),
|
|
182
219
|
[key, reactiveObject]
|
|
183
220
|
);
|
|
184
|
-
const subscribe = (0,
|
|
221
|
+
const subscribe = (0, import_react2.useMemo)(() => {
|
|
185
222
|
return (onStoreChange) => {
|
|
186
223
|
return reactiveObject.subscribeOnKey(key, onStoreChange);
|
|
187
224
|
};
|
|
188
225
|
}, [key, reactiveObject]);
|
|
189
|
-
const snapshot = (0,
|
|
226
|
+
const snapshot = (0, import_react3.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
|
|
190
227
|
return snapshot;
|
|
191
228
|
};
|
|
192
229
|
var useSelectValuesByObjectKeys = (reactiveObject, keys) => {
|
|
193
|
-
const prevKeysRef = (0,
|
|
230
|
+
const prevKeysRef = (0, import_react2.useRef)();
|
|
194
231
|
const keysAreEqual = arraysEqual(prevKeysRef.current || EMPTY_ARRAY, keys);
|
|
195
232
|
if (!keysAreEqual) {
|
|
196
233
|
prevKeysRef.current = keys;
|
|
197
234
|
}
|
|
198
235
|
const stableKeys = keysAreEqual ? prevKeysRef.current ?? keys : keys;
|
|
199
|
-
const snapshotRef = (0,
|
|
200
|
-
const subscribe = (0,
|
|
236
|
+
const snapshotRef = (0, import_react2.useRef)();
|
|
237
|
+
const subscribe = (0, import_react2.useMemo)(() => {
|
|
201
238
|
snapshotRef.current = stableKeys.map((key) => reactiveObject.get(key));
|
|
202
239
|
return (onStoreChange) => {
|
|
203
240
|
const updateSnapshot = () => {
|
|
@@ -215,12 +252,12 @@ var useSelectValuesByObjectKeys = (reactiveObject, keys) => {
|
|
|
215
252
|
};
|
|
216
253
|
};
|
|
217
254
|
}, [reactiveObject, stableKeys]);
|
|
218
|
-
const getSnapshot = (0,
|
|
255
|
+
const getSnapshot = (0, import_react2.useMemo)(() => {
|
|
219
256
|
return () => {
|
|
220
257
|
return snapshotRef.current;
|
|
221
258
|
};
|
|
222
259
|
}, []);
|
|
223
|
-
const snapshot = (0,
|
|
260
|
+
const snapshot = (0, import_react3.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
|
|
224
261
|
return snapshot;
|
|
225
262
|
};
|
|
226
263
|
function arraysEqual(a, b) {
|
|
@@ -232,14 +269,14 @@ function arraysEqual(a, b) {
|
|
|
232
269
|
return true;
|
|
233
270
|
}
|
|
234
271
|
var useSelectEntitiesByPks = (reactiveCollection, pks) => {
|
|
235
|
-
const prevPksRef = (0,
|
|
272
|
+
const prevPksRef = (0, import_react2.useRef)();
|
|
236
273
|
const pksAreEqual = arraysEqual(prevPksRef.current || EMPTY_ARRAY, pks);
|
|
237
274
|
if (!pksAreEqual) {
|
|
238
275
|
prevPksRef.current = pks;
|
|
239
276
|
}
|
|
240
277
|
const stablePks = pksAreEqual ? prevPksRef.current ?? pks : pks;
|
|
241
|
-
const snapshotRef = (0,
|
|
242
|
-
const subscribe = (0,
|
|
278
|
+
const snapshotRef = (0, import_react2.useRef)();
|
|
279
|
+
const subscribe = (0, import_react2.useMemo)(() => {
|
|
243
280
|
snapshotRef.current = stablePks.map(
|
|
244
281
|
(pk) => reactiveCollection.getOneByPk(pk)
|
|
245
282
|
);
|
|
@@ -259,17 +296,17 @@ var useSelectEntitiesByPks = (reactiveCollection, pks) => {
|
|
|
259
296
|
};
|
|
260
297
|
};
|
|
261
298
|
}, [reactiveCollection, stablePks]);
|
|
262
|
-
const getSnapshot = (0,
|
|
299
|
+
const getSnapshot = (0, import_react2.useMemo)(() => {
|
|
263
300
|
return () => {
|
|
264
301
|
return snapshotRef.current;
|
|
265
302
|
};
|
|
266
303
|
}, []);
|
|
267
|
-
const snapshot = (0,
|
|
304
|
+
const snapshot = (0, import_react3.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
|
|
268
305
|
return snapshot;
|
|
269
306
|
};
|
|
270
307
|
var useSelectEntitiesByIndexKeySetBased = (reactiveCollection, reactiveIndex, key) => {
|
|
271
|
-
const snapshotRef = (0,
|
|
272
|
-
const subscribe = (0,
|
|
308
|
+
const snapshotRef = (0, import_react2.useRef)();
|
|
309
|
+
const subscribe = (0, import_react2.useMemo)(() => {
|
|
273
310
|
const readSnapshot = () => Array.from(
|
|
274
311
|
reactiveIndex.getPksByKey(key),
|
|
275
312
|
(pk) => reactiveCollection.getOneByPk(pk)
|
|
@@ -302,18 +339,18 @@ var useSelectEntitiesByIndexKeySetBased = (reactiveCollection, reactiveIndex, ke
|
|
|
302
339
|
};
|
|
303
340
|
};
|
|
304
341
|
}, [key, reactiveCollection, reactiveIndex]);
|
|
305
|
-
const getSnapshot = (0,
|
|
306
|
-
return (0,
|
|
342
|
+
const getSnapshot = (0, import_react2.useMemo)(() => () => snapshotRef.current, []);
|
|
343
|
+
return (0, import_react3.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
|
|
307
344
|
};
|
|
308
345
|
var useSelectEntitiesByIndexKeysSetBased = (reactiveCollection, reactiveIndex, keys) => {
|
|
309
|
-
const prevKeysRef = (0,
|
|
346
|
+
const prevKeysRef = (0, import_react2.useRef)();
|
|
310
347
|
const keysAreEqual = arraysEqual(prevKeysRef.current || EMPTY_ARRAY, keys);
|
|
311
348
|
if (!keysAreEqual) {
|
|
312
349
|
prevKeysRef.current = keys;
|
|
313
350
|
}
|
|
314
351
|
const stableKeys = keysAreEqual ? prevKeysRef.current ?? keys : keys;
|
|
315
|
-
const snapshotRef = (0,
|
|
316
|
-
const subscribe = (0,
|
|
352
|
+
const snapshotRef = (0, import_react2.useRef)();
|
|
353
|
+
const subscribe = (0, import_react2.useMemo)(() => {
|
|
317
354
|
const readPks = () => stableKeys.flatMap(
|
|
318
355
|
(key) => Array.from(reactiveIndex.getPksByKey(key))
|
|
319
356
|
);
|
|
@@ -348,12 +385,12 @@ var useSelectEntitiesByIndexKeysSetBased = (reactiveCollection, reactiveIndex, k
|
|
|
348
385
|
};
|
|
349
386
|
};
|
|
350
387
|
}, [reactiveCollection, reactiveIndex, stableKeys]);
|
|
351
|
-
const getSnapshot = (0,
|
|
352
|
-
return (0,
|
|
388
|
+
const getSnapshot = (0, import_react2.useMemo)(() => () => snapshotRef.current, []);
|
|
389
|
+
return (0, import_react3.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
|
|
353
390
|
};
|
|
354
391
|
var useSelectEntitiesByIndexKeyArrayBased = (reactiveCollection, reactiveIndex, key) => {
|
|
355
|
-
const snapshotRef = (0,
|
|
356
|
-
const subscribe = (0,
|
|
392
|
+
const snapshotRef = (0, import_react2.useRef)();
|
|
393
|
+
const subscribe = (0, import_react2.useMemo)(() => {
|
|
357
394
|
const readSnapshot = () => reactiveIndex.getPksByKey(key).map((pk) => reactiveCollection.getOneByPk(pk));
|
|
358
395
|
const readPks = () => reactiveIndex.getPksByKey(key);
|
|
359
396
|
snapshotRef.current = readSnapshot();
|
|
@@ -383,18 +420,18 @@ var useSelectEntitiesByIndexKeyArrayBased = (reactiveCollection, reactiveIndex,
|
|
|
383
420
|
};
|
|
384
421
|
};
|
|
385
422
|
}, [key, reactiveCollection, reactiveIndex]);
|
|
386
|
-
const getSnapshot = (0,
|
|
387
|
-
return (0,
|
|
423
|
+
const getSnapshot = (0, import_react2.useMemo)(() => () => snapshotRef.current, []);
|
|
424
|
+
return (0, import_react3.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
|
|
388
425
|
};
|
|
389
426
|
var useSelectEntitiesByIndexKeysArrayBased = (reactiveCollection, reactiveIndex, keys) => {
|
|
390
|
-
const prevKeysRef = (0,
|
|
427
|
+
const prevKeysRef = (0, import_react2.useRef)();
|
|
391
428
|
const keysAreEqual = arraysEqual(prevKeysRef.current || EMPTY_ARRAY, keys);
|
|
392
429
|
if (!keysAreEqual) {
|
|
393
430
|
prevKeysRef.current = keys;
|
|
394
431
|
}
|
|
395
432
|
const stableKeys = keysAreEqual ? prevKeysRef.current ?? keys : keys;
|
|
396
|
-
const snapshotRef = (0,
|
|
397
|
-
const subscribe = (0,
|
|
433
|
+
const snapshotRef = (0, import_react2.useRef)();
|
|
434
|
+
const subscribe = (0, import_react2.useMemo)(() => {
|
|
398
435
|
const readPks = () => stableKeys.flatMap((key) => reactiveIndex.getPksByKey(key));
|
|
399
436
|
const readSnapshot = () => readPks().map((pk) => reactiveCollection.getOneByPk(pk));
|
|
400
437
|
snapshotRef.current = readSnapshot();
|
|
@@ -427,18 +464,18 @@ var useSelectEntitiesByIndexKeysArrayBased = (reactiveCollection, reactiveIndex,
|
|
|
427
464
|
};
|
|
428
465
|
};
|
|
429
466
|
}, [reactiveCollection, reactiveIndex, stableKeys]);
|
|
430
|
-
const getSnapshot = (0,
|
|
431
|
-
return (0,
|
|
467
|
+
const getSnapshot = (0, import_react2.useMemo)(() => () => snapshotRef.current, []);
|
|
468
|
+
return (0, import_react3.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
|
|
432
469
|
};
|
|
433
470
|
|
|
434
471
|
// src/context/index.tsx
|
|
435
|
-
var
|
|
472
|
+
var import_react4 = require("react");
|
|
436
473
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
437
|
-
var OIMCollectionsContext = (0,
|
|
474
|
+
var OIMCollectionsContext = (0, import_react4.createContext)(
|
|
438
475
|
{}
|
|
439
476
|
);
|
|
440
477
|
function createOIMCollectionsContext() {
|
|
441
|
-
return (0,
|
|
478
|
+
return (0, import_react4.createContext)({});
|
|
442
479
|
}
|
|
443
480
|
function OIMCollectionsProvider({ collections, children, context }) {
|
|
444
481
|
const ContextToUse = context || OIMCollectionsContext;
|
|
@@ -446,7 +483,7 @@ function OIMCollectionsProvider({ collections, children, context }) {
|
|
|
446
483
|
}
|
|
447
484
|
function useOIMCollectionsContext(context) {
|
|
448
485
|
const contextToUse = context || OIMCollectionsContext;
|
|
449
|
-
const collections = (0,
|
|
486
|
+
const collections = (0, import_react4.useContext)(contextToUse);
|
|
450
487
|
if (!collections || Object.keys(collections).length === 0) {
|
|
451
488
|
throw new Error(
|
|
452
489
|
"useOIMCollectionsContext must be used within an OIMCollectionsProvider"
|
|
@@ -466,8 +503,11 @@ function useOIMCollectionsContext(context) {
|
|
|
466
503
|
useSelectEntitiesByIndexKeysSetBased,
|
|
467
504
|
useSelectEntitiesByPks,
|
|
468
505
|
useSelectEntityByPk,
|
|
506
|
+
useSelectEntityByPkSignal,
|
|
469
507
|
useSelectPksByIndexKeyArrayBased,
|
|
508
|
+
useSelectPksByIndexKeyArrayBasedSignal,
|
|
470
509
|
useSelectPksByIndexKeySetBased,
|
|
510
|
+
useSelectPksByIndexKeySetBasedSignal,
|
|
471
511
|
useSelectPksByIndexKeysArrayBased,
|
|
472
512
|
useSelectPksByIndexKeysSetBased,
|
|
473
513
|
useSelectValueByObjectKey,
|
package/dist/index.d.cts
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
|
-
import { TOIMPk,
|
|
1
|
+
import { TOIMPk, OIMReactiveCollection, OIMIndexArrayBased, OIMReactiveIndexArrayBased, OIMIndexSetBased, OIMReactiveIndexSetBased, OIMReactiveObject } from '@oimdb/core';
|
|
2
2
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
3
3
|
import * as React from 'react';
|
|
4
4
|
import { ReactNode } from 'react';
|
|
5
5
|
|
|
6
|
+
declare const useSelectEntityByPkSignal: <TEntity extends object, TPk extends TOIMPk>(reactiveCollection: OIMReactiveCollection<TEntity, TPk>, pk: TPk) => TEntity | undefined;
|
|
7
|
+
declare const useSelectPksByIndexKeyArrayBasedSignal: <TPk extends TOIMPk, TKey extends TOIMPk, TIndex extends OIMIndexArrayBased<TKey, TPk>>(reactiveIndex: OIMReactiveIndexArrayBased<TKey, TPk, TIndex>, key: TKey) => readonly TPk[];
|
|
8
|
+
declare const useSelectPksByIndexKeySetBasedSignal: <TPk extends TOIMPk, TKey extends TOIMPk, TIndex extends OIMIndexSetBased<TKey, TPk>>(reactiveIndex: OIMReactiveIndexSetBased<TKey, TPk, TIndex>, key: TKey) => ReadonlySet<TPk>;
|
|
9
|
+
|
|
6
10
|
declare const useSelectPksByIndexKeysSetBased: <TPk extends TOIMPk, TKey extends TOIMPk, TIndex extends OIMIndexSetBased<TKey, TPk>>(reactiveIndex: OIMReactiveIndexSetBased<TKey, TPk, TIndex>, keys: readonly TKey[]) => TPk[] | undefined;
|
|
7
11
|
declare const useSelectPksByIndexKeySetBased: <TPk extends TOIMPk, TKey extends TOIMPk, TIndex extends OIMIndexSetBased<TKey, TPk>>(reactiveIndex: OIMReactiveIndexSetBased<TKey, TPk, TIndex>, key: TKey) => Set<TPk> | undefined;
|
|
8
12
|
declare const useSelectPksByIndexKeysArrayBased: <TPk extends TOIMPk, TKey extends TOIMPk, TIndex extends OIMIndexArrayBased<TKey, TPk>>(reactiveIndex: OIMReactiveIndexArrayBased<TKey, TPk, TIndex>, keys: readonly TKey[]) => TPk[] | undefined;
|
|
@@ -28,4 +32,4 @@ interface OIMCollectionsProviderProps<T extends CollectionsDictionary = Collecti
|
|
|
28
32
|
declare function OIMCollectionsProvider<T extends CollectionsDictionary = CollectionsDictionary>({ collections, children, context }: OIMCollectionsProviderProps<T>): react_jsx_runtime.JSX.Element;
|
|
29
33
|
declare function useOIMCollectionsContext<T extends CollectionsDictionary = CollectionsDictionary>(context?: React.Context<OIMContextValue<T>>): T;
|
|
30
34
|
|
|
31
|
-
export { type CollectionsDictionary, OIMCollectionsContext, OIMCollectionsProvider, type OIMCollectionsProviderProps, type OIMContextValue, createOIMCollectionsContext, useOIMCollectionsContext, useSelectEntitiesByIndexKeyArrayBased, useSelectEntitiesByIndexKeySetBased, useSelectEntitiesByIndexKeysArrayBased, useSelectEntitiesByIndexKeysSetBased, useSelectEntitiesByPks, useSelectEntityByPk, useSelectPksByIndexKeyArrayBased, useSelectPksByIndexKeySetBased, useSelectPksByIndexKeysArrayBased, useSelectPksByIndexKeysSetBased, useSelectValueByObjectKey, useSelectValuesByObjectKeys };
|
|
35
|
+
export { type CollectionsDictionary, OIMCollectionsContext, OIMCollectionsProvider, type OIMCollectionsProviderProps, type OIMContextValue, createOIMCollectionsContext, useOIMCollectionsContext, useSelectEntitiesByIndexKeyArrayBased, useSelectEntitiesByIndexKeySetBased, useSelectEntitiesByIndexKeysArrayBased, useSelectEntitiesByIndexKeysSetBased, useSelectEntitiesByPks, useSelectEntityByPk, useSelectEntityByPkSignal, useSelectPksByIndexKeyArrayBased, useSelectPksByIndexKeyArrayBasedSignal, useSelectPksByIndexKeySetBased, useSelectPksByIndexKeySetBasedSignal, useSelectPksByIndexKeysArrayBased, useSelectPksByIndexKeysSetBased, useSelectValueByObjectKey, useSelectValuesByObjectKeys };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
|
-
import { TOIMPk,
|
|
1
|
+
import { TOIMPk, OIMReactiveCollection, OIMIndexArrayBased, OIMReactiveIndexArrayBased, OIMIndexSetBased, OIMReactiveIndexSetBased, OIMReactiveObject } from '@oimdb/core';
|
|
2
2
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
3
3
|
import * as React from 'react';
|
|
4
4
|
import { ReactNode } from 'react';
|
|
5
5
|
|
|
6
|
+
declare const useSelectEntityByPkSignal: <TEntity extends object, TPk extends TOIMPk>(reactiveCollection: OIMReactiveCollection<TEntity, TPk>, pk: TPk) => TEntity | undefined;
|
|
7
|
+
declare const useSelectPksByIndexKeyArrayBasedSignal: <TPk extends TOIMPk, TKey extends TOIMPk, TIndex extends OIMIndexArrayBased<TKey, TPk>>(reactiveIndex: OIMReactiveIndexArrayBased<TKey, TPk, TIndex>, key: TKey) => readonly TPk[];
|
|
8
|
+
declare const useSelectPksByIndexKeySetBasedSignal: <TPk extends TOIMPk, TKey extends TOIMPk, TIndex extends OIMIndexSetBased<TKey, TPk>>(reactiveIndex: OIMReactiveIndexSetBased<TKey, TPk, TIndex>, key: TKey) => ReadonlySet<TPk>;
|
|
9
|
+
|
|
6
10
|
declare const useSelectPksByIndexKeysSetBased: <TPk extends TOIMPk, TKey extends TOIMPk, TIndex extends OIMIndexSetBased<TKey, TPk>>(reactiveIndex: OIMReactiveIndexSetBased<TKey, TPk, TIndex>, keys: readonly TKey[]) => TPk[] | undefined;
|
|
7
11
|
declare const useSelectPksByIndexKeySetBased: <TPk extends TOIMPk, TKey extends TOIMPk, TIndex extends OIMIndexSetBased<TKey, TPk>>(reactiveIndex: OIMReactiveIndexSetBased<TKey, TPk, TIndex>, key: TKey) => Set<TPk> | undefined;
|
|
8
12
|
declare const useSelectPksByIndexKeysArrayBased: <TPk extends TOIMPk, TKey extends TOIMPk, TIndex extends OIMIndexArrayBased<TKey, TPk>>(reactiveIndex: OIMReactiveIndexArrayBased<TKey, TPk, TIndex>, keys: readonly TKey[]) => TPk[] | undefined;
|
|
@@ -28,4 +32,4 @@ interface OIMCollectionsProviderProps<T extends CollectionsDictionary = Collecti
|
|
|
28
32
|
declare function OIMCollectionsProvider<T extends CollectionsDictionary = CollectionsDictionary>({ collections, children, context }: OIMCollectionsProviderProps<T>): react_jsx_runtime.JSX.Element;
|
|
29
33
|
declare function useOIMCollectionsContext<T extends CollectionsDictionary = CollectionsDictionary>(context?: React.Context<OIMContextValue<T>>): T;
|
|
30
34
|
|
|
31
|
-
export { type CollectionsDictionary, OIMCollectionsContext, OIMCollectionsProvider, type OIMCollectionsProviderProps, type OIMContextValue, createOIMCollectionsContext, useOIMCollectionsContext, useSelectEntitiesByIndexKeyArrayBased, useSelectEntitiesByIndexKeySetBased, useSelectEntitiesByIndexKeysArrayBased, useSelectEntitiesByIndexKeysSetBased, useSelectEntitiesByPks, useSelectEntityByPk, useSelectPksByIndexKeyArrayBased, useSelectPksByIndexKeySetBased, useSelectPksByIndexKeysArrayBased, useSelectPksByIndexKeysSetBased, useSelectValueByObjectKey, useSelectValuesByObjectKeys };
|
|
35
|
+
export { type CollectionsDictionary, OIMCollectionsContext, OIMCollectionsProvider, type OIMCollectionsProviderProps, type OIMContextValue, createOIMCollectionsContext, useOIMCollectionsContext, useSelectEntitiesByIndexKeyArrayBased, useSelectEntitiesByIndexKeySetBased, useSelectEntitiesByIndexKeysArrayBased, useSelectEntitiesByIndexKeysSetBased, useSelectEntitiesByPks, useSelectEntityByPk, useSelectEntityByPkSignal, useSelectPksByIndexKeyArrayBased, useSelectPksByIndexKeyArrayBasedSignal, useSelectPksByIndexKeySetBased, useSelectPksByIndexKeySetBasedSignal, useSelectPksByIndexKeysArrayBased, useSelectPksByIndexKeysSetBased, useSelectValueByObjectKey, useSelectValuesByObjectKeys };
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,40 @@
|
|
|
1
1
|
// src/hooks/index.ts
|
|
2
2
|
import { useMemo, useRef } from "react";
|
|
3
3
|
import { useSyncExternalStore } from "react";
|
|
4
|
+
|
|
5
|
+
// src/hooks/signal.ts
|
|
6
|
+
import { useEffect, useLayoutEffect, useReducer } from "react";
|
|
7
|
+
var useIsomorphicLayoutEffect = typeof window !== "undefined" ? useLayoutEffect : useEffect;
|
|
8
|
+
function useForceUpdate() {
|
|
9
|
+
const [, force] = useReducer((c) => c + 1 | 0, 0);
|
|
10
|
+
return force;
|
|
11
|
+
}
|
|
12
|
+
var useSelectEntityByPkSignal = (reactiveCollection, pk) => {
|
|
13
|
+
const force = useForceUpdate();
|
|
14
|
+
useIsomorphicLayoutEffect(
|
|
15
|
+
() => reactiveCollection.subscribeOnKey(pk, force),
|
|
16
|
+
[reactiveCollection, pk]
|
|
17
|
+
);
|
|
18
|
+
return reactiveCollection.getOneByPk(pk);
|
|
19
|
+
};
|
|
20
|
+
var useSelectPksByIndexKeyArrayBasedSignal = (reactiveIndex, key) => {
|
|
21
|
+
const force = useForceUpdate();
|
|
22
|
+
useIsomorphicLayoutEffect(
|
|
23
|
+
() => reactiveIndex.subscribeOnKey(key, force),
|
|
24
|
+
[reactiveIndex, key]
|
|
25
|
+
);
|
|
26
|
+
return reactiveIndex.getPksByKey(key);
|
|
27
|
+
};
|
|
28
|
+
var useSelectPksByIndexKeySetBasedSignal = (reactiveIndex, key) => {
|
|
29
|
+
const force = useForceUpdate();
|
|
30
|
+
useIsomorphicLayoutEffect(
|
|
31
|
+
() => reactiveIndex.subscribeOnKey(key, force),
|
|
32
|
+
[reactiveIndex, key]
|
|
33
|
+
);
|
|
34
|
+
return reactiveIndex.getPksByKey(key);
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
// src/hooks/index.ts
|
|
4
38
|
var EMPTY_ARRAY = [];
|
|
5
39
|
var useSelectPksByIndexKeysSetBased = (reactiveIndex, keys) => {
|
|
6
40
|
const prevKeysRef = useRef();
|
|
@@ -424,8 +458,11 @@ export {
|
|
|
424
458
|
useSelectEntitiesByIndexKeysSetBased,
|
|
425
459
|
useSelectEntitiesByPks,
|
|
426
460
|
useSelectEntityByPk,
|
|
461
|
+
useSelectEntityByPkSignal,
|
|
427
462
|
useSelectPksByIndexKeyArrayBased,
|
|
463
|
+
useSelectPksByIndexKeyArrayBasedSignal,
|
|
428
464
|
useSelectPksByIndexKeySetBased,
|
|
465
|
+
useSelectPksByIndexKeySetBasedSignal,
|
|
429
466
|
useSelectPksByIndexKeysArrayBased,
|
|
430
467
|
useSelectPksByIndexKeysSetBased,
|
|
431
468
|
useSelectValueByObjectKey,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oimdb/react",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.1.1",
|
|
4
4
|
"description": "React integration for OIMDB - Hooks for selection and subscription with external storage",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"dist"
|
|
37
37
|
],
|
|
38
38
|
"peerDependencies": {
|
|
39
|
-
"@oimdb/core": "^2.0.0",
|
|
39
|
+
"@oimdb/core": "^2.0.0 || ^3.0.0",
|
|
40
40
|
"react": "^18.0.0 || ^19.0.0"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|