diff options
Diffstat (limited to 'packages/web-util/src/hooks/useMemoryStorage.ts')
-rw-r--r-- | packages/web-util/src/hooks/useMemoryStorage.ts | 60 |
1 files changed, 28 insertions, 32 deletions
diff --git a/packages/web-util/src/hooks/useMemoryStorage.ts b/packages/web-util/src/hooks/useMemoryStorage.ts index 7160b035e..d8be24c1e 100644 --- a/packages/web-util/src/hooks/useMemoryStorage.ts +++ b/packages/web-util/src/hooks/useMemoryStorage.ts @@ -20,48 +20,44 @@ */ import { useEffect, useState } from "preact/hooks"; -import { - ObservableMap, - browserStorageMap, - localStorageMap, - memoryMap, -} from "../utils/observable.js"; +import { ObservableMap, memoryMap } from "../utils/observable.js"; +import { StorageKey, StorageState } from "./useLocalStorage.js"; -export interface LocalStorageState { - value?: string; - update: (s: string) => void; - reset: () => void; -} - -const storage: ObservableMap<string, string> = memoryMap<string>(); +const storage: ObservableMap<string, any> = memoryMap<any>(); -export function useMemoryStorage( - key: string, - initialValue: string, -): Required<LocalStorageState>; -export function useMemoryStorage(key: string): LocalStorageState; -export function useMemoryStorage( - key: string, - initialValue?: string, -): LocalStorageState { - const [storedValue, setStoredValue] = useState<string | undefined>( - (): string | undefined => { - return storage.get(key) ?? initialValue; +//with initial value +export function useMemoryStorage<Type = string>( + key: StorageKey<Type>, + defaultValue: Type, +): Required<StorageState<Type>>; +//with initial value +export function useMemoryStorage<Type = string>( + key: StorageKey<Type>, +): StorageState<Type>; +// impl +export function useMemoryStorage<Type = string>( + key: StorageKey<Type>, + defaultValue?: Type, +): StorageState<Type> { + const [storedValue, setStoredValue] = useState<Type | undefined>( + (): Type | undefined => { + const prev = storage.get(key.id); + return prev; }, ); useEffect(() => { - return storage.onUpdate(key, () => { - const newValue = storage.get(key); - setStoredValue(newValue ?? initialValue); + return storage.onUpdate(key.id, () => { + const newValue = storage.get(key.id); + setStoredValue(newValue); }); }, []); - const setValue = (value?: string): void => { + const setValue = (value?: Type): void => { if (value === undefined) { - storage.delete(key); + storage.delete(key.id); } else { - storage.set(key, value); + storage.set(key.id, value); } }; @@ -69,7 +65,7 @@ export function useMemoryStorage( value: storedValue, update: setValue, reset: () => { - setValue(initialValue); + setValue(defaultValue); }, }; } |