From cb8fbb9ec78831f7fb9f5a4839cbe3362a3e2b51 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Tue, 19 Dec 2023 12:12:31 -0300 Subject: fix martin feedback --- .../src/components/form/InputPaytoForm.tsx | 12 +++ .../src/components/menu/SideBar.tsx | 8 -- .../paths/instance/accounts/update/UpdatePage.tsx | 99 ++++++++++++++++++++-- .../instance/otp_devices/update/UpdatePage.tsx | 2 +- .../src/paths/instance/update/UpdatePage.tsx | 7 -- 5 files changed, 103 insertions(+), 25 deletions(-) (limited to 'packages') diff --git a/packages/merchant-backoffice-ui/src/components/form/InputPaytoForm.tsx b/packages/merchant-backoffice-ui/src/components/form/InputPaytoForm.tsx index 0362310b9..32545c89a 100644 --- a/packages/merchant-backoffice-ui/src/components/form/InputPaytoForm.tsx +++ b/packages/merchant-backoffice-ui/src/components/form/InputPaytoForm.tsx @@ -276,6 +276,7 @@ export function InputPaytoForm({ label={i18n.str`Account type`} tooltip={i18n.str`Method to use for wire transfer`} values={targets} + readonly={readonly} toStr={(v) => (v === noTargetValue ? i18n.str`Choose one...` : v)} /> @@ -284,11 +285,13 @@ export function InputPaytoForm({ name="path1" label={i18n.str`Routing`} + readonly={readonly} tooltip={i18n.str`Routing number.`} /> name="path2" label={i18n.str`Account`} + readonly={readonly} tooltip={i18n.str`Account number.`} /> @@ -298,6 +301,7 @@ export function InputPaytoForm({ name="path1" label={i18n.str`Code`} + readonly={readonly} tooltip={i18n.str`Business Identifier Code.`} /> @@ -308,6 +312,7 @@ export function InputPaytoForm({ name="path1" label={i18n.str`IBAN`} tooltip={i18n.str`International Bank Account Number.`} + readonly={readonly} placeholder="DE1231231231" inputExtra={{ style: { textTransform: "uppercase" } }} /> @@ -317,6 +322,7 @@ export function InputPaytoForm({ name="path1" + readonly={readonly} label={i18n.str`Account`} tooltip={i18n.str`Unified Payment Interface.`} /> @@ -326,6 +332,7 @@ export function InputPaytoForm({ name="path1" + readonly={readonly} label={i18n.str`Address`} tooltip={i18n.str`Bitcoin protocol.`} /> @@ -335,6 +342,7 @@ export function InputPaytoForm({ name="path1" + readonly={readonly} label={i18n.str`Address`} tooltip={i18n.str`Ethereum protocol.`} /> @@ -344,6 +352,7 @@ export function InputPaytoForm({ name="path1" + readonly={readonly} label={i18n.str`Address`} tooltip={i18n.str`Interledger protocol.`} /> @@ -354,11 +363,13 @@ export function InputPaytoForm({ name="path1" + readonly={readonly} label={i18n.str`Host`} tooltip={i18n.str`Bank host.`} /> name="path2" + readonly={readonly} label={i18n.str`Account`} tooltip={i18n.str`Bank account.`} /> @@ -372,6 +383,7 @@ export function InputPaytoForm({ diff --git a/packages/merchant-backoffice-ui/src/components/menu/SideBar.tsx b/packages/merchant-backoffice-ui/src/components/menu/SideBar.tsx index 8aac5f543..cfc00148e 100644 --- a/packages/merchant-backoffice-ui/src/components/menu/SideBar.tsx +++ b/packages/merchant-backoffice-ui/src/components/menu/SideBar.tsx @@ -215,14 +215,6 @@ export function Sidebar({ -
  • -
    - - - - {config.currency} -
    -
  • diff --git a/packages/merchant-backoffice-ui/src/paths/instance/accounts/update/UpdatePage.tsx b/packages/merchant-backoffice-ui/src/paths/instance/accounts/update/UpdatePage.tsx index 802f593cf..e0e0ba7ed 100644 --- a/packages/merchant-backoffice-ui/src/paths/instance/accounts/update/UpdatePage.tsx +++ b/packages/merchant-backoffice-ui/src/paths/instance/accounts/update/UpdatePage.tsx @@ -20,7 +20,7 @@ */ import { useTranslationContext } from "@gnu-taler/web-util/browser"; -import { h, VNode } from "preact"; +import { Fragment, h, VNode } from "preact"; import { useState } from "preact/hooks"; import { AsyncButton } from "../../../../components/exception/AsyncButton.js"; import { @@ -29,20 +29,41 @@ import { } from "../../../../components/form/FormProvider.js"; import { Input } from "../../../../components/form/Input.js"; import { MerchantBackend, WithId } from "../../../../declaration.js"; +import { InputSelector } from "../../../../components/form/InputSelector.js"; +import { InputPaytoForm } from "../../../../components/form/InputPaytoForm.js"; +import { undefinedIfEmpty } from "../../../../utils/table.js"; -type Entity = MerchantBackend.BankAccounts.AccountPatchDetails & WithId; +type Entity = MerchantBackend.BankAccounts.BankAccountEntry + & WithId; +const accountAuthType = ["unedit", "none", "basic"]; interface Props { - onUpdate: (d: Entity) => Promise; + onUpdate: (d: MerchantBackend.BankAccounts.AccountPatchDetails) => Promise; onBack?: () => void; account: Entity; } + + export function UpdatePage({ account, onUpdate, onBack }: Props): VNode { const { i18n } = useTranslationContext(); - const [state, setState] = useState>(account); + const [state, setState] = useState>(account); + + const errors: FormErrors = { + credit_facade_url: !state.credit_facade_url ? i18n.str`required` : !isValidURL(state.credit_facade_url) ? i18n.str`invalid url` : undefined, + credit_facade_credentials: undefinedIfEmpty({ - const errors: FormErrors = { + username: state.credit_facade_credentials?.type !== "basic" ? undefined + : !state.credit_facade_credentials.username ? i18n.str`required` : undefined, + + password: state.credit_facade_credentials?.type !== "basic" ? undefined + : !state.credit_facade_credentials.password ? i18n.str`required` : undefined, + + repeatPassword: state.credit_facade_credentials?.type !== "basic" ? undefined + : !(state.credit_facade_credentials as any).repeatPassword ? i18n.str`required` : + (state.credit_facade_credentials as any).repeatPassword !== state.credit_facade_credentials.password ? i18n.str`doesnt match` + : undefined, + }), }; const hasErrors = Object.keys(errors).some( @@ -51,7 +72,20 @@ export function UpdatePage({ account, onUpdate, onBack }: Props): VNode { const submitForm = () => { if (hasErrors) return Promise.reject(); - return onUpdate(state as any); + + const creds: typeof state.credit_facade_credentials = + state.credit_facade_credentials?.type === "basic" ? { + type: "basic", + password: state.credit_facade_credentials.password, + username: state.credit_facade_credentials.username, + } : state.credit_facade_credentials?.type === "none" ? { + type: "none" + } : undefined; + + return onUpdate({ + credit_facade_credentials: creds, + credit_facade_url: state.credit_facade_url, + }); }; return ( @@ -63,7 +97,7 @@ export function UpdatePage({ account, onUpdate, onBack }: Props): VNode {
    - Account: {account.id} + Account: {account.id.substring(0, 8)}...
    @@ -80,11 +114,49 @@ export function UpdatePage({ account, onUpdate, onBack }: Props): VNode { valueHandler={setState} errors={errors} > + + name="payto_uri" + label={i18n.str`Account`} + readonly + /> name="credit_facade_url" - label={i18n.str`Description`} - tooltip={i18n.str`dddd`} + label={i18n.str`Account info URL`} + help="https://bank.com" + expand + tooltip={i18n.str`From where the merchant can download information about incoming wire transfers to this account`} + /> + { + if (str === "none") return "Without authentication"; + if (str === "basic") return "With authentication"; + return "Do not change" + }} /> + {state.credit_facade_credentials?.type === "basic" ? ( + + + + + + ) : undefined}
    @@ -112,3 +184,12 @@ export function UpdatePage({ account, onUpdate, onBack }: Props): VNode {
    ); } + +function isValidURL(s: string): boolean { + try { + const u = new URL(s) + return true; + } catch (e) { + return false; + } +} diff --git a/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/update/UpdatePage.tsx b/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/update/UpdatePage.tsx index 1164aed5a..b82807cc7 100644 --- a/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/update/UpdatePage.tsx +++ b/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/update/UpdatePage.tsx @@ -89,7 +89,7 @@ export function UpdatePage({ device, onUpdate, onBack }: Props): VNode { name="otp_device_description" label={i18n.str`Description`} - tooltip={i18n.str`dddd`} + tooltip={i18n.str`Useful to identify the device physically`} /> name="otp_algorithm" diff --git a/packages/merchant-backoffice-ui/src/paths/instance/update/UpdatePage.tsx b/packages/merchant-backoffice-ui/src/paths/instance/update/UpdatePage.tsx index 3dc1f8d07..5b88b550f 100644 --- a/packages/merchant-backoffice-ui/src/paths/instance/update/UpdatePage.tsx +++ b/packages/merchant-backoffice-ui/src/paths/instance/update/UpdatePage.tsx @@ -66,13 +66,6 @@ function convert( return { ...defaults, ...rest }; } -function getTokenValuePart(t?: string): string | undefined { - if (!t) return t; - const match = /secret-token:(.*)/.exec(t); - if (!match || !match[1]) return undefined; - return match[1]; -} - export function UpdatePage({ onUpdate, selected, -- cgit v1.2.3