aboutsummaryrefslogtreecommitdiff
path: root/packages/web-util/src/hooks/useMemoryStorage.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/web-util/src/hooks/useMemoryStorage.ts')
-rw-r--r--packages/web-util/src/hooks/useMemoryStorage.ts60
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);
},
};
}