/* 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 */ /** * * @author Sebastian Javier Marchano (sebasjm) */ import { useTranslationContext } from "@gnu-taler/web-util/browser"; import { h, VNode } from "preact"; import { useState } from "preact/hooks"; import { AsyncButton } from "../../../components/exception/AsyncButton.js"; import { FormErrors, FormProvider, } from "../../../components/form/FormProvider.js"; import { DefaultInstanceFormFields } from "../../../components/instance/DefaultInstanceFormFields.js"; import { useInstanceContext } from "../../../context/instance.js"; import { MerchantBackend } from "../../../declaration.js"; import { undefinedIfEmpty } from "../../../utils/table.js"; import { Duration } from "@gnu-taler/taler-util"; export type Entity = Omit, "default_wire_transfer_delay"> & { default_pay_delay: Duration, default_wire_transfer_delay: Duration, }; //MerchantBackend.Instances.InstanceAuthConfigurationMessage interface Props { onUpdate: (d: MerchantBackend.Instances.InstanceReconfigurationMessage) => void; selected: MerchantBackend.Instances.QueryInstancesResponse; isLoading: boolean; onBack: () => void; } function convert( from: MerchantBackend.Instances.QueryInstancesResponse, ): Entity { const { default_pay_delay, default_wire_transfer_delay, ...rest } = from; const defaults = { use_stefan: false, default_pay_delay: Duration.fromTalerProtocolDuration(default_pay_delay), default_wire_transfer_delay: Duration.fromTalerProtocolDuration(default_wire_transfer_delay), }; return { ...defaults, ...rest }; } export function UpdatePage({ onUpdate, selected, onBack, }: Props): VNode { const { id } = useInstanceContext(); const [value, valueHandler] = useState>(convert(selected)); const { i18n } = useTranslationContext(); const errors: FormErrors = { name: !value.name ? i18n.str`required` : undefined, user_type: !value.user_type ? i18n.str`required` : value.user_type !== "business" && value.user_type !== "individual" ? i18n.str`should be business or individual` : undefined, default_pay_delay: !value.default_pay_delay ? i18n.str`required` : !!value.default_wire_transfer_delay && value.default_wire_transfer_delay.d_ms !== "forever" && value.default_pay_delay.d_ms !== "forever" && value.default_pay_delay.d_ms > value.default_wire_transfer_delay.d_ms ? i18n.str`pay delay can't be greater than wire transfer delay` : undefined, default_wire_transfer_delay: !value.default_wire_transfer_delay ? i18n.str`required` : undefined, address: undefinedIfEmpty({ address_lines: value.address?.address_lines && value.address?.address_lines.length > 7 ? i18n.str`max 7 lines` : undefined, }), jurisdiction: undefinedIfEmpty({ address_lines: value.address?.address_lines && value.address?.address_lines.length > 7 ? i18n.str`max 7 lines` : undefined, }), }; const hasErrors = Object.keys(errors).some( (k) => (errors as any)[k] !== undefined, ); const submit = async (): Promise => { const { default_pay_delay, default_wire_transfer_delay, ...rest } = value as Required; const result: MerchantBackend.Instances.InstanceReconfigurationMessage = { default_pay_delay: Duration.toTalerProtocolDuration(default_pay_delay), default_wire_transfer_delay: Duration.toTalerProtocolDuration(default_wire_transfer_delay), ...rest, } await onUpdate(result); }; // const [active, setActive] = useState(false); return (
Instance id: {id}

errors={errors} object={value} valueHandler={valueHandler} >
Confirm
); }