tldraw
Version:
A tiny little drawing editor.
8 lines (7 loc) • 1.59 kB
Source Map (JSON)
{
"version": 3,
"sources": ["../../../../src/lib/ui/hooks/useLocalStorageState.ts"],
"sourcesContent": ["import { getFromLocalStorage, setInLocalStorage } from '@tldraw/editor'\nimport React from 'react'\n\n/** @public */\nexport function useLocalStorageState<T = any>(key: string, defaultValue: T) {\n\tconst [state, setState] = React.useState(defaultValue)\n\n\tReact.useLayoutEffect(() => {\n\t\tconst value = getFromLocalStorage(key)\n\t\tif (value) {\n\t\t\ttry {\n\t\t\t\tsetState(JSON.parse(value))\n\t\t\t} catch {\n\t\t\t\tconsole.error(`Could not restore value ${key} from local storage.`)\n\t\t\t}\n\t\t}\n\t}, [key])\n\n\tconst updateValue = React.useCallback(\n\t\t(setter: T | ((value: T) => T)) => {\n\t\t\tsetState((s) => {\n\t\t\t\tconst value = typeof setter === 'function' ? (setter as any)(s) : setter\n\t\t\t\tsetInLocalStorage(key, JSON.stringify(value))\n\t\t\t\treturn value\n\t\t\t})\n\t\t},\n\t\t[key]\n\t)\n\n\treturn [state, updateValue] as const\n}\n"],
"mappings": "AAAA,SAAS,qBAAqB,yBAAyB;AACvD,OAAO,WAAW;AAGX,SAAS,qBAA8B,KAAa,cAAiB;AAC3E,QAAM,CAAC,OAAO,QAAQ,IAAI,MAAM,SAAS,YAAY;AAErD,QAAM,gBAAgB,MAAM;AAC3B,UAAM,QAAQ,oBAAoB,GAAG;AACrC,QAAI,OAAO;AACV,UAAI;AACH,iBAAS,KAAK,MAAM,KAAK,CAAC;AAAA,MAC3B,QAAQ;AACP,gBAAQ,MAAM,2BAA2B,GAAG,sBAAsB;AAAA,MACnE;AAAA,IACD;AAAA,EACD,GAAG,CAAC,GAAG,CAAC;AAER,QAAM,cAAc,MAAM;AAAA,IACzB,CAAC,WAAkC;AAClC,eAAS,CAAC,MAAM;AACf,cAAM,QAAQ,OAAO,WAAW,aAAc,OAAe,CAAC,IAAI;AAClE,0BAAkB,KAAK,KAAK,UAAU,KAAK,CAAC;AAC5C,eAAO;AAAA,MACR,CAAC;AAAA,IACF;AAAA,IACA,CAAC,GAAG;AAAA,EACL;AAEA,SAAO,CAAC,OAAO,WAAW;AAC3B;",
"names": []
}