import { ErrorType, HttpResponsePaginated, RequestError, notify, notifyError, useTranslationContext } from "@gnu-taler/web-util/browser"; import { VNode,h,Fragment } from "preact"; import { useAccountDetails } from "../../hooks/access.js"; import { useAdminAccountAPI } from "../../hooks/circuit.js"; import { Amounts, HttpStatusCode, TranslatedString } from "@gnu-taler/taler-util"; import { buildRequestErrorMessage } from "../../utils.js"; export function RemoveAccount({ account, onClear, onUpdateSuccess, onLoadNotOk, }: { onLoadNotOk: ( error: HttpResponsePaginated, ) => VNode; onClear: () => void; onUpdateSuccess: () => void; account: string; }): VNode { const { i18n } = useTranslationContext(); const result = useAccountDetails(account); const { deleteAccount } = useAdminAccountAPI(); 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); } const balance = Amounts.parse(result.data.balance.amount); if (!balance) { return
there was an error reading the balance
; } const isBalanceEmpty = Amounts.isZero(balance); return (

Remove account: {account}

{/* {FXME: SHOW WARNING} */} {/* {!isBalanceEmpty && ( saveError(undefined)} /> )} */}

{ e.preventDefault(); onClear(); }} />
{ e.preventDefault(); try { const r = await deleteAccount(account); onUpdateSuccess(); } catch (error) { if (error instanceof RequestError) { notify( buildRequestErrorMessage(i18n, error.cause, { onClientError: (status) => status === HttpStatusCode.Forbidden ? i18n.str`The administrator specified a institutional username` : status === HttpStatusCode.NotFound ? i18n.str`The username was not found` : status === HttpStatusCode.PreconditionFailed ? i18n.str`Balance was not zero` : undefined, }), ); } else { notifyError(i18n.str`Operation failed, please report`, (error instanceof Error ? error.message : JSON.stringify(error)) as TranslatedString); } } }} />

); }