@hazae41/glacier
Version:
Yet another React data (re)fetching library
1 lines • 24.5 kB
Source Map (JSON)
{"version":3,"file":"scroll.mjs","sources":["../../../../../../../src/mods/react/hooks/queries/scroll.ts"],"sourcesContent":["import { None, Nullable } from \"@hazae41/option\";\nimport { Err, Fallback, Ok } from \"@hazae41/result\";\nimport { ScrollableQuery } from \"index.js\";\nimport { Arrays } from \"libs/arrays/arrays.js\";\nimport { useRenderRef } from \"libs/react/ref.js\";\nimport { shouldUseCacheIfFresh, shouldUseCacheIfStale, shouldUseNetwork } from \"libs/request/index.js\";\nimport { AbortSignals } from \"libs/signals/index.js\";\nimport { Time } from \"libs/time/time.js\";\nimport { MissingFetcherError, MissingKeyError, core } from \"mods/core/core.js\";\nimport { Scrollable } from \"mods/queries/scroll/helper.js\";\nimport { FetcherfulReactQuery, FetcherlessReactQuery, SkeletonReactQuery } from \"mods/react/types/query.js\";\nimport { Mutator } from \"mods/types/mutator.js\";\nimport { ScrollableFetcherfulQuerySettings, ScrollableFetcherlessQuerySettings } from \"mods/types/settings.js\";\nimport { State } from \"mods/types/state.js\";\nimport { DependencyList, useCallback, useEffect, useMemo, useRef, useState } from \"react\";\n\nexport function useScrollableQuery<T extends ScrollableQuery.Infer<T>, L extends DependencyList>(\n factory: (...deps: L) => T,\n deps: L\n): ScrollableQuery.ReactifyOrSkeleton<T> {\n const query = useMemo(() => {\n return factory(...deps)\n }, deps)\n\n if (query == null)\n return useSkeletonScrollableQuery() as ScrollableQuery.ReactifyOrSkeleton<T>\n\n if (query.settings.fetcher == null)\n return useFetcherlessScrollableQuery(query.settings) as ScrollableQuery.ReactifyOrSkeleton<T>\n\n return useFetcherfulScrollableQuery(query.settings) as ScrollableQuery.ReactifyOrSkeleton<T>\n}\n\nexport interface ScrollableSkeletonReactQuery<K, D, F> extends SkeletonReactQuery<K, D[], F> {\n /**\n * Fetch the next page\n */\n scrollOrThrow(init?: RequestInit): Promise<never>\n\n /**\n * The next key to be fetched\n */\n peekOrNull(): undefined\n}\n\n/**\n * Query for a scrolling resource\n */\nexport interface ScrollableFetcherlessReactQuery<K, D, F> extends FetcherlessReactQuery<K, D[], F> {\n /**\n * Fetch the next page\n */\n scrollOrThrow(init?: RequestInit): Promise<never>\n\n /**\n * The next key to be fetched\n */\n peekOrNull(): Nullable<K>\n}\n\n/**\n * Query for a scrolling resource\n */\nexport interface ScrollableFetcherfulReactQuery<K, D, F> extends FetcherfulReactQuery<K, D[], F> {\n /**\n * Fetch the next page\n */\n scrollOrThrow(init?: RequestInit): Promise<Fallback<State<D[], F>>>\n\n /**\n * The next key to be fetched\n */\n peekOrNull(): Nullable<K>\n}\n\nexport function useSkeletonScrollableQuery<K, D, F>(): ScrollableSkeletonReactQuery<K, D, F> {\n useRenderRef(undefined)\n\n const cacheKey = useMemo(() => {\n // NOOP\n }, [undefined])\n\n useState(0)\n\n useRef()\n useRef()\n\n useMemo(() => {\n // NOOP\n }, [cacheKey])\n\n useCallback(() => {\n // NOOP\n }, [cacheKey])\n\n useCallback(() => {\n // NOOP\n }, [cacheKey])\n\n useEffect(() => {\n // NOOP\n }, [cacheKey])\n\n useEffect(() => {\n // NOOP\n }, [cacheKey])\n\n const mutateOrThrow = useCallback(async (mutator: Mutator<D[], F>) => {\n throw new MissingKeyError()\n }, [cacheKey])\n\n const deleteOrThrow = useCallback(async () => {\n throw new MissingKeyError()\n }, [cacheKey])\n\n const fetchOrThrow = useCallback(async (init?: RequestInit) => {\n throw new MissingKeyError()\n }, [cacheKey])\n\n const refetchOrThrow = useCallback(async (init?: RequestInit) => {\n throw new MissingKeyError()\n }, [cacheKey])\n\n const scrollOrThrow = useCallback(async (init?: RequestInit) => {\n throw new MissingKeyError()\n }, [cacheKey])\n\n const peekOrNull = useCallback(() => {\n return undefined\n }, [undefined, undefined])\n\n return { mutateOrThrow, deleteOrThrow, fetchOrThrow, refetchOrThrow, scrollOrThrow, peekOrNull }\n}\n\n/**\n * Scroll query\n * @param scroller \n * @param fetcher \n * @param settings \n * @returns \n */\nexport function useFetcherlessScrollableQuery<K, D, F>(\n settings: ScrollableFetcherlessQuerySettings<K, D, F>,\n): ScrollableFetcherlessReactQuery<K, D, F> {\n const settingsRef = useRenderRef(settings)\n\n const cacheKey = useMemo(() => {\n return Scrollable.getCacheKey(settings.key)\n }, [settings.key])\n\n const [, setCounter] = useState(0)\n\n const stateRef = useRef<Nullable<State<D[], F>>>()\n const aborterRef = useRef<Nullable<AbortController>>()\n\n useMemo(() => {\n stateRef.current = core.getStateSync<D[], F>(cacheKey)\n aborterRef.current = core.getAborterSync(cacheKey)\n }, [cacheKey])\n\n const setState = useCallback((state: Nullable<State<D[], F>>) => {\n stateRef.current = state\n setCounter(c => c + 1)\n }, [cacheKey])\n\n const setAborter = useCallback((aborter: Nullable<AbortController>) => {\n aborterRef.current = aborter\n setCounter(c => c + 1)\n }, [cacheKey])\n\n useEffect(() => {\n if (stateRef.current != null)\n return\n core.getOrThrow(cacheKey, settingsRef.current).then(setState).catch(console.warn)\n }, [cacheKey])\n\n useEffect(() => {\n const onState = () => {\n core.getOrThrow(cacheKey, settingsRef.current).then(setState).catch(console.warn)\n return new None()\n }\n\n const onAborter = () => {\n setAborter(core.getAborterSync(cacheKey))\n return new None()\n }\n\n core.onState.on(cacheKey, onState, { passive: true })\n core.onAborter.on(cacheKey, onAborter, { passive: true })\n\n core.increment(cacheKey, settingsRef.current)\n\n return () => {\n core.decrementOrThrow(cacheKey, settingsRef.current)\n\n core.onState.off(cacheKey, onState)\n core.onAborter.off(cacheKey, onAborter)\n }\n }, [cacheKey])\n\n const mutateOrThrow = useCallback(async (mutator: Mutator<D[], F>) => {\n return await core.mutateOrThrow(cacheKey, mutator, settingsRef.current)\n }, [cacheKey])\n\n const deleteOrThrow = useCallback(async () => {\n return await core.deleteOrThrow(cacheKey, settingsRef.current)\n }, [cacheKey])\n\n const fetchOrThrow = useCallback(async (aborter = new AbortController()) => {\n throw new MissingFetcherError()\n }, [cacheKey])\n\n const refetchOrThrow = useCallback(async (aborter = new AbortController()) => {\n throw new MissingFetcherError()\n }, [cacheKey])\n\n const scrollOrThrow = useCallback(async (aborter = new AbortController()) => {\n throw new MissingFetcherError()\n }, [cacheKey])\n\n const state = stateRef.current\n const aborter = aborterRef.current\n\n const ready = state != null\n const fetching = aborter != null\n const optimistic = state?.isFake()\n\n const current = state?.current\n const data = state?.data\n const error = state?.error\n\n const real = state?.real\n const fake = state?.fake\n\n const peekOrNull = useCallback(() => {\n const pages = state?.real?.data?.get()\n\n if (pages == null)\n return undefined\n\n return settings.scroller(Arrays.last(pages))\n }, [state?.real?.data, settings.scroller])\n\n return {\n ...settings,\n cacheKey,\n current,\n data,\n error,\n real,\n fake,\n ready,\n optimistic,\n aborter,\n fetching,\n mutateOrThrow,\n fetchOrThrow,\n refetchOrThrow,\n scrollOrThrow,\n deleteOrThrow,\n peekOrNull,\n }\n}\n\nexport function useFetcherfulScrollableQuery<K, D, F>(\n settings: ScrollableFetcherfulQuerySettings<K, D, F>,\n): ScrollableFetcherfulReactQuery<K, D, F> {\n const settingsRef = useRenderRef(settings)\n\n const cacheKey = useMemo(() => {\n return Scrollable.getCacheKey(settings.key)\n }, [settings.key])\n\n const [, setCounter] = useState(0)\n\n const stateRef = useRef<Nullable<State<D[], F>>>()\n const aborterRef = useRef<Nullable<AbortController>>()\n\n useMemo(() => {\n stateRef.current = core.getStateSync<D[], F>(cacheKey)\n aborterRef.current = core.getAborterSync(cacheKey)\n }, [cacheKey])\n\n const setState = useCallback((state: Nullable<State<D[], F>>) => {\n stateRef.current = state\n setCounter(c => c + 1)\n }, [cacheKey])\n\n const setAborter = useCallback((aborter: Nullable<AbortController>) => {\n aborterRef.current = aborter\n setCounter(c => c + 1)\n }, [cacheKey])\n\n useEffect(() => {\n if (stateRef.current != null)\n return\n core.getOrThrow(cacheKey, settingsRef.current).then(setState).catch(console.warn)\n }, [cacheKey])\n\n useEffect(() => {\n const onState = () => {\n core.getOrThrow(cacheKey, settingsRef.current).then(setState).catch(console.warn)\n return new None()\n }\n\n const onAborter = () => {\n setAborter(core.getAborterSync(cacheKey))\n return new None()\n }\n\n core.onState.on(cacheKey, onState, { passive: true })\n core.onAborter.on(cacheKey, onAborter, { passive: true })\n\n core.increment(cacheKey, settingsRef.current)\n\n return () => {\n core.decrementOrThrow(cacheKey, settingsRef.current)\n\n core.onState.off(cacheKey, onState)\n core.onAborter.off(cacheKey, onAborter)\n }\n }, [cacheKey])\n\n const mutateOrThrow = useCallback(async (mutator: Mutator<D[], F>) => {\n return await core.mutateOrThrow(cacheKey, mutator, settingsRef.current)\n }, [cacheKey])\n\n const deleteOrThrow = useCallback(async () => {\n return await core.deleteOrThrow(cacheKey, settingsRef.current)\n }, [cacheKey])\n\n const fetchOrThrow = useCallback(async (init?: RequestInit): Promise<Fallback<State<D[], F>>> => {\n const state = stateRef.current\n const settings = settingsRef.current\n\n if (shouldUseCacheIfFresh(init?.cache) && Time.isAfterNow(state?.real?.current.cooldown))\n return new Err(state!)\n if (shouldUseCacheIfStale(init?.cache) && Time.isAfterNow(state?.real?.current.expiration))\n return new Err(state!)\n if (!shouldUseNetwork(init?.cache))\n throw new Error(`Could not fetch using the provided cache directive`)\n\n const aborter = new AbortController()\n const signal = AbortSignal.any([aborter.signal, AbortSignals.getOrNever(init?.signal)])\n\n return new Ok(await core.runOrJoin(cacheKey, aborter, () => Scrollable.fetchOrThrow(cacheKey, signal, settings)))\n }, [cacheKey])\n\n const refetchOrThrow = useCallback(async (init?: RequestInit): Promise<Fallback<State<D[], F>>> => {\n const state = stateRef.current\n const settings = settingsRef.current\n\n if (shouldUseCacheIfFresh(init?.cache) && Time.isAfterNow(state?.real?.current.cooldown))\n return new Err(state!)\n if (shouldUseCacheIfStale(init?.cache) && Time.isAfterNow(state?.real?.current.expiration))\n return new Err(state!)\n if (!shouldUseNetwork(init?.cache))\n throw new Error(`Could not fetch using the provided cache directive`)\n\n const aborter = new AbortController()\n const signal = AbortSignal.any([aborter.signal, AbortSignals.getOrNever(init?.signal)])\n\n return new Ok(await core.runOrReplace(cacheKey, aborter, () => Scrollable.fetchOrThrow(cacheKey, signal, settings)))\n }, [cacheKey])\n\n const scrollOrThrow = useCallback(async (init?: RequestInit): Promise<Fallback<State<D[], F>>> => {\n const state = stateRef.current\n const settings = settingsRef.current\n\n if (shouldUseCacheIfFresh(init?.cache) && Time.isAfterNow(state?.real?.current.cooldown))\n return new Err(state!)\n if (shouldUseCacheIfStale(init?.cache) && Time.isAfterNow(state?.real?.current.expiration))\n return new Err(state!)\n if (!shouldUseNetwork(init?.cache))\n throw new Error(`Could not fetch using the provided cache directive`)\n\n const aborter = new AbortController()\n const signal = AbortSignal.any([aborter.signal, AbortSignals.getOrNever(init?.signal)])\n\n return new Ok(await core.runOrReplace(cacheKey, aborter, () => Scrollable.scrollOrThrow(cacheKey, signal, settings)))\n }, [cacheKey])\n\n const state = stateRef.current\n const aborter = aborterRef.current\n\n const ready = state != null\n const fetching = aborter != null\n const optimistic = state?.isFake()\n\n const current = state?.current\n const data = state?.data\n const error = state?.error\n\n const real = state?.real\n const fake = state?.fake\n\n const peekOrNull = useCallback(() => {\n const pages = state?.real?.data?.get()\n\n if (pages == null)\n return undefined\n\n return settings.scroller(Arrays.last(pages))\n }, [state?.real?.data, settings.scroller])\n\n return {\n ...settings,\n cacheKey,\n current,\n data,\n error,\n real,\n fake,\n ready,\n optimistic,\n aborter,\n fetching,\n mutateOrThrow,\n fetchOrThrow,\n refetchOrThrow,\n scrollOrThrow,\n deleteOrThrow,\n peekOrNull\n }\n}"],"names":[],"mappings":"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"}