reactfire 4.0.1 → 4.2.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/dist/SuspenseSubject.d.ts +1 -1
- package/dist/functions.d.ts +12 -0
- package/dist/index.d.ts +1 -0
- package/dist/reactfire.cjs.development.js +106 -69
- package/dist/reactfire.cjs.development.js.map +1 -1
- package/dist/reactfire.cjs.production.min.js +1 -1
- package/dist/reactfire.cjs.production.min.js.map +1 -1
- package/dist/reactfire.esm.js +94 -73
- package/dist/reactfire.esm.js.map +1 -1
- package/dist/sdk.d.ts +22 -1
- package/package.json +7 -5
- package/src/SuspenseSubject.ts +4 -2
- package/src/functions.tsx +26 -0
- package/src/index.ts +1 -0
- package/src/sdk.tsx +18 -8
- package/src/storage.tsx +2 -24
- package/src/useObservable.ts +48 -28
|
@@ -12,7 +12,7 @@ export declare class SuspenseSubject<T> extends Subject<T> {
|
|
|
12
12
|
private _resolveFirstEmission;
|
|
13
13
|
constructor(innerObservable: Observable<T>, _timeoutWindow: number);
|
|
14
14
|
get hasValue(): boolean;
|
|
15
|
-
get value(): T
|
|
15
|
+
get value(): T;
|
|
16
16
|
get firstEmission(): Promise<void>;
|
|
17
17
|
private _next;
|
|
18
18
|
private _reset;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ReactFireOptions, ObservableStatus } from './';
|
|
2
|
+
import type { HttpsCallableOptions } from 'firebase/functions';
|
|
3
|
+
/**
|
|
4
|
+
* Calls a callable function.
|
|
5
|
+
*
|
|
6
|
+
* @param functionName - The name of the function to call
|
|
7
|
+
* @param options
|
|
8
|
+
*/
|
|
9
|
+
export declare function useCallableFunctionResponse<RequestData, ResponseData>(functionName: string, options?: ReactFireOptions<ResponseData> & {
|
|
10
|
+
httpsCallableOptions?: HttpsCallableOptions;
|
|
11
|
+
data?: RequestData;
|
|
12
|
+
}): ObservableStatus<ResponseData>;
|
package/dist/index.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ var app = require('firebase/app');
|
|
|
10
10
|
var database = require('rxfire/database');
|
|
11
11
|
var firestore = require('rxfire/firestore');
|
|
12
12
|
var firestore$1 = require('firebase/firestore');
|
|
13
|
+
var functions = require('rxfire/functions');
|
|
13
14
|
var remoteConfig = require('rxfire/remote-config');
|
|
14
15
|
var storage = require('rxfire/storage');
|
|
15
16
|
var storage$1 = require('firebase/storage');
|
|
@@ -962,7 +963,7 @@ var DEFAULT_APP_NAME = '[DEFAULT]';
|
|
|
962
963
|
var FirebaseAppContext = /*#__PURE__*/React.createContext(undefined);
|
|
963
964
|
var SuspenseEnabledContext = /*#__PURE__*/React.createContext(false); // @ts-expect-error: "__REACTFIRE_VERSION__" is replaced with actual ReactFire version (see babel.config.js)
|
|
964
965
|
|
|
965
|
-
var version = "4.
|
|
966
|
+
var version = "4.2.1";
|
|
966
967
|
|
|
967
968
|
var shallowEq = function shallowEq(a, b) {
|
|
968
969
|
return a === b || [].concat(Object.keys(a), Object.keys(b)).every(function (key) {
|
|
@@ -1442,6 +1443,8 @@ var SuspenseSubject = /*#__PURE__*/function (_Subject) {
|
|
|
1442
1443
|
// As it is now, this will burn the cache entry until the timeout fires.
|
|
1443
1444
|
if (this._error) {
|
|
1444
1445
|
throw this._error;
|
|
1446
|
+
} else if (!this.hasValue) {
|
|
1447
|
+
throw Error('Can only get value if SuspenseSubject has a value');
|
|
1445
1448
|
}
|
|
1446
1449
|
|
|
1447
1450
|
return this._value;
|
|
@@ -1481,6 +1484,39 @@ function preloadObservable(source, id) {
|
|
|
1481
1484
|
return observable;
|
|
1482
1485
|
}
|
|
1483
1486
|
}
|
|
1487
|
+
|
|
1488
|
+
function reducerFactory(observable) {
|
|
1489
|
+
return function reducer(state, action) {
|
|
1490
|
+
// always make sure these values are in sync with the observable
|
|
1491
|
+
var newState = _extends({}, state, {
|
|
1492
|
+
hasEmitted: state.hasEmitted || observable.hasValue,
|
|
1493
|
+
error: observable.ourError,
|
|
1494
|
+
firstValuePromise: observable.firstEmission
|
|
1495
|
+
});
|
|
1496
|
+
|
|
1497
|
+
if (observable.hasValue) {
|
|
1498
|
+
newState.data = observable.value;
|
|
1499
|
+
}
|
|
1500
|
+
|
|
1501
|
+
switch (action) {
|
|
1502
|
+
case 'value':
|
|
1503
|
+
newState.status = 'success';
|
|
1504
|
+
return newState;
|
|
1505
|
+
|
|
1506
|
+
case 'error':
|
|
1507
|
+
newState.status = 'error';
|
|
1508
|
+
return newState;
|
|
1509
|
+
|
|
1510
|
+
case 'complete':
|
|
1511
|
+
newState.isComplete = true;
|
|
1512
|
+
return newState;
|
|
1513
|
+
|
|
1514
|
+
default:
|
|
1515
|
+
throw new Error("invalid action \"" + action + "\"");
|
|
1516
|
+
}
|
|
1517
|
+
};
|
|
1518
|
+
}
|
|
1519
|
+
|
|
1484
1520
|
function useObservable(observableId, source, config) {
|
|
1485
1521
|
var _config$initialData, _config, _config2;
|
|
1486
1522
|
|
|
@@ -1488,71 +1524,52 @@ function useObservable(observableId, source, config) {
|
|
|
1488
1524
|
config = {};
|
|
1489
1525
|
}
|
|
1490
1526
|
|
|
1527
|
+
// Register the observable with the cache
|
|
1491
1528
|
if (!observableId) {
|
|
1492
1529
|
throw new Error('cannot call useObservable without an observableId');
|
|
1493
1530
|
}
|
|
1494
1531
|
|
|
1495
|
-
var observable = preloadObservable(source, observableId);
|
|
1532
|
+
var observable = preloadObservable(source, observableId); // Suspend if suspense is enabled and no initial data exists
|
|
1533
|
+
|
|
1496
1534
|
var hasInitialData = config.hasOwnProperty('initialData') || config.hasOwnProperty('startWithValue');
|
|
1535
|
+
var hasData = observable.hasValue || hasInitialData;
|
|
1497
1536
|
var suspenseEnabled = useSuspenseEnabledFromConfigAndContext(config.suspense);
|
|
1498
1537
|
|
|
1499
|
-
if (suspenseEnabled === true && !
|
|
1538
|
+
if (suspenseEnabled === true && !hasData) {
|
|
1500
1539
|
throw observable.firstEmission;
|
|
1501
1540
|
}
|
|
1502
1541
|
|
|
1503
|
-
var
|
|
1504
|
-
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
|
|
1508
|
-
|
|
1509
|
-
|
|
1510
|
-
|
|
1511
|
-
var _React$useState2 = React.useState(false),
|
|
1512
|
-
isComplete = _React$useState2[0],
|
|
1513
|
-
setIsComplete = _React$useState2[1];
|
|
1542
|
+
var initialState = {
|
|
1543
|
+
status: hasData ? 'success' : 'loading',
|
|
1544
|
+
hasEmitted: hasData,
|
|
1545
|
+
isComplete: false,
|
|
1546
|
+
data: observable.hasValue ? observable.value : (_config$initialData = (_config = config) == null ? void 0 : _config.initialData) != null ? _config$initialData : (_config2 = config) == null ? void 0 : _config2.startWithValue,
|
|
1547
|
+
error: observable.ourError,
|
|
1548
|
+
firstValuePromise: observable.firstEmission
|
|
1549
|
+
};
|
|
1514
1550
|
|
|
1515
|
-
var _React$
|
|
1516
|
-
|
|
1517
|
-
|
|
1551
|
+
var _React$useReducer = React.useReducer(reducerFactory(observable), initialState),
|
|
1552
|
+
status = _React$useReducer[0],
|
|
1553
|
+
dispatch = _React$useReducer[1];
|
|
1518
1554
|
|
|
1519
1555
|
React.useEffect(function () {
|
|
1520
1556
|
var subscription = observable.subscribe({
|
|
1521
|
-
next: function next(
|
|
1522
|
-
|
|
1523
|
-
return v;
|
|
1524
|
-
});
|
|
1557
|
+
next: function next() {
|
|
1558
|
+
dispatch('value');
|
|
1525
1559
|
},
|
|
1526
1560
|
error: function error(e) {
|
|
1527
|
-
|
|
1561
|
+
dispatch('error');
|
|
1528
1562
|
throw e;
|
|
1529
1563
|
},
|
|
1530
1564
|
complete: function complete() {
|
|
1531
|
-
|
|
1565
|
+
dispatch('complete');
|
|
1532
1566
|
}
|
|
1533
1567
|
});
|
|
1534
1568
|
return function () {
|
|
1535
1569
|
return subscription.unsubscribe();
|
|
1536
1570
|
};
|
|
1537
1571
|
}, [observable]);
|
|
1538
|
-
|
|
1539
|
-
|
|
1540
|
-
if (hasError) {
|
|
1541
|
-
status = 'error';
|
|
1542
|
-
} else if (observable.hasValue || hasInitialData) {
|
|
1543
|
-
status = 'success';
|
|
1544
|
-
} else {
|
|
1545
|
-
status = 'loading';
|
|
1546
|
-
}
|
|
1547
|
-
|
|
1548
|
-
return {
|
|
1549
|
-
status: status,
|
|
1550
|
-
hasEmitted: observable.hasValue || hasInitialData,
|
|
1551
|
-
isComplete: isComplete,
|
|
1552
|
-
data: latest,
|
|
1553
|
-
error: observable.ourError,
|
|
1554
|
-
firstValuePromise: observable.firstEmission
|
|
1555
|
-
};
|
|
1572
|
+
return status;
|
|
1556
1573
|
}
|
|
1557
1574
|
|
|
1558
1575
|
var cachedQueries$1 = globalThis._reactFireFirestoreQueryCache || [];
|
|
@@ -1677,6 +1694,21 @@ function useFirestoreCollectionData(query, options) {
|
|
|
1677
1694
|
return useObservable(observableId, observable$, options);
|
|
1678
1695
|
}
|
|
1679
1696
|
|
|
1697
|
+
/**
|
|
1698
|
+
* Calls a callable function.
|
|
1699
|
+
*
|
|
1700
|
+
* @param functionName - The name of the function to call
|
|
1701
|
+
* @param options
|
|
1702
|
+
*/
|
|
1703
|
+
|
|
1704
|
+
function useCallableFunctionResponse(functionName, options) {
|
|
1705
|
+
var functions$1 = useFunctions();
|
|
1706
|
+
var observableId = "functions:callableResponse:" + functionName + ":" + JSON.stringify(options == null ? void 0 : options.data) + ":" + JSON.stringify(options == null ? void 0 : options.httpsCallableOptions);
|
|
1707
|
+
var obsFactory = functions.httpsCallable(functions$1, functionName, options == null ? void 0 : options.httpsCallableOptions);
|
|
1708
|
+
var observable$ = obsFactory(options == null ? void 0 : options.data);
|
|
1709
|
+
return useObservable(observableId, observable$, options);
|
|
1710
|
+
}
|
|
1711
|
+
|
|
1680
1712
|
function SuspenseWithPerf(_ref) {
|
|
1681
1713
|
var _performance;
|
|
1682
1714
|
|
|
@@ -1769,30 +1801,6 @@ function useRemoteConfigAll(key) {
|
|
|
1769
1801
|
}
|
|
1770
1802
|
|
|
1771
1803
|
var _excluded = ["storage", "storagePath", "suspense", "placeHolder"];
|
|
1772
|
-
/**
|
|
1773
|
-
* modified version of rxFire's _fromTask
|
|
1774
|
-
*
|
|
1775
|
-
* @param task
|
|
1776
|
-
*/
|
|
1777
|
-
|
|
1778
|
-
function _fromTask(task) {
|
|
1779
|
-
return new rxjs.Observable(function (subscriber) {
|
|
1780
|
-
var progress = function progress(snap) {
|
|
1781
|
-
return subscriber.next(snap);
|
|
1782
|
-
};
|
|
1783
|
-
|
|
1784
|
-
var error = function error(e) {
|
|
1785
|
-
return subscriber.error(e);
|
|
1786
|
-
};
|
|
1787
|
-
|
|
1788
|
-
var complete = function complete() {
|
|
1789
|
-
return subscriber.complete();
|
|
1790
|
-
};
|
|
1791
|
-
|
|
1792
|
-
task.on('state_changed', progress, error, complete); // I REMOVED THE UNSUBSCRIBE RETURN BECAUSE IT CANCELS THE UPLOAD
|
|
1793
|
-
// https://github.com/firebase/firebase-js-sdk/issues/1659
|
|
1794
|
-
});
|
|
1795
|
-
}
|
|
1796
1804
|
/**
|
|
1797
1805
|
* Subscribe to the progress of a storage task
|
|
1798
1806
|
*
|
|
@@ -1801,12 +1809,9 @@ function _fromTask(task) {
|
|
|
1801
1809
|
* @param options
|
|
1802
1810
|
*/
|
|
1803
1811
|
|
|
1804
|
-
|
|
1805
1812
|
function useStorageTask(task, ref, options) {
|
|
1806
1813
|
var observableId = "storage:task:" + ref.toString();
|
|
1807
|
-
|
|
1808
|
-
var observable$ = _fromTask(task);
|
|
1809
|
-
|
|
1814
|
+
var observable$ = storage.fromTask(task);
|
|
1810
1815
|
return useObservable(observableId, observable$, options);
|
|
1811
1816
|
}
|
|
1812
1817
|
/**
|
|
@@ -1873,10 +1878,12 @@ function StorageImage(props) {
|
|
|
1873
1878
|
}
|
|
1874
1879
|
}
|
|
1875
1880
|
|
|
1881
|
+
var AppCheckSdkContext = /*#__PURE__*/React.createContext(undefined);
|
|
1876
1882
|
var AuthSdkContext = /*#__PURE__*/React.createContext(undefined);
|
|
1877
1883
|
var AnalyticsSdkContext = /*#__PURE__*/React.createContext(undefined);
|
|
1878
1884
|
var DatabaseSdkContext = /*#__PURE__*/React.createContext(undefined);
|
|
1879
1885
|
var FirestoreSdkContext = /*#__PURE__*/React.createContext(undefined);
|
|
1886
|
+
var FunctionsSdkContext = /*#__PURE__*/React.createContext(undefined);
|
|
1880
1887
|
var StorageSdkContext = /*#__PURE__*/React.createContext(undefined);
|
|
1881
1888
|
var PerformanceSdkContext = /*#__PURE__*/React.createContext(undefined);
|
|
1882
1889
|
var RemoteConfigSdkContext = /*#__PURE__*/React.createContext(undefined);
|
|
@@ -1920,13 +1927,18 @@ function useInitSdk(sdkName, SdkContext, sdkInitializer, options) {
|
|
|
1920
1927
|
return useObservable("firebase-sdk:" + sdkName + ":" + firebaseApp.name, rxjs.from(initializeSdk), options);
|
|
1921
1928
|
}
|
|
1922
1929
|
|
|
1930
|
+
var AppCheckProvider = /*#__PURE__*/getSdkProvider(AppCheckSdkContext);
|
|
1923
1931
|
var AuthProvider = /*#__PURE__*/getSdkProvider(AuthSdkContext);
|
|
1924
1932
|
var AnalyticsProvider = /*#__PURE__*/getSdkProvider(AnalyticsSdkContext);
|
|
1925
1933
|
var DatabaseProvider = /*#__PURE__*/getSdkProvider(DatabaseSdkContext);
|
|
1926
1934
|
var FirestoreProvider = /*#__PURE__*/getSdkProvider(FirestoreSdkContext);
|
|
1935
|
+
var FunctionsProvider = /*#__PURE__*/getSdkProvider(FunctionsSdkContext);
|
|
1927
1936
|
var PerformanceProvider = /*#__PURE__*/getSdkProvider(PerformanceSdkContext);
|
|
1928
1937
|
var StorageProvider = /*#__PURE__*/getSdkProvider(StorageSdkContext);
|
|
1929
1938
|
var RemoteConfigProvider = /*#__PURE__*/getSdkProvider(RemoteConfigSdkContext);
|
|
1939
|
+
var useAppCheck = function useAppCheck() {
|
|
1940
|
+
return useSdk(AppCheckSdkContext);
|
|
1941
|
+
};
|
|
1930
1942
|
var useAuth = function useAuth() {
|
|
1931
1943
|
return useSdk(AuthSdkContext);
|
|
1932
1944
|
};
|
|
@@ -1939,6 +1951,9 @@ var useDatabase = function useDatabase() {
|
|
|
1939
1951
|
var useFirestore = function useFirestore() {
|
|
1940
1952
|
return useSdk(FirestoreSdkContext);
|
|
1941
1953
|
};
|
|
1954
|
+
var useFunctions = function useFunctions() {
|
|
1955
|
+
return useSdk(FunctionsSdkContext);
|
|
1956
|
+
};
|
|
1942
1957
|
var usePerformance = function usePerformance() {
|
|
1943
1958
|
return useSdk(PerformanceSdkContext);
|
|
1944
1959
|
};
|
|
@@ -1948,6 +1963,9 @@ var useStorage = function useStorage() {
|
|
|
1948
1963
|
var useRemoteConfig = function useRemoteConfig() {
|
|
1949
1964
|
return useSdk(RemoteConfigSdkContext);
|
|
1950
1965
|
};
|
|
1966
|
+
var useInitAppCheck = function useInitAppCheck(initializer, options) {
|
|
1967
|
+
return useInitSdk('appcheck', AppCheckSdkContext, initializer, options);
|
|
1968
|
+
};
|
|
1951
1969
|
var useInitAuth = function useInitAuth(initializer, options) {
|
|
1952
1970
|
return useInitSdk('auth', AuthSdkContext, initializer, options);
|
|
1953
1971
|
};
|
|
@@ -1960,6 +1978,9 @@ var useInitDatabase = function useInitDatabase(initializer, options) {
|
|
|
1960
1978
|
var useInitFirestore = function useInitFirestore(initializer, options) {
|
|
1961
1979
|
return useInitSdk('firestore', FirestoreSdkContext, initializer, options);
|
|
1962
1980
|
};
|
|
1981
|
+
var useInitFunctions = function useInitFunctions(initializer, options) {
|
|
1982
|
+
return useInitSdk('functions', FunctionsSdkContext, initializer, options);
|
|
1983
|
+
};
|
|
1963
1984
|
var useInitPerformance = function useInitPerformance(initializer, options) {
|
|
1964
1985
|
return useInitSdk('performance', PerformanceSdkContext, initializer, options);
|
|
1965
1986
|
};
|
|
@@ -2006,17 +2027,28 @@ function checkIdField(options) {
|
|
|
2006
2027
|
}
|
|
2007
2028
|
|
|
2008
2029
|
exports.AnalyticsProvider = AnalyticsProvider;
|
|
2030
|
+
exports.AnalyticsSdkContext = AnalyticsSdkContext;
|
|
2031
|
+
exports.AppCheckProvider = AppCheckProvider;
|
|
2032
|
+
exports.AppCheckSdkContext = AppCheckSdkContext;
|
|
2009
2033
|
exports.AuthCheck = AuthCheck;
|
|
2010
2034
|
exports.AuthProvider = AuthProvider;
|
|
2035
|
+
exports.AuthSdkContext = AuthSdkContext;
|
|
2011
2036
|
exports.ClaimsCheck = ClaimsCheck;
|
|
2012
2037
|
exports.DatabaseProvider = DatabaseProvider;
|
|
2038
|
+
exports.DatabaseSdkContext = DatabaseSdkContext;
|
|
2013
2039
|
exports.FirebaseAppProvider = FirebaseAppProvider;
|
|
2014
2040
|
exports.FirestoreProvider = FirestoreProvider;
|
|
2041
|
+
exports.FirestoreSdkContext = FirestoreSdkContext;
|
|
2042
|
+
exports.FunctionsProvider = FunctionsProvider;
|
|
2043
|
+
exports.FunctionsSdkContext = FunctionsSdkContext;
|
|
2015
2044
|
exports.PerformanceProvider = PerformanceProvider;
|
|
2045
|
+
exports.PerformanceSdkContext = PerformanceSdkContext;
|
|
2016
2046
|
exports.ReactFireError = ReactFireError;
|
|
2017
2047
|
exports.RemoteConfigProvider = RemoteConfigProvider;
|
|
2048
|
+
exports.RemoteConfigSdkContext = RemoteConfigSdkContext;
|
|
2018
2049
|
exports.StorageImage = StorageImage;
|
|
2019
2050
|
exports.StorageProvider = StorageProvider;
|
|
2051
|
+
exports.StorageSdkContext = StorageSdkContext;
|
|
2020
2052
|
exports.SuspenseWithPerf = SuspenseWithPerf;
|
|
2021
2053
|
exports.checkIdField = checkIdField;
|
|
2022
2054
|
exports.checkOptions = checkOptions;
|
|
@@ -2025,7 +2057,9 @@ exports.preloadFirestoreDoc = preloadFirestoreDoc;
|
|
|
2025
2057
|
exports.preloadObservable = preloadObservable;
|
|
2026
2058
|
exports.preloadUser = preloadUser;
|
|
2027
2059
|
exports.useAnalytics = useAnalytics;
|
|
2060
|
+
exports.useAppCheck = useAppCheck;
|
|
2028
2061
|
exports.useAuth = useAuth;
|
|
2062
|
+
exports.useCallableFunctionResponse = useCallableFunctionResponse;
|
|
2029
2063
|
exports.useDatabase = useDatabase;
|
|
2030
2064
|
exports.useDatabaseList = useDatabaseList;
|
|
2031
2065
|
exports.useDatabaseListData = useDatabaseListData;
|
|
@@ -2039,11 +2073,14 @@ exports.useFirestoreDoc = useFirestoreDoc;
|
|
|
2039
2073
|
exports.useFirestoreDocData = useFirestoreDocData;
|
|
2040
2074
|
exports.useFirestoreDocDataOnce = useFirestoreDocDataOnce;
|
|
2041
2075
|
exports.useFirestoreDocOnce = useFirestoreDocOnce;
|
|
2076
|
+
exports.useFunctions = useFunctions;
|
|
2042
2077
|
exports.useIdTokenResult = useIdTokenResult;
|
|
2043
2078
|
exports.useInitAnalytics = useInitAnalytics;
|
|
2079
|
+
exports.useInitAppCheck = useInitAppCheck;
|
|
2044
2080
|
exports.useInitAuth = useInitAuth;
|
|
2045
2081
|
exports.useInitDatabase = useInitDatabase;
|
|
2046
2082
|
exports.useInitFirestore = useInitFirestore;
|
|
2083
|
+
exports.useInitFunctions = useInitFunctions;
|
|
2047
2084
|
exports.useInitPerformance = useInitPerformance;
|
|
2048
2085
|
exports.useInitRemoteConfig = useInitRemoteConfig;
|
|
2049
2086
|
exports.useInitStorage = useInitStorage;
|