From be27647ff73d1529372a80c3e145f3ee4f229a17 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Fri, 26 May 2023 16:51:47 -0300 Subject: use buildKeyStorage to prevent different type for same key --- .../src/hooks/useSettings.ts | 30 +++++++++++++++++----- 1 file changed, 24 insertions(+), 6 deletions(-) (limited to 'packages/taler-wallet-webextension') 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 */ -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(str: string | undefined): T | undefined { if (str === undefined) return undefined; @@ -26,17 +31,30 @@ function parse_json_or_undefined(str: string | undefined): T | undefined { } } +export const codecForSettings = (): Codec => + buildCodecForObject() + .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, (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(k: T, v: Settings[T]) { - const newValue = { ...parsed, [k]: v }; - const json = JSON.stringify(newValue); - update(json); + update({ ...parsed, [k]: v }); } return [parsed, updateField]; } -- cgit v1.2.3