react-query-firebase 3.3.0 → 3.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/react-native/firestore/useCountQuery.d.ts +1 -1
- package/dist/react-native/firestore/useInfiniteQuery.d.ts +1 -1
- package/dist/react-native/firestore/useQuery.d.ts +1 -1
- package/dist/web/firestore/useCompositeFilter.d.ts +1 -1
- package/dist/web/firestore/useCompositeFilter.js +1 -6
- package/dist/web/firestore/useCountQuery.d.ts +2 -3
- package/dist/web/firestore/useFirestoreQueryEngine.d.ts +1 -1
- package/dist/web/firestore/useFirestoreQueryEngine.js +4 -11
- package/dist/web/firestore/useInfiniteQuery.d.ts +2 -3
- package/dist/web/firestore/useInfiniteQuery.js +1 -3
- package/dist/web/firestore/useQuery.d.ts +2 -3
- package/dist/web/firestore/useQuery.js +1 -3
- package/dist/web/firestore/utils/buildCompositeFilter.d.ts +7 -10
- package/dist/web/firestore/utils/buildCompositeFilter.js +12 -3
- package/package.json +1 -1
|
@@ -20,7 +20,7 @@ type UseCountQueryOptions<AppModelType extends AppModel = AppModel> = {
|
|
|
20
20
|
/**
|
|
21
21
|
* Composite filter
|
|
22
22
|
*/
|
|
23
|
-
compositeFilter?: QueryCompositeFilterConstraint;
|
|
23
|
+
compositeFilter?: QueryCompositeFilterConstraint | null;
|
|
24
24
|
};
|
|
25
25
|
/**
|
|
26
26
|
* Executes a query with specified constraints and returns the count of matched documents.
|
|
@@ -20,7 +20,7 @@ type UseInfiniteQueryOptions<AppModelType extends AppModel = AppModel, TQueryKey
|
|
|
20
20
|
/**
|
|
21
21
|
* Composite filter
|
|
22
22
|
*/
|
|
23
|
-
compositeFilter?: QueryCompositeFilterConstraint;
|
|
23
|
+
compositeFilter?: QueryCompositeFilterConstraint | null;
|
|
24
24
|
};
|
|
25
25
|
/**
|
|
26
26
|
* Executes an infinite query on a Firestore data source and returns the resulting documents as an array.
|
|
@@ -21,7 +21,7 @@ type UseQueryOptions<AppModelType extends AppModel = AppModel> = {
|
|
|
21
21
|
/**
|
|
22
22
|
* Composite filter
|
|
23
23
|
*/
|
|
24
|
-
compositeFilter?: QueryCompositeFilterConstraint;
|
|
24
|
+
compositeFilter?: QueryCompositeFilterConstraint | null;
|
|
25
25
|
};
|
|
26
26
|
/**
|
|
27
27
|
* Executes a query on a Firestore data source and returns the resulting documents as an array.
|
|
@@ -34,4 +34,4 @@ export type UseCompositeFilter<AppModelType extends AppModel = AppModel> = {
|
|
|
34
34
|
* };
|
|
35
35
|
* ```
|
|
36
36
|
*/
|
|
37
|
-
export declare const useCompositeFilter: <AppModelType extends AppModel = AppModel>({ query }: UseCompositeFilter<AppModelType>) => import("@firebase/firestore").QueryCompositeFilterConstraint |
|
|
37
|
+
export declare const useCompositeFilter: <AppModelType extends AppModel = AppModel>({ query }: UseCompositeFilter<AppModelType>) => import("@firebase/firestore").QueryCompositeFilterConstraint | null;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { and, or } from "firebase/firestore";
|
|
2
1
|
import { useMemo } from "react";
|
|
3
2
|
import { buildCompositeFilter } from "./utils/buildCompositeFilter.js";
|
|
4
3
|
/**
|
|
@@ -31,10 +30,6 @@ import { buildCompositeFilter } from "./utils/buildCompositeFilter.js";
|
|
|
31
30
|
*/
|
|
32
31
|
export const useCompositeFilter = ({ query }) => {
|
|
33
32
|
return useMemo(() => {
|
|
34
|
-
|
|
35
|
-
if (queryConstraints.length <= 0) {
|
|
36
|
-
return undefined;
|
|
37
|
-
}
|
|
38
|
-
return query?.operator === "OR" ? or(...queryConstraints) : and(...queryConstraints);
|
|
33
|
+
return query ? buildCompositeFilter(query) : null;
|
|
39
34
|
}, [query]);
|
|
40
35
|
};
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { CollectionReference, QueryConstraint, QueryNonFilterConstraint } from "firebase/firestore";
|
|
1
|
+
import { CollectionReference, QueryConstraint, QueryNonFilterConstraint, QueryCompositeFilterConstraint } from "firebase/firestore";
|
|
2
2
|
import { UseQueryResult, UseQueryOptions as UseReactQueryOptions } from "@tanstack/react-query";
|
|
3
3
|
import { AppModel } from "../../types/index.js";
|
|
4
|
-
import { QueryFilterConstraint } from "./utils/buildCompositeFilter.js";
|
|
5
4
|
/**
|
|
6
5
|
* @inline
|
|
7
6
|
*/
|
|
@@ -21,7 +20,7 @@ type UseCountQueryOptions<AppModelType extends AppModel = AppModel> = {
|
|
|
21
20
|
/**
|
|
22
21
|
* Composite filter
|
|
23
22
|
*/
|
|
24
|
-
compositeFilter?:
|
|
23
|
+
compositeFilter?: QueryCompositeFilterConstraint | null;
|
|
25
24
|
};
|
|
26
25
|
/**
|
|
27
26
|
* Executes a query with specified constraints and returns the count of matched documents.
|
|
@@ -17,7 +17,7 @@ type UseFirestoreQueryEngineOptions<AppModelType extends AppModel = AppModel> =
|
|
|
17
17
|
/**
|
|
18
18
|
* Composite filter
|
|
19
19
|
*/
|
|
20
|
-
compositeFilter?: CompositeFilter
|
|
20
|
+
compositeFilter?: CompositeFilter<AppModelType>;
|
|
21
21
|
};
|
|
22
22
|
/**
|
|
23
23
|
* Returns an async wrapper around native firestore query engine.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { getDocs, query
|
|
1
|
+
import { getDocs, query } from "firebase/firestore";
|
|
2
2
|
import { useCallback } from "react";
|
|
3
3
|
import { buildCompositeFilter } from "./utils/buildCompositeFilter.js";
|
|
4
4
|
import { buildQueryConstraint } from "./utils/buildQueryConstraint.js";
|
|
@@ -25,16 +25,9 @@ import { buildQueryConstraint } from "./utils/buildQueryConstraint.js";
|
|
|
25
25
|
*/
|
|
26
26
|
export const useFirestoreQueryEngine = () => {
|
|
27
27
|
return useCallback(async ({ collectionReference, queryConstraints = [], compositeFilter: inputCompositeFilter }) => {
|
|
28
|
-
const compositeFilter =
|
|
29
|
-
|
|
30
|
-
const
|
|
31
|
-
? inputCompositeFilter?.operator === "OR"
|
|
32
|
-
? or(...compositeFilter)
|
|
33
|
-
: and(...compositeFilter)
|
|
34
|
-
: undefined;
|
|
35
|
-
const queryToExecute = finalCompositeFilter
|
|
36
|
-
? query(collectionReference, finalCompositeFilter, ...queryConstraints.map(buildQueryConstraint))
|
|
37
|
-
: query(collectionReference, ...queryConstraints);
|
|
28
|
+
const compositeFilter = inputCompositeFilter ? buildCompositeFilter(inputCompositeFilter) : null;
|
|
29
|
+
const builtQueryConstraints = queryConstraints.map(buildQueryConstraint);
|
|
30
|
+
const queryToExecute = query(collectionReference, ...[...(compositeFilter ? [compositeFilter] : []), ...builtQueryConstraints]);
|
|
38
31
|
const querySnapshot = await getDocs(queryToExecute);
|
|
39
32
|
const docs = [];
|
|
40
33
|
if (querySnapshot) {
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { CollectionReference, QueryConstraint, QueryNonFilterConstraint } from "firebase/firestore";
|
|
1
|
+
import { CollectionReference, QueryCompositeFilterConstraint, QueryConstraint, QueryNonFilterConstraint } from "firebase/firestore";
|
|
2
2
|
import { UseInfiniteQueryOptions as UseReactInfiniteQueryOptions, QueryKey, UseInfiniteQueryResult, InfiniteData } from "@tanstack/react-query";
|
|
3
3
|
import { AppModel } from "../../types/index.js";
|
|
4
|
-
import { QueryFilterConstraint } from "./utils/buildCompositeFilter.js";
|
|
5
4
|
/**
|
|
6
5
|
* @inline
|
|
7
6
|
*/
|
|
@@ -21,7 +20,7 @@ type UseInfiniteQueryOptions<AppModelType extends AppModel = AppModel, TQueryKey
|
|
|
21
20
|
/**
|
|
22
21
|
* Composite filter
|
|
23
22
|
*/
|
|
24
|
-
compositeFilter?:
|
|
23
|
+
compositeFilter?: QueryCompositeFilterConstraint | null;
|
|
25
24
|
};
|
|
26
25
|
/**
|
|
27
26
|
* Executes an infinite query on a Firestore data source and returns the resulting documents as an array.
|
|
@@ -27,9 +27,7 @@ export const useInfiniteQuery = ({ options, collectionReference, queryConstraint
|
|
|
27
27
|
...options,
|
|
28
28
|
queryFn: async ({ pageParam }) => {
|
|
29
29
|
const allQueryConstraints = [...queryConstraints, ...(pageParam ? [pageParam] : [])];
|
|
30
|
-
const queryToExecute = compositeFilter
|
|
31
|
-
? query(collectionReference, compositeFilter, ...allQueryConstraints)
|
|
32
|
-
: query(collectionReference, ...allQueryConstraints);
|
|
30
|
+
const queryToExecute = query(collectionReference, ...[...(compositeFilter ? [compositeFilter] : []), ...allQueryConstraints]);
|
|
33
31
|
const querySnapshot = await getDocs(queryToExecute);
|
|
34
32
|
const docs = [];
|
|
35
33
|
if (querySnapshot) {
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { CollectionReference, QueryConstraint, QueryNonFilterConstraint } from "firebase/firestore";
|
|
1
|
+
import { CollectionReference, QueryCompositeFilterConstraint, QueryConstraint, QueryNonFilterConstraint } from "firebase/firestore";
|
|
2
2
|
import { UseQueryResult, UseQueryOptions as UseReactQueryOptions } from "@tanstack/react-query";
|
|
3
3
|
import { AppModel } from "../../types/index.js";
|
|
4
|
-
import { QueryFilterConstraint } from "./utils/buildCompositeFilter.js";
|
|
5
4
|
/**
|
|
6
5
|
* @inline
|
|
7
6
|
*/
|
|
@@ -21,7 +20,7 @@ type UseQueryOptions<AppModelType extends AppModel = AppModel> = {
|
|
|
21
20
|
/**
|
|
22
21
|
* Composite filter
|
|
23
22
|
*/
|
|
24
|
-
compositeFilter?:
|
|
23
|
+
compositeFilter?: QueryCompositeFilterConstraint | null;
|
|
25
24
|
};
|
|
26
25
|
/**
|
|
27
26
|
* Executes a query on a Firestore data source and returns the resulting documents as an array.
|
|
@@ -26,9 +26,7 @@ export const useQuery = ({ options, collectionReference, queryConstraints = [],
|
|
|
26
26
|
return useReactQuery({
|
|
27
27
|
...options,
|
|
28
28
|
queryFn: async () => {
|
|
29
|
-
const queryToExecute = compositeFilter
|
|
30
|
-
? query(collectionReference, compositeFilter, ...queryConstraints)
|
|
31
|
-
: query(collectionReference, ...queryConstraints);
|
|
29
|
+
const queryToExecute = query(collectionReference, ...[...(compositeFilter ? [compositeFilter] : []), ...queryConstraints]);
|
|
32
30
|
const querySnapshot = await getDocs(queryToExecute);
|
|
33
31
|
const docs = [];
|
|
34
32
|
if (querySnapshot) {
|
|
@@ -1,20 +1,17 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { WhereFilterOp, QueryCompositeFilterConstraint } from "firebase/firestore";
|
|
2
2
|
import { AppModel } from "../../../types/AppModel.js";
|
|
3
|
-
export type QueryFilterConstraint = FBQueryFilterConstraint | FBQueryCompositeFilterConstraint;
|
|
4
3
|
export type QueryElement<AppModelType extends AppModel = AppModel> = {
|
|
5
|
-
|
|
6
|
-
children?: QueryElement[];
|
|
7
|
-
field?: keyof (AppModelType & {
|
|
4
|
+
field: keyof (AppModelType & {
|
|
8
5
|
documentId?: string[];
|
|
9
6
|
});
|
|
10
|
-
value
|
|
11
|
-
op
|
|
7
|
+
value: AppModelType[keyof AppModelType];
|
|
8
|
+
op: WhereFilterOp;
|
|
12
9
|
};
|
|
13
10
|
export type CompositeFilter<AppModelType extends AppModel = AppModel> = {
|
|
14
11
|
operator: "OR" | "AND";
|
|
15
|
-
children: QueryElement<AppModelType & {
|
|
12
|
+
children: Array<CompositeFilter<AppModelType> | QueryElement<AppModelType & {
|
|
16
13
|
documentId?: string[];
|
|
17
|
-
}
|
|
14
|
+
}>>;
|
|
18
15
|
};
|
|
19
16
|
/**
|
|
20
17
|
* Constructs a composite or where query filter based on the provided query structure.
|
|
@@ -44,4 +41,4 @@ export type CompositeFilter<AppModelType extends AppModel = AppModel> = {
|
|
|
44
41
|
* };
|
|
45
42
|
* ```
|
|
46
43
|
*/
|
|
47
|
-
export declare const buildCompositeFilter: <AppModelType extends AppModel = AppModel>(query: QueryElement<AppModelType>) =>
|
|
44
|
+
export declare const buildCompositeFilter: <AppModelType extends AppModel = AppModel>(query: CompositeFilter<AppModelType> | QueryElement<AppModelType>) => QueryCompositeFilterConstraint | null;
|
|
@@ -29,14 +29,23 @@ import { or, and, where, documentId } from "firebase/firestore";
|
|
|
29
29
|
*/
|
|
30
30
|
export const buildCompositeFilter = (query) => {
|
|
31
31
|
if (query.children) {
|
|
32
|
-
const queryConstraints = query.children
|
|
32
|
+
const queryConstraints = query.children
|
|
33
|
+
.map(buildCompositeFilter)
|
|
34
|
+
.filter((constraint) => !!constraint);
|
|
33
35
|
if (queryConstraints.length <= 0) {
|
|
34
36
|
return null;
|
|
35
37
|
}
|
|
36
|
-
|
|
38
|
+
if (queryConstraints.length <= 1) {
|
|
39
|
+
return and(queryConstraints[0]);
|
|
40
|
+
}
|
|
41
|
+
return query.operator === "OR"
|
|
42
|
+
? or(...queryConstraints)
|
|
43
|
+
: and(...queryConstraints);
|
|
37
44
|
}
|
|
38
45
|
if (query.field && query.op) {
|
|
39
|
-
return where(query.field === "documentId"
|
|
46
|
+
return and(where(query.field === "documentId"
|
|
47
|
+
? documentId()
|
|
48
|
+
: query.field, query.op, query.value));
|
|
40
49
|
}
|
|
41
50
|
return null;
|
|
42
51
|
};
|
package/package.json
CHANGED