aboutsummaryrefslogtreecommitdiff
path: root/packages/aml-backoffice-ui/src/pages/CaseDetails.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'packages/aml-backoffice-ui/src/pages/CaseDetails.tsx')
-rw-r--r--packages/aml-backoffice-ui/src/pages/CaseDetails.tsx83
1 files changed, 42 insertions, 41 deletions
diff --git a/packages/aml-backoffice-ui/src/pages/CaseDetails.tsx b/packages/aml-backoffice-ui/src/pages/CaseDetails.tsx
index ce820d612..f618a3592 100644
--- a/packages/aml-backoffice-ui/src/pages/CaseDetails.tsx
+++ b/packages/aml-backoffice-ui/src/pages/CaseDetails.tsx
@@ -1,24 +1,23 @@
-import { Fragment, VNode, h } from "preact";
import {
AbsoluteTime,
AmountJson,
Amounts,
+ PaytoString,
+ TalerError,
TranslatedString,
+ assertUnreachable,
} from "@gnu-taler/taler-util";
-import { format } from "date-fns";
+import { ErrorLoading, Loading, useTranslationContext } from "@gnu-taler/web-util/browser";
import { ArrowDownCircleIcon, ClockIcon } from "@heroicons/react/20/solid";
+import { format } from "date-fns";
+import { Fragment, VNode, h } from "preact";
import { useState } from "preact/hooks";
import { NiceForm } from "../NiceForm.js";
import { FlexibleForm } from "../forms/index.js";
import { UIFormField } from "../handlers/forms.js";
+import { useCaseDetails } from "../hooks/useCaseDetails.js";
import { Pages } from "../pages.js";
import { AmlExchangeBackend } from "../types.js";
-import { HandleAccountNotReady } from "./HandleAccountNotReady.js";
-import { useTranslationContext } from "@gnu-taler/web-util/browser";
-import { useOfficer } from "../hooks/useOfficer.js";
-import { buildQuerySignature } from "../account.js";
-import { useCaseDetails } from "../hooks/useCaseDetails.js";
-import { handleNotOkResult } from "../utils/errors.js";
type AmlEvent = AmlFormEvent | KycCollectionEvent | KycExpirationEvent;
type AmlFormEvent = {
@@ -85,30 +84,33 @@ function getEventsFromAmlHistory(
return ae.concat(ke).sort(selectSooner);
}
-export function CaseDetails({ account: paytoHash }: { account: string }) {
+export function CaseDetails({ account }: { account: string }) {
const [selected, setSelected] = useState<AmlEvent | undefined>(undefined);
- const officer = useOfficer();
const { i18n } = useTranslationContext();
- if (officer.state !== "ready") {
- return <HandleAccountNotReady officer={officer} />;
+ const details = useCaseDetails(account)
+ if (!details) {
+ return <Loading />
}
- const signature =
- officer.state === "ready"
- ? buildQuerySignature(officer.account.signingKey)
- : undefined;
- const details = useCaseDetails(officer.account.accountId, paytoHash, signature)
- if (!details.ok && !details.loading) {
- return handleNotOkResult(i18n)(details);
+ if (details instanceof TalerError) {
+ return <ErrorLoading error={details} />
}
- const aml_history = details.loading ? [] : details.data.aml_history
- const kyc_attributes = details.loading ? [] : details.data.kyc_attributes
- const events = getEventsFromAmlHistory(aml_history,kyc_attributes);
-
+ if (details.type === "fail") {
+ switch (details.case) {
+ case "unauthorized":
+ case "officer-not-found":
+ case "officer-disabled": return <div />
+ default: assertUnreachable(details)
+ }
+ }
+ const { aml_history, kyc_attributes } = details.body
+
+ const events = getEventsFromAmlHistory(aml_history, kyc_attributes);
+
return (
<div>
<a
- href={Pages.newFormEntry.url({ account: paytoHash })}
+ href={Pages.newFormEntry.url({ account })}
class="m-4 block rounded-md w-fit border-0 px-3 py-2 text-center text-sm bg-indigo-700 text-white shadow-sm hover:bg-indigo-700"
>
New AML form
@@ -287,23 +289,22 @@ function ShowConsolidated({
},
Object.entries(cons.kyc).length > 0
? {
- title: "KYC" as TranslatedString,
- fields: Object.entries(cons.kyc).map(([key, field]) => {
- const result: UIFormField = {
- type: "text",
- props: {
- label: key as TranslatedString,
- name: `kyc.${key}.value`,
- help: `${field.provider} since ${
- field.since.t_ms === "never"
- ? "never"
- : format(field.since.t_ms, "dd/MM/yyyy")
+ title: "KYC" as TranslatedString,
+ fields: Object.entries(cons.kyc).map(([key, field]) => {
+ const result: UIFormField = {
+ type: "text",
+ props: {
+ label: key as TranslatedString,
+ name: `kyc.${key}.value`,
+ help: `${field.provider} since ${field.since.t_ms === "never"
+ ? "never"
+ : format(field.since.t_ms, "dd/MM/yyyy")
}` as TranslatedString,
- },
- };
- return result;
- }),
- }
+ },
+ };
+ return result;
+ }),
+ }
: undefined,
],
};
@@ -319,7 +320,7 @@ function ShowConsolidated({
key={`${String(Date.now())}`}
form={form}
initial={cons}
- onUpdate={() => {}}
+ onUpdate={() => { }}
/>
</Fragment>
);