import React from "react"; import usePersistStorage, { UsePersistStorageOptions, AsyncSetState } from "./usePersistStorage"; export type PersistContext = [ T, AsyncSetState, boolean ]; const createPersistContext = ({ storageKey, defaultData, options }: { storageKey: string; defaultData: T; options?: UsePersistStorageOptions; }) => { const createDefaultData = () => defaultData; const Context = React.createContext>([ createDefaultData(), // state async () => {;}, // update state function false // restored ]); const Provider: React.FC<{ persist?: boolean; }> = props => { const [data, setData, restored] = usePersistStorage( storageKey, createDefaultData, { persist: props.persist, ...options } ); return ( {props.children} ); }; const useData = () => { const context = React.useContext(Context); if (!context) { throw new Error( `Context error: context [${storageKey}] must be used within a Provider` ); } return context; }; return { Provider, Context, useData }; }; export default createPersistContext;