/*
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
*/
import { AbsoluteTime } from "@gnu-taler/taler-util";
import { useLang, useTranslationContext } from "@gnu-taler/web-util/browser";
import { VNode, h } from "preact";
import {
FormErrors,
FormProvider,
} from "../../components/form/FormProvider.js";
import { InputSelector } from "../../components/form/InputSelector.js";
import { InputToggle } from "../../components/form/InputToggle.js";
import { LangSelector } from "../../components/menu/LangSelector.js";
import { Preferences, usePreference } from "../../hooks/preference.js";
function getBrowserLang(): string | undefined {
if (typeof window === "undefined") return undefined;
if (window.navigator.languages) return window.navigator.languages[0];
if (window.navigator.language) return window.navigator.language;
return undefined;
}
export function Settings({ onClose }: { onClose?: () => void }): VNode {
const { i18n } = useTranslationContext();
const borwserLang = getBrowserLang();
const { update } = useLang(undefined, {});
const [value, , updateValue] = usePreference();
const errors: FormErrors = {};
function valueHandler(s: (d: Partial) => Partial): void {
const next = s(value);
const v: Preferences = {
advanceOrderMode: next.advanceOrderMode ?? false,
advanceInstanceMode: next.advanceInstanceMode ?? false,
developerMode: next.developerMode ?? false,
hideMissingAccountUntil: next.hideMissingAccountUntil ?? AbsoluteTime.never(),
hideKycUntil: next.hideKycUntil ?? AbsoluteTime.never(),
dateFormat: next.dateFormat ?? "ymd",
};
updateValue(v);
}
return (
name="settings"
errors={errors}
object={value}
valueHandler={valueHandler}
>
label={i18n.str`Advance order creation`}
tooltip={i18n.str`Shows more options in the order creation form`}
name="advanceOrderMode"
/>
label={i18n.str`Advance instance settings`}
tooltip={i18n.str`Shows more options in the instance settings form`}
name="advanceInstanceMode"
/>
name="dateFormat"
label={i18n.str`Date format`}
expand={true}
help={
value.dateFormat === "dmy"
? "31/12/2001"
: value.dateFormat === "mdy"
? "12/31/2001"
: value.dateFormat === "ymd"
? "2001/12/31"
: ""
}
toStr={(e) => {
if (e === "ymd") return "year month day";
if (e === "mdy") return "month day year";
if (e === "dmy") return "day month year";
return "choose one";
}}
values={["ymd", "mdy", "dmy"]}
tooltip={i18n.str`How the date is going to be displayed`}
/>
label={i18n.str`Developer mode`}
tooltip={i18n.str`Shows more options and tools which are not intended for general audience.`}
name="developerMode"
/>
{onClose && (
)}
);
}