@oimdb/react 1.1.0 → 1.2.0

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
@@ -24,12 +24,16 @@ __export(index_exports, {
24
24
  OIMRICollectionsProvider: () => OIMRICollectionsProvider,
25
25
  createOIMCollectionsContext: () => createOIMCollectionsContext,
26
26
  useOIMCollectionsContext: () => useOIMCollectionsContext,
27
- useSelectEntitiesByIndexKey: () => useSelectEntitiesByIndexKey,
28
- useSelectEntitiesByIndexKeys: () => useSelectEntitiesByIndexKeys,
27
+ useSelectEntitiesByIndexKeyArrayBased: () => useSelectEntitiesByIndexKeyArrayBased,
28
+ useSelectEntitiesByIndexKeySetBased: () => useSelectEntitiesByIndexKeySetBased,
29
+ useSelectEntitiesByIndexKeysArrayBased: () => useSelectEntitiesByIndexKeysArrayBased,
30
+ useSelectEntitiesByIndexKeysSetBased: () => useSelectEntitiesByIndexKeysSetBased,
29
31
  useSelectEntitiesByPks: () => useSelectEntitiesByPks,
30
32
  useSelectEntityByPk: () => useSelectEntityByPk,
31
- useSelectPksByIndexKey: () => useSelectPksByIndexKey,
32
- useSelectPksByIndexKeys: () => useSelectPksByIndexKeys
33
+ useSelectPksByIndexKeyArrayBased: () => useSelectPksByIndexKeyArrayBased,
34
+ useSelectPksByIndexKeySetBased: () => useSelectPksByIndexKeySetBased,
35
+ useSelectPksByIndexKeysArrayBased: () => useSelectPksByIndexKeysArrayBased,
36
+ useSelectPksByIndexKeysSetBased: () => useSelectPksByIndexKeysSetBased
33
37
  });
34
38
  module.exports = __toCommonJS(index_exports);
35
39
 
@@ -37,194 +41,240 @@ module.exports = __toCommonJS(index_exports);
37
41
  var import_react = require("react");
38
42
  var import_react2 = require("react");
39
43
  var EMPTY_ARRAY = [];
40
- var useSelectPksByIndexKeys = (reactiveIndex, keys) => {
41
- const isInitialized = (0, import_react.useRef)(false);
42
- const snapshotValueRef = (0, import_react.useRef)(
43
- keys.map((key) => Array.from(reactiveIndex.getPksByKey(key))).flat()
44
- );
45
- const osc = (0, import_react.useRef)(() => {
46
- });
47
- const subscribe = (0, import_react.useRef)((onStoreChange) => {
48
- osc.current = onStoreChange;
49
- return () => {
50
- osc.current = () => {
44
+ var useSelectPksByIndexKeysSetBased = (reactiveIndex, keys) => {
45
+ const prevKeysRef = (0, import_react.useRef)();
46
+ const keysAreEqual = arraysEqual(prevKeysRef.current || EMPTY_ARRAY, keys);
47
+ if (!keysAreEqual) {
48
+ prevKeysRef.current = keys;
49
+ }
50
+ const snapshotValueRef = (0, import_react.useRef)();
51
+ const subscribe = (0, import_react.useMemo)(() => {
52
+ snapshotValueRef.current = keys.map((key) => Array.from(reactiveIndex.getPksByKey(key))).flat();
53
+ return (onStoreChange) => {
54
+ const prevKeys = prevKeysRef.current;
55
+ if (!prevKeys) {
56
+ return () => {
57
+ };
58
+ }
59
+ const updateSnapshot = () => {
60
+ snapshotValueRef.current = keys.map((key) => Array.from(reactiveIndex.getPksByKey(key))).flat();
61
+ onStoreChange();
62
+ };
63
+ reactiveIndex.updateEventEmitter.subscribeOnKeys(
64
+ prevKeys,
65
+ updateSnapshot
66
+ );
67
+ return () => {
68
+ reactiveIndex.updateEventEmitter.unsubscribeFromKeys(
69
+ prevKeys,
70
+ updateSnapshot
71
+ );
51
72
  };
52
73
  };
53
- });
54
- (0, import_react.useEffect)(() => {
55
- const list = () => {
56
- snapshotValueRef.current = keys.map((key) => Array.from(reactiveIndex.getPksByKey(key))).flat();
57
- osc.current();
58
- };
59
- reactiveIndex.updateEventEmitter.subscribeOnKeys(keys, list);
60
- if (!isInitialized.current) {
61
- isInitialized.current = true;
62
- } else {
63
- snapshotValueRef.current = keys.map((key) => Array.from(reactiveIndex.getPksByKey(key))).flat();
64
- osc.current();
65
- }
66
- return () => {
67
- reactiveIndex.updateEventEmitter.unsubscribeFromKeys(keys, list);
68
- };
69
- }, [keys, reactiveIndex.updateEventEmitter, reactiveIndex]);
74
+ }, [prevKeysRef.current, reactiveIndex.updateEventEmitter]);
70
75
  const getSnapshot = (0, import_react.useMemo)(() => {
71
76
  return () => {
72
77
  return snapshotValueRef.current;
73
78
  };
74
79
  }, []);
75
- const snapshot = (0, import_react2.useSyncExternalStore)(
76
- subscribe.current,
77
- getSnapshot,
78
- getSnapshot
79
- );
80
+ const snapshot = (0, import_react2.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
80
81
  return snapshot;
81
82
  };
82
- var useSelectPksByIndexKey = (reactiveIndex, key) => {
83
- const isInitialized = (0, import_react.useRef)(false);
84
- const snapshotValueRef = (0, import_react.useRef)(
85
- Array.from(reactiveIndex.getPksByKey(key))
86
- );
87
- const osc = (0, import_react.useRef)(() => {
88
- });
89
- const subscribe = (0, import_react.useRef)((onStoreChange) => {
90
- osc.current = onStoreChange;
83
+ var useSelectPksByIndexKeySetBased = (reactiveIndex, key) => {
84
+ const getSnapshot = (0, import_react.useMemo)(() => {
91
85
  return () => {
92
- osc.current = () => {
86
+ return reactiveIndex.getPksByKey(key);
87
+ };
88
+ }, [key, reactiveIndex]);
89
+ const subscribe = (0, import_react.useMemo)(() => {
90
+ return (onStoreChange) => {
91
+ reactiveIndex.updateEventEmitter.subscribeOnKey(key, onStoreChange);
92
+ return () => {
93
+ reactiveIndex.updateEventEmitter.unsubscribeFromKey(
94
+ key,
95
+ onStoreChange
96
+ );
93
97
  };
94
98
  };
95
- });
96
- (0, import_react.useEffect)(() => {
97
- const list = () => {
98
- snapshotValueRef.current = Array.from(
99
- reactiveIndex.getPksByKey(key)
99
+ }, [key, reactiveIndex.updateEventEmitter]);
100
+ const snapshot = (0, import_react2.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
101
+ return snapshot;
102
+ };
103
+ var useSelectPksByIndexKeysArrayBased = (reactiveIndex, keys) => {
104
+ const prevKeysRef = (0, import_react.useRef)();
105
+ const keysAreEqual = arraysEqual(prevKeysRef.current || EMPTY_ARRAY, keys);
106
+ if (!keysAreEqual) {
107
+ prevKeysRef.current = keys;
108
+ }
109
+ const snapshotValueRef = (0, import_react.useRef)();
110
+ const subscribe = (0, import_react.useMemo)(() => {
111
+ snapshotValueRef.current = keys.map((key) => reactiveIndex.getPksByKey(key)).flat();
112
+ return (onStoreChange) => {
113
+ const prevKeys = prevKeysRef.current;
114
+ if (!prevKeys) {
115
+ return () => {
116
+ };
117
+ }
118
+ const updateSnapshot = () => {
119
+ snapshotValueRef.current = keys.map((key) => reactiveIndex.getPksByKey(key)).flat();
120
+ onStoreChange();
121
+ };
122
+ reactiveIndex.updateEventEmitter.subscribeOnKeys(
123
+ prevKeys,
124
+ updateSnapshot
100
125
  );
101
- osc.current();
126
+ return () => {
127
+ reactiveIndex.updateEventEmitter.unsubscribeFromKeys(
128
+ prevKeys,
129
+ updateSnapshot
130
+ );
131
+ };
102
132
  };
103
- reactiveIndex.updateEventEmitter.subscribeOnKey(key, list);
104
- if (!isInitialized.current) {
105
- isInitialized.current = true;
106
- } else {
107
- snapshotValueRef.current = Array.from(
108
- reactiveIndex.getPksByKey(key)
109
- );
110
- osc.current();
111
- }
133
+ }, [prevKeysRef.current, reactiveIndex.updateEventEmitter]);
134
+ const getSnapshot = (0, import_react.useMemo)(() => {
112
135
  return () => {
113
- reactiveIndex.updateEventEmitter.unsubscribeFromKey(key, list);
136
+ return snapshotValueRef.current;
114
137
  };
115
- }, [key, reactiveIndex.updateEventEmitter, reactiveIndex]);
138
+ }, []);
139
+ const snapshot = (0, import_react2.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
140
+ return snapshot;
141
+ };
142
+ var useSelectPksByIndexKeyArrayBased = (reactiveIndex, key) => {
143
+ const prevKeyRef = (0, import_react.useRef)();
144
+ const keyAreEqual = prevKeyRef.current === key;
145
+ if (!keyAreEqual) {
146
+ prevKeyRef.current = key;
147
+ }
148
+ const snapshotValueRef = (0, import_react.useRef)();
149
+ const subscribe = (0, import_react.useMemo)(() => {
150
+ snapshotValueRef.current = reactiveIndex.getPksByKey(key);
151
+ return (onStoreChange) => {
152
+ const prevKey = prevKeyRef.current;
153
+ if (!prevKey) {
154
+ return () => {
155
+ };
156
+ }
157
+ const updateSnapshot = () => {
158
+ snapshotValueRef.current = reactiveIndex.getPksByKey(prevKey);
159
+ onStoreChange();
160
+ };
161
+ reactiveIndex.updateEventEmitter.subscribeOnKey(
162
+ prevKey,
163
+ updateSnapshot
164
+ );
165
+ return () => {
166
+ reactiveIndex.updateEventEmitter.unsubscribeFromKey(
167
+ prevKey,
168
+ updateSnapshot
169
+ );
170
+ };
171
+ };
172
+ }, [key, reactiveIndex.updateEventEmitter]);
116
173
  const getSnapshot = (0, import_react.useMemo)(() => {
117
174
  return () => {
118
175
  return snapshotValueRef.current;
119
176
  };
120
177
  }, []);
121
- const snapshot = (0, import_react2.useSyncExternalStore)(
122
- subscribe.current,
123
- getSnapshot,
124
- getSnapshot
125
- );
178
+ const snapshot = (0, import_react2.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
126
179
  return snapshot;
127
180
  };
128
181
  var useSelectEntityByPk = (reactiveCollection, pk) => {
129
- const isInitialized = (0, import_react.useRef)(false);
130
- const snapshotValueRef = (0, import_react.useRef)(
131
- reactiveCollection.getOneByPk(pk)
182
+ const getSnapshot = (0, import_react.useMemo)(
183
+ () => () => reactiveCollection.getOneByPk(pk),
184
+ [pk, reactiveCollection]
132
185
  );
133
- const osc = (0, import_react.useRef)(() => {
134
- });
135
- const subscribe = (0, import_react.useRef)((onStoreChange) => {
136
- osc.current = onStoreChange;
137
- return () => {
138
- osc.current = () => {
186
+ const subscribe = (0, import_react.useMemo)(() => {
187
+ return (onStoreChange) => {
188
+ reactiveCollection.updateEventEmitter.subscribeOnKey(
189
+ pk,
190
+ onStoreChange
191
+ );
192
+ return () => {
193
+ reactiveCollection.updateEventEmitter.unsubscribeFromKey(
194
+ pk,
195
+ onStoreChange
196
+ );
139
197
  };
140
198
  };
141
- });
142
- (0, import_react.useEffect)(() => {
143
- const list = () => {
144
- snapshotValueRef.current = reactiveCollection.getOneByPk(pk);
145
- osc.current();
146
- };
147
- reactiveCollection.updateEventEmitter.subscribeOnKey(pk, list);
148
- if (!isInitialized.current) {
149
- isInitialized.current = true;
150
- } else {
151
- snapshotValueRef.current = reactiveCollection.getOneByPk(pk);
152
- osc.current();
153
- }
154
- return () => {
155
- reactiveCollection.updateEventEmitter.unsubscribeFromKey(pk, list);
156
- };
157
- }, [pk, reactiveCollection.updateEventEmitter, reactiveCollection]);
158
- const getSnapshot = (0, import_react.useMemo)(() => () => snapshotValueRef.current, []);
159
- const snapshot = (0, import_react2.useSyncExternalStore)(
160
- subscribe.current,
161
- getSnapshot,
162
- getSnapshot
163
- );
199
+ }, [pk, reactiveCollection.updateEventEmitter]);
200
+ const snapshot = (0, import_react2.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
164
201
  return snapshot;
165
202
  };
203
+ function arraysEqual(a, b) {
204
+ if (a === b) return true;
205
+ if (a.length !== b.length) return false;
206
+ for (let i = 0; i < a.length; i++) {
207
+ if (a[i] !== b[i]) return false;
208
+ }
209
+ return true;
210
+ }
166
211
  var useSelectEntitiesByPks = (reactiveCollection, pks) => {
167
- const isInitialized = (0, import_react.useRef)(false);
168
- const snapshotValueRef = (0, import_react.useRef)(
169
- pks.map((pk) => reactiveCollection.getOneByPk(pk))
170
- );
171
- const osc = (0, import_react.useRef)(() => {
172
- });
173
- const subscribe = (0, import_react.useRef)((onStoreChange) => {
174
- osc.current = onStoreChange;
175
- return () => {
176
- osc.current = () => {
212
+ const prevPksRef = (0, import_react.useRef)();
213
+ const pksAreEqual = arraysEqual(prevPksRef.current || EMPTY_ARRAY, pks);
214
+ if (!pksAreEqual) {
215
+ prevPksRef.current = pks;
216
+ }
217
+ const snapshotRef = (0, import_react.useRef)();
218
+ const subscribe = (0, import_react.useMemo)(() => {
219
+ snapshotRef.current = pks.map((pk) => reactiveCollection.getOneByPk(pk));
220
+ return (onStoreChange) => {
221
+ const prevPks = prevPksRef.current;
222
+ if (!prevPks) {
223
+ return () => {
224
+ };
225
+ }
226
+ const updateSnapshot = () => {
227
+ snapshotRef.current = prevPks.map(
228
+ (pk) => reactiveCollection.getOneByPk(pk)
229
+ );
230
+ onStoreChange();
177
231
  };
178
- };
179
- });
180
- (0, import_react.useEffect)(() => {
181
- const list = () => {
182
- snapshotValueRef.current = pks.map(
183
- (pk) => reactiveCollection.getOneByPk(pk)
184
- );
185
- osc.current();
186
- };
187
- reactiveCollection.updateEventEmitter.subscribeOnKeys(pks, list);
188
- if (!isInitialized.current) {
189
- isInitialized.current = true;
190
- } else {
191
- snapshotValueRef.current = pks.map(
192
- (pk) => reactiveCollection.getOneByPk(pk)
193
- );
194
- osc.current();
195
- }
196
- return () => {
197
- reactiveCollection.updateEventEmitter.unsubscribeFromKeys(
198
- pks,
199
- list
232
+ reactiveCollection.updateEventEmitter.subscribeOnKeys(
233
+ prevPks,
234
+ updateSnapshot
200
235
  );
236
+ return () => {
237
+ reactiveCollection.updateEventEmitter.unsubscribeFromKeys(
238
+ prevPks,
239
+ updateSnapshot
240
+ );
241
+ };
201
242
  };
202
- }, [pks, reactiveCollection.updateEventEmitter, reactiveCollection]);
243
+ }, [prevPksRef.current, reactiveCollection.updateEventEmitter]);
203
244
  const getSnapshot = (0, import_react.useMemo)(() => {
204
245
  return () => {
205
- return snapshotValueRef.current;
246
+ return snapshotRef.current;
206
247
  };
207
248
  }, []);
208
- const snapshot = (0, import_react2.useSyncExternalStore)(
209
- subscribe.current,
210
- getSnapshot,
211
- getSnapshot
212
- );
249
+ const snapshot = (0, import_react2.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
213
250
  return snapshot;
214
251
  };
215
- var useSelectEntitiesByIndexKey = (reactiveCollection, reactiveIndex, key) => {
216
- const pks = useSelectPksByIndexKey(reactiveIndex, key);
252
+ var useSelectEntitiesByIndexKeySetBased = (reactiveCollection, reactiveIndex, key) => {
253
+ const pks = useSelectPksByIndexKeySetBased(reactiveIndex, key);
254
+ const pksArray = (0, import_react.useMemo)(
255
+ () => pks ? Array.from(pks) : EMPTY_ARRAY,
256
+ [pks]
257
+ );
258
+ return useSelectEntitiesByPks(reactiveCollection, pksArray);
259
+ };
260
+ var useSelectEntitiesByIndexKeysSetBased = (reactiveCollection, reactiveIndex, keys) => {
261
+ const pks = useSelectPksByIndexKeysSetBased(reactiveIndex, keys);
262
+ const pksArray = (0, import_react.useMemo)(
263
+ () => pks ? Array.from(pks) : EMPTY_ARRAY,
264
+ [pks]
265
+ );
266
+ return useSelectEntitiesByPks(reactiveCollection, pksArray);
267
+ };
268
+ var useSelectEntitiesByIndexKeyArrayBased = (reactiveCollection, reactiveIndex, key) => {
269
+ const pks = useSelectPksByIndexKeyArrayBased(reactiveIndex, key);
217
270
  return useSelectEntitiesByPks(
218
271
  reactiveCollection,
219
272
  pks || EMPTY_ARRAY
220
273
  );
221
274
  };
222
- var unique = (array) => {
223
- return Array.from(new Set(array));
224
- };
225
- var useSelectEntitiesByIndexKeys = (reactiveCollection, reactiveIndex, keys) => {
226
- const pks = useSelectPksByIndexKeys(reactiveIndex, keys) || EMPTY_ARRAY;
227
- return useSelectEntitiesByPks(reactiveCollection, unique(Array.from(pks)));
275
+ var useSelectEntitiesByIndexKeysArrayBased = (reactiveCollection, reactiveIndex, keys) => {
276
+ const pks = useSelectPksByIndexKeysArrayBased(reactiveIndex, keys) || EMPTY_ARRAY;
277
+ return useSelectEntitiesByPks(reactiveCollection, pks);
228
278
  };
229
279
 
230
280
  // src/context/index.tsx
@@ -258,10 +308,14 @@ function useOIMCollectionsContext(context) {
258
308
  OIMRICollectionsProvider,
259
309
  createOIMCollectionsContext,
260
310
  useOIMCollectionsContext,
261
- useSelectEntitiesByIndexKey,
262
- useSelectEntitiesByIndexKeys,
311
+ useSelectEntitiesByIndexKeyArrayBased,
312
+ useSelectEntitiesByIndexKeySetBased,
313
+ useSelectEntitiesByIndexKeysArrayBased,
314
+ useSelectEntitiesByIndexKeysSetBased,
263
315
  useSelectEntitiesByPks,
264
316
  useSelectEntityByPk,
265
- useSelectPksByIndexKey,
266
- useSelectPksByIndexKeys
317
+ useSelectPksByIndexKeyArrayBased,
318
+ useSelectPksByIndexKeySetBased,
319
+ useSelectPksByIndexKeysArrayBased,
320
+ useSelectPksByIndexKeysSetBased
267
321
  });
package/dist/index.d.cts CHANGED
@@ -1,18 +1,25 @@
1
- import { TOIMPk, OIMIndex, OIMReactiveIndex, OIMReactiveCollection, OIMRICollection } from '@oimdb/core';
1
+ import { TOIMPk, OIMIndexSetBased, OIMReactiveIndexSetBased, OIMIndexArrayBased, OIMReactiveIndexArrayBased, OIMReactiveCollection, OIMRICollection } 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 useSelectPksByIndexKeys: <TPk extends TOIMPk, TKey extends TOIMPk, TIndex extends OIMIndex<TKey, TPk>>(reactiveIndex: OIMReactiveIndex<TKey, TPk, TIndex>, keys: readonly TKey[]) => readonly TPk[] | null;
7
- declare const useSelectPksByIndexKey: <TPk extends TOIMPk, TKey extends TOIMPk, TIndex extends OIMIndex<TKey, TPk>>(reactiveIndex: OIMReactiveIndex<TKey, TPk, TIndex>, key: TKey) => readonly TPk[] | null;
6
+ 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
+ declare const useSelectPksByIndexKeySetBased: <TPk extends TOIMPk, TKey extends TOIMPk, TIndex extends OIMIndexSetBased<TKey, TPk>>(reactiveIndex: OIMReactiveIndexSetBased<TKey, TPk, TIndex>, key: TKey) => Set<TPk>;
8
+ declare const useSelectPksByIndexKeysArrayBased: <TPk extends TOIMPk, TKey extends TOIMPk, TIndex extends OIMIndexArrayBased<TKey, TPk>>(reactiveIndex: OIMReactiveIndexArrayBased<TKey, TPk, TIndex>, keys: readonly TKey[]) => TPk[] | undefined;
9
+ declare const useSelectPksByIndexKeyArrayBased: <TPk extends TOIMPk, TKey extends TOIMPk, TIndex extends OIMIndexArrayBased<TKey, TPk>>(reactiveIndex: OIMReactiveIndexArrayBased<TKey, TPk, TIndex>, key: TKey) => TPk[] | undefined;
8
10
  declare const useSelectEntityByPk: <TEntity extends object, TPk extends TOIMPk>(reactiveCollection: OIMReactiveCollection<TEntity, TPk>, pk: TPk) => TEntity | undefined;
9
- declare const useSelectEntitiesByPks: <TEntity extends object, TPk extends TOIMPk>(reactiveCollection: OIMReactiveCollection<TEntity, TPk>, pks: readonly TPk[]) => readonly TEntity[] | null;
10
- declare const useSelectEntitiesByIndexKey: <TEntity extends object, TPk extends TOIMPk, TKey extends TOIMPk, TIndex extends OIMIndex<TKey, TPk>>(reactiveCollection: OIMReactiveCollection<TEntity, TPk>, reactiveIndex: OIMReactiveIndex<TKey, TPk, TIndex>, key: TKey) => readonly TEntity[] | null;
11
- declare const useSelectEntitiesByIndexKeys: <TEntity extends object, TPk extends TOIMPk, TKey extends TOIMPk, TIndex extends OIMIndex<TKey, TPk>>(reactiveCollection: OIMReactiveCollection<TEntity, TPk>, reactiveIndex: OIMReactiveIndex<TKey, TPk, TIndex>, keys: readonly TKey[]) => readonly TEntity[] | null;
11
+ declare const useSelectEntitiesByPks: <TEntity extends object, TPk extends TOIMPk>(reactiveCollection: OIMReactiveCollection<TEntity, TPk>, pks: readonly TPk[]) => readonly (TEntity | undefined)[] | undefined;
12
+ declare const useSelectEntitiesByIndexKeySetBased: <TEntity extends object, TPk extends TOIMPk, TKey extends TOIMPk, TIndex extends OIMIndexSetBased<TKey, TPk>>(reactiveCollection: OIMReactiveCollection<TEntity, TPk>, reactiveIndex: OIMReactiveIndexSetBased<TKey, TPk, TIndex>, key: TKey) => readonly (TEntity | undefined)[] | undefined;
13
+ declare const useSelectEntitiesByIndexKeysSetBased: <TEntity extends object, TPk extends TOIMPk, TKey extends TOIMPk, TIndex extends OIMIndexSetBased<TKey, TPk>>(reactiveCollection: OIMReactiveCollection<TEntity, TPk>, reactiveIndex: OIMReactiveIndexSetBased<TKey, TPk, TIndex>, keys: readonly TKey[]) => readonly (TEntity | undefined)[] | undefined;
14
+ declare const useSelectEntitiesByIndexKeyArrayBased: <TEntity extends object, TPk extends TOIMPk, TKey extends TOIMPk, TIndex extends OIMIndexArrayBased<TKey, TPk>>(reactiveCollection: OIMReactiveCollection<TEntity, TPk>, reactiveIndex: OIMReactiveIndexArrayBased<TKey, TPk, TIndex>, key: TKey) => readonly (TEntity | undefined)[] | undefined;
15
+ declare const useSelectEntitiesByIndexKeysArrayBased: <TEntity extends object, TPk extends TOIMPk, TKey extends TOIMPk, TIndex extends OIMIndexArrayBased<TKey, TPk>>(reactiveCollection: OIMReactiveCollection<TEntity, TPk>, reactiveIndex: OIMReactiveIndexArrayBased<TKey, TPk, TIndex>, keys: readonly TKey[]) => readonly (TEntity | undefined)[] | undefined;
12
16
 
13
- type AnyOIMRICollection = OIMRICollection<object, TOIMPk, string, TOIMPk, any, any>;
14
- type CollectionsDictionary = Record<string, AnyOIMRICollection>;
15
- type TypedCollectionsDictionary<T extends CollectionsDictionary> = T;
17
+ type TOIMAnyIndexSetBased = OIMIndexSetBased<TOIMPk, TOIMPk>;
18
+ type TOIMAnyIndexArrayBased = OIMIndexArrayBased<TOIMPk, TOIMPk>;
19
+ type TOIMAnyReactiveIndexSetBased = OIMReactiveIndexSetBased<TOIMPk, TOIMPk, TOIMAnyIndexSetBased>;
20
+ type TOIMAnyReactiveIndexArrayBased = OIMReactiveIndexArrayBased<TOIMPk, TOIMPk, TOIMAnyIndexArrayBased>;
21
+ type TOIMAnyReactiveIndex = TOIMAnyReactiveIndexSetBased | TOIMAnyReactiveIndexArrayBased;
22
+ type CollectionsDictionary = Record<string, OIMRICollection<object, TOIMPk, string, TOIMPk, TOIMAnyReactiveIndex>>;
16
23
  type OIMContextValue<T extends CollectionsDictionary = CollectionsDictionary> = T | null;
17
24
  declare const OIMRICollectionsContext: React.Context<OIMContextValue<CollectionsDictionary>>;
18
25
  declare function createOIMCollectionsContext<T extends CollectionsDictionary>(): React.Context<OIMContextValue<T>>;
@@ -23,23 +30,5 @@ interface OIMRICollectionsProviderProps<T extends CollectionsDictionary> {
23
30
  }
24
31
  declare function OIMRICollectionsProvider<T extends CollectionsDictionary>({ collections, children, context, }: OIMRICollectionsProviderProps<T>): react_jsx_runtime.JSX.Element;
25
32
  declare function useOIMCollectionsContext<T extends CollectionsDictionary = CollectionsDictionary>(context?: React.Context<OIMContextValue<T>>): T;
26
- type ExtractEntityType<T> = T extends OIMRICollection<infer E, TOIMPk, string, TOIMPk, any, any> ? E : never;
27
- type ExtractPkType<T> = T extends OIMRICollection<object, infer P, string, TOIMPk, any, any> ? P : never;
28
- type ExtractIndexNameType<T> = T extends OIMRICollection<object, TOIMPk, infer IN, TOIMPk, any, any> ? IN : never;
29
- type ExtractIndexKeyType<T> = T extends OIMRICollection<object, TOIMPk, string, infer IK, any, any> ? IK : never;
30
- type CreateCollectionsDictionary<T extends Record<string, AnyOIMRICollection>> = {
31
- [K in keyof T]: T[K];
32
- };
33
- type ExtractCollectionSignature<T> = T extends OIMRICollection<infer E, infer P, infer IN, infer IK, infer I, infer RI> ? {
34
- entity: E;
35
- pk: P;
36
- indexName: IN;
37
- indexKey: IK;
38
- index: I;
39
- reactiveIndex: RI;
40
- } : never;
41
- type StrictCollectionsDictionary<T> = {
42
- [K in keyof T]: T[K] extends OIMRICollection<infer E, infer P, infer IN, infer IK, infer I, infer RI> ? OIMRICollection<E, P, IN, IK, I, RI> : never;
43
- };
44
33
 
45
- export { type AnyOIMRICollection, type CollectionsDictionary, type CreateCollectionsDictionary, type ExtractCollectionSignature, type ExtractEntityType, type ExtractIndexKeyType, type ExtractIndexNameType, type ExtractPkType, type OIMContextValue, OIMRICollectionsContext, OIMRICollectionsProvider, type OIMRICollectionsProviderProps, type StrictCollectionsDictionary, type TypedCollectionsDictionary, createOIMCollectionsContext, useOIMCollectionsContext, useSelectEntitiesByIndexKey, useSelectEntitiesByIndexKeys, useSelectEntitiesByPks, useSelectEntityByPk, useSelectPksByIndexKey, useSelectPksByIndexKeys };
34
+ export { type CollectionsDictionary, type OIMContextValue, OIMRICollectionsContext, OIMRICollectionsProvider, type OIMRICollectionsProviderProps, createOIMCollectionsContext, useOIMCollectionsContext, useSelectEntitiesByIndexKeyArrayBased, useSelectEntitiesByIndexKeySetBased, useSelectEntitiesByIndexKeysArrayBased, useSelectEntitiesByIndexKeysSetBased, useSelectEntitiesByPks, useSelectEntityByPk, useSelectPksByIndexKeyArrayBased, useSelectPksByIndexKeySetBased, useSelectPksByIndexKeysArrayBased, useSelectPksByIndexKeysSetBased };
package/dist/index.d.ts CHANGED
@@ -1,18 +1,25 @@
1
- import { TOIMPk, OIMIndex, OIMReactiveIndex, OIMReactiveCollection, OIMRICollection } from '@oimdb/core';
1
+ import { TOIMPk, OIMIndexSetBased, OIMReactiveIndexSetBased, OIMIndexArrayBased, OIMReactiveIndexArrayBased, OIMReactiveCollection, OIMRICollection } 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 useSelectPksByIndexKeys: <TPk extends TOIMPk, TKey extends TOIMPk, TIndex extends OIMIndex<TKey, TPk>>(reactiveIndex: OIMReactiveIndex<TKey, TPk, TIndex>, keys: readonly TKey[]) => readonly TPk[] | null;
7
- declare const useSelectPksByIndexKey: <TPk extends TOIMPk, TKey extends TOIMPk, TIndex extends OIMIndex<TKey, TPk>>(reactiveIndex: OIMReactiveIndex<TKey, TPk, TIndex>, key: TKey) => readonly TPk[] | null;
6
+ 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
+ declare const useSelectPksByIndexKeySetBased: <TPk extends TOIMPk, TKey extends TOIMPk, TIndex extends OIMIndexSetBased<TKey, TPk>>(reactiveIndex: OIMReactiveIndexSetBased<TKey, TPk, TIndex>, key: TKey) => Set<TPk>;
8
+ declare const useSelectPksByIndexKeysArrayBased: <TPk extends TOIMPk, TKey extends TOIMPk, TIndex extends OIMIndexArrayBased<TKey, TPk>>(reactiveIndex: OIMReactiveIndexArrayBased<TKey, TPk, TIndex>, keys: readonly TKey[]) => TPk[] | undefined;
9
+ declare const useSelectPksByIndexKeyArrayBased: <TPk extends TOIMPk, TKey extends TOIMPk, TIndex extends OIMIndexArrayBased<TKey, TPk>>(reactiveIndex: OIMReactiveIndexArrayBased<TKey, TPk, TIndex>, key: TKey) => TPk[] | undefined;
8
10
  declare const useSelectEntityByPk: <TEntity extends object, TPk extends TOIMPk>(reactiveCollection: OIMReactiveCollection<TEntity, TPk>, pk: TPk) => TEntity | undefined;
9
- declare const useSelectEntitiesByPks: <TEntity extends object, TPk extends TOIMPk>(reactiveCollection: OIMReactiveCollection<TEntity, TPk>, pks: readonly TPk[]) => readonly TEntity[] | null;
10
- declare const useSelectEntitiesByIndexKey: <TEntity extends object, TPk extends TOIMPk, TKey extends TOIMPk, TIndex extends OIMIndex<TKey, TPk>>(reactiveCollection: OIMReactiveCollection<TEntity, TPk>, reactiveIndex: OIMReactiveIndex<TKey, TPk, TIndex>, key: TKey) => readonly TEntity[] | null;
11
- declare const useSelectEntitiesByIndexKeys: <TEntity extends object, TPk extends TOIMPk, TKey extends TOIMPk, TIndex extends OIMIndex<TKey, TPk>>(reactiveCollection: OIMReactiveCollection<TEntity, TPk>, reactiveIndex: OIMReactiveIndex<TKey, TPk, TIndex>, keys: readonly TKey[]) => readonly TEntity[] | null;
11
+ declare const useSelectEntitiesByPks: <TEntity extends object, TPk extends TOIMPk>(reactiveCollection: OIMReactiveCollection<TEntity, TPk>, pks: readonly TPk[]) => readonly (TEntity | undefined)[] | undefined;
12
+ declare const useSelectEntitiesByIndexKeySetBased: <TEntity extends object, TPk extends TOIMPk, TKey extends TOIMPk, TIndex extends OIMIndexSetBased<TKey, TPk>>(reactiveCollection: OIMReactiveCollection<TEntity, TPk>, reactiveIndex: OIMReactiveIndexSetBased<TKey, TPk, TIndex>, key: TKey) => readonly (TEntity | undefined)[] | undefined;
13
+ declare const useSelectEntitiesByIndexKeysSetBased: <TEntity extends object, TPk extends TOIMPk, TKey extends TOIMPk, TIndex extends OIMIndexSetBased<TKey, TPk>>(reactiveCollection: OIMReactiveCollection<TEntity, TPk>, reactiveIndex: OIMReactiveIndexSetBased<TKey, TPk, TIndex>, keys: readonly TKey[]) => readonly (TEntity | undefined)[] | undefined;
14
+ declare const useSelectEntitiesByIndexKeyArrayBased: <TEntity extends object, TPk extends TOIMPk, TKey extends TOIMPk, TIndex extends OIMIndexArrayBased<TKey, TPk>>(reactiveCollection: OIMReactiveCollection<TEntity, TPk>, reactiveIndex: OIMReactiveIndexArrayBased<TKey, TPk, TIndex>, key: TKey) => readonly (TEntity | undefined)[] | undefined;
15
+ declare const useSelectEntitiesByIndexKeysArrayBased: <TEntity extends object, TPk extends TOIMPk, TKey extends TOIMPk, TIndex extends OIMIndexArrayBased<TKey, TPk>>(reactiveCollection: OIMReactiveCollection<TEntity, TPk>, reactiveIndex: OIMReactiveIndexArrayBased<TKey, TPk, TIndex>, keys: readonly TKey[]) => readonly (TEntity | undefined)[] | undefined;
12
16
 
13
- type AnyOIMRICollection = OIMRICollection<object, TOIMPk, string, TOIMPk, any, any>;
14
- type CollectionsDictionary = Record<string, AnyOIMRICollection>;
15
- type TypedCollectionsDictionary<T extends CollectionsDictionary> = T;
17
+ type TOIMAnyIndexSetBased = OIMIndexSetBased<TOIMPk, TOIMPk>;
18
+ type TOIMAnyIndexArrayBased = OIMIndexArrayBased<TOIMPk, TOIMPk>;
19
+ type TOIMAnyReactiveIndexSetBased = OIMReactiveIndexSetBased<TOIMPk, TOIMPk, TOIMAnyIndexSetBased>;
20
+ type TOIMAnyReactiveIndexArrayBased = OIMReactiveIndexArrayBased<TOIMPk, TOIMPk, TOIMAnyIndexArrayBased>;
21
+ type TOIMAnyReactiveIndex = TOIMAnyReactiveIndexSetBased | TOIMAnyReactiveIndexArrayBased;
22
+ type CollectionsDictionary = Record<string, OIMRICollection<object, TOIMPk, string, TOIMPk, TOIMAnyReactiveIndex>>;
16
23
  type OIMContextValue<T extends CollectionsDictionary = CollectionsDictionary> = T | null;
17
24
  declare const OIMRICollectionsContext: React.Context<OIMContextValue<CollectionsDictionary>>;
18
25
  declare function createOIMCollectionsContext<T extends CollectionsDictionary>(): React.Context<OIMContextValue<T>>;
@@ -23,23 +30,5 @@ interface OIMRICollectionsProviderProps<T extends CollectionsDictionary> {
23
30
  }
24
31
  declare function OIMRICollectionsProvider<T extends CollectionsDictionary>({ collections, children, context, }: OIMRICollectionsProviderProps<T>): react_jsx_runtime.JSX.Element;
25
32
  declare function useOIMCollectionsContext<T extends CollectionsDictionary = CollectionsDictionary>(context?: React.Context<OIMContextValue<T>>): T;
26
- type ExtractEntityType<T> = T extends OIMRICollection<infer E, TOIMPk, string, TOIMPk, any, any> ? E : never;
27
- type ExtractPkType<T> = T extends OIMRICollection<object, infer P, string, TOIMPk, any, any> ? P : never;
28
- type ExtractIndexNameType<T> = T extends OIMRICollection<object, TOIMPk, infer IN, TOIMPk, any, any> ? IN : never;
29
- type ExtractIndexKeyType<T> = T extends OIMRICollection<object, TOIMPk, string, infer IK, any, any> ? IK : never;
30
- type CreateCollectionsDictionary<T extends Record<string, AnyOIMRICollection>> = {
31
- [K in keyof T]: T[K];
32
- };
33
- type ExtractCollectionSignature<T> = T extends OIMRICollection<infer E, infer P, infer IN, infer IK, infer I, infer RI> ? {
34
- entity: E;
35
- pk: P;
36
- indexName: IN;
37
- indexKey: IK;
38
- index: I;
39
- reactiveIndex: RI;
40
- } : never;
41
- type StrictCollectionsDictionary<T> = {
42
- [K in keyof T]: T[K] extends OIMRICollection<infer E, infer P, infer IN, infer IK, infer I, infer RI> ? OIMRICollection<E, P, IN, IK, I, RI> : never;
43
- };
44
33
 
45
- export { type AnyOIMRICollection, type CollectionsDictionary, type CreateCollectionsDictionary, type ExtractCollectionSignature, type ExtractEntityType, type ExtractIndexKeyType, type ExtractIndexNameType, type ExtractPkType, type OIMContextValue, OIMRICollectionsContext, OIMRICollectionsProvider, type OIMRICollectionsProviderProps, type StrictCollectionsDictionary, type TypedCollectionsDictionary, createOIMCollectionsContext, useOIMCollectionsContext, useSelectEntitiesByIndexKey, useSelectEntitiesByIndexKeys, useSelectEntitiesByPks, useSelectEntityByPk, useSelectPksByIndexKey, useSelectPksByIndexKeys };
34
+ export { type CollectionsDictionary, type OIMContextValue, OIMRICollectionsContext, OIMRICollectionsProvider, type OIMRICollectionsProviderProps, createOIMCollectionsContext, useOIMCollectionsContext, useSelectEntitiesByIndexKeyArrayBased, useSelectEntitiesByIndexKeySetBased, useSelectEntitiesByIndexKeysArrayBased, useSelectEntitiesByIndexKeysSetBased, useSelectEntitiesByPks, useSelectEntityByPk, useSelectPksByIndexKeyArrayBased, useSelectPksByIndexKeySetBased, useSelectPksByIndexKeysArrayBased, useSelectPksByIndexKeysSetBased };