@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 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, import_react.useRef)();
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, import_react.useRef)();
54
- const subscribe = (0, import_react.useMemo)(() => {
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, import_react.useMemo)(() => {
107
+ const getSnapshot = (0, import_react2.useMemo)(() => {
71
108
  return () => {
72
109
  return snapshotValueRef.current;
73
110
  };
74
111
  }, []);
75
- const snapshot = (0, import_react2.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
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, import_react.useRef)();
80
- const subscribe = (0, import_react.useMemo)(() => {
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, import_react.useMemo)(() => {
127
+ const getSnapshot = (0, import_react2.useMemo)(() => {
91
128
  return () => {
92
129
  return snapshotValueRef.current;
93
130
  };
94
131
  }, []);
95
- const snapshot = (0, import_react2.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
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, import_react.useRef)();
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, import_react.useRef)();
106
- const subscribe = (0, import_react.useMemo)(() => {
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, import_react.useMemo)(() => {
159
+ const getSnapshot = (0, import_react2.useMemo)(() => {
123
160
  return () => {
124
161
  return snapshotValueRef.current;
125
162
  };
126
163
  }, []);
127
- const snapshot = (0, import_react2.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
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, import_react.useRef)();
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, import_react.useRef)();
137
- const subscribe = (0, import_react.useMemo)(() => {
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, import_react.useMemo)(() => {
195
+ const getSnapshot = (0, import_react2.useMemo)(() => {
159
196
  return () => {
160
197
  return snapshotValueRef.current;
161
198
  };
162
199
  }, []);
163
- const snapshot = (0, import_react2.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
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, import_react.useMemo)(
204
+ const getSnapshot = (0, import_react2.useMemo)(
168
205
  () => () => reactiveCollection.getOneByPk(pk),
169
206
  [pk, reactiveCollection]
170
207
  );
171
- const subscribe = (0, import_react.useMemo)(() => {
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, import_react2.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
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, import_react.useMemo)(
217
+ const getSnapshot = (0, import_react2.useMemo)(
181
218
  () => () => reactiveObject.get(key),
182
219
  [key, reactiveObject]
183
220
  );
184
- const subscribe = (0, import_react.useMemo)(() => {
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, import_react2.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
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, import_react.useRef)();
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, import_react.useRef)();
200
- const subscribe = (0, import_react.useMemo)(() => {
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, import_react.useMemo)(() => {
255
+ const getSnapshot = (0, import_react2.useMemo)(() => {
219
256
  return () => {
220
257
  return snapshotRef.current;
221
258
  };
222
259
  }, []);
223
- const snapshot = (0, import_react2.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
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, import_react.useRef)();
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, import_react.useRef)();
242
- const subscribe = (0, import_react.useMemo)(() => {
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, import_react.useMemo)(() => {
299
+ const getSnapshot = (0, import_react2.useMemo)(() => {
263
300
  return () => {
264
301
  return snapshotRef.current;
265
302
  };
266
303
  }, []);
267
- const snapshot = (0, import_react2.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
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, import_react.useRef)();
272
- const subscribe = (0, import_react.useMemo)(() => {
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, import_react.useMemo)(() => () => snapshotRef.current, []);
306
- return (0, import_react2.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
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, import_react.useRef)();
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, import_react.useRef)();
316
- const subscribe = (0, import_react.useMemo)(() => {
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, import_react.useMemo)(() => () => snapshotRef.current, []);
352
- return (0, import_react2.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
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, import_react.useRef)();
356
- const subscribe = (0, import_react.useMemo)(() => {
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, import_react.useMemo)(() => () => snapshotRef.current, []);
387
- return (0, import_react2.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
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, import_react.useRef)();
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, import_react.useRef)();
397
- const subscribe = (0, import_react.useMemo)(() => {
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, import_react.useMemo)(() => () => snapshotRef.current, []);
431
- return (0, import_react2.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
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 import_react3 = require("react");
472
+ var import_react4 = require("react");
436
473
  var import_jsx_runtime = require("react/jsx-runtime");
437
- var OIMCollectionsContext = (0, import_react3.createContext)(
474
+ var OIMCollectionsContext = (0, import_react4.createContext)(
438
475
  {}
439
476
  );
440
477
  function createOIMCollectionsContext() {
441
- return (0, import_react3.createContext)({});
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, import_react3.useContext)(contextToUse);
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, OIMIndexSetBased, OIMReactiveIndexSetBased, OIMIndexArrayBased, OIMReactiveIndexArrayBased, OIMReactiveCollection, OIMReactiveObject } from '@oimdb/core';
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, OIMIndexSetBased, OIMReactiveIndexSetBased, OIMIndexArrayBased, OIMReactiveIndexArrayBased, OIMReactiveCollection, OIMReactiveObject } from '@oimdb/core';
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.0.1",
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": {