UNPKG

reactopod

Version:

React Hooks for Typesaurus, type-safe Firestore ODM

55 lines (54 loc) 1.87 kB
'use strict' Object.defineProperty(exports, '__esModule', { value: true }) const cursor_1 = require('typesaurus/cursor') const limit_1 = require('typesaurus/limit') const order_1 = require('typesaurus/order') const query_1 = require('typesaurus/query') const adaptor_1 = require('../adaptor') function useInfiniteQuery(collection, queries, options) { var _a const [result, setResult] = adaptor_1.useState(undefined) const [cursor, setCursor] = adaptor_1.useState(undefined) const [loadedAll, setLoadedAll] = adaptor_1.useState(false) const cursorsMap = adaptor_1.useRef({}) const cursorId = ((_a = cursor) === null || _a === void 0 ? void 0 : _a.ref.id) || 'initial' const deps = [JSON.stringify(collection), JSON.stringify(queries), cursorId] adaptor_1.useEffect(() => { if (queries) { if (cursorsMap.current[cursorId] === undefined) { cursorsMap.current[cursorId] = 'loading' query_1 .query( collection, queries.concat([ order_1.order( options.field, options.method || 'asc', cursor ? [cursor_1.startAfter(cursor)] : [] ), limit_1.limit(options.limit) ]) ) .then(newResult => { cursorsMap.current[cursorId] = 'loaded' if (newResult.length === 0 || newResult.length < options.limit) setLoadedAll(true) setResult((result || []).concat(newResult)) }) } } else if (result) { setResult(undefined) } }, deps) const loadMore = loadedAll ? null : result && cursorsMap.current[cursorId] === 'loaded' ? () => { setCursor(result[result.length - 1]) } : undefined return [result, loadMore] } exports.default = useInfiniteQuery //# sourceMappingURL=index.js.map