react-query-firebase 2.12.1 → 2.13.1
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 +17 -17
- package/react-native/context/FirebaseContextProvider.d.ts +6 -0
- package/react-native/context/FirebaseContextProvider.tsx +6 -0
- package/react-native/firestore/utils/buildQueryConstraint.js +2 -2
- package/react-native/firestore/utils/buildQueryConstraint.ts +2 -2
- package/types/QueryConstraints.d.ts +1 -2
- package/types/QueryConstraints.ts +1 -2
- package/web/context/FirebaseContextProvider.d.ts +5 -0
- package/web/context/FirebaseContextProvider.js +19 -2
- package/web/context/FirebaseContextProvider.tsx +34 -2
- package/web/firestore/useCompositeFilter.d.ts +1 -1
- package/web/firestore/useDocReferences.d.ts +1 -1
- package/web/firestore/useFirestore.d.ts +1 -1
- package/web/firestore/utils/buildQueryConstraint.js +2 -2
- package/web/firestore/utils/buildQueryConstraint.ts +2 -2
- package/web/firestore/utils/getDocSnap.d.ts +1 -1
- package/web/remoteConfig/useGetValue.d.ts +1 -1
- package/web/remoteConfig/useRemoteConfig.d.ts +1 -1
package/package.json
CHANGED
|
@@ -21,25 +21,25 @@
|
|
|
21
21
|
},
|
|
22
22
|
"description": "This module offers react hooks to work with Firebase on react-native and web platforms",
|
|
23
23
|
"devDependencies": {
|
|
24
|
-
"@laverve/eslint-utils": "^5.3.
|
|
25
|
-
"@react-native-firebase/analytics": "^23.
|
|
26
|
-
"@react-native-firebase/app": "23.
|
|
27
|
-
"@react-native-firebase/auth": "^23.
|
|
28
|
-
"@react-native-firebase/crashlytics": "^23.
|
|
29
|
-
"@react-native-firebase/firestore": "^23.
|
|
30
|
-
"@react-native-firebase/installations": "^23.
|
|
31
|
-
"@react-native-firebase/remote-config": "^23.
|
|
32
|
-
"@tanstack/react-query": "^5.
|
|
33
|
-
"@types/react": "^19.
|
|
34
|
-
"firebase": "^12.
|
|
24
|
+
"@laverve/eslint-utils": "^5.3.7",
|
|
25
|
+
"@react-native-firebase/analytics": "^23.4.1",
|
|
26
|
+
"@react-native-firebase/app": "^23.4.1",
|
|
27
|
+
"@react-native-firebase/auth": "^23.4.1",
|
|
28
|
+
"@react-native-firebase/crashlytics": "^23.4.1",
|
|
29
|
+
"@react-native-firebase/firestore": "^23.4.1",
|
|
30
|
+
"@react-native-firebase/installations": "^23.4.1",
|
|
31
|
+
"@react-native-firebase/remote-config": "^23.4.1",
|
|
32
|
+
"@tanstack/react-query": "^5.90.5",
|
|
33
|
+
"@types/react": "^19.2.2",
|
|
34
|
+
"firebase": "^12.4.0",
|
|
35
35
|
"husky": "^9.1.7",
|
|
36
|
-
"lint-staged": "^16.
|
|
36
|
+
"lint-staged": "^16.2.6",
|
|
37
37
|
"prettier": "^3.6.2",
|
|
38
|
-
"react": "^19.
|
|
39
|
-
"typedoc": "^0.28.
|
|
40
|
-
"typedoc-plugin-markdown": "^4.
|
|
38
|
+
"react": "^19.2.0",
|
|
39
|
+
"typedoc": "^0.28.14",
|
|
40
|
+
"typedoc-plugin-markdown": "^4.9.0",
|
|
41
41
|
"typedoc-vitepress-theme": "^1.1.2",
|
|
42
|
-
"typescript": "^5.9.
|
|
42
|
+
"typescript": "^5.9.3",
|
|
43
43
|
"vitepress": "^1.6.4"
|
|
44
44
|
},
|
|
45
45
|
"homepage": "https://github.com/vpishuk/react-query-firebase",
|
|
@@ -75,5 +75,5 @@
|
|
|
75
75
|
"docs:build": "vitepress build docs",
|
|
76
76
|
"docs:preview": "vitepress preview docs"
|
|
77
77
|
},
|
|
78
|
-
"version": "2.
|
|
78
|
+
"version": "2.13.1"
|
|
79
79
|
}
|
|
@@ -117,6 +117,12 @@ export type FirebaseContextProviderProps = PropsWithChildren & {
|
|
|
117
117
|
* @defaultValue `true`
|
|
118
118
|
*/
|
|
119
119
|
remoteConfigEnabled?: boolean;
|
|
120
|
+
/**
|
|
121
|
+
* Firebase persistence type
|
|
122
|
+
* Applicable only for web version. Unsupported in native.
|
|
123
|
+
* @defaultValue 'LOCAL'
|
|
124
|
+
*/
|
|
125
|
+
authPersistenceType?: "SESSION" | "LOCAL" | "NONE" | "COOKIE";
|
|
120
126
|
};
|
|
121
127
|
/**
|
|
122
128
|
* FirebaseContextProvider component configures and provides Firebase services to its children.
|
|
@@ -128,6 +128,12 @@ export type FirebaseContextProviderProps = PropsWithChildren & {
|
|
|
128
128
|
* @defaultValue `true`
|
|
129
129
|
*/
|
|
130
130
|
remoteConfigEnabled?: boolean;
|
|
131
|
+
/**
|
|
132
|
+
* Firebase persistence type
|
|
133
|
+
* Applicable only for web version. Unsupported in native.
|
|
134
|
+
* @defaultValue 'LOCAL'
|
|
135
|
+
*/
|
|
136
|
+
authPersistenceType?: "SESSION" | "LOCAL" | "NONE" | "COOKIE";
|
|
131
137
|
};
|
|
132
138
|
|
|
133
139
|
/**
|
|
@@ -28,9 +28,9 @@ export const buildQueryConstraint = (constraint) => {
|
|
|
28
28
|
case "startAfter":
|
|
29
29
|
return startAfter(...constraint.arguments);
|
|
30
30
|
case "endAt":
|
|
31
|
-
return endAt(constraint.
|
|
31
|
+
return endAt(...constraint.arguments);
|
|
32
32
|
case "endBefore":
|
|
33
|
-
return endBefore(constraint.
|
|
33
|
+
return endBefore(...constraint.arguments);
|
|
34
34
|
case "limit":
|
|
35
35
|
return limit(constraint.limit);
|
|
36
36
|
case "limitToLast":
|
|
@@ -41,9 +41,9 @@ export const buildQueryConstraint = <AppModelType extends AppModel = AppModel>(
|
|
|
41
41
|
case "startAfter":
|
|
42
42
|
return startAfter(...constraint.arguments);
|
|
43
43
|
case "endAt":
|
|
44
|
-
return endAt(constraint.
|
|
44
|
+
return endAt(...constraint.arguments);
|
|
45
45
|
case "endBefore":
|
|
46
|
-
return endBefore(constraint.
|
|
46
|
+
return endBefore(...constraint.arguments);
|
|
47
47
|
case "limit":
|
|
48
48
|
return limit(constraint.limit);
|
|
49
49
|
case "limitToLast":
|
|
@@ -100,6 +100,11 @@ export type FirebaseContextProviderProps = PropsWithChildren & {
|
|
|
100
100
|
* @defaultValue `true`
|
|
101
101
|
*/
|
|
102
102
|
remoteConfigEnabled?: boolean;
|
|
103
|
+
/**
|
|
104
|
+
* Firebase persistence type
|
|
105
|
+
* @defaultValue 'LOCAL'
|
|
106
|
+
*/
|
|
107
|
+
authPersistenceType?: "SESSION" | "LOCAL" | "NONE" | "COOKIE";
|
|
103
108
|
};
|
|
104
109
|
/**
|
|
105
110
|
* FirebaseContextProvider component configures and provides Firebase services to its children.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React, { useEffect, useMemo } from "react";
|
|
2
2
|
import { FirebaseContext } from "./FirebaseContext";
|
|
3
|
-
import { connectAuthEmulator, getAuth } from "firebase/auth";
|
|
3
|
+
import { browserLocalPersistence, browserSessionPersistence, connectAuthEmulator, getAuth, setPersistence } from "firebase/auth";
|
|
4
4
|
import { getAnalytics, setAnalyticsCollectionEnabled, setConsent } from "firebase/analytics";
|
|
5
5
|
import { getRemoteConfig } from "firebase/remote-config";
|
|
6
6
|
import { connectFirestoreEmulator, initializeFirestore } from "firebase/firestore";
|
|
@@ -28,7 +28,7 @@ import { initializeApp } from "firebase/app";
|
|
|
28
28
|
* };
|
|
29
29
|
* ```
|
|
30
30
|
*/
|
|
31
|
-
export const FirebaseContextProvider = ({ emulators, options, children, authEnabled = true, firestoreEnabled = true, analyticsEnabled = true, consentSettings = {}, remoteConfigEnabled = true, remoteConfigSettings, remoteConfigDefaults = {}, firestoreSettings }) => {
|
|
31
|
+
export const FirebaseContextProvider = ({ emulators, options, children, authEnabled = true, firestoreEnabled = true, analyticsEnabled = true, consentSettings = {}, remoteConfigEnabled = true, remoteConfigSettings, remoteConfigDefaults = {}, firestoreSettings, authPersistenceType }) => {
|
|
32
32
|
const firebase = useMemo(() => {
|
|
33
33
|
return initializeApp(options);
|
|
34
34
|
}, [options]);
|
|
@@ -54,6 +54,18 @@ export const FirebaseContextProvider = ({ emulators, options, children, authEnab
|
|
|
54
54
|
}
|
|
55
55
|
return null;
|
|
56
56
|
}, [firestoreSettings, emulators?.firestore, firestoreEnabled, firebase]);
|
|
57
|
+
const authPersistence = useMemo(() => {
|
|
58
|
+
switch (authPersistenceType) {
|
|
59
|
+
case "NONE":
|
|
60
|
+
case "COOKIE":
|
|
61
|
+
return { type: "NONE" };
|
|
62
|
+
case "SESSION":
|
|
63
|
+
return browserSessionPersistence;
|
|
64
|
+
default:
|
|
65
|
+
case "LOCAL":
|
|
66
|
+
return browserLocalPersistence;
|
|
67
|
+
}
|
|
68
|
+
}, [authPersistenceType]);
|
|
57
69
|
const auth = useMemo(() => {
|
|
58
70
|
if (authEnabled) {
|
|
59
71
|
const localAuth = getAuth(firebase);
|
|
@@ -66,6 +78,11 @@ export const FirebaseContextProvider = ({ emulators, options, children, authEnab
|
|
|
66
78
|
}
|
|
67
79
|
return null;
|
|
68
80
|
}, [emulators?.auth, authEnabled, firebase]);
|
|
81
|
+
useEffect(() => {
|
|
82
|
+
if (authPersistence && auth) {
|
|
83
|
+
setPersistence(auth, authPersistence);
|
|
84
|
+
}
|
|
85
|
+
}, [auth, authPersistence]);
|
|
69
86
|
const analytics = useMemo(() => {
|
|
70
87
|
if (analyticsEnabled && options.measurementId && typeof window !== "undefined") {
|
|
71
88
|
return getAnalytics(firebase);
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
import React, { PropsWithChildren, useEffect, useMemo } from "react";
|
|
2
2
|
import { FirebaseContext } from "./FirebaseContext";
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
browserLocalPersistence,
|
|
5
|
+
browserSessionPersistence,
|
|
6
|
+
connectAuthEmulator,
|
|
7
|
+
getAuth,
|
|
8
|
+
Persistence,
|
|
9
|
+
setPersistence
|
|
10
|
+
} from "firebase/auth";
|
|
4
11
|
import { ConsentSettings, getAnalytics, setAnalyticsCollectionEnabled, setConsent } from "firebase/analytics";
|
|
5
12
|
import { getRemoteConfig, RemoteConfigSettings } from "firebase/remote-config";
|
|
6
13
|
import { connectFirestoreEmulator, FirestoreSettings, initializeFirestore } from "firebase/firestore";
|
|
@@ -104,6 +111,11 @@ export type FirebaseContextProviderProps = PropsWithChildren & {
|
|
|
104
111
|
* @defaultValue `true`
|
|
105
112
|
*/
|
|
106
113
|
remoteConfigEnabled?: boolean;
|
|
114
|
+
/**
|
|
115
|
+
* Firebase persistence type
|
|
116
|
+
* @defaultValue 'LOCAL'
|
|
117
|
+
*/
|
|
118
|
+
authPersistenceType?: "SESSION" | "LOCAL" | "NONE" | "COOKIE";
|
|
107
119
|
};
|
|
108
120
|
|
|
109
121
|
/**
|
|
@@ -140,7 +152,8 @@ export const FirebaseContextProvider: React.FC<FirebaseContextProviderProps> = (
|
|
|
140
152
|
remoteConfigEnabled = true,
|
|
141
153
|
remoteConfigSettings,
|
|
142
154
|
remoteConfigDefaults = {},
|
|
143
|
-
firestoreSettings
|
|
155
|
+
firestoreSettings,
|
|
156
|
+
authPersistenceType
|
|
144
157
|
}) => {
|
|
145
158
|
const firebase = useMemo(() => {
|
|
146
159
|
return initializeApp(options);
|
|
@@ -173,6 +186,19 @@ export const FirebaseContextProvider: React.FC<FirebaseContextProviderProps> = (
|
|
|
173
186
|
return null;
|
|
174
187
|
}, [firestoreSettings, emulators?.firestore, firestoreEnabled, firebase]);
|
|
175
188
|
|
|
189
|
+
const authPersistence = useMemo(() => {
|
|
190
|
+
switch (authPersistenceType) {
|
|
191
|
+
case "NONE":
|
|
192
|
+
case "COOKIE":
|
|
193
|
+
return { type: "NONE" } as Persistence;
|
|
194
|
+
case "SESSION":
|
|
195
|
+
return browserSessionPersistence;
|
|
196
|
+
default:
|
|
197
|
+
case "LOCAL":
|
|
198
|
+
return browserLocalPersistence;
|
|
199
|
+
}
|
|
200
|
+
}, [authPersistenceType]);
|
|
201
|
+
|
|
176
202
|
const auth = useMemo(() => {
|
|
177
203
|
if (authEnabled) {
|
|
178
204
|
const localAuth = getAuth(firebase);
|
|
@@ -186,6 +212,12 @@ export const FirebaseContextProvider: React.FC<FirebaseContextProviderProps> = (
|
|
|
186
212
|
return null;
|
|
187
213
|
}, [emulators?.auth, authEnabled, firebase]);
|
|
188
214
|
|
|
215
|
+
useEffect(() => {
|
|
216
|
+
if (authPersistence && auth) {
|
|
217
|
+
setPersistence(auth, authPersistence);
|
|
218
|
+
}
|
|
219
|
+
}, [auth, authPersistence]);
|
|
220
|
+
|
|
189
221
|
const analytics = useMemo(() => {
|
|
190
222
|
if (analyticsEnabled && options.measurementId && typeof window !== "undefined") {
|
|
191
223
|
return getAnalytics(firebase);
|
|
@@ -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("
|
|
37
|
+
export declare const useCompositeFilter: <AppModelType extends AppModel = AppModel>({ query }: UseCompositeFilter<AppModelType>) => import("firebase/firestore").QueryCompositeFilterConstraint | undefined;
|
|
@@ -25,4 +25,4 @@ export type UseDocReferencesOptions<AppModelType extends AppModel = AppModel> =
|
|
|
25
25
|
* };
|
|
26
26
|
* ```
|
|
27
27
|
*/
|
|
28
|
-
export declare const useDocReferences: <AppModelType extends AppModel = AppModel>({ references }: UseDocReferencesOptions<AppModelType>) => (import("
|
|
28
|
+
export declare const useDocReferences: <AppModelType extends AppModel = AppModel>({ references }: UseDocReferencesOptions<AppModelType>) => (import("firebase/firestore").DocumentReference<AppModelType, AppModelType> | null)[];
|
|
@@ -28,9 +28,9 @@ export const buildQueryConstraint = (constraint) => {
|
|
|
28
28
|
case "startAfter":
|
|
29
29
|
return startAfter(...constraint.arguments);
|
|
30
30
|
case "endAt":
|
|
31
|
-
return endAt(constraint.
|
|
31
|
+
return endAt(...constraint.arguments);
|
|
32
32
|
case "endBefore":
|
|
33
|
-
return endBefore(constraint.
|
|
33
|
+
return endBefore(...constraint.arguments);
|
|
34
34
|
case "limit":
|
|
35
35
|
return limit(constraint.limit);
|
|
36
36
|
case "limitToLast":
|
|
@@ -42,9 +42,9 @@ export const buildQueryConstraint = <AppModelType extends AppModel = AppModel>(
|
|
|
42
42
|
case "startAfter":
|
|
43
43
|
return startAfter(...constraint.arguments);
|
|
44
44
|
case "endAt":
|
|
45
|
-
return endAt(constraint.
|
|
45
|
+
return endAt(...constraint.arguments);
|
|
46
46
|
case "endBefore":
|
|
47
|
-
return endBefore(constraint.
|
|
47
|
+
return endBefore(...constraint.arguments);
|
|
48
48
|
case "limit":
|
|
49
49
|
return limit(constraint.limit);
|
|
50
50
|
case "limitToLast":
|
|
@@ -15,4 +15,4 @@ export type GetDocSnapOptions<AppModelType extends AppModel = AppModel> = GetDoc
|
|
|
15
15
|
*
|
|
16
16
|
* @returns {Promise<DocumentSnapshot<AppModelType, AppModelType> | null>} Returns a document reference
|
|
17
17
|
*/
|
|
18
|
-
export declare const getDocSnap: <AppModelType extends AppModel = AppModel>({ db, reference, path, pathSegments }: GetDocSnapOptions<AppModelType>) => Promise<import("
|
|
18
|
+
export declare const getDocSnap: <AppModelType extends AppModel = AppModel>({ db, reference, path, pathSegments }: GetDocSnapOptions<AppModelType>) => Promise<import("firebase/firestore").DocumentSnapshot<AppModelType, AppModelType> | null>;
|
|
@@ -4,4 +4,4 @@
|
|
|
4
4
|
* @param {string} key - The key for which the corresponding value is to be fetched from the remote configuration.
|
|
5
5
|
* @returns {any | null} The value associated with the specified key if available, otherwise null.
|
|
6
6
|
*/
|
|
7
|
-
export declare const useGetValue: (key: string) => import("
|
|
7
|
+
export declare const useGetValue: (key: string) => import("firebase/remote-config").Value | null;
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
* Hook to access the Firebase Remote Config instance from the context.
|
|
3
3
|
* @returns {RemoteConfig} The remoteConfig object from the Firebase context.
|
|
4
4
|
*/
|
|
5
|
-
export declare const useRemoteConfig: () => import("
|
|
5
|
+
export declare const useRemoteConfig: () => import("firebase/remote-config").RemoteConfig;
|