@ttt-productions/query-core 0.3.7 → 0.3.9

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.
@@ -8,4 +8,5 @@ export { useFirestoreInfinite, flattenInfiniteData, getInfiniteDataCount } from
8
8
  export { useFirestorePaginated } from './use-firestore-paginated';
9
9
  export type { UseFirestorePaginatedResult } from './use-firestore-paginated';
10
10
  export { useFirestoreSet, useFirestoreUpdate, useFirestoreDelete, useFirestoreBatch, } from './use-firestore-mutations';
11
+ export { useBatchFirestoreDocs, type BatchFirestoreDocsOptions, type BatchFirestoreDocsResult, } from './useBatchFirestoreDocs';
11
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/firestore/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC9D,YAAY,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAGxD,YAAY,EACV,MAAM,EACN,oBAAoB,EACpB,mBAAmB,EACnB,0BAA0B,EAC1B,wBAAwB,EACxB,yBAAyB,EACzB,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAGpC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,YAAY,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAG7E,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/firestore/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC9D,YAAY,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAGxD,YAAY,EACV,MAAM,EACN,oBAAoB,EACpB,mBAAmB,EACnB,0BAA0B,EAC1B,wBAAwB,EACxB,yBAAyB,EACzB,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAGpC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,YAAY,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAG7E,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,qBAAqB,EACrB,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,GAC9B,MAAM,yBAAyB,CAAC"}
@@ -8,4 +8,5 @@ export { useFirestoreInfinite, flattenInfiniteData, getInfiniteDataCount } from
8
8
  export { useFirestorePaginated } from './use-firestore-paginated';
9
9
  // Mutation Hooks
10
10
  export { useFirestoreSet, useFirestoreUpdate, useFirestoreDelete, useFirestoreBatch, } from './use-firestore-mutations';
11
+ export { useBatchFirestoreDocs, } from './useBatchFirestoreDocs';
11
12
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/firestore/index.ts"],"names":[],"mappings":"AAAA,qBAAqB;AACrB,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAiB9D,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEpC,cAAc;AACd,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAGlE,iBAAiB;AACjB,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/firestore/index.ts"],"names":[],"mappings":"AAAA,qBAAqB;AACrB,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAiB9D,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEpC,cAAc;AACd,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAGlE,iBAAiB;AACjB,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,qBAAqB,GAGtB,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,79 @@
1
+ import { type Firestore } from 'firebase/firestore';
2
+ export type BatchFirestoreDocsOptions = {
3
+ /**
4
+ * Firestore instance to use for queries
5
+ */
6
+ db: Firestore;
7
+ /**
8
+ * Full collection path (e.g., 'publicUsers', 'projects/public')
9
+ */
10
+ collectionPath: string;
11
+ /**
12
+ * Array of document IDs to fetch
13
+ */
14
+ ids: string[];
15
+ /**
16
+ * Query key prefix for individual document cache entries
17
+ * Each document will be cached as [queryKeyPrefix, docId]
18
+ * @example 'publicUser' -> ['publicUser', 'user123']
19
+ */
20
+ queryKeyPrefix: string;
21
+ /**
22
+ * Time in milliseconds to consider data fresh (default: 30 minutes)
23
+ */
24
+ staleTime?: number;
25
+ /**
26
+ * Time in milliseconds to keep unused data in cache (default: 1 hour)
27
+ */
28
+ gcTime?: number;
29
+ /**
30
+ * Whether queries should be enabled (default: true)
31
+ */
32
+ enabled?: boolean;
33
+ };
34
+ export type BatchFirestoreDocsResult<T> = {
35
+ /**
36
+ * Map of docId -> document data
37
+ * Only includes documents that exist in Firestore
38
+ */
39
+ data: Record<string, T>;
40
+ /**
41
+ * True if any batch queries are still loading
42
+ */
43
+ isLoading: boolean;
44
+ /**
45
+ * True if any batch queries have errored
46
+ */
47
+ isError: boolean;
48
+ /**
49
+ * First error from batch queries, if any
50
+ */
51
+ error: Error | null;
52
+ /**
53
+ * Refetch all documents (even cached ones)
54
+ */
55
+ refetch: () => Promise<void>;
56
+ };
57
+ /**
58
+ * Efficiently batch fetch Firestore documents with individual caching
59
+ *
60
+ * Features:
61
+ * - Each document is cached individually for maximum reuse
62
+ * - Only fetches documents that are missing or stale
63
+ * - Respects Firestore's 30-item limit for 'in' queries
64
+ * - Returns combined result as Record<docId, data>
65
+ *
66
+ * @example
67
+ * ```typescript
68
+ * const { data: users, isLoading } = useBatchFirestoreDocs<PublicUser>({
69
+ * db,
70
+ * collectionPath: 'publicUsers',
71
+ * ids: ['user1', 'user2', 'user3'],
72
+ * queryKeyPrefix: 'publicUser',
73
+ * staleTime: 30 * 60 * 1000, // 30 minutes
74
+ * });
75
+ * // users = { user1: {...}, user2: {...}, user3: {...} }
76
+ * ```
77
+ */
78
+ export declare function useBatchFirestoreDocs<T extends Record<string, any>>({ db, collectionPath, ids, queryKeyPrefix, staleTime, gcTime, enabled, }: BatchFirestoreDocsOptions): BatchFirestoreDocsResult<T>;
79
+ //# sourceMappingURL=useBatchFirestoreDocs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useBatchFirestoreDocs.d.ts","sourceRoot":"","sources":["../../src/firestore/useBatchFirestoreDocs.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiD,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAInG,MAAM,MAAM,yBAAyB,GAAG;IACtC;;OAEG;IACH,EAAE,EAAE,SAAS,CAAC;IAEd;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,GAAG,EAAE,MAAM,EAAE,CAAC;IAEd;;;;OAIG;IACH,cAAc,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,wBAAwB,CAAC,CAAC,IAAI;IACxC;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAExB;;OAEG;IACH,SAAS,EAAE,OAAO,CAAC;IAEnB;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAEpB;;OAEG;IACH,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EACnE,EAAE,EACF,cAAc,EACd,GAAG,EACH,cAAc,EACd,SAA0B,EAC1B,MAAuB,EACvB,OAAc,GACf,EAAE,yBAAyB,GAAG,wBAAwB,CAAC,CAAC,CAAC,CAoHzD"}
@@ -0,0 +1,118 @@
1
+ import { useMemo } from 'react';
2
+ import { useQueries, useQueryClient } from '@tanstack/react-query';
3
+ import { collection, getDocs, query, where, documentId } from 'firebase/firestore';
4
+ const FIRESTORE_IN_LIMIT = 30;
5
+ /**
6
+ * Efficiently batch fetch Firestore documents with individual caching
7
+ *
8
+ * Features:
9
+ * - Each document is cached individually for maximum reuse
10
+ * - Only fetches documents that are missing or stale
11
+ * - Respects Firestore's 30-item limit for 'in' queries
12
+ * - Returns combined result as Record<docId, data>
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * const { data: users, isLoading } = useBatchFirestoreDocs<PublicUser>({
17
+ * db,
18
+ * collectionPath: 'publicUsers',
19
+ * ids: ['user1', 'user2', 'user3'],
20
+ * queryKeyPrefix: 'publicUser',
21
+ * staleTime: 30 * 60 * 1000, // 30 minutes
22
+ * });
23
+ * // users = { user1: {...}, user2: {...}, user3: {...} }
24
+ * ```
25
+ */
26
+ export function useBatchFirestoreDocs({ db, collectionPath, ids, queryKeyPrefix, staleTime = 30 * 60 * 1000, gcTime = 60 * 60 * 1000, enabled = true, }) {
27
+ const queryClient = useQueryClient();
28
+ // Deduplicate and filter out empty IDs
29
+ const uniqueIds = useMemo(() => {
30
+ return Array.from(new Set(ids.filter(Boolean)));
31
+ }, [ids]);
32
+ // Separate IDs into cached/fresh vs needs-fetch
33
+ const { cachedIds, fetchIds } = useMemo(() => {
34
+ if (!enabled) {
35
+ return { cachedIds: [], fetchIds: [] };
36
+ }
37
+ const cached = [];
38
+ const needsFetch = [];
39
+ for (const id of uniqueIds) {
40
+ const queryKey = [queryKeyPrefix, id];
41
+ const state = queryClient.getQueryState(queryKey);
42
+ // Check if data exists and is still fresh
43
+ if (state?.data && state.dataUpdatedAt && Date.now() - state.dataUpdatedAt < staleTime) {
44
+ cached.push(id);
45
+ }
46
+ else {
47
+ needsFetch.push(id);
48
+ }
49
+ }
50
+ return { cachedIds: cached, fetchIds: needsFetch };
51
+ }, [uniqueIds, queryKeyPrefix, queryClient, staleTime, enabled]);
52
+ // Batch the fetchIds into groups of 30
53
+ const batches = useMemo(() => {
54
+ const result = [];
55
+ for (let i = 0; i < fetchIds.length; i += FIRESTORE_IN_LIMIT) {
56
+ result.push(fetchIds.slice(i, i + FIRESTORE_IN_LIMIT));
57
+ }
58
+ return result;
59
+ }, [fetchIds]);
60
+ // Fetch each batch and populate individual cache entries
61
+ const batchQueries = useQueries({
62
+ queries: batches.map((batch, batchIndex) => ({
63
+ queryKey: [queryKeyPrefix, 'batch', batchIndex, ...batch.sort()],
64
+ queryFn: async () => {
65
+ if (batch.length === 0)
66
+ return [];
67
+ const q = query(collection(db, collectionPath), where(documentId(), 'in', batch));
68
+ const snapshot = await getDocs(q);
69
+ const docs = [];
70
+ // Process each document and update individual cache entries
71
+ snapshot.forEach((doc) => {
72
+ const data = { id: doc.id, ...doc.data() };
73
+ docs.push(data);
74
+ // Populate individual cache entry
75
+ queryClient.setQueryData([queryKeyPrefix, doc.id], data, { updatedAt: Date.now() });
76
+ });
77
+ return docs;
78
+ },
79
+ staleTime,
80
+ gcTime,
81
+ enabled: enabled && batch.length > 0,
82
+ })),
83
+ });
84
+ // Combine results
85
+ const isLoading = batchQueries.some(q => q.isLoading);
86
+ const isError = batchQueries.some(q => q.isError);
87
+ const error = batchQueries.find(q => q.error)?.error || null;
88
+ const data = useMemo(() => {
89
+ const combined = {};
90
+ // Add cached data
91
+ for (const id of cachedIds) {
92
+ const cached = queryClient.getQueryData([queryKeyPrefix, id]);
93
+ if (cached) {
94
+ combined[id] = cached;
95
+ }
96
+ }
97
+ // Add freshly fetched data
98
+ for (const batchQuery of batchQueries) {
99
+ if (batchQuery.data) {
100
+ for (const doc of batchQuery.data) {
101
+ combined[doc.id] = doc;
102
+ }
103
+ }
104
+ }
105
+ return combined;
106
+ }, [cachedIds, batchQueries, queryClient, queryKeyPrefix]);
107
+ const refetch = async () => {
108
+ await Promise.all(batchQueries.map(q => q.refetch()));
109
+ };
110
+ return {
111
+ data,
112
+ isLoading,
113
+ isError,
114
+ error: error,
115
+ refetch,
116
+ };
117
+ }
118
+ //# sourceMappingURL=useBatchFirestoreDocs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useBatchFirestoreDocs.js","sourceRoot":"","sources":["../../src/firestore/useBatchFirestoreDocs.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -7,4 +7,6 @@ export { TTTQueryProvider } from './provider';
7
7
  export type { TTTQueryProviderProps } from './provider';
8
8
  export { FirestoreProvider, useFirestoreDb, useFirestoreDoc, useFirestoreCollection, useFirestoreInfinite, useFirestorePaginated, useFirestoreSet, useFirestoreUpdate, useFirestoreDelete, useFirestoreBatch, flattenInfiniteData, getInfiniteDataCount, docWithId, } from './firestore';
9
9
  export type { FirestoreProviderProps, WithId, FirestoreBaseOptions, FirestoreDocOptions, FirestoreCollectionOptions, FirestoreInfiniteOptions, FirestorePaginatedOptions, InfinitePage, PaginatedResult, MutationOperation, FirestoreMutationOptions, FirestoreBatchOptions, } from './firestore';
10
+ export { useFirestoreSearch, SEARCH_CONFIGS, } from './search';
11
+ export type { FirestoreSearchConfig, FirestoreSearchOptions, } from './search';
10
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,YAAY,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAC;AAGlE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAC9C,YAAY,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAGvC,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGtF,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,YAAY,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAGxD,OAAO,EAEL,iBAAiB,EACjB,cAAc,EAEd,eAAe,EACf,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,EAErB,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EAEjB,mBAAmB,EACnB,oBAAoB,EACpB,SAAS,GACV,MAAM,aAAa,CAAC;AAErB,YAAY,EAEV,sBAAsB,EAEtB,MAAM,EACN,oBAAoB,EACpB,mBAAmB,EACnB,0BAA0B,EAC1B,wBAAwB,EACxB,yBAAyB,EACzB,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,YAAY,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAC;AAGlE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAC9C,YAAY,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAGvC,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGtF,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,YAAY,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAGxD,OAAO,EAEL,iBAAiB,EACjB,cAAc,EAEd,eAAe,EACf,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,EAErB,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EAEjB,mBAAmB,EACnB,oBAAoB,EACpB,SAAS,GACV,MAAM,aAAa,CAAC;AAErB,YAAY,EAEV,sBAAsB,EAEtB,MAAM,EACN,oBAAoB,EACpB,mBAAmB,EACnB,0BAA0B,EAC1B,wBAAwB,EACxB,yBAAyB,EACzB,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,kBAAkB,EAClB,cAAc,GACf,MAAM,UAAU,CAAC;AAElB,YAAY,EACV,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,UAAU,CAAC"}
package/dist/index.js CHANGED
@@ -16,4 +16,6 @@ useFirestoreDoc, useFirestoreCollection, useFirestoreInfinite, useFirestorePagin
16
16
  useFirestoreSet, useFirestoreUpdate, useFirestoreDelete, useFirestoreBatch,
17
17
  // Helpers
18
18
  flattenInfiniteData, getInfiniteDataCount, docWithId, } from './firestore';
19
+ // Search Integration
20
+ export { useFirestoreSearch, SEARCH_CONFIGS, } from './search';
19
21
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAGtD,aAAa;AACb,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAG9C,gBAAgB;AAChB,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEtF,WAAW;AACX,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAG9C,wBAAwB;AACxB,OAAO;AACL,WAAW;AACX,iBAAiB,EACjB,cAAc;AACd,cAAc;AACd,eAAe,EACf,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB;AACrB,iBAAiB;AACjB,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB;AACjB,UAAU;AACV,mBAAmB,EACnB,oBAAoB,EACpB,SAAS,GACV,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAGtD,aAAa;AACb,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAG9C,gBAAgB;AAChB,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEtF,WAAW;AACX,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAG9C,wBAAwB;AACxB,OAAO;AACL,WAAW;AACX,iBAAiB,EACjB,cAAc;AACd,cAAc;AACd,eAAe,EACf,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB;AACrB,iBAAiB;AACjB,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB;AACjB,UAAU;AACV,mBAAmB,EACnB,oBAAoB,EACpB,SAAS,GACV,MAAM,aAAa,CAAC;AAmBrB,qBAAqB;AACrB,OAAO,EACL,kBAAkB,EAClB,cAAc,GACf,MAAM,UAAU,CAAC"}
package/dist/keys.d.ts CHANGED
@@ -126,6 +126,7 @@ export declare const keys: {
126
126
  readonly list: (params?: Record<string, unknown>) => QueryKey;
127
127
  readonly custom: (...parts: KeyPart[]) => QueryKey;
128
128
  };
129
+ readonly custom: (...parts: KeyPart[]) => QueryKey;
129
130
  };
130
131
  /**
131
132
  * Utility for apps that want to define their own scoped key sets
@@ -1 +1 @@
1
- {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,KAAK,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEtF,MAAM,MAAM,QAAQ,GAAG,SAAS,OAAO,EAAE,CAAC;AAO1C,eAAO,MAAM,IAAI;;;8BAGA,MAAM;iCACH,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oCACpB,OAAO,EAAE;;;;8BAIf,MAAM;iCACH,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oCACpB,OAAO,EAAE;;;;8BAIf,MAAM;iCACH,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oCACpB,OAAO,EAAE;;;;8BAIf,MAAM;iCACH,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oCACpB,OAAO,EAAE;;;;8BAIf,MAAM;iCACH,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oCACpB,OAAO,EAAE;;;;8BAIf,MAAM;iCACH,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oCACpB,OAAO,EAAE;;;;8BAIf,MAAM;iCACH,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oCACpB,OAAO,EAAE;;;;8BAIf,MAAM;iCACH,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oCACpB,OAAO,EAAE;;;;8BAIf,MAAM;iCACH,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oCACpB,OAAO,EAAE;;;;8BAIf,MAAM;iCACH,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oCACpB,OAAO,EAAE;;;;8BAIf,MAAM;iCACH,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oCACpB,OAAO,EAAE;;;;8BAIf,MAAM;iCACH,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oCACpB,OAAO,EAAE;;;;8BAIf,MAAM;iCACH,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oCACpB,OAAO,EAAE;;;;8BAIf,MAAM;iCACH,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oCACpB,OAAO,EAAE;;;;8BAIf,MAAM;iCACH,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oCACpB,OAAO,EAAE;;;;8BAIf,MAAM;iCACH,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oCACpB,OAAO,EAAE;;;;8BAIf,MAAM;iCACH,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oCACpB,OAAO,EAAE;;;;8BAIf,MAAM;iCACH,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oCACpB,OAAO,EAAE;;;;iCAKZ,MAAM;;8BAET,MAAM;iCACH,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oCACpB,OAAO,EAAE;;CAEtB,CAAC;AAEX;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM;;0BAG3B,MAAM;6BACH,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;gCACpB,OAAO,EAAE;EAE/B"}
1
+ {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,KAAK,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEtF,MAAM,MAAM,QAAQ,GAAG,SAAS,OAAO,EAAE,CAAC;AAO1C,eAAO,MAAM,IAAI;;;8BAGA,MAAM;iCACH,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oCACpB,OAAO,EAAE;;;;8BAIf,MAAM;iCACH,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oCACpB,OAAO,EAAE;;;;8BAIf,MAAM;iCACH,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oCACpB,OAAO,EAAE;;;;8BAIf,MAAM;iCACH,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oCACpB,OAAO,EAAE;;;;8BAIf,MAAM;iCACH,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oCACpB,OAAO,EAAE;;;;8BAIf,MAAM;iCACH,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oCACpB,OAAO,EAAE;;;;8BAIf,MAAM;iCACH,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oCACpB,OAAO,EAAE;;;;8BAIf,MAAM;iCACH,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oCACpB,OAAO,EAAE;;;;8BAIf,MAAM;iCACH,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oCACpB,OAAO,EAAE;;;;8BAIf,MAAM;iCACH,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oCACpB,OAAO,EAAE;;;;8BAIf,MAAM;iCACH,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oCACpB,OAAO,EAAE;;;;8BAIf,MAAM;iCACH,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oCACpB,OAAO,EAAE;;;;8BAIf,MAAM;iCACH,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oCACpB,OAAO,EAAE;;;;8BAIf,MAAM;iCACH,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oCACpB,OAAO,EAAE;;;;8BAIf,MAAM;iCACH,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oCACpB,OAAO,EAAE;;;;8BAIf,MAAM;iCACH,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oCACpB,OAAO,EAAE;;;;8BAIf,MAAM;iCACH,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oCACpB,OAAO,EAAE;;;;8BAIf,MAAM;iCACH,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oCACpB,OAAO,EAAE;;;;iCAKZ,MAAM;;8BAET,MAAM;iCACH,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oCACpB,OAAO,EAAE;;gCAEX,OAAO,EAAE;CACpB,CAAC;AAEX;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM;;0BAG3B,MAAM;6BACH,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;gCACpB,OAAO,EAAE;EAE/B"}
package/dist/keys.js CHANGED
@@ -120,6 +120,7 @@ export const keys = {
120
120
  list: (params) => withScope('social', 'list', params),
121
121
  custom: (...parts) => withScope('social', ...parts),
122
122
  },
123
+ custom: (...parts) => withScope('custom', ...parts),
123
124
  };
124
125
  /**
125
126
  * Utility for apps that want to define their own scoped key sets
package/dist/keys.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"keys.js","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"keys.js","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { useFirestoreSearch } from './use-firestore-search';
2
+ export { SEARCH_CONFIGS } from './search-configs';
3
+ export type { FirestoreSearchConfig, FirestoreSearchOptions } from './types';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/search/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { useFirestoreSearch } from './use-firestore-search';
2
+ export { SEARCH_CONFIGS } from './search-configs';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/search/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { FirestoreSearchConfig } from './types';
2
+ /**
3
+ * Preset search configurations for common use cases.
4
+ * These provide standard settings that can be used across applications.
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * const { data } = useFirestoreSearch<User>({
9
+ * ...SEARCH_CONFIGS.Q_USER,
10
+ * queryText: searchValue,
11
+ * });
12
+ * ```
13
+ */
14
+ export declare const SEARCH_CONFIGS: Record<string, FirestoreSearchConfig>;
15
+ //# sourceMappingURL=search-configs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-configs.d.ts","sourceRoot":"","sources":["../../src/search/search-configs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAErD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CA8BvD,CAAC"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Preset search configurations for common use cases.
3
+ * These provide standard settings that can be used across applications.
4
+ *
5
+ * @example
6
+ * ```typescript
7
+ * const { data } = useFirestoreSearch<User>({
8
+ * ...SEARCH_CONFIGS.Q_USER,
9
+ * queryText: searchValue,
10
+ * });
11
+ * ```
12
+ */
13
+ export const SEARCH_CONFIGS = {
14
+ /**
15
+ * Q-Sports user search configuration
16
+ * Searches the 'users' collection by displayName_lowercase field
17
+ */
18
+ Q_USER: {
19
+ collectionPath: 'users',
20
+ searchField: 'displayName_lowercase',
21
+ limit: 5,
22
+ },
23
+ /**
24
+ * TTT Productions user search configuration
25
+ * Searches the 'userProfiles' collection by username field (already lowercase)
26
+ */
27
+ TTT_USER: {
28
+ collectionPath: 'userProfiles',
29
+ searchField: 'username',
30
+ limit: 6,
31
+ },
32
+ /**
33
+ * TTT Productions project search configuration
34
+ * Searches the 'allProjects' collection by workingTitle field (already lowercase)
35
+ */
36
+ TTT_PROJECT: {
37
+ collectionPath: 'allProjects',
38
+ searchField: 'workingTitle',
39
+ limit: 6,
40
+ },
41
+ };
42
+ //# sourceMappingURL=search-configs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-configs.js","sourceRoot":"","sources":["../../src/search/search-configs.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,cAAc,GAA0C;IACnE;;;OAGG;IACH,MAAM,EAAE;QACN,cAAc,EAAE,OAAO;QACvB,WAAW,EAAE,uBAAuB;QACpC,KAAK,EAAE,CAAC;KACT;IAED;;;OAGG;IACH,QAAQ,EAAE;QACR,cAAc,EAAE,cAAc;QAC9B,WAAW,EAAE,UAAU;QACvB,KAAK,EAAE,CAAC;KACT;IAED;;;OAGG;IACH,WAAW,EAAE;QACX,cAAc,EAAE,aAAa;QAC7B,WAAW,EAAE,cAAc;QAC3B,KAAK,EAAE,CAAC;KACT;CACO,CAAC"}
@@ -0,0 +1,36 @@
1
+ import type { DocumentData } from 'firebase/firestore';
2
+ /**
3
+ * Configuration for a Firestore search query
4
+ */
5
+ export interface FirestoreSearchConfig {
6
+ /** Firestore collection path to search */
7
+ collectionPath: string;
8
+ /** Field name to search on (must be indexed and lowercase) */
9
+ searchField: string;
10
+ /** Maximum number of results to return */
11
+ limit: number;
12
+ }
13
+ /**
14
+ * Options for useFirestoreSearch hook
15
+ */
16
+ export interface FirestoreSearchOptions<T extends DocumentData = DocumentData> {
17
+ /** Firestore collection path to search */
18
+ collectionPath: string;
19
+ /** Field name to search on (must be indexed and lowercase) */
20
+ searchField: string;
21
+ /** Search query text */
22
+ queryText: string;
23
+ /** Maximum number of results (default: 5) */
24
+ limit?: number;
25
+ /** Enable/disable the search (default: true) */
26
+ enabled?: boolean;
27
+ /** Transform function to convert raw Firestore data to typed result */
28
+ select?: (data: DocumentData & {
29
+ id: string;
30
+ }) => T;
31
+ /** Debounce delay in milliseconds (default: 300) */
32
+ debounceMs?: number;
33
+ /** React Query stale time (default: 60000ms) */
34
+ staleTime?: number;
35
+ }
36
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/search/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,0CAA0C;IAC1C,cAAc,EAAE,MAAM,CAAC;IACvB,8DAA8D;IAC9D,WAAW,EAAE,MAAM,CAAC;IACpB,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY;IAC3E,0CAA0C;IAC1C,cAAc,EAAE,MAAM,CAAC;IACvB,8DAA8D;IAC9D,WAAW,EAAE,MAAM,CAAC;IACpB,wBAAwB;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gDAAgD;IAChD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,uEAAuE;IACvE,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,KAAK,CAAC,CAAC;IACpD,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/search/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,34 @@
1
+ import { type UseQueryResult } from '@tanstack/react-query';
2
+ import { type DocumentData } from 'firebase/firestore';
3
+ import type { FirestoreSearchOptions } from './types';
4
+ import type { WithId } from '../firestore/types';
5
+ /**
6
+ * Generic Firestore search hook with debouncing and case-insensitive prefix matching.
7
+ * Automatically normalizes search text to lowercase and uses Firestore range queries.
8
+ *
9
+ * Features:
10
+ * - Debounced input (default 300ms)
11
+ * - Case-insensitive search
12
+ * - Minimum 3 character requirement
13
+ * - Prefix matching with '\uf8ff' suffix
14
+ * - Configurable result limit
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * // Using preset config
19
+ * const { data, isLoading } = useFirestoreSearch<UserProfile>({
20
+ * ...SEARCH_CONFIGS.Q_USER,
21
+ * queryText: searchValue,
22
+ * });
23
+ *
24
+ * // Custom search
25
+ * const { data } = useFirestoreSearch<Team>({
26
+ * collectionPath: 'teams',
27
+ * searchField: 'name_lowercase',
28
+ * queryText: searchValue,
29
+ * limit: 10,
30
+ * });
31
+ * ```
32
+ */
33
+ export declare function useFirestoreSearch<T extends DocumentData = DocumentData>({ collectionPath, searchField, queryText, limit, enabled, select, debounceMs, staleTime, }: FirestoreSearchOptions<T>): UseQueryResult<WithId<T>[], Error>;
34
+ //# sourceMappingURL=use-firestore-search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-firestore-search.d.ts","sourceRoot":"","sources":["../../src/search/use-firestore-search.ts"],"names":[],"mappings":"AAGA,OAAO,EAAY,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAOL,KAAK,YAAY,EAElB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAMjD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY,EAAE,EACxE,cAAc,EACd,WAAW,EACX,SAAS,EACT,KAAqB,EACrB,OAAc,EACd,MAAM,EACN,UAAgC,EAChC,SAA8B,GAC/B,EAAE,sBAAsB,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,CAgDhE"}
@@ -0,0 +1,79 @@
1
+ 'use client';
2
+ import { useState, useEffect } from 'react';
3
+ import { useQuery } from '@tanstack/react-query';
4
+ import { collection, getDocs, query, where, orderBy, limit as firestoreLimit, } from 'firebase/firestore';
5
+ import { useFirestoreDb } from '../firestore/context';
6
+ import { keys } from '../keys';
7
+ const DEFAULT_LIMIT = 5;
8
+ const DEFAULT_DEBOUNCE_MS = 300;
9
+ const DEFAULT_STALE_TIME = 60 * 1000; // 1 minute
10
+ /**
11
+ * Generic Firestore search hook with debouncing and case-insensitive prefix matching.
12
+ * Automatically normalizes search text to lowercase and uses Firestore range queries.
13
+ *
14
+ * Features:
15
+ * - Debounced input (default 300ms)
16
+ * - Case-insensitive search
17
+ * - Minimum 3 character requirement
18
+ * - Prefix matching with '\uf8ff' suffix
19
+ * - Configurable result limit
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * // Using preset config
24
+ * const { data, isLoading } = useFirestoreSearch<UserProfile>({
25
+ * ...SEARCH_CONFIGS.Q_USER,
26
+ * queryText: searchValue,
27
+ * });
28
+ *
29
+ * // Custom search
30
+ * const { data } = useFirestoreSearch<Team>({
31
+ * collectionPath: 'teams',
32
+ * searchField: 'name_lowercase',
33
+ * queryText: searchValue,
34
+ * limit: 10,
35
+ * });
36
+ * ```
37
+ */
38
+ export function useFirestoreSearch({ collectionPath, searchField, queryText, limit = DEFAULT_LIMIT, enabled = true, select, debounceMs = DEFAULT_DEBOUNCE_MS, staleTime = DEFAULT_STALE_TIME, }) {
39
+ const db = useFirestoreDb();
40
+ const [debouncedQuery, setDebouncedQuery] = useState(queryText);
41
+ // Debounce the search query
42
+ useEffect(() => {
43
+ const timer = setTimeout(() => {
44
+ setDebouncedQuery(queryText);
45
+ }, debounceMs);
46
+ return () => clearTimeout(timer);
47
+ }, [queryText, debounceMs]);
48
+ // Normalize query text
49
+ const normalizedQuery = debouncedQuery.toLowerCase().trim();
50
+ const shouldSearch = normalizedQuery.length >= 3 && enabled;
51
+ return useQuery({
52
+ queryKey: keys.custom('search', collectionPath, searchField, normalizedQuery),
53
+ queryFn: async () => {
54
+ if (!shouldSearch) {
55
+ return [];
56
+ }
57
+ const collectionRef = collection(db, collectionPath);
58
+ // Build range query for prefix matching
59
+ // Using '\uf8ff' as upper bound creates a range that matches all strings starting with the query
60
+ const constraints = [
61
+ where(searchField, '>=', normalizedQuery),
62
+ where(searchField, '<=', normalizedQuery + '\uf8ff'),
63
+ orderBy(searchField, 'asc'),
64
+ firestoreLimit(limit),
65
+ ];
66
+ const q = query(collectionRef, ...constraints);
67
+ const snapshot = await getDocs(q);
68
+ return snapshot.docs.map((docSnap) => {
69
+ const rawData = docSnap.data();
70
+ const dataWithId = { id: docSnap.id, ...rawData };
71
+ const data = select ? select(dataWithId) : dataWithId;
72
+ return data;
73
+ });
74
+ },
75
+ enabled: shouldSearch,
76
+ staleTime,
77
+ });
78
+ }
79
+ //# sourceMappingURL=use-firestore-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-firestore-search.js","sourceRoot":"","sources":["../../src/search/use-firestore-search.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ttt-productions/query-core",
3
- "version": "0.3.7",
3
+ "version": "0.3.9",
4
4
  "description": "Shared TanStack Query (React Query) client defaults, query key helpers, and Firestore integration hooks for TTT Productions apps",
5
5
  "repository": {
6
6
  "type": "git",