diff options
Diffstat (limited to 'packages/taler-wallet-webextension')
-rw-r--r-- | packages/taler-wallet-webextension/src/hooks/useSettings.ts | 30 |
1 files changed, 24 insertions, 6 deletions
diff --git a/packages/taler-wallet-webextension/src/hooks/useSettings.ts b/packages/taler-wallet-webextension/src/hooks/useSettings.ts index ebb1e991c..7e7b26a39 100644 --- a/packages/taler-wallet-webextension/src/hooks/useSettings.ts +++ b/packages/taler-wallet-webextension/src/hooks/useSettings.ts @@ -14,8 +14,13 @@ GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/> */ -import { useLocalStorage } from "@gnu-taler/web-util/browser"; +import { buildStorageKey, useLocalStorage } from "@gnu-taler/web-util/browser"; import { Settings, defaultSettings } from "../platform/api.js"; +import { + Codec, + buildCodecForObject, + codecForBoolean, +} from "@gnu-taler/taler-util"; function parse_json_or_undefined<T>(str: string | undefined): T | undefined { if (str === undefined) return undefined; @@ -26,17 +31,30 @@ function parse_json_or_undefined<T>(str: string | undefined): T | undefined { } } +export const codecForSettings = (): Codec<Settings> => + buildCodecForObject<Settings>() + .property("walletAllowHttp", codecForBoolean()) + .property("walletBatchWithdrawal", codecForBoolean()) + .property("injectTalerSupport", codecForBoolean()) + .property("advanceMode", codecForBoolean()) + .property("backup", codecForBoolean()) + .property("langSelector", codecForBoolean()) + .property("showJsonOnError", codecForBoolean()) + .property("extendedAccountTypes", codecForBoolean()) + .property("deleteActiveTransactions", codecForBoolean()) + .build("Settings"); + +const SETTINGS_KEY = buildStorageKey("wallet-settings", codecForSettings()); + export function useSettings(): [ Readonly<Settings>, <T extends keyof Settings>(key: T, value: Settings[T]) => void, ] { - const { value, update } = useLocalStorage("wallet-settings"); + const { value, update } = useLocalStorage(SETTINGS_KEY); - const parsed: Settings = parse_json_or_undefined(value) ?? defaultSettings; + const parsed: Settings = value ?? defaultSettings; function updateField<T extends keyof Settings>(k: T, v: Settings[T]) { - const newValue = { ...parsed, [k]: v }; - const json = JSON.stringify(newValue); - update(json); + update({ ...parsed, [k]: v }); } return [parsed, updateField]; } |