react-query-firebase 2.0.0-rc7 → 2.0.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/package.json +1 -1
- package/react-native/firestore/useCompositeFilter.js +4 -8
- package/react-native/firestore/useCompositeFilter.ts +10 -13
- package/web/firestore/useCompositeFilter.d.ts +3 -2
- package/web/firestore/useCompositeFilter.js +5 -7
- package/web/firestore/useCompositeFilter.ts +10 -12
- package/web/firestore/useCountQuery.d.ts +3 -3
- package/web/firestore/useCountQuery.js +3 -3
- package/web/firestore/useCountQuery.ts +5 -5
- package/web/firestore/useInfiniteQuery.d.ts +3 -3
- package/web/firestore/useInfiniteQuery.js +3 -3
- package/web/firestore/useInfiniteQuery.ts +5 -5
- package/web/firestore/useQuery.d.ts +3 -3
- package/web/firestore/useQuery.js +3 -3
- package/web/firestore/useQuery.ts +5 -5
package/package.json
CHANGED
|
@@ -9,19 +9,15 @@ import { useMemo } from "react";
|
|
|
9
9
|
*/
|
|
10
10
|
const buildCompositeQuery = (query) => {
|
|
11
11
|
if (query.children) {
|
|
12
|
-
const queryConstraints = query.children
|
|
13
|
-
.map((subQuery) => {
|
|
14
|
-
if (subQuery.field && subQuery.op) {
|
|
15
|
-
return where(query.field === "documentId" ? firebase.FieldPath.documentId() : query.field, subQuery.op, query.value);
|
|
16
|
-
}
|
|
17
|
-
return buildCompositeQuery(subQuery);
|
|
18
|
-
})
|
|
19
|
-
.filter((constraint) => !!constraint);
|
|
12
|
+
const queryConstraints = query.children.map(buildCompositeQuery).filter((constraint) => !!constraint);
|
|
20
13
|
if (queryConstraints.length <= 0) {
|
|
21
14
|
return null;
|
|
22
15
|
}
|
|
23
16
|
return query.operator === "OR" ? or(...queryConstraints) : and(...queryConstraints);
|
|
24
17
|
}
|
|
18
|
+
if (query.field && query.op) {
|
|
19
|
+
return where(query.field === "documentId" ? firebase.FieldPath.documentId() : query.field, query.op, query.value);
|
|
20
|
+
}
|
|
25
21
|
return null;
|
|
26
22
|
};
|
|
27
23
|
/**
|
|
@@ -30,20 +30,9 @@ export type UseCompositeFilter<DbModelType extends CompositeFilterDocumentData =
|
|
|
30
30
|
|
|
31
31
|
const buildCompositeQuery = <DbModelType extends CompositeFilterDocumentData = CompositeFilterDocumentData>(
|
|
32
32
|
query: QueryElement<DbModelType>
|
|
33
|
-
): FirebaseFirestoreTypes.
|
|
33
|
+
): FirebaseFirestoreTypes.QueryFilterConstraint | null => {
|
|
34
34
|
if (query.children) {
|
|
35
|
-
const queryConstraints = query.children
|
|
36
|
-
.map((subQuery) => {
|
|
37
|
-
if (subQuery.field && subQuery.op) {
|
|
38
|
-
return where(
|
|
39
|
-
query.field === "documentId" ? firebase.FieldPath.documentId() : (query.field as string),
|
|
40
|
-
subQuery.op,
|
|
41
|
-
query.value
|
|
42
|
-
);
|
|
43
|
-
}
|
|
44
|
-
return buildCompositeQuery(subQuery);
|
|
45
|
-
})
|
|
46
|
-
.filter((constraint) => !!constraint);
|
|
35
|
+
const queryConstraints = query.children.map(buildCompositeQuery).filter((constraint) => !!constraint);
|
|
47
36
|
|
|
48
37
|
if (queryConstraints.length <= 0) {
|
|
49
38
|
return null;
|
|
@@ -52,6 +41,14 @@ const buildCompositeQuery = <DbModelType extends CompositeFilterDocumentData = C
|
|
|
52
41
|
return (query as CompositeFilter).operator === "OR" ? or(...queryConstraints) : and(...queryConstraints);
|
|
53
42
|
}
|
|
54
43
|
|
|
44
|
+
if (query.field && query.op) {
|
|
45
|
+
return where(
|
|
46
|
+
query.field === "documentId" ? firebase.FieldPath.documentId() : (query.field as string),
|
|
47
|
+
query.op,
|
|
48
|
+
query.value
|
|
49
|
+
) as unknown as FirebaseFirestoreTypes.QueryFilterConstraint;
|
|
50
|
+
}
|
|
51
|
+
|
|
55
52
|
return null;
|
|
56
53
|
};
|
|
57
54
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DocumentData,
|
|
1
|
+
import { DocumentData, WhereFilterOp, QueryCompositeFilterConstraint } from "firebase/firestore";
|
|
2
2
|
type CompositeFilterDocumentData = DocumentData;
|
|
3
3
|
export type QueryElement<DbModelType extends CompositeFilterDocumentData = CompositeFilterDocumentData> = Partial<QueryCompositeFilterConstraint> & {
|
|
4
4
|
children?: QueryElement[];
|
|
@@ -8,7 +8,8 @@ export type QueryElement<DbModelType extends CompositeFilterDocumentData = Compo
|
|
|
8
8
|
value?: DbModelType[keyof DbModelType];
|
|
9
9
|
op?: WhereFilterOp;
|
|
10
10
|
};
|
|
11
|
-
export type CompositeFilter<DbModelType extends CompositeFilterDocumentData = CompositeFilterDocumentData> =
|
|
11
|
+
export type CompositeFilter<DbModelType extends CompositeFilterDocumentData = CompositeFilterDocumentData> = {
|
|
12
|
+
operator: "OR" | "AND";
|
|
12
13
|
children: QueryElement<DbModelType & {
|
|
13
14
|
documentId?: string[];
|
|
14
15
|
}>[];
|
|
@@ -1,21 +1,19 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { documentId, and, or, where } from "firebase/firestore";
|
|
2
2
|
import { useMemo } from "react";
|
|
3
3
|
/**
|
|
4
4
|
* Constructs a composite query filter based on the provided query structure.
|
|
5
5
|
* It recursively builds query constraints using logical "or" or "and" operators.
|
|
6
6
|
*
|
|
7
7
|
* @param {QueryElement<DbModelType>} query - The query element or structure to be evaluated and transformed into filter constraints.
|
|
8
|
-
* @returns {
|
|
8
|
+
* @returns {QueryFieldFilterConstraint | null} A constructed query filter constraint based on the input query, or null if no valid constraints can be derived.
|
|
9
9
|
*/
|
|
10
10
|
const buildCompositeQuery = (query) => {
|
|
11
11
|
if (query.children) {
|
|
12
|
-
const queryConstraints = query.children
|
|
13
|
-
.map((subQuery) => buildCompositeQuery(subQuery))
|
|
14
|
-
.filter((constraint) => !!constraint);
|
|
12
|
+
const queryConstraints = query.children.map(buildCompositeQuery).filter((constraint) => !!constraint);
|
|
15
13
|
if (queryConstraints.length <= 0) {
|
|
16
14
|
return null;
|
|
17
15
|
}
|
|
18
|
-
return query.
|
|
16
|
+
return query.operator === "OR" ? or(...queryConstraints) : and(...queryConstraints);
|
|
19
17
|
}
|
|
20
18
|
if (query.field && query.op) {
|
|
21
19
|
return where(query.field === "documentId" ? documentId() : query.field, query.op, query.value);
|
|
@@ -38,6 +36,6 @@ export const useCompositeFilter = ({ query }) => {
|
|
|
38
36
|
if (queryConstraints.length <= 0) {
|
|
39
37
|
return undefined;
|
|
40
38
|
}
|
|
41
|
-
return query?.
|
|
39
|
+
return query?.operator === "OR" ? or(...queryConstraints) : and(...queryConstraints);
|
|
42
40
|
}, [query]);
|
|
43
41
|
};
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
DocumentData,
|
|
3
|
-
QueryCompositeFilterConstraint,
|
|
4
3
|
QueryFilterConstraint,
|
|
5
4
|
WhereFilterOp,
|
|
6
|
-
|
|
5
|
+
QueryCompositeFilterConstraint,
|
|
7
6
|
documentId,
|
|
7
|
+
and,
|
|
8
8
|
or,
|
|
9
9
|
where
|
|
10
10
|
} from "firebase/firestore";
|
|
@@ -20,10 +20,10 @@ export type QueryElement<DbModelType extends CompositeFilterDocumentData = Compo
|
|
|
20
20
|
op?: WhereFilterOp;
|
|
21
21
|
};
|
|
22
22
|
|
|
23
|
-
export type CompositeFilter<DbModelType extends CompositeFilterDocumentData = CompositeFilterDocumentData> =
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
export type CompositeFilter<DbModelType extends CompositeFilterDocumentData = CompositeFilterDocumentData> = {
|
|
24
|
+
operator: "OR" | "AND";
|
|
25
|
+
children: QueryElement<DbModelType & { documentId?: string[] }>[];
|
|
26
|
+
};
|
|
27
27
|
|
|
28
28
|
export type UseCompositeFilter<DbModelType extends CompositeFilterDocumentData = CompositeFilterDocumentData> = {
|
|
29
29
|
query?: CompositeFilter<DbModelType>;
|
|
@@ -34,22 +34,20 @@ export type UseCompositeFilter<DbModelType extends CompositeFilterDocumentData =
|
|
|
34
34
|
* It recursively builds query constraints using logical "or" or "and" operators.
|
|
35
35
|
*
|
|
36
36
|
* @param {QueryElement<DbModelType>} query - The query element or structure to be evaluated and transformed into filter constraints.
|
|
37
|
-
* @returns {
|
|
37
|
+
* @returns {QueryFieldFilterConstraint | null} A constructed query filter constraint based on the input query, or null if no valid constraints can be derived.
|
|
38
38
|
*/
|
|
39
39
|
|
|
40
40
|
const buildCompositeQuery = <DbModelType extends CompositeFilterDocumentData = CompositeFilterDocumentData>(
|
|
41
41
|
query: QueryElement<DbModelType>
|
|
42
42
|
): QueryFilterConstraint | null => {
|
|
43
43
|
if (query.children) {
|
|
44
|
-
const queryConstraints = query.children
|
|
45
|
-
.map((subQuery) => buildCompositeQuery(subQuery))
|
|
46
|
-
.filter<QueryFilterConstraint>((constraint) => !!constraint);
|
|
44
|
+
const queryConstraints = query.children.map(buildCompositeQuery).filter((constraint) => !!constraint);
|
|
47
45
|
|
|
48
46
|
if (queryConstraints.length <= 0) {
|
|
49
47
|
return null;
|
|
50
48
|
}
|
|
51
49
|
|
|
52
|
-
return (query as CompositeFilter).
|
|
50
|
+
return (query as CompositeFilter).operator === "OR" ? or(...queryConstraints) : and(...queryConstraints);
|
|
53
51
|
}
|
|
54
52
|
|
|
55
53
|
if (query.field && query.op) {
|
|
@@ -81,6 +79,6 @@ export const useCompositeFilter = <DbModelType extends CompositeFilterDocumentDa
|
|
|
81
79
|
if (queryConstraints.length <= 0) {
|
|
82
80
|
return undefined;
|
|
83
81
|
}
|
|
84
|
-
return query?.
|
|
82
|
+
return query?.operator === "OR" ? or(...queryConstraints) : and(...queryConstraints);
|
|
85
83
|
}, [query]);
|
|
86
84
|
};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { DocumentData,
|
|
1
|
+
import { DocumentData, CollectionReference, QueryCompositeFilterConstraint, QueryConstraint, QueryNonFilterConstraint } from "firebase/firestore";
|
|
2
2
|
import { UseQueryResult, UseQueryOptions as UseReactQueryOptions } from "@tanstack/react-query";
|
|
3
3
|
type UseCountQueryOptions<AppModelType extends DocumentData = DocumentData, DbModelType extends DocumentData = DocumentData> = {
|
|
4
4
|
options: Omit<UseReactQueryOptions<number, Error, number>, "queryFn"> & Required<Pick<UseReactQueryOptions<number, Error, number>, "queryKey">>;
|
|
5
|
-
|
|
5
|
+
collectionReference: CollectionReference<AppModelType, DbModelType>;
|
|
6
6
|
queryConstraints?: QueryConstraint[] | QueryNonFilterConstraint[];
|
|
7
7
|
compositeFilter?: QueryCompositeFilterConstraint;
|
|
8
8
|
};
|
|
@@ -19,5 +19,5 @@ type UseCountQueryOptions<AppModelType extends DocumentData = DocumentData, DbMo
|
|
|
19
19
|
* @param {unknown} [options.compositeFilter] - An optional composite filter to apply to the query.
|
|
20
20
|
* @returns {UseQueryResult<number>} An object containing the number of documents that match the query.
|
|
21
21
|
*/
|
|
22
|
-
export declare const useCountQuery: <AppModelType extends DocumentData = DocumentData, DbModelType extends DocumentData = DocumentData>({ options,
|
|
22
|
+
export declare const useCountQuery: <AppModelType extends DocumentData = DocumentData, DbModelType extends DocumentData = DocumentData>({ options, collectionReference, queryConstraints, compositeFilter }: UseCountQueryOptions<AppModelType, DbModelType>) => UseQueryResult<number>;
|
|
23
23
|
export {};
|
|
@@ -13,13 +13,13 @@ import { useQuery as useReactQuery } from "@tanstack/react-query";
|
|
|
13
13
|
* @param {unknown} [options.compositeFilter] - An optional composite filter to apply to the query.
|
|
14
14
|
* @returns {UseQueryResult<number>} An object containing the number of documents that match the query.
|
|
15
15
|
*/
|
|
16
|
-
export const useCountQuery = ({ options,
|
|
16
|
+
export const useCountQuery = ({ options, collectionReference, queryConstraints = [], compositeFilter }) => {
|
|
17
17
|
return useReactQuery({
|
|
18
18
|
...options,
|
|
19
19
|
queryFn: async () => {
|
|
20
20
|
const queryToExecute = compositeFilter
|
|
21
|
-
? query(
|
|
22
|
-
: query(
|
|
21
|
+
? query(collectionReference, compositeFilter, ...queryConstraints)
|
|
22
|
+
: query(collectionReference, ...queryConstraints);
|
|
23
23
|
const querySnapshot = await getCountFromServer(queryToExecute);
|
|
24
24
|
if (querySnapshot) {
|
|
25
25
|
return querySnapshot.data().count;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
DocumentData,
|
|
3
3
|
getCountFromServer,
|
|
4
|
-
|
|
4
|
+
CollectionReference,
|
|
5
5
|
query,
|
|
6
6
|
QueryCompositeFilterConstraint,
|
|
7
7
|
QueryConstraint,
|
|
@@ -20,7 +20,7 @@ type UseCountQueryOptions<
|
|
|
20
20
|
> = {
|
|
21
21
|
options: Omit<UseReactQueryOptions<number, Error, number>, "queryFn"> &
|
|
22
22
|
Required<Pick<UseReactQueryOptions<number, Error, number>, "queryKey">>;
|
|
23
|
-
|
|
23
|
+
collectionReference: CollectionReference<AppModelType, DbModelType>;
|
|
24
24
|
queryConstraints?: QueryConstraint[] | QueryNonFilterConstraint[];
|
|
25
25
|
compositeFilter?: QueryCompositeFilterConstraint;
|
|
26
26
|
};
|
|
@@ -44,7 +44,7 @@ export const useCountQuery = <
|
|
|
44
44
|
DbModelType extends DocumentData = DocumentData
|
|
45
45
|
>({
|
|
46
46
|
options,
|
|
47
|
-
|
|
47
|
+
collectionReference,
|
|
48
48
|
queryConstraints = [],
|
|
49
49
|
compositeFilter
|
|
50
50
|
}: UseCountQueryOptions<AppModelType, DbModelType>): UseQueryResult<number> => {
|
|
@@ -52,8 +52,8 @@ export const useCountQuery = <
|
|
|
52
52
|
...options,
|
|
53
53
|
queryFn: async () => {
|
|
54
54
|
const queryToExecute = compositeFilter
|
|
55
|
-
? query(
|
|
56
|
-
: query(
|
|
55
|
+
? query(collectionReference, compositeFilter, ...(queryConstraints as QueryNonFilterConstraint[]))
|
|
56
|
+
: query(collectionReference, ...queryConstraints);
|
|
57
57
|
|
|
58
58
|
const querySnapshot = await getCountFromServer(queryToExecute);
|
|
59
59
|
if (querySnapshot) {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { DocumentData, FirestoreDataConverter,
|
|
1
|
+
import { CollectionReference, DocumentData, FirestoreDataConverter, QueryCompositeFilterConstraint, QueryConstraint, QueryNonFilterConstraint } from "firebase/firestore";
|
|
2
2
|
import { UseInfiniteQueryOptions as UseReactInfiniteQueryOptions, QueryKey, UseInfiniteQueryResult, InfiniteData } from "@tanstack/react-query";
|
|
3
3
|
type UseInfiniteQueryOptions<AppModelType extends DocumentData = DocumentData, DbModelType extends DocumentData = DocumentData, TQueryKey extends QueryKey = QueryKey> = {
|
|
4
4
|
options: Omit<UseReactInfiniteQueryOptions<AppModelType[], Error, InfiniteData<AppModelType[]>, AppModelType[], TQueryKey, QueryConstraint>, "queryFn"> & Required<Pick<UseReactInfiniteQueryOptions<AppModelType[], Error, InfiniteData<AppModelType[]>, AppModelType[], TQueryKey, QueryConstraint>, "queryKey">>;
|
|
5
|
-
|
|
5
|
+
collectionReference: CollectionReference<AppModelType, DbModelType>;
|
|
6
6
|
queryConstraints?: QueryConstraint[] | QueryNonFilterConstraint[];
|
|
7
7
|
compositeFilter?: QueryCompositeFilterConstraint;
|
|
8
8
|
converter?: FirestoreDataConverter<AppModelType, DbModelType>;
|
|
@@ -14,5 +14,5 @@ type UseInfiniteQueryOptions<AppModelType extends DocumentData = DocumentData, D
|
|
|
14
14
|
* @param {UseInfiniteQueryOptions<AppModelType, DbModelType>} options - Configuration options for the infinite query, including Firestore query reference, query constraints, composite filter, and data converter.
|
|
15
15
|
* @returns {UseInfiniteQueryResult<InfiniteData<AppModelType[]>>} Result object containing the infinite data and methods for fetching more pages.
|
|
16
16
|
*/
|
|
17
|
-
export declare const useInfiniteQuery: <AppModelType extends DocumentData = DocumentData, DbModelType extends DocumentData = DocumentData>({ options,
|
|
17
|
+
export declare const useInfiniteQuery: <AppModelType extends DocumentData = DocumentData, DbModelType extends DocumentData = DocumentData>({ options, collectionReference, queryConstraints, compositeFilter, converter }: UseInfiniteQueryOptions<AppModelType, DbModelType>) => UseInfiniteQueryResult<InfiniteData<AppModelType[]>>;
|
|
18
18
|
export {};
|
|
@@ -7,14 +7,14 @@ import { useInfiniteQuery as useInfiniteReactQuery } from "@tanstack/react-query
|
|
|
7
7
|
* @param {UseInfiniteQueryOptions<AppModelType, DbModelType>} options - Configuration options for the infinite query, including Firestore query reference, query constraints, composite filter, and data converter.
|
|
8
8
|
* @returns {UseInfiniteQueryResult<InfiniteData<AppModelType[]>>} Result object containing the infinite data and methods for fetching more pages.
|
|
9
9
|
*/
|
|
10
|
-
export const useInfiniteQuery = ({ options,
|
|
10
|
+
export const useInfiniteQuery = ({ options, collectionReference, queryConstraints = [], compositeFilter, converter }) => {
|
|
11
11
|
return useInfiniteReactQuery({
|
|
12
12
|
...options,
|
|
13
13
|
queryFn: async ({ pageParam }) => {
|
|
14
14
|
const allQueryConstraints = [...queryConstraints, ...(pageParam ? [pageParam] : [])];
|
|
15
15
|
const queryToExecute = compositeFilter
|
|
16
|
-
? query(
|
|
17
|
-
: query(
|
|
16
|
+
? query(collectionReference, compositeFilter, ...allQueryConstraints)
|
|
17
|
+
: query(collectionReference, ...allQueryConstraints);
|
|
18
18
|
const querySnapshot = await getDocs(converter ? queryToExecute.withConverter(converter) : queryToExecute);
|
|
19
19
|
const docs = [];
|
|
20
20
|
if (querySnapshot) {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
|
+
CollectionReference,
|
|
2
3
|
DocumentData,
|
|
3
4
|
FirestoreDataConverter,
|
|
4
5
|
getDocs,
|
|
5
|
-
Query,
|
|
6
6
|
query,
|
|
7
7
|
QueryCompositeFilterConstraint,
|
|
8
8
|
QueryConstraint,
|
|
@@ -46,7 +46,7 @@ type UseInfiniteQueryOptions<
|
|
|
46
46
|
"queryKey"
|
|
47
47
|
>
|
|
48
48
|
>;
|
|
49
|
-
|
|
49
|
+
collectionReference: CollectionReference<AppModelType, DbModelType>;
|
|
50
50
|
queryConstraints?: QueryConstraint[] | QueryNonFilterConstraint[];
|
|
51
51
|
compositeFilter?: QueryCompositeFilterConstraint;
|
|
52
52
|
converter?: FirestoreDataConverter<AppModelType, DbModelType>;
|
|
@@ -64,7 +64,7 @@ export const useInfiniteQuery = <
|
|
|
64
64
|
DbModelType extends DocumentData = DocumentData
|
|
65
65
|
>({
|
|
66
66
|
options,
|
|
67
|
-
|
|
67
|
+
collectionReference,
|
|
68
68
|
queryConstraints = [],
|
|
69
69
|
compositeFilter,
|
|
70
70
|
converter
|
|
@@ -74,8 +74,8 @@ export const useInfiniteQuery = <
|
|
|
74
74
|
queryFn: async ({ pageParam }) => {
|
|
75
75
|
const allQueryConstraints = [...queryConstraints, ...(pageParam ? [pageParam] : [])];
|
|
76
76
|
const queryToExecute = compositeFilter
|
|
77
|
-
? query(
|
|
78
|
-
: query(
|
|
77
|
+
? query(collectionReference, compositeFilter, ...(allQueryConstraints as QueryNonFilterConstraint[]))
|
|
78
|
+
: query(collectionReference, ...allQueryConstraints);
|
|
79
79
|
|
|
80
80
|
const querySnapshot = await getDocs(converter ? queryToExecute.withConverter(converter) : queryToExecute);
|
|
81
81
|
const docs: AppModelType[] = [];
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { DocumentData, FirestoreDataConverter,
|
|
1
|
+
import { DocumentData, FirestoreDataConverter, CollectionReference, QueryCompositeFilterConstraint, QueryConstraint, QueryNonFilterConstraint } from "firebase/firestore";
|
|
2
2
|
import { UseQueryResult, UseQueryOptions as UseReactQueryOptions } from "@tanstack/react-query";
|
|
3
3
|
type UseQueryOptions<AppModelType extends DocumentData = DocumentData, DbModelType extends DocumentData = DocumentData> = {
|
|
4
4
|
options: Omit<UseReactQueryOptions<AppModelType[], Error, AppModelType[]>, "queryFn"> & Required<Pick<UseReactQueryOptions<AppModelType[], Error, AppModelType[]>, "queryKey">>;
|
|
5
|
-
|
|
5
|
+
collectionReference: CollectionReference<AppModelType, DbModelType>;
|
|
6
6
|
queryConstraints?: QueryConstraint[] | QueryNonFilterConstraint[];
|
|
7
7
|
compositeFilter?: QueryCompositeFilterConstraint;
|
|
8
8
|
converter?: FirestoreDataConverter<AppModelType, DbModelType>;
|
|
@@ -21,5 +21,5 @@ type UseQueryOptions<AppModelType extends DocumentData = DocumentData, DbModelTy
|
|
|
21
21
|
*
|
|
22
22
|
* @returns {UseQueryResult<AppModelType[]>} Result containing an array of documents that match the query criteria.
|
|
23
23
|
*/
|
|
24
|
-
export declare const useQuery: <AppModelType extends DocumentData = DocumentData, DbModelType extends DocumentData = DocumentData>({ options,
|
|
24
|
+
export declare const useQuery: <AppModelType extends DocumentData = DocumentData, DbModelType extends DocumentData = DocumentData>({ options, collectionReference, queryConstraints, compositeFilter, converter }: UseQueryOptions<AppModelType, DbModelType>) => UseQueryResult<AppModelType[]>;
|
|
25
25
|
export {};
|
|
@@ -14,13 +14,13 @@ import { useQuery as useReactQuery } from "@tanstack/react-query";
|
|
|
14
14
|
*
|
|
15
15
|
* @returns {UseQueryResult<AppModelType[]>} Result containing an array of documents that match the query criteria.
|
|
16
16
|
*/
|
|
17
|
-
export const useQuery = ({ options,
|
|
17
|
+
export const useQuery = ({ options, collectionReference, queryConstraints = [], compositeFilter, converter }) => {
|
|
18
18
|
return useReactQuery({
|
|
19
19
|
...options,
|
|
20
20
|
queryFn: async () => {
|
|
21
21
|
const queryToExecute = compositeFilter
|
|
22
|
-
? query(
|
|
23
|
-
: query(
|
|
22
|
+
? query(collectionReference, compositeFilter, ...queryConstraints)
|
|
23
|
+
: query(collectionReference, ...queryConstraints);
|
|
24
24
|
const querySnapshot = await getDocs(converter ? queryToExecute.withConverter(converter) : queryToExecute);
|
|
25
25
|
const docs = [];
|
|
26
26
|
if (querySnapshot) {
|
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
DocumentData,
|
|
3
3
|
FirestoreDataConverter,
|
|
4
4
|
getDocs,
|
|
5
|
-
|
|
5
|
+
CollectionReference,
|
|
6
6
|
query,
|
|
7
7
|
QueryCompositeFilterConstraint,
|
|
8
8
|
QueryConstraint,
|
|
@@ -21,7 +21,7 @@ type UseQueryOptions<
|
|
|
21
21
|
> = {
|
|
22
22
|
options: Omit<UseReactQueryOptions<AppModelType[], Error, AppModelType[]>, "queryFn"> &
|
|
23
23
|
Required<Pick<UseReactQueryOptions<AppModelType[], Error, AppModelType[]>, "queryKey">>;
|
|
24
|
-
|
|
24
|
+
collectionReference: CollectionReference<AppModelType, DbModelType>;
|
|
25
25
|
queryConstraints?: QueryConstraint[] | QueryNonFilterConstraint[];
|
|
26
26
|
compositeFilter?: QueryCompositeFilterConstraint;
|
|
27
27
|
converter?: FirestoreDataConverter<AppModelType, DbModelType>;
|
|
@@ -46,7 +46,7 @@ export const useQuery = <
|
|
|
46
46
|
DbModelType extends DocumentData = DocumentData
|
|
47
47
|
>({
|
|
48
48
|
options,
|
|
49
|
-
|
|
49
|
+
collectionReference,
|
|
50
50
|
queryConstraints = [],
|
|
51
51
|
compositeFilter,
|
|
52
52
|
converter
|
|
@@ -55,8 +55,8 @@ export const useQuery = <
|
|
|
55
55
|
...options,
|
|
56
56
|
queryFn: async () => {
|
|
57
57
|
const queryToExecute = compositeFilter
|
|
58
|
-
? query(
|
|
59
|
-
: query(
|
|
58
|
+
? query(collectionReference, compositeFilter, ...(queryConstraints as QueryNonFilterConstraint[]))
|
|
59
|
+
: query(collectionReference, ...queryConstraints);
|
|
60
60
|
|
|
61
61
|
const querySnapshot = await getDocs(converter ? queryToExecute.withConverter(converter) : queryToExecute);
|
|
62
62
|
const docs: AppModelType[] = [];
|