@peerbit/document-react 0.1.4 → 0.3.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.
@@ -1,11 +1,30 @@
1
1
  import { Documents } from "@peerbit/document";
2
- import type { AbstractSearchRequest, AbstractSearchResult, RemoteQueryOptions, WithContext } from "@peerbit/document";
2
+ import type { AbstractSearchRequest, AbstractSearchResult, LateResultsEvent, RemoteQueryOptions, UpdateReason, WithContext } from "@peerbit/document";
3
3
  import type { UpdateOptions, WithIndexedContext } from "@peerbit/document";
4
4
  import * as indexerTypes from "@peerbit/indexer-interface";
5
5
  type QueryOptions = {
6
6
  query: QueryLike;
7
7
  id?: string;
8
8
  };
9
+ type LoadMoreFn = (n?: number, opts?: {
10
+ force?: boolean;
11
+ reason?: MergeReason;
12
+ }) => Promise<boolean>;
13
+ type MergeReason = UpdateReason | "batch" | "late";
14
+ type ApplyResultsHandler<Item> = (prev: Item[], change: {
15
+ items: Item[];
16
+ reason: MergeReason;
17
+ }, helpers: {
18
+ defaultMerge: () => Item[];
19
+ loadMore: LoadMoreFn;
20
+ }) => Item[] | Promise<Item[]>;
21
+ type LateResultsHandler<Item> = (evt: LateResultsEvent, helpers: {
22
+ loadMore: LoadMoreFn;
23
+ inject: (items: Item | Item[], opts?: {
24
+ position?: "start" | "end" | number;
25
+ }) => void;
26
+ items: () => Item[];
27
+ }) => void | Promise<void>;
9
28
  export type QueryLike = {
10
29
  /** Mongo-style selector or array of selectors */
11
30
  query?: indexerTypes.QueryLike | indexerTypes.Query[];
@@ -27,6 +46,8 @@ export type UseQuerySharedOptions<T, I, R extends boolean | undefined, RT = R ex
27
46
  updates?: UpdateOptions<T, I, R>;
28
47
  local?: boolean;
29
48
  remote?: boolean | RemoteQueryOptions<AbstractSearchRequest, AbstractSearchResult, any>;
49
+ onLateResults?: LateResultsHandler<RT>;
50
+ applyResults?: ApplyResultsHandler<RT>;
30
51
  } & QueryOptions;
31
52
  /**
32
53
  * `useQuery` – unified hook that accepts **either**
@@ -43,6 +64,7 @@ dbOrDbs: Documents<T, I> | Documents<T, I>[] | undefined, options: UseQueryShare
43
64
  items: RT[];
44
65
  loadMore: (n?: number, opts?: {
45
66
  force?: boolean;
67
+ reason?: MergeReason;
46
68
  }) => Promise<boolean>;
47
69
  isLoading: boolean;
48
70
  empty: () => boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"useQuery.d.ts","sourceRoot":"","sources":["../../src/useQuery.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAe,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,KAAK,EACX,qBAAqB,EACrB,oBAAoB,EAEpB,kBAAkB,EAElB,WAAW,EACX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,KAAK,YAAY,MAAM,4BAA4B,CAAC;AAI3D,KAAK,YAAY,GAAG;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAGtD,MAAM,MAAM,SAAS,GAAG;IACvB,iDAAiD;IACjD,KAAK,CAAC,EAAE,YAAY,CAAC,SAAS,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC;IACtD,mEAAmE;IACnE,IAAI,CAAC,EAAE,YAAY,CAAC,QAAQ,GAAG,YAAY,CAAC,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC;CACvE,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,qBAAqB,CAChC,CAAC,EACD,CAAC,EACD,CAAC,SAAS,OAAO,GAAG,SAAS,EAC7B,EAAE,GAAG,CAAC,SAAS,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,IAC7D;IAEH,OAAO,CAAC,EAAE,CAAC,CAAC;IACZ,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC,CAAC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAenB,OAAO,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACjC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EACJ,OAAO,GACP,kBAAkB,CAAC,qBAAqB,EAAE,oBAAoB,EAAE,GAAG,CAAC,CAAC;CACxE,GAAG,YAAY,CAAC;AAGjB;;;;;;;;GAQG;AACH,eAAO,MAAM,QAAQ,GACpB,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC7B,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC7B,CAAC,SAAS,OAAO,GAAG,SAAS,GAAG,IAAI,EACpC,EAAE,GAAG,CAAC,SAAS,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC;AAEhE,qFAAqF;AACrF,SAAS,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,SAAS,EACxD,SAAS,qBAAqB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;;mBAsWvC,MAAM,SACF;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,KACxB,OAAO,CAAC,OAAO,CAAC;;;;CAuHnB,CAAC"}
1
+ {"version":3,"file":"useQuery.d.ts","sourceRoot":"","sources":["../../src/useQuery.tsx"],"names":[],"mappings":"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"}
@@ -32,6 +32,7 @@ dbOrDbs, options) => {
32
32
  const emptyResultsRef = useRef(false);
33
33
  const closeControllerRef = useRef(null);
34
34
  const waitedOnceRef = useRef(false);
35
+ const loadMoreRef = useRef(undefined);
35
36
  /* keep an id mostly for debugging – mirrors original behaviour */
36
37
  const [id, setId] = useState(options.id);
37
38
  const reverseRef = useRef(options.reverse);
@@ -51,6 +52,9 @@ dbOrDbs, options) => {
51
52
  allRef.current = combined;
52
53
  setAll(combined);
53
54
  };
55
+ const mutateAll = (fn) => {
56
+ updateAll(fn(allRef.current));
57
+ };
54
58
  const reset = () => {
55
59
  iteratorRefs.current?.forEach(({ iterator }) => iterator.close());
56
60
  iteratorRefs.current = [];
@@ -64,6 +68,54 @@ dbOrDbs, options) => {
64
68
  setIsLoading(false);
65
69
  log("Iterators reset");
66
70
  };
71
+ const resolveItemKey = (item) => {
72
+ const cached = itemIdRef.current.get(item);
73
+ if (cached)
74
+ return cached;
75
+ for (const { db } of iteratorRefs.current) {
76
+ const id = db.index.resolveId(item);
77
+ return idToKey(id.primitive); // return the first result
78
+ }
79
+ return null;
80
+ };
81
+ const injectItems = (incoming, opts) => {
82
+ const arr = (Array.isArray(incoming) ? incoming : [incoming]).filter(Boolean);
83
+ if (!arr.length)
84
+ return;
85
+ mutateAll((prev) => {
86
+ const working = [...prev];
87
+ const keyIndex = new Map();
88
+ working.forEach((item, idx) => {
89
+ const key = resolveItemKey(item);
90
+ if (key)
91
+ keyIndex.set(key, idx);
92
+ });
93
+ for (const item of arr) {
94
+ const key = resolveItemKey(item);
95
+ if (key && keyIndex.has(key)) {
96
+ const idx = keyIndex.get(key);
97
+ working.splice(idx, 1);
98
+ }
99
+ }
100
+ let at = 0;
101
+ if (opts?.position === "end") {
102
+ at = working.length;
103
+ }
104
+ else if (typeof opts?.position === "number" &&
105
+ Number.isFinite(opts.position)) {
106
+ at = Math.max(0, Math.min(working.length, opts.position));
107
+ }
108
+ working.splice(at, 0, ...arr);
109
+ arr.forEach((item, offset) => {
110
+ const key = resolveItemKey(item);
111
+ if (key) {
112
+ itemIdRef.current.set(item, key);
113
+ keyIndex.set(key, at + offset);
114
+ }
115
+ });
116
+ return working;
117
+ });
118
+ };
67
119
  /* ────────── rebuild iterators when db list / query etc. change ────────── */
68
120
  useEffect(() => {
69
121
  /* derive canonical list of open DBs */
@@ -75,13 +127,34 @@ dbOrDbs, options) => {
75
127
  }
76
128
  reset();
77
129
  const abortSignal = closeControllerRef.current?.signal;
130
+ const resolveRemoteOptions = () => {
131
+ if (!options.remote)
132
+ return undefined;
133
+ if (typeof options.remote === "object") {
134
+ return {
135
+ ...options.remote,
136
+ wait: {
137
+ ...options.remote.wait,
138
+ timeout: options.remote.wait?.timeout ?? 5000,
139
+ },
140
+ };
141
+ }
142
+ return {};
143
+ };
78
144
  const onMissedResults = (evt) => {
79
- console.error("Not effective yet: missed results", evt);
80
- /* if (allRef.current.length > 0 || typeof options.remote !== "object" || !options.updates) {
81
- return;
145
+ log("Late results", evt);
146
+ const loadMoreHelper = (...args) => loadMoreRef.current
147
+ ? loadMoreRef.current(...args)
148
+ : Promise.resolve(false);
149
+ const maybeUser = options.onLateResults?.(evt, {
150
+ loadMore: loadMoreHelper,
151
+ inject: injectItems,
152
+ items: () => allRef.current,
153
+ });
154
+ if (!maybeUser) {
155
+ console.error("Late results", evt);
82
156
  }
83
- console.log("Missed results, loading more", evt.amount);
84
- loadMore(evt.amount); */
157
+ return maybeUser;
85
158
  };
86
159
  let draining = false;
87
160
  const scheduleDrain = (ref, amount, opts) => {
@@ -103,24 +176,8 @@ dbOrDbs, options) => {
103
176
  const iterator = db.index.iterate(query ?? {}, {
104
177
  closePolicy: "manual",
105
178
  local: options.local ?? true,
106
- remote: options.remote
107
- ? {
108
- ...(typeof options?.remote === "object"
109
- ? {
110
- ...options.remote,
111
- onLateResults: onMissedResults,
112
- wait: {
113
- ...options?.remote?.wait,
114
- timeout: options?.remote?.wait?.timeout ?? 5000,
115
- },
116
- }
117
- : options?.remote
118
- ? {
119
- onLateResults: onMissedResults,
120
- }
121
- : undefined),
122
- }
123
- : undefined,
179
+ remote: resolveRemoteOptions(),
180
+ onLateResults: onMissedResults,
124
181
  resolve,
125
182
  signal: abortSignal,
126
183
  updates: {
@@ -150,9 +207,7 @@ dbOrDbs, options) => {
150
207
  props.reason === "push") {
151
208
  if (!currentRef)
152
209
  return;
153
- handleBatch(iteratorRefs.current, [
154
- { ref: currentRef, items: batch },
155
- ]);
210
+ handleBatch(iteratorRefs.current, [{ ref: currentRef, items: batch }], props.reason);
156
211
  }
157
212
  },
158
213
  },
@@ -203,7 +258,7 @@ dbOrDbs, options) => {
203
258
  return `b:${value.toString()}`;
204
259
  }
205
260
  };
206
- const handleBatch = async (iterators, batches) => {
261
+ const handleBatch = async (iterators, batches, reason = "batch") => {
207
262
  if (!iterators.length) {
208
263
  log("No iterators in handleBatch");
209
264
  return false;
@@ -283,19 +338,40 @@ dbOrDbs, options) => {
283
338
  log("No new items or mutations");
284
339
  return !emptyResultsRef.current;
285
340
  }
286
- const combined = reverseRef.current
287
- ? [...freshItems.reverse(), ...next]
288
- : [...next, ...freshItems];
341
+ let combinedDefault;
342
+ if (reverseRef.current) {
343
+ freshItems.reverse();
344
+ freshItems.push(...next);
345
+ combinedDefault = freshItems;
346
+ }
347
+ else {
348
+ next.push(...freshItems);
349
+ combinedDefault = next;
350
+ }
351
+ const defaultMerge = () => combinedDefault;
352
+ const incoming = freshItems.length
353
+ ? freshItems
354
+ : processed.flatMap((p) => p.items);
355
+ const loadMoreHelper = (...args) => loadMoreRef.current
356
+ ? loadMoreRef.current(...args)
357
+ : Promise.resolve(false);
358
+ const mergedCandidate = options.applyResults
359
+ ? await options.applyResults(allRef.current, { items: incoming, reason }, {
360
+ defaultMerge,
361
+ loadMore: loadMoreHelper,
362
+ })
363
+ : undefined;
364
+ const merged = mergedCandidate ?? combinedDefault;
289
365
  log("Updating all with", {
290
366
  prevLength: prev.length,
291
367
  freshLength: freshItems.length,
292
- combinedLength: combined.length,
368
+ combinedLength: merged.length,
293
369
  });
294
- updateAll(combined);
370
+ updateAll(merged);
295
371
  emptyResultsRef.current = iterators.every((i) => i.iterator.done());
296
372
  return !emptyResultsRef.current;
297
373
  };
298
- const drainRoundRobin = async (iterators, n) => {
374
+ const drainRoundRobin = async (iterators, n, reason = "batch") => {
299
375
  const batches = [];
300
376
  for (const ref of iterators) {
301
377
  if (ref.iterator.done())
@@ -307,11 +383,8 @@ dbOrDbs, options) => {
307
383
  batches.push({ ref, items: batch });
308
384
  }
309
385
  }
310
- return handleBatch(iterators, batches);
386
+ return handleBatch(iterators, batches, reason);
311
387
  };
312
- /* maybe make the rule that if results are empty and we get results from joining
313
- set the results to the joining results
314
- when results are not empty use onMerge option to merge the results ? */
315
388
  const loadMore = async (n = batchSize, opts) => {
316
389
  const iterators = iteratorRefs.current;
317
390
  if (!iterators.length) {
@@ -354,10 +427,10 @@ dbOrDbs, options) => {
354
427
  }
355
428
  })
356
429
  );
357
- }*/
430
+ }*/
358
431
  markWaited();
359
432
  }
360
- return drainRoundRobin(iterators, n);
433
+ return drainRoundRobin(iterators, n, opts?.reason ?? "batch");
361
434
  }
362
435
  catch (e) {
363
436
  if (!(e instanceof ClosedError))
@@ -368,51 +441,12 @@ dbOrDbs, options) => {
368
441
  setIsLoading(false);
369
442
  }
370
443
  };
444
+ loadMoreRef.current = loadMore;
371
445
  /* ────────────── live-merge listeners ────────────── */
372
446
  useEffect(() => {
373
447
  if (!options.updates) {
374
448
  return;
375
449
  }
376
- /* const listeners = iteratorRefs.current.map(({ db, id: itId }) => {
377
- const mergeFn =
378
- typeof options.onChange?.merge === "function"
379
- ? options.onChange.merge
380
- : (c: DocumentsChange<T, I>) => c;
381
-
382
- const handler = async (e: CustomEvent<DocumentsChange<T, I>>) => {
383
- log("Merge change", e.detail, "it", itId);
384
- const filtered = await mergeFn(e.detail);
385
- if (
386
- !filtered ||
387
- (!filtered.added.length && !filtered.removed.length)
388
- )
389
- return;
390
-
391
- let merged: Item[];
392
- if (options.onChange?.update) {
393
- merged = await options.onChange.update(
394
- allRef.current,
395
- filtered
396
- );
397
- } else {
398
- merged = await db.index.updateResults(
399
- allRef.current as WithContext<RT>[],
400
- filtered,
401
- options.query || {},
402
- options.resolve ?? true
403
- );
404
- }
405
- updateAll(options.reverse ? merged.reverse() : merged);
406
- };
407
- db.events.addEventListener("change", handler);
408
- return { db, handler };
409
- });
410
-
411
- return () => {
412
- listeners.forEach(({ db, handler }) =>
413
- db.events.removeEventListener("change", handler)
414
- );
415
- }; */
416
450
  // eslint-disable-next-line react-hooks/exhaustive-deps
417
451
  }, [
418
452
  iteratorRefs.current.map((r) => r.db.address).join("|"),
@@ -1 +1 @@
1
- {"version":3,"file":"useQuery.js","sourceRoot":"","sources":["../../src/useQuery.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAU3D,OAAO,KAAK,YAAY,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC7D,OAAO,EAAE,EAAE,IAAI,IAAI,EAAE,MAAM,MAAM,CAAC;AAmDlC,qEAAqE;AACrE;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;AAMvB,qFAAqF;AACrF,OAAwD,EACxD,OAA2C,EAC1C,EAAE;IAUH,uDAAuD;IACvD,MAAM,GAAG,GAAG,OAAO,CAAkC,GAAG,EAAE;QACzD,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;YAAE,OAAO,OAAO,CAAC;QAC3C,IAAI,OAAO;YAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAC9B,OAAO,EAAE,CAAC;IACX,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,gDAAgD;IAChD,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAS,EAAE,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,MAAM,CAAS,EAAE,CAAC,CAAC;IAClC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,YAAY,GAAG,MAAM,CAAgB,EAAE,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,OAAO,EAAkB,CAAC,CAAC;IACxD,MAAM,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,kBAAkB,GAAG,MAAM,CAAyB,IAAI,CAAC,CAAC;IAChE,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAEpC,kEAAkE;IAClE,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,QAAQ,CAAqB,OAAO,CAAC,EAAE,CAAC,CAAC;IAE7D,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,SAAS,CAAC,GAAG,EAAE;QACd,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IACtC,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IAEtB,6CAA6C;IAC7C,MAAM,GAAG,GAAG,CAAC,GAAG,CAAQ,EAAE,EAAE;QAC3B,IAAI,CAAC,OAAO,CAAC,KAAK;YAAE,OAAO;QAC3B,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,SAAS;YAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;;YACrD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,CAAC,QAAgB,EAAE,EAAE;QACtC,MAAM,CAAC,OAAO,GAAG,QAAQ,CAAC;QAC1B,MAAM,CAAC,QAAQ,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,GAAG,EAAE;QAClB,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;QAClE,YAAY,CAAC,OAAO,GAAG,EAAE,CAAC;QAE1B,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QACtD,kBAAkB,CAAC,OAAO,GAAG,IAAI,eAAe,EAAE,CAAC;QACnD,eAAe,CAAC,OAAO,GAAG,KAAK,CAAC;QAChC,aAAa,CAAC,OAAO,GAAG,KAAK,CAAC;QAE9B,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC;QACpB,SAAS,CAAC,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;QAClC,MAAM,CAAC,EAAE,CAAC,CAAC;QACX,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACxB,CAAC,CAAC;IAEF,8EAA8E;IAC9E,SAAS,CAAC,GAAG,EAAE;QACd,uCAAuC;QACvC,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAwB,EAAE,CACtD,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CACvB,CAAC;QACF,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QAEnC,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;YACtC,KAAK,EAAE,CAAC;YACR,OAAO;QACR,CAAC;QAED,KAAK,EAAE,CAAC;QACR,MAAM,WAAW,GAAG,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC;QACvD,MAAM,eAAe,GAAG,CAAC,GAAuB,EAAE,EAAE;YACnD,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,GAAG,CAAC,CAAC;YACxD;;;;oCAIiC;QAClC,CAAC,CAAC;QACF,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,MAAM,aAAa,GAAG,CACrB,GAAwB,EACxB,MAAc,EACd,IAA0B,EACzB,EAAE;YACH,GAAG,CAAC,gBAAgB,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;YAC7C,IAAI,QAAQ;gBAAE,OAAO;YACrB,QAAQ,GAAG,IAAI,CAAC;YAChB,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC;iBACpB,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;gBACZ,IAAI,CAAC,CAAC,CAAC,YAAY,WAAW,CAAC;oBAAE,MAAM,CAAC,CAAC;YAC1C,CAAC,CAAC;iBACD,OAAO,CAAC,GAAG,EAAE;gBACb,QAAQ,GAAG,KAAK,CAAC;YAClB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,YAAY,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;YACzC,IAAI,UAAmC,CAAC;YACxC,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE;gBAC9C,WAAW,EAAE,QAAQ;gBACrB,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,IAAI;gBAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;oBACrB,CAAC,CAAC;wBACA,GAAG,CAAC,OAAO,OAAO,EAAE,MAAM,KAAK,QAAQ;4BACtC,CAAC,CAAC;gCACA,GAAG,OAAO,CAAC,MAAM;gCACjB,aAAa,EAAE,eAAe;gCAC9B,IAAI,EAAE;oCACL,GAAG,OAAO,EAAE,MAAM,EAAE,IAAI;oCACxB,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,IAAI,IAAI;iCAC/C;6BACD;4BACF,CAAC,CAAC,OAAO,EAAE,MAAM;gCAChB,CAAC,CAAC;oCACA,aAAa,EAAE,eAAe;iCAC9B;gCACF,CAAC,CAAC,SAAS,CAAC;qBACd;oBACF,CAAC,CAAC,SAAS;gBACZ,OAAO;gBACP,MAAM,EAAE,WAAW;gBACnB,OAAO,EAAE;oBACR,IAAI,EACH,OAAO,OAAO,CAAC,OAAO,KAAK,SAAS;wBACnC,CAAC,CAAC,OAAO,CAAC,OAAO;wBACjB,CAAC,CAAC,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI;4BAC5D,CAAC,CAAC,IAAI;4BACN,CAAC,CAAC,KAAK;oBACV,KAAK,EACJ,OAAO,OAAO,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,OAAO;wBACtD,CAAC,CAAC,IAAI;wBACN,CAAC,CAAC,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK;4BAC7D,CAAC,CAAC,IAAI;4BACN,CAAC,CAAC,KAAK;oBACV,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;wBAClB,GAAG,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;wBACpD,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;4BACnE,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;4BAC5C,aAAa,CAAC,QAA+B,EAAE,WAAW,EAAE;gCAC3D,KAAK,EAAE,IAAI;6BACX,CAAC,CAAC;wBACJ,CAAC;oBACF,CAAC;oBACD,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;wBACzB,GAAG,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;wBAC3D,IACC,KAAK,CAAC,MAAM,KAAK,MAAM;4BACvB,KAAK,CAAC,MAAM,KAAK,QAAQ;4BACzB,KAAK,CAAC,MAAM,KAAK,MAAM,EACtB,CAAC;4BACF,IAAI,CAAC,UAAU;gCAAE,OAAO;4BACxB,WAAW,CAAC,YAAY,CAAC,OAAO,EAAE;gCACjC,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,KAAe,EAAE;6BAC3C,CAAC,CAAC;wBACJ,CAAC;oBACF,CAAC;iBACD;aACD,CAA0B,CAAC;YAE5B,MAAM,GAAG,GAAgB;gBACxB,EAAE,EAAE,IAAI,EAAE;gBACV,EAAE;gBACF,QAAQ;gBACR,aAAa,EAAE,CAAC;aAChB,CAAC;YACF,UAAU,GAAG,GAAG,CAAC;YACjB,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;YAC/C,OAAO,GAAG,CAAC;QACZ,CAAC,CAAC,CAAC;QAEH,yDAAyD;QACzD,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAEd,2BAA2B;QAC3B,IAAI,OAAO,CAAC,QAAQ;YAAE,KAAK,QAAQ,EAAE,CAAC;QACtC,uDAAuD;IACxD,CAAC,EAAE;QACF,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QACpC,OAAO,CAAC,KAAK;QACb,OAAO,CAAC,OAAO;QACf,OAAO,CAAC,OAAO;QACf,OAAO,CAAC,SAAS;KACjB,CAAC,CAAC;IAEH,2DAA2D;IAC3D,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;IAE1C,MAAM,UAAU,GAAG,GAAY,EAAE;QAChC,IAAI,aAAa,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QACxC,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK;YAAE,OAAO,KAAK,CAAC;QAC3C,OAAO,IAAI,CAAC,CAAC,yDAAyD;IACvE,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,GAAG,EAAE;QACvB,aAAa,CAAC,OAAO,GAAG,IAAI,CAAC;IAC9B,CAAC,CAAC;IAEF,uDAAuD;IACvD,MAAM,OAAO,GAAG,CAAC,KAA+B,EAAU,EAAE;QAC3D,QAAQ,OAAO,KAAK,EAAE,CAAC;YACtB,KAAK,QAAQ;gBACZ,OAAO,KAAK,KAAK,EAAE,CAAC;YACrB,KAAK,QAAQ;gBACZ,OAAO,KAAK,KAAK,EAAE,CAAC;YACrB;gBACC,OAAO,KAAK,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC;QACjC,CAAC;IACF,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,KAAK,EACxB,SAAwB,EACxB,OAA8C,EAC3B,EAAE;QACrB,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;YACvB,GAAG,CAAC,6BAA6B,CAAC,CAAC;YACnC,OAAO,KAAK,CAAC;QACd,CAAC;QAED,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAClC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EACxC,CAAC,CACD,CAAC;QACF,IAAI,YAAY,KAAK,CAAC,EAAE,CAAC;YACxB,GAAG,CAAC,kBAAkB,CAAC,CAAC;YACxB,eAAe,CAAC,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;YACpE,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC;QACjC,CAAC;QAED,IAAI,SAAS,GAAG,OAAO,CAAC;QACxB,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACvB,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;YACpC,SAAS,GAAG,MAAM,OAAO,CAAC,GAAG,CAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;gBACtC,GAAG;gBACH,KAAK,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;aAC9C,CAAC,CAAC,CACH,CAAC;QACH,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC;QAC5B,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;QACvB,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC3C,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;YAC1B,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,IAAc,CAAC,CAAC;YAClD,IAAI,GAAG;gBAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAE,CAAS,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;QACvE,MAAM,UAAU,GAAW,EAAE,CAAC;QAC9B,IAAI,YAAY,GAAG,KAAK,CAAC;QAEzB,GAAG,CAAC,oBAAoB,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;QACnD,KAAK,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,SAAS,EAAE,CAAC;YACxC,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;YAClB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBAC1B,MAAM,GAAG,GAAI,IAAyB,CAAC,SAAS,CAAC;gBACjD,MAAM,IAAI,GAAG,GAAG,EAAE,IAAI,CAAC;gBAEvB,IAAI,GAAG,GAAkB,IAAI,CAAC;gBAC9B,IAAI,CAAC;oBACJ,GAAG,GAAG,OAAO,CACZ,EAAE,CAAC,KAAK,CAAC,SAAS,CACjB,IAAiD,CACjD,CAAC,SAAS,CACX,CAAC;gBACH,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAChB,GAAG,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;gBAC9C,CAAC;gBAED,IAAI,GAAG,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC9B,MAAM,aAAa,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;oBACzC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;oBACpC,MAAM,cAAc,GACnB,OACA,EAAE,SAAS,CAAC;oBACb,MAAM,eAAe,GAAwB,GAAG,CAAC;oBACjD,MAAM,aAAa,GAClB,CAAC,cAAc;wBACf,CAAC,eAAe;wBAChB,cAAc,CAAC,QAAQ,IAAI,eAAe,CAAC,QAAQ,CAAC;oBAErD,IAAI,aAAa,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;wBACvC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,OAAiB,CAAC,CAAC;wBAC5C,IAAI,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;wBAC3B,YAAY,GAAG,IAAI,CAAC;oBACrB,CAAC;oBAED,IAAI,GAAG,EAAE,CAAC;wBACT,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,IAAc,EAAE,GAAG,CAAC,CAAC;wBAC3C,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;oBAClC,CAAC;oBACD,IAAI,IAAI,IAAI,IAAI;wBAAE,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBACtC,SAAS;gBACV,CAAC;gBAED,IAAI,IAAI,IAAI,IAAI,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;oBAAE,SAAS;gBAClD,IAAI,IAAI,IAAI,IAAI;oBAAE,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAEtC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtB,IAAI,GAAG,EAAE,CAAC;oBACT,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,IAAc,EAAE,GAAG,CAAC,CAAC;oBAC3C,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACxD,CAAC;YACF,CAAC;QACF,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;YACzC,eAAe,CAAC,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;YACpE,GAAG,CAAC,2BAA2B,CAAC,CAAC;YACjC,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC;QACjC,CAAC;QAED,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO;YAClC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC;YACpC,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,UAAU,CAAC,CAAC;QAE5B,GAAG,CAAC,mBAAmB,EAAE;YACxB,UAAU,EAAE,IAAI,CAAC,MAAM;YACvB,WAAW,EAAE,UAAU,CAAC,MAAM;YAC9B,cAAc,EAAE,QAAQ,CAAC,MAAM;SAC/B,CAAC,CAAC;QACH,SAAS,CAAC,QAAQ,CAAC,CAAC;QAEpB,eAAe,CAAC,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QACpE,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC;IACjC,CAAC,CAAC;IAEF,MAAM,eAAe,GAAG,KAAK,EAC5B,SAAwB,EACxB,CAAS,EACU,EAAE;QACrB,MAAM,OAAO,GAA0C,EAAE,CAAC;QAC1D,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;YAC7B,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE;gBAAE,SAAS;YAClC,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACzC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC1D,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBAClB,GAAG,CAAC,aAAa,IAAI,KAAK,CAAC,MAAM,CAAC;gBAClC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;YACrC,CAAC;QACF,CAAC;QACD,OAAO,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC,CAAC;IAEF;;6EAE4E;IAE5E,MAAM,QAAQ,GAAG,KAAK,EACrB,IAAY,SAAS,EACrB,IAA0B,EACP,EAAE;QACrB,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC;QACvC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;YACvB,GAAG,CAAC,+BAA+B,EAAE;gBACpC,MAAM,EAAE,SAAS,CAAC,MAAM;gBACxB,eAAe,EAAE,eAAe,CAAC,OAAO;aACxC,CAAC,CAAC;YACH,OAAO,KAAK,CAAC;QACd,CAAC;QACD,IAAI,eAAe,CAAC,OAAO,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;YAC7C,GAAG,CAAC,sCAAsC,CAAC,CAAC;YAC5C,OAAO,KAAK,CAAC;QACd,CAAC;aAAM,IAAI,IAAI,EAAE,KAAK,EAAE,CAAC;YACxB,eAAe,CAAC,OAAO,GAAG,KAAK,CAAC;QACjC,CAAC;QAED,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,IAAI,CAAC;YACJ,gDAAgD;YAChD,IAAI,UAAU,EAAE,EAAE,CAAC;gBAClB;;;;;;;;;;;;;;;;;;;;;;oBAsBgB;gBAChB,UAAU,EAAE,CAAC;YACd,CAAC;YAED,OAAO,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,IAAI,CAAC,CAAC,CAAC,YAAY,WAAW,CAAC;gBAAE,MAAM,CAAC,CAAC;YACzC,OAAO,KAAK,CAAC;QACd,CAAC;gBAAS,CAAC;YACV,YAAY,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACF,CAAC,CAAC;IAEF,wDAAwD;IACxD,SAAS,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACtB,OAAO;QACR,CAAC;QAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAuCW;QAEX,uDAAuD;IACxD,CAAC,EAAE;QACF,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QACvD,OAAO,CAAC,OAAO;QACf,OAAO,CAAC,KAAK;QACb,OAAO,CAAC,OAAO;QACf,OAAO,CAAC,OAAO;KACf,CAAC,CAAC;IAEH,wFAAwF;IACxF,OAAO;QACN,KAAK,EAAE,GAAG;QACV,QAAQ;QACR,SAAS;QACT,KAAK,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,OAAO;QACpC,EAAE;KACF,CAAC;AACH,CAAC,CAAC"}
1
+ {"version":3,"file":"useQuery.js","sourceRoot":"","sources":["../../src/useQuery.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@peerbit/document-react",
3
- "version": "0.1.4",
3
+ "version": "0.3.0",
4
4
  "description": "React hooks for @peerbit/document",
5
5
  "sideEffects": false,
6
6
  "type": "module",
@@ -42,9 +42,9 @@
42
42
  },
43
43
  "dependencies": {
44
44
  "uuid": "^10.0.0",
45
+ "@peerbit/document": "11.1.0",
45
46
  "@peerbit/indexer-interface": "2.1.0",
46
- "@peerbit/document": "10.1.3",
47
- "@peerbit/react": "0.0.37",
47
+ "@peerbit/react": "0.0.39",
48
48
  "@peerbit/logger": "2.0.0"
49
49
  },
50
50
  "devDependencies": {
@@ -59,16 +59,15 @@
59
59
  "happy-dom": "^20.0.10",
60
60
  "vitest": "^4.0.12",
61
61
  "@peerbit/blocks-interface": "1.5.0",
62
- "@peerbit/program": "5.4.0",
63
- "peerbit": "4.4.2"
62
+ "@peerbit/program": "5.4.2",
63
+ "peerbit": "4.4.4"
64
64
  },
65
65
  "author": "dao.xyz",
66
66
  "license": "MIT",
67
67
  "scripts": {
68
68
  "clean": "aegir clean",
69
69
  "build": "aegir build --no-bundle",
70
- "test": "vitest run --project node && vitest run --project dom",
71
- "test:node": "vitest run --project node",
70
+ "test": "pnpm run test:dom",
72
71
  "test:dom": "vitest run --project dom",
73
72
  "lint": "aegir lint"
74
73
  }
package/src/useQuery.tsx CHANGED
@@ -3,8 +3,10 @@ import type {
3
3
  AbstractSearchRequest,
4
4
  AbstractSearchResult,
5
5
  Context,
6
+ LateResultsEvent,
6
7
  RemoteQueryOptions,
7
8
  ResultsIterator,
9
+ UpdateReason,
8
10
  WithContext,
9
11
  } from "@peerbit/document";
10
12
  import type { UpdateOptions, WithIndexedContext } from "@peerbit/document";
@@ -14,6 +16,31 @@ import { v4 as uuid } from "uuid";
14
16
 
15
17
  type QueryOptions = { query: QueryLike; id?: string };
16
18
 
19
+ type LoadMoreFn = (
20
+ n?: number,
21
+ opts?: { force?: boolean; reason?: MergeReason },
22
+ ) => Promise<boolean>;
23
+
24
+ type MergeReason = UpdateReason | "batch" | "late";
25
+
26
+ type ApplyResultsHandler<Item> = (
27
+ prev: Item[],
28
+ change: { items: Item[]; reason: MergeReason },
29
+ helpers: { defaultMerge: () => Item[]; loadMore: LoadMoreFn },
30
+ ) => Item[] | Promise<Item[]>;
31
+
32
+ type LateResultsHandler<Item> = (
33
+ evt: LateResultsEvent,
34
+ helpers: {
35
+ loadMore: LoadMoreFn;
36
+ inject: (
37
+ items: Item | Item[],
38
+ opts?: { position?: "start" | "end" | number },
39
+ ) => void;
40
+ items: () => Item[];
41
+ },
42
+ ) => void | Promise<void>;
43
+
17
44
  /* ────────────── helper types ────────────── */
18
45
  export type QueryLike = {
19
46
  /** Mongo-style selector or array of selectors */
@@ -59,6 +86,8 @@ export type UseQuerySharedOptions<
59
86
  remote?:
60
87
  | boolean
61
88
  | RemoteQueryOptions<AbstractSearchRequest, AbstractSearchResult, any>;
89
+ onLateResults?: LateResultsHandler<RT>;
90
+ applyResults?: ApplyResultsHandler<RT>;
62
91
  } & QueryOptions;
63
92
 
64
93
  /* ────────────────────────── Main Hook ────────────────────────── */
@@ -106,6 +135,7 @@ export const useQuery = <
106
135
  const emptyResultsRef = useRef(false);
107
136
  const closeControllerRef = useRef<AbortController | null>(null);
108
137
  const waitedOnceRef = useRef(false);
138
+ const loadMoreRef = useRef<LoadMoreFn | undefined>(undefined);
109
139
 
110
140
  /* keep an id mostly for debugging – mirrors original behaviour */
111
141
  const [id, setId] = useState<string | undefined>(options.id);
@@ -127,6 +157,10 @@ export const useQuery = <
127
157
  setAll(combined);
128
158
  };
129
159
 
160
+ const mutateAll = (fn: (prev: Item[]) => Item[]) => {
161
+ updateAll(fn(allRef.current));
162
+ };
163
+
130
164
  const reset = () => {
131
165
  iteratorRefs.current?.forEach(({ iterator }) => iterator.close());
132
166
  iteratorRefs.current = [];
@@ -143,6 +177,64 @@ export const useQuery = <
143
177
  log("Iterators reset");
144
178
  };
145
179
 
180
+ const resolveItemKey = (item: Item): string | null => {
181
+ const cached = itemIdRef.current.get(item as object);
182
+ if (cached) return cached;
183
+ for (const { db } of iteratorRefs.current) {
184
+ const id = db.index.resolveId(
185
+ item as WithContext<I> | WithIndexedContext<T, I>,
186
+ );
187
+ return idToKey(id.primitive); // return the first result
188
+ }
189
+ return null;
190
+ };
191
+
192
+ const injectItems = (
193
+ incoming: Item | Item[],
194
+ opts?: { position?: "start" | "end" | number },
195
+ ) => {
196
+ const arr = (Array.isArray(incoming) ? incoming : [incoming]).filter(
197
+ Boolean,
198
+ ) as Item[];
199
+ if (!arr.length) return;
200
+ mutateAll((prev) => {
201
+ const working = [...prev];
202
+ const keyIndex = new Map<string, number>();
203
+ working.forEach((item, idx) => {
204
+ const key = resolveItemKey(item);
205
+ if (key) keyIndex.set(key, idx);
206
+ });
207
+
208
+ for (const item of arr) {
209
+ const key = resolveItemKey(item);
210
+ if (key && keyIndex.has(key)) {
211
+ const idx = keyIndex.get(key)!;
212
+ working.splice(idx, 1);
213
+ }
214
+ }
215
+
216
+ let at = 0;
217
+ if (opts?.position === "end") {
218
+ at = working.length;
219
+ } else if (
220
+ typeof opts?.position === "number" &&
221
+ Number.isFinite(opts.position)
222
+ ) {
223
+ at = Math.max(0, Math.min(working.length, opts.position));
224
+ }
225
+
226
+ working.splice(at, 0, ...arr);
227
+ arr.forEach((item, offset) => {
228
+ const key = resolveItemKey(item);
229
+ if (key) {
230
+ itemIdRef.current.set(item as object, key);
231
+ keyIndex.set(key, at + offset);
232
+ }
233
+ });
234
+ return working;
235
+ });
236
+ };
237
+
146
238
  /* ────────── rebuild iterators when db list / query etc. change ────────── */
147
239
  useEffect(() => {
148
240
  /* derive canonical list of open DBs */
@@ -158,13 +250,34 @@ export const useQuery = <
158
250
 
159
251
  reset();
160
252
  const abortSignal = closeControllerRef.current?.signal;
161
- const onMissedResults = (evt: { amount: number }) => {
162
- console.error("Not effective yet: missed results", evt);
163
- /* if (allRef.current.length > 0 || typeof options.remote !== "object" || !options.updates) {
164
- return;
165
- }
166
- console.log("Missed results, loading more", evt.amount);
167
- loadMore(evt.amount); */
253
+ const resolveRemoteOptions = () => {
254
+ if (!options.remote) return undefined;
255
+ if (typeof options.remote === "object") {
256
+ return {
257
+ ...options.remote,
258
+ wait: {
259
+ ...options.remote.wait,
260
+ timeout: options.remote.wait?.timeout ?? 5000,
261
+ },
262
+ };
263
+ }
264
+ return {};
265
+ };
266
+ const onMissedResults = (evt: LateResultsEvent) => {
267
+ log("Late results", evt);
268
+ const loadMoreHelper: LoadMoreFn = (...args) =>
269
+ loadMoreRef.current
270
+ ? loadMoreRef.current(...args)
271
+ : Promise.resolve(false);
272
+ const maybeUser = options.onLateResults?.(evt, {
273
+ loadMore: loadMoreHelper,
274
+ inject: injectItems,
275
+ items: () => allRef.current,
276
+ });
277
+ if (!maybeUser) {
278
+ console.error("Late results", evt);
279
+ }
280
+ return maybeUser;
168
281
  };
169
282
  let draining = false;
170
283
  const scheduleDrain = (
@@ -189,24 +302,8 @@ export const useQuery = <
189
302
  const iterator = db.index.iterate(query ?? {}, {
190
303
  closePolicy: "manual",
191
304
  local: options.local ?? true,
192
- remote: options.remote
193
- ? {
194
- ...(typeof options?.remote === "object"
195
- ? {
196
- ...options.remote,
197
- onLateResults: onMissedResults,
198
- wait: {
199
- ...options?.remote?.wait,
200
- timeout: options?.remote?.wait?.timeout ?? 5000,
201
- },
202
- }
203
- : options?.remote
204
- ? {
205
- onLateResults: onMissedResults,
206
- }
207
- : undefined),
208
- }
209
- : undefined,
305
+ remote: resolveRemoteOptions(),
306
+ onLateResults: onMissedResults,
210
307
  resolve,
211
308
  signal: abortSignal,
212
309
  updates: {
@@ -239,9 +336,11 @@ export const useQuery = <
239
336
  props.reason === "push"
240
337
  ) {
241
338
  if (!currentRef) return;
242
- handleBatch(iteratorRefs.current, [
243
- { ref: currentRef, items: batch as Item[] },
244
- ]);
339
+ handleBatch(
340
+ iteratorRefs.current,
341
+ [{ ref: currentRef, items: batch as Item[] }],
342
+ props.reason,
343
+ );
245
344
  }
246
345
  },
247
346
  },
@@ -300,6 +399,7 @@ export const useQuery = <
300
399
  const handleBatch = async (
301
400
  iterators: IteratorRef[],
302
401
  batches: { ref: IteratorRef; items: Item[] }[],
402
+ reason: MergeReason = "batch",
303
403
  ): Promise<boolean> => {
304
404
  if (!iterators.length) {
305
405
  log("No iterators in handleBatch");
@@ -400,16 +500,42 @@ export const useQuery = <
400
500
  return !emptyResultsRef.current;
401
501
  }
402
502
 
403
- const combined = reverseRef.current
404
- ? [...freshItems.reverse(), ...next]
405
- : [...next, ...freshItems];
503
+ let combinedDefault: Item[];
504
+ if (reverseRef.current) {
505
+ freshItems.reverse();
506
+ freshItems.push(...next);
507
+ combinedDefault = freshItems;
508
+ } else {
509
+ next.push(...freshItems);
510
+ combinedDefault = next;
511
+ }
512
+
513
+ const defaultMerge = () => combinedDefault;
514
+ const incoming = freshItems.length
515
+ ? freshItems
516
+ : processed.flatMap((p) => p.items);
517
+ const loadMoreHelper: LoadMoreFn = (...args) =>
518
+ loadMoreRef.current
519
+ ? loadMoreRef.current(...args)
520
+ : Promise.resolve(false);
521
+ const mergedCandidate = options.applyResults
522
+ ? await options.applyResults(
523
+ allRef.current,
524
+ { items: incoming, reason },
525
+ {
526
+ defaultMerge,
527
+ loadMore: loadMoreHelper,
528
+ },
529
+ )
530
+ : undefined;
531
+ const merged = mergedCandidate ?? combinedDefault;
406
532
 
407
533
  log("Updating all with", {
408
534
  prevLength: prev.length,
409
535
  freshLength: freshItems.length,
410
- combinedLength: combined.length,
536
+ combinedLength: merged.length,
411
537
  });
412
- updateAll(combined);
538
+ updateAll(merged);
413
539
 
414
540
  emptyResultsRef.current = iterators.every((i) => i.iterator.done());
415
541
  return !emptyResultsRef.current;
@@ -418,6 +544,7 @@ export const useQuery = <
418
544
  const drainRoundRobin = async (
419
545
  iterators: IteratorRef[],
420
546
  n: number,
547
+ reason: MergeReason = "batch",
421
548
  ): Promise<boolean> => {
422
549
  const batches: { ref: IteratorRef; items: Item[] }[] = [];
423
550
  for (const ref of iterators) {
@@ -429,16 +556,12 @@ export const useQuery = <
429
556
  batches.push({ ref, items: batch });
430
557
  }
431
558
  }
432
- return handleBatch(iterators, batches);
559
+ return handleBatch(iterators, batches, reason);
433
560
  };
434
561
 
435
- /* maybe make the rule that if results are empty and we get results from joining
436
- set the results to the joining results
437
- when results are not empty use onMerge option to merge the results ? */
438
-
439
562
  const loadMore = async (
440
563
  n: number = batchSize,
441
- opts?: { force?: boolean },
564
+ opts?: { force?: boolean; reason?: MergeReason },
442
565
  ): Promise<boolean> => {
443
566
  const iterators = iteratorRefs.current;
444
567
  if (!iterators.length) {
@@ -481,11 +604,11 @@ export const useQuery = <
481
604
  }
482
605
  })
483
606
  );
484
- }*/
607
+ }*/
485
608
  markWaited();
486
609
  }
487
610
 
488
- return drainRoundRobin(iterators, n);
611
+ return drainRoundRobin(iterators, n, opts?.reason ?? "batch");
489
612
  } catch (e) {
490
613
  if (!(e instanceof ClosedError)) throw e;
491
614
  return false;
@@ -494,53 +617,14 @@ export const useQuery = <
494
617
  }
495
618
  };
496
619
 
620
+ loadMoreRef.current = loadMore;
621
+
497
622
  /* ────────────── live-merge listeners ────────────── */
498
623
  useEffect(() => {
499
624
  if (!options.updates) {
500
625
  return;
501
626
  }
502
627
 
503
- /* const listeners = iteratorRefs.current.map(({ db, id: itId }) => {
504
- const mergeFn =
505
- typeof options.onChange?.merge === "function"
506
- ? options.onChange.merge
507
- : (c: DocumentsChange<T, I>) => c;
508
-
509
- const handler = async (e: CustomEvent<DocumentsChange<T, I>>) => {
510
- log("Merge change", e.detail, "it", itId);
511
- const filtered = await mergeFn(e.detail);
512
- if (
513
- !filtered ||
514
- (!filtered.added.length && !filtered.removed.length)
515
- )
516
- return;
517
-
518
- let merged: Item[];
519
- if (options.onChange?.update) {
520
- merged = await options.onChange.update(
521
- allRef.current,
522
- filtered
523
- );
524
- } else {
525
- merged = await db.index.updateResults(
526
- allRef.current as WithContext<RT>[],
527
- filtered,
528
- options.query || {},
529
- options.resolve ?? true
530
- );
531
- }
532
- updateAll(options.reverse ? merged.reverse() : merged);
533
- };
534
- db.events.addEventListener("change", handler);
535
- return { db, handler };
536
- });
537
-
538
- return () => {
539
- listeners.forEach(({ db, handler }) =>
540
- db.events.removeEventListener("change", handler)
541
- );
542
- }; */
543
-
544
628
  // eslint-disable-next-line react-hooks/exhaustive-deps
545
629
  }, [
546
630
  iteratorRefs.current.map((r) => r.db.address).join("|"),