import { ErrorType, HttpResponsePaginated, RequestError, notify, notifyError, useTranslationContext } from "@gnu-taler/web-util/browser"; import { VNode, h } from "preact"; import { useAdminAccountAPI, useBusinessAccountDetails } from "../hooks/circuit.js"; import { useState } from "preact/hooks"; import { HttpStatusCode, TranslatedString } from "@gnu-taler/taler-util"; import { buildRequestErrorMessage } from "../utils.js"; import { AccountForm } from "./admin/AccountForm.js"; export function ShowAccountDetails({ account, onClear, onUpdateSuccess, onLoadNotOk, onChangePassword, }: { onLoadNotOk: ( error: HttpResponsePaginated, ) => VNode; onClear?: () => void; onChangePassword: () => void; onUpdateSuccess: () => void; account: string; }): VNode { const { i18n } = useTranslationContext(); const result = useBusinessAccountDetails(account); const { updateAccount } = useAdminAccountAPI(); const [update, setUpdate] = useState(false); const [submitAccount, setSubmitAccount] = useState< SandboxBackend.Circuit.CircuitAccountData | undefined >(); if (!result.ok) { if (result.loading || result.type === ErrorType.TIMEOUT) { return onLoadNotOk(result); } if (result.status === HttpStatusCode.NotFound) { return
account not found
; } return onLoadNotOk(result); } async function doUpdate() { if (!update) { setUpdate(true); } else { if (!submitAccount) return; try { await updateAccount(account, { cashout_address: submitAccount.cashout_address, contact_data: submitAccount.contact_data, }); onUpdateSuccess(); } catch (error) { if (error instanceof RequestError) { notify( buildRequestErrorMessage(i18n, error.cause, { onClientError: (status) => status === HttpStatusCode.Forbidden ? i18n.str`The rights to change the account are not sufficient` : status === HttpStatusCode.NotFound ? i18n.str`The username was not found` : undefined, }), ); } else { notifyError( i18n.str`Operation failed, please report`, (error instanceof Error ? error.message : JSON.stringify(error)) as TranslatedString ) } } } } return (

{update ? Update account : Account details }

change the account details
setSubmitAccount(a)} >
{onClear ? ( { e.preventDefault(); onClear(); }} /> ) : undefined}
{ e.preventDefault(); onChangePassword(); }} />
{ e.preventDefault(); doUpdate() }} />

); }