@hazae41/glacier
Version:
Yet another React data (re)fetching library
1 lines • 5 kB
Source Map (JSON)
{"version":3,"file":"helper.cjs","sources":["../../../../../../src/mods/queries/scroll/helper.ts"],"sourcesContent":["import { Some } from \"@hazae41/option\";\nimport { Arrays } from \"libs/arrays/arrays.js\";\nimport { equals } from \"libs/equals/index.js\";\nimport { core } from \"mods/core/core.js\";\nimport { Fetched } from \"mods/fetched/fetched.js\";\nimport { ScrollableFetcherfulQuerySettings } from \"mods/types/settings.js\";\nimport { State } from \"mods/types/state.js\";\n\nexport class ScrollError extends Error {\n readonly #class = ScrollError\n readonly name = this.#class.name\n\n constructor() {\n super(`Could not scroll`)\n }\n\n}\n\nexport namespace Scrollable {\n\n export function getCacheKey<K>(key: K) {\n if (typeof key === \"string\")\n return key\n return `scroll:${JSON.stringify(key)}`\n }\n\n /**\n * Fetch first page and compare it to the previous first page\n * @param core \n * @param scroller \n * @param cacheKey \n * @param fetcher \n * @param aborter \n * @param settings \n * @returns \n */\n export async function fetchOrThrow<K, D, F>(\n cacheKey: string,\n signal: AbortSignal,\n settings: ScrollableFetcherfulQuerySettings<K, D, F>\n ): Promise<State<D[], F>> {\n const fetched = Fetched.from(await settings.fetcher(settings.key, { signal }))\n\n return await core.mutateOrThrow(cacheKey, async (previous) => {\n if (fetched.isErr())\n return new Some(fetched)\n\n const prenormalized = await core.prenormalizeOrThrow(fetched, settings)\n\n if (prenormalized?.isData() && previous.real?.data && equals(prenormalized.get(), previous.real.data.get()))\n return new Some(previous.real.data)\n\n return new Some(fetched)\n }, settings)\n }\n\n /**\n * Scroll to the next page\n * @param core \n * @param scroller \n * @param cacheKey \n * @param fetcher \n * @param aborter \n * @param settings \n * @returns \n */\n export async function scrollOrThrow<K, D, F>(\n cacheKey: string,\n signal: AbortSignal,\n settings: ScrollableFetcherfulQuerySettings<K, D, F>\n ): Promise<State<D[], F>> {\n const previous = await core.getOrThrow(cacheKey, settings)\n const previousPages = previous.real?.data?.get() ?? []\n const previousPage = Arrays.last(previousPages)\n const key = settings.scroller(previousPage)\n\n if (key == null)\n throw new ScrollError()\n\n const fetched = Fetched.from(await settings.fetcher(key, { signal }))\n\n return await core.mutateOrThrow(cacheKey, async (previous) => {\n const previousPages = previous.real?.data?.get() ?? []\n const paginated = fetched.mapSync(data => [...previousPages, ...data])\n\n return new Some(paginated)\n }, settings)\n }\n}"],"names":["Scrollable","fetched","Fetched","core","Some","equals","Arrays"],"mappings":"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"}