diff options
author | Sebastian <sebasjm@gmail.com> | 2023-05-19 13:24:30 -0300 |
---|---|---|
committer | Sebastian <sebasjm@gmail.com> | 2023-05-19 13:24:30 -0300 |
commit | 35cc13e229ddc4953a1e68b6b7ea18c54eb9a70b (patch) | |
tree | fc2b54d8a148396676fc01e8a3b8332ea6b79216 /packages/web-util/src/hooks/useMemoryStorage.ts | |
parent | 38c65cc84ad0b41ccccf479fd55d0df21f0afe86 (diff) | |
download | wallet-core-35cc13e229ddc4953a1e68b6b7ea18c54eb9a70b.tar.xz |
imported useNotifications, new memory storage hook and fixed but in localstorage
Diffstat (limited to 'packages/web-util/src/hooks/useMemoryStorage.ts')
-rw-r--r-- | packages/web-util/src/hooks/useMemoryStorage.ts | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/packages/web-util/src/hooks/useMemoryStorage.ts b/packages/web-util/src/hooks/useMemoryStorage.ts new file mode 100644 index 000000000..7160b035e --- /dev/null +++ b/packages/web-util/src/hooks/useMemoryStorage.ts @@ -0,0 +1,75 @@ +/* + This file is part of GNU Anastasis + (C) 2021-2022 Anastasis SARL + + GNU Anastasis is free software; you can redistribute it and/or modify it under the + terms of the GNU Affero General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + GNU Anastasis is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License along with + GNU Anastasis; see the file COPYING. If not, see <http://www.gnu.org/licenses/> + */ + +/** + * + * @author Sebastian Javier Marchano (sebasjm) + */ + +import { useEffect, useState } from "preact/hooks"; +import { + ObservableMap, + browserStorageMap, + localStorageMap, + memoryMap, +} from "../utils/observable.js"; + +export interface LocalStorageState { + value?: string; + update: (s: string) => void; + reset: () => void; +} + +const storage: ObservableMap<string, string> = memoryMap<string>(); + +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; + }, + ); + + useEffect(() => { + return storage.onUpdate(key, () => { + const newValue = storage.get(key); + setStoredValue(newValue ?? initialValue); + }); + }, []); + + const setValue = (value?: string): void => { + if (value === undefined) { + storage.delete(key); + } else { + storage.set(key, value); + } + }; + + return { + value: storedValue, + update: setValue, + reset: () => { + setValue(initialValue); + }, + }; +} |