diff options
author | Sebastian <sebasjm@gmail.com> | 2024-03-21 12:11:31 -0300 |
---|---|---|
committer | Sebastian <sebasjm@gmail.com> | 2024-03-26 16:57:55 -0300 |
commit | 8aa9ce6d20b41b7eb9b438a56ccd34cb0da35f80 (patch) | |
tree | 5cec8219a136469f2c689c47a74b28e52eb5992b /packages/merchant-backoffice-ui/src/hooks/preference.ts | |
parent | 5a1f528d8806bcb15d5c4c8364554502c11931a7 (diff) | |
download | wallet-core-8aa9ce6d20b41b7eb9b438a56ccd34cb0da35f80.tar.xz |
wip
Diffstat (limited to 'packages/merchant-backoffice-ui/src/hooks/preference.ts')
-rw-r--r-- | packages/merchant-backoffice-ui/src/hooks/preference.ts | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/packages/merchant-backoffice-ui/src/hooks/preference.ts b/packages/merchant-backoffice-ui/src/hooks/preference.ts new file mode 100644 index 000000000..4570ff679 --- /dev/null +++ b/packages/merchant-backoffice-ui/src/hooks/preference.ts @@ -0,0 +1,85 @@ +/* + This file is part of GNU Taler + (C) 2021-2024 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 { + AbsoluteTime, + Codec, + buildCodecForObject, + codecForAbsoluteTime, + codecForBoolean, + codecForConstString, + codecForEither, +} from "@gnu-taler/taler-util"; +import { buildStorageKey, useLocalStorage } from "@gnu-taler/web-util/browser"; + +export interface Preferences { + advanceOrderMode: boolean; + hideKycUntil: AbsoluteTime; + dateFormat: "ymd" | "dmy" | "mdy"; +} + +const defaultSettings: Preferences = { + advanceOrderMode: false, + hideKycUntil: AbsoluteTime.never(), + dateFormat: "ymd", +}; + +export const codecForPreferences = (): Codec<Preferences> => + buildCodecForObject<Preferences>() + .property("advanceOrderMode", codecForBoolean()) + .property("hideKycUntil", codecForAbsoluteTime) + .property( + "dateFormat", + codecForEither( + codecForConstString("ymd"), + codecForConstString("dmy"), + codecForConstString("mdy"), + ), + ) + .build("Preferences"); + +const PREFERENCES_KEY = buildStorageKey( + "merchant-preferences", + codecForPreferences(), +); + +export function usePreference(): [ + Readonly<Preferences>, + <T extends keyof Preferences>(key: T, value: Preferences[T]) => void, +] { + const { value, update } = useLocalStorage(PREFERENCES_KEY, defaultSettings); + function updateField<T extends keyof Preferences>(k: T, v: Preferences[T]) { + const newValue = { ...value, [k]: v }; + update(newValue); + } + + return [value, updateField]; +} + +export function dateFormatForSettings(s: Preferences): string { + switch (s.dateFormat) { + case "ymd": + return "yyyy/MM/dd"; + case "dmy": + return "dd/MM/yyyy"; + case "mdy": + return "MM/dd/yyyy"; + } +} + +export function datetimeFormatForSettings(s: Preferences): string { + return dateFormatForSettings(s) + " HH:mm:ss"; +} |