import { HttpStatusCode, TalerCorebankApi, TalerError, TalerErrorCode, TranslatedString } from "@gnu-taler/taler-util"; import { Loading, LocalNotificationBanner, notifyInfo, useLocalNotification, useTranslationContext } from "@gnu-taler/web-util/browser"; import { Fragment, VNode, h } from "preact"; import { useState } from "preact/hooks"; import { ErrorLoadingWithDebug } from "../../components/ErrorLoadingWithDebug.js"; import { useBankCoreApiContext } from "../../context/config.js"; import { useAccountDetails } from "../../hooks/access.js"; import { useBackendState } from "../../hooks/backend.js"; import { LoginForm } from "../LoginForm.js"; import { ProfileNavigation } from "../ProfileNavigation.js"; import { assertUnreachable } from "../WithdrawalOperationPage.js"; import { AccountForm } from "../admin/AccountForm.js"; import { useBankState } from "../../hooks/bank-state.js"; export function ShowAccountDetails({ account, onClear, onUpdateSuccess, }: { onClear?: () => void; onUpdateSuccess: () => void; account: string; }): VNode { const { i18n } = useTranslationContext(); const { state: credentials } = useBackendState(); const creds = credentials.status !== "loggedIn" ? undefined : credentials const { api } = useBankCoreApiContext() const accountIsTheCurrentUser = credentials.status === "loggedIn" ? credentials.username === account : false const [update, setUpdate] = useState(false); const [submitAccount, setSubmitAccount] = useState(); const [notification, notify, handleError] = useLocalNotification() const [, updateBankState] = useBankState() const result = useAccountDetails(account); if (!result) { return } if (result instanceof TalerError) { return } if (result.type === "fail") { switch (result.case) { case HttpStatusCode.Unauthorized: case HttpStatusCode.NotFound: return default: assertUnreachable(result) } } async function doUpdate() { if (!update || !submitAccount || !creds) return; await handleError(async () => { const resp = await api.updateAccount({ token: creds.token, username: account, }, submitAccount); if (resp.type === "ok") { notifyInfo(i18n.str`Account updated`); onUpdateSuccess(); } else { switch (resp.case) { case HttpStatusCode.Unauthorized: return notify({ type: "error", title: i18n.str`The rights to change the account are not sufficient`, description: resp.detail.hint as TranslatedString, debug: resp.detail, }) case HttpStatusCode.NotFound: return notify({ type: "error", title: i18n.str`The username was not found`, description: resp.detail.hint as TranslatedString, debug: resp.detail, }) case TalerErrorCode.BANK_NON_ADMIN_PATCH_LEGAL_NAME: return notify({ type: "error", title: i18n.str`You can't change the legal name, please contact the your account administrator.`, description: resp.detail.hint as TranslatedString, debug: resp.detail, }) case TalerErrorCode.BANK_NON_ADMIN_PATCH_DEBT_LIMIT: return notify({ type: "error", title: i18n.str`You can't change the debt limit, please contact the your account administrator.`, description: resp.detail.hint as TranslatedString, debug: resp.detail, }) case TalerErrorCode.BANK_NON_ADMIN_PATCH_CASHOUT: return notify({ type: "error", title: i18n.str`You can't change the cashout address, please contact the your account administrator.`, description: resp.detail.hint as TranslatedString, debug: resp.detail, }) case TalerErrorCode.BANK_NON_ADMIN_PATCH_CONTACT: return notify({ type: "error", title: i18n.str`You can't change the contact data, please contact the your account administrator.`, description: resp.detail.hint as TranslatedString, debug: resp.detail, }) case HttpStatusCode.Accepted: { updateBankState("currentChallengeId", resp.body.challenge_id) return notify({ type: "info", title: i18n.str`Cashout created but confirmation is required.`, }); } case TalerErrorCode.BANK_TAN_CHANNEL_NOT_SUPPORTED: { return notify({ type: "error", title: i18n.str`Authentication channel is not supported.`, description: resp.detail.hint as TranslatedString, debug: resp.detail, }); } default: assertUnreachable(resp) } } }) } return ( {accountIsTheCurrentUser ? :

Account "{account}"

}

Change details

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