import { RequestError, notify, notifyError, useTranslationContext } from "@gnu-taler/web-util/browser"; import { VNode, h, Fragment } from "preact"; import { useAdminAccountAPI } from "../../hooks/circuit.js"; import { useState } from "preact/hooks"; import { buildRequestErrorMessage } from "../../utils.js"; import { HttpStatusCode, TranslatedString } from "@gnu-taler/taler-util"; import { getRandomPassword } from "../rnd.js"; import { AccountForm } from "./AccountForm.js"; export function CreateNewAccount({ onCancel, onCreateSuccess, }: { onCancel: () => void; onCreateSuccess: (password: string) => void; }): VNode { const { i18n } = useTranslationContext(); const { createAccount } = useAdminAccountAPI(); const [submitAccount, setSubmitAccount] = useState< SandboxBackend.Circuit.CircuitAccountData | undefined >(); async function doCreate() { if (!submitAccount) return; try { const account: SandboxBackend.Circuit.CircuitAccountRequest = { cashout_address: submitAccount.cashout_address, contact_data: submitAccount.contact_data, internal_iban: submitAccount.iban, name: submitAccount.name, username: submitAccount.username, password: getRandomPassword(), }; await createAccount(account); onCreateSuccess(account.password); } catch (error) { if (error instanceof RequestError) { notify( buildRequestErrorMessage(i18n, error.cause, { onClientError: (status) => status === HttpStatusCode.Forbidden ? i18n.str`The rights to perform the operation are not sufficient` : status === HttpStatusCode.BadRequest ? i18n.str`Server replied that input data was invalid` : status === HttpStatusCode.Conflict ? i18n.str`At least one registration detail was not available` : undefined, }), ); } else { notifyError( i18n.str`Operation failed, please report`, (error instanceof Error ? error.message : JSON.stringify(error)) as TranslatedString ) } } } return (

New business account

{ setSubmitAccount(a); }} >
{onCancel ? :
}
); }