diff options
Diffstat (limited to 'packages/demobank-ui/src/hooks')
-rw-r--r-- | packages/demobank-ui/src/hooks/bank-state.ts | 64 | ||||
-rw-r--r-- | packages/demobank-ui/src/hooks/preferences.ts | 8 |
2 files changed, 65 insertions, 7 deletions
diff --git a/packages/demobank-ui/src/hooks/bank-state.ts b/packages/demobank-ui/src/hooks/bank-state.ts new file mode 100644 index 000000000..addbbfc0f --- /dev/null +++ b/packages/demobank-ui/src/hooks/bank-state.ts @@ -0,0 +1,64 @@ +/* + This file is part of GNU Taler + (C) 2022 Taler Systems S.A. + + GNU Taler is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + GNU Taler 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 General Public License for more details. + + You should have received a copy of the GNU General Public License along with + GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/> + */ + +import { + Codec, + buildCodecForObject, + codecForString, + codecOptional +} from "@gnu-taler/taler-util"; +import { buildStorageKey, useLocalStorage } from "@gnu-taler/web-util/browser"; + +interface BankState { + currentWithdrawalOperationId: string | undefined; + currentChallengeId: string | undefined; +} + +export const codecForBankState = (): Codec<BankState> => + buildCodecForObject<BankState>() + .property("currentWithdrawalOperationId", codecOptional(codecForString())) + .property("currentChallengeId", codecOptional(codecForString())) + .build("BankState"); + +const defaultBankState: BankState = { + currentWithdrawalOperationId: undefined, + currentChallengeId: undefined, +}; + +const BANK_STATE_KEY = buildStorageKey( + "bank-state", + codecForBankState(), +); + +export function useBankState(): [ + Readonly<BankState>, + <T extends keyof BankState>(key: T, value: BankState[T]) => void, + () => void, +] { + const { value, update } = useLocalStorage( + BANK_STATE_KEY, + defaultBankState, + ); + + function updateField<T extends keyof BankState>(k: T, v: BankState[T]) { + const newValue = { ...value, [k]: v }; + update(newValue); + } + function reset() { + update(defaultBankState) + } + return [value, updateField, reset]; +} diff --git a/packages/demobank-ui/src/hooks/preferences.ts b/packages/demobank-ui/src/hooks/preferences.ts index a1525ac80..d303ac0d8 100644 --- a/packages/demobank-ui/src/hooks/preferences.ts +++ b/packages/demobank-ui/src/hooks/preferences.ts @@ -19,14 +19,11 @@ import { TranslatedString, buildCodecForObject, codecForBoolean, - codecForNumber, - codecForString, - codecOptional + codecForNumber } from "@gnu-taler/taler-util"; import { buildStorageKey, useLocalStorage, useTranslationContext } from "@gnu-taler/web-util/browser"; interface Preferences { - currentWithdrawalOperationId: string | undefined; showWithdrawalSuccess: boolean; showDemoDescription: boolean; showInstallWallet: boolean; @@ -42,7 +39,6 @@ export function getAllBooleanPreferences(): Array<keyof Preferences> { export function getLabelForPreferences(k: keyof Preferences, i18n: ReturnType<typeof useTranslationContext>["i18n"]): TranslatedString { switch (k) { - case "currentWithdrawalOperationId": return i18n.str`Current withdrawal operation` case "maxWithdrawalAmount": return i18n.str`Max withdrawal amount` case "showWithdrawalSuccess": return i18n.str`Show withdrawal confirmation` case "showDemoDescription": return i18n.str`Show demo description` @@ -54,7 +50,6 @@ export function getLabelForPreferences(k: keyof Preferences, i18n: ReturnType<ty export const codecForPreferences = (): Codec<Preferences> => buildCodecForObject<Preferences>() - .property("currentWithdrawalOperationId", codecOptional(codecForString())) .property("showWithdrawalSuccess", (codecForBoolean())) .property("showDemoDescription", (codecForBoolean())) .property("showInstallWallet", (codecForBoolean())) @@ -64,7 +59,6 @@ export const codecForPreferences = (): Codec<Preferences> => .build("Settings"); const defaultPreferences: Preferences = { - currentWithdrawalOperationId: undefined, showWithdrawalSuccess: true, showDemoDescription: true, showInstallWallet: true, |