UNPKG

@tixae-labs/typesaurus-react

Version:

React Hooks for Typesaurus, type-safe Firestore ODM, MAINTAINED BY TIXAE LABS

52 lines (49 loc) 1.55 kB
"use strict"; exports.useRead = useRead; var _index = require("../adapter/index.js"); function useRead(query) { const [result, setResult] = (0, _index.useState)(undefined); const [error, setError] = (0, _index.useState)(undefined); (0, _index.useEffect)(() => { // Use ignore flag to prevent setting state after the hook is unmounted let ignore = false; // Reset the state since the query has changed setResult(undefined); setError(undefined); // The request is not ready yet if (!query) return; if (typeof query === "function") { // It's a update subscription function, so we call it const off = query(newResult => { if (ignore) return; setResult(newResult); }).catch(newError => { if (ignore) return; setError(newError); }); return () => { ignore = true; off(); }; } else { // It's a promise, so we await it query.then(newResult => { if (ignore) return; setResult(newResult); }).catch(newError => { if (ignore) return; setError(newError); }); return () => { ignore = true; }; } // TODO: Come up with a better way to serialize and identify request }, [query && JSON.stringify(query.request), setResult, setError]); const status = (0, _index.useMemo)(() => ({ loading: result === undefined && !error, error }), [result, error]); const tuple = (0, _index.useMemo)(() => [result, status], [result, status]); return tuple; }