From 44820f06be979d3a30d2e66c430e212e28ca6052 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Wed, 10 Jan 2024 14:44:10 -0300 Subject: save challenge id when 2fa is required --- packages/demobank-ui/src/hooks/bank-state.ts | 64 ++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 packages/demobank-ui/src/hooks/bank-state.ts (limited to 'packages/demobank-ui/src/hooks/bank-state.ts') 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 + */ + +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 => + buildCodecForObject() + .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, + (key: T, value: BankState[T]) => void, + () => void, +] { + const { value, update } = useLocalStorage( + BANK_STATE_KEY, + defaultBankState, + ); + + function updateField(k: T, v: BankState[T]) { + const newValue = { ...value, [k]: v }; + update(newValue); + } + function reset() { + update(defaultBankState) + } + return [value, updateField, reset]; +} -- cgit v1.2.3