( query?: Query<T> | null, options?: OnceOptions )
| 59 | }; |
| 60 | |
| 61 | export const useCollectionOnce = <T = DocumentData>( |
| 62 | query?: Query<T> | null, |
| 63 | options?: OnceOptions |
| 64 | ): CollectionOnceHook<T> => { |
| 65 | const { error, loading, reset, setError, setValue, value } = useLoadingValue< |
| 66 | QuerySnapshot<T>, |
| 67 | FirestoreError |
| 68 | >(); |
| 69 | const isMounted = useIsMounted(); |
| 70 | const ref = useIsFirestoreQueryEqual<Query<T>>(query, reset); |
| 71 | |
| 72 | const loadData = useCallback( |
| 73 | async (query?: Query<T> | null, options?: Options & OnceOptions) => { |
| 74 | if (!query) { |
| 75 | setValue(undefined); |
| 76 | return; |
| 77 | } |
| 78 | const get = getDocsFnFromGetOptions(options?.getOptions); |
| 79 | |
| 80 | try { |
| 81 | const result = await get(query); |
| 82 | if (isMounted) { |
| 83 | setValue(result); |
| 84 | } |
| 85 | } catch (error) { |
| 86 | if (isMounted) { |
| 87 | setError(error as FirestoreError); |
| 88 | } |
| 89 | } |
| 90 | }, |
| 91 | [] |
| 92 | ); |
| 93 | |
| 94 | const reloadData = useCallback(() => loadData(ref.current, options), [ |
| 95 | loadData, |
| 96 | ref.current, |
| 97 | ]); |
| 98 | |
| 99 | useEffect(() => { |
| 100 | loadData(ref.current, options); |
| 101 | }, [ref.current]); |
| 102 | |
| 103 | return [value as QuerySnapshot<T>, loading, error, reloadData]; |
| 104 | }; |
| 105 | |
| 106 | export const useCollectionData = <T = DocumentData>( |
| 107 | query?: Query<T> | null, |
no test coverage detected
searching dependent graphs…