UNPKG

react-firehooks

Version:

Lightweight dependency-free collection of React hooks for Firebase

32 lines (31 loc) 1.99 kB
import { onSnapshot, } from "firebase/firestore"; import { useCallback } from "react"; import { useListen } from "../internal/useListen.js"; import { LoadingState } from "../internal/useLoadingValue.js"; import { isDocRefEqual } from "./internal.js"; /** * Returns and updates the data of a Firestore DocumentReference * @template AppModelType Shape of the data after it was converted from firestore * @template DbModelType Shape of the data in firestore * @param reference Firestore DocumentReference that will be subscribed to * @param options Options to configure the subscription * `initialValue`: Value that is returned while the document is being fetched. * @returns Document data, loading state, and error * - value: Document data; `undefined` if document does not exist, is currently being fetched, or an error occurred * - loading: `true` while fetching the document; `false` if the document was fetched successfully or an error occurred * - error: `undefined` if no error occurred */ export function useDocumentData(reference, options) { var _a; const { snapshotListenOptions, snapshotOptions } = options !== null && options !== void 0 ? options : {}; const { includeMetadataChanges = false, source = "default" } = (snapshotListenOptions !== null && snapshotListenOptions !== void 0 ? snapshotListenOptions : {}); const { serverTimestamps = "none" } = snapshotOptions !== null && snapshotOptions !== void 0 ? snapshotOptions : {}; const onChange = useCallback((stableRef, next, error) => onSnapshot(stableRef, { includeMetadataChanges, source, }, { next: (snap) => next(snap.data({ serverTimestamps })), error, }), [includeMetadataChanges, serverTimestamps, source]); return useListen(reference !== null && reference !== void 0 ? reference : undefined, onChange, isDocRefEqual, (_a = options === null || options === void 0 ? void 0 : options.initialValue) !== null && _a !== void 0 ? _a : LoadingState); }