@tanstack/react-persister
Version:
Utilities for persisting state to local storage, session storage, indexedDB, and more.
1 lines • 2.96 kB
Source Map (JSON)
{"version":3,"file":"useStorageState.cjs","sources":["../../../src/storage-persister/useStorageState.ts"],"sourcesContent":["import { useEffect, useState } from 'react'\nimport { useStoragePersister } from './useStoragePersister'\nimport type { StoragePersisterOptions } from '@tanstack/persister/storage-persister'\n\nfunction useStorageState<TState, TSelected extends Partial<TState> = TState>(\n initialValue: TState,\n options: StoragePersisterOptions<TState, TSelected>,\n) {\n const persister = useStoragePersister<TState, TSelected>(options)\n\n const [state, setState] = useState<TState | TSelected>(initialValue)\n\n useEffect(() => {\n // eslint-disable-next-line @eslint-react/hooks-extra/no-direct-set-state-in-use-effect\n setState(persister.loadState() ?? initialValue)\n // eslint-disable-next-line react-compiler/react-compiler\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n useEffect(() => {\n persister.saveState(state)\n // eslint-disable-next-line react-compiler/react-compiler\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [state])\n\n return [state, setState] as const\n}\n\n/**\n * A hook that persists state to localStorage and syncs it across tabs\n *\n * @example\n * ```tsx\n * const [value, setValue] = useLocalStorageState('my-key', 'initial value')\n * ```\n */\nexport function useLocalStorageState<\n TValue,\n TSelected extends Partial<TValue> = TValue,\n>(\n key: string,\n initialValue: TValue,\n options?: Omit<StoragePersisterOptions<TValue, TSelected>, 'key' | 'storage'>,\n) {\n return useStorageState(initialValue, {\n ...options,\n key,\n storage: typeof window !== 'undefined' ? localStorage : null,\n })\n}\n\n/**\n * A hook that persists state to sessionStorage and syncs it across tabs\n *\n * @example\n * ```tsx\n * const [value, setValue] = useSessionStorageState('my-key', 'initial value')\n * ```\n */\nexport function useSessionStorageState<\n TValue,\n TSelected extends Partial<TValue> = TValue,\n>(\n key: string,\n initialValue: TValue,\n options?: Omit<StoragePersisterOptions<TValue, TSelected>, 'key' | 'storage'>,\n) {\n return useStorageState(initialValue, {\n ...options,\n key,\n storage: typeof window !== 'undefined' ? sessionStorage : null,\n })\n}\n"],"names":["useStoragePersister","useState","useEffect"],"mappings":";;;;AAIA,SAAS,gBACP,cACA,SACA;AACA,QAAM,YAAYA,oBAAAA,oBAAuC,OAAO;AAEhE,QAAM,CAAC,OAAO,QAAQ,IAAIC,MAAAA,SAA6B,YAAY;AAEnEC,QAAAA,UAAU,MAAM;AAEd,aAAS,UAAU,UAAA,KAAe,YAAY;AAAA,EAAA,GAG7C,EAAE;AAELA,QAAAA,UAAU,MAAM;AACd,cAAU,UAAU,KAAK;AAAA,EAAA,GAGxB,CAAC,KAAK,CAAC;AAEV,SAAO,CAAC,OAAO,QAAQ;AACzB;AAUO,SAAS,qBAId,KACA,cACA,SACA;AACA,SAAO,gBAAgB,cAAc;AAAA,IACnC,GAAG;AAAA,IACH;AAAA,IACA,SAAS,OAAO,WAAW,cAAc,eAAe;AAAA,EAAA,CACzD;AACH;AAUO,SAAS,uBAId,KACA,cACA,SACA;AACA,SAAO,gBAAgB,cAAc;AAAA,IACnC,GAAG;AAAA,IACH;AAAA,IACA,SAAS,OAAO,WAAW,cAAc,iBAAiB;AAAA,EAAA,CAC3D;AACH;;;"}