diff options
author | Sebastian <sebasjm@gmail.com> | 2024-01-10 14:44:10 -0300 |
---|---|---|
committer | Sebastian <sebasjm@gmail.com> | 2024-01-10 14:44:10 -0300 |
commit | 44820f06be979d3a30d2e66c430e212e28ca6052 (patch) | |
tree | 10325f2eadfafcdeb293524852142a6cd70e390d /packages/demobank-ui/src/hooks/bank-state.ts | |
parent | 2c7db170a45fcb82deae3892d610b6b2805ee46c (diff) | |
download | wallet-core-44820f06be979d3a30d2e66c430e212e28ca6052.tar.xz |
save challenge id when 2fa is required
Diffstat (limited to 'packages/demobank-ui/src/hooks/bank-state.ts')
-rw-r--r-- | packages/demobank-ui/src/hooks/bank-state.ts | 64 |
1 files changed, 64 insertions, 0 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]; +} |