diff options
Diffstat (limited to 'packages/aml-backoffice-ui/src/pages/ShowConsolidated.tsx')
-rw-r--r-- | packages/aml-backoffice-ui/src/pages/ShowConsolidated.tsx | 161 |
1 files changed, 92 insertions, 69 deletions
diff --git a/packages/aml-backoffice-ui/src/pages/ShowConsolidated.tsx b/packages/aml-backoffice-ui/src/pages/ShowConsolidated.tsx index cdc5d0bc1..fcec8609a 100644 --- a/packages/aml-backoffice-ui/src/pages/ShowConsolidated.tsx +++ b/packages/aml-backoffice-ui/src/pages/ShowConsolidated.tsx @@ -20,16 +20,39 @@ import { TranslatedString, } from "@gnu-taler/taler-util"; import { - DefaultForm, FormConfiguration, + RenderAllFieldsByUiConfig, UIFormElementConfig, UIHandlerId, - useTranslationContext + convertUiField, + getConverterById, + useTranslationContext, } from "@gnu-taler/web-util/browser"; import { format } from "date-fns"; import { Fragment, VNode, h } from "preact"; +import { getShapeFromFields, useFormState } from "../hooks/form.js"; import { AmlEvent } from "./CaseDetails.js"; +/** + * the exchange doesn't have a consistent api + * https://bugs.gnunet.org/view.php?id=9142 + * + * @param data + * @returns + */ +function fixProvidedInfo(data: object): object { + return Object.entries(data).reduce((prev, [key, value]) => { + prev[key] = value; + if (typeof value === "object" && value["value"]) { + const v = value["value"]; + if (typeof v === "object" && v["text"]) { + prev[key].value = v["text"]; + } + } + return prev; + }, {} as any); +} + export function ShowConsolidated({ history, until, @@ -41,77 +64,77 @@ export function ShowConsolidated({ const cons = getConsolidated(history, until); - const form: FormConfiguration = { + const fixed = fixProvidedInfo(cons.kyc); + + const formConfig: FormConfiguration = { type: "double-column", - design: [ + design: Object.entries(fixed).length > 0 ? [ + { - title: i18n.str`AML`, - fields: [ - { - type: "amount", - id: ".aml.threshold" as UIHandlerId, - currency: "NETZBON", - label: i18n.str`Threshold`, - name: "aml.threshold", - }, - { - type: "choiceHorizontal", - label: i18n.str`State`, - name: "aml.state", - id: ".aml.state" as UIHandlerId, - choices: [ - { - label: i18n.str`Frozen`, - value: "frozen", - }, - { - label: i18n.str`Pending`, - value: "pending", - }, - { - label: i18n.str`Normal`, - value: "normal", - }, - ], - }, - ], - }, - Object.entries(cons.kyc).length > 0 - ? { - title: i18n.str`KYC`, - fields: Object.entries(cons.kyc).map(([key, field]) => { - const result: UIFormElementConfig = { - type: "text", - label: key as TranslatedString, - id: `kyc.${key}.value` as UIHandlerId, - 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; - }), - } - : undefined!, - ], + title: i18n.str`KYC collected info`, + fields: Object.entries(fixed).map(([key, field]) => { + const result: UIFormElementConfig = { + type: "text", + label: key as TranslatedString, + id: `${key}.value` as UIHandlerId, + disabled: true, + help: `At ${field.since.t_ms === "never" + ? "never" + : format(field.since.t_ms, "dd/MM/yyyy HH:mm:ss") + }` as TranslatedString, + }; + return result; + }), + } + ] : [], }; + const shape: Array<UIHandlerId> = formConfig.design.flatMap((field) => + getShapeFromFields(field.fields), + ); + + const { handler } = useFormState<{}>(shape, fixed, (result) => { + return { status: "ok", errors: undefined, result }; + }); + return ( <Fragment> - <h1 class="text-base font-semibold leading-7 text-black"> - Consolidated information{" "} - {until.t_ms === "never" - ? "" - : `after ${format(until.t_ms, "dd MMMM yyyy")}`} - </h1> - <DefaultForm - key={`${String(Date.now())}`} - form={form as any} - initial={cons} - readOnly - onUpdate={() => {}} - /> + <div class="space-y-10 divide-y divide-gray-900/10"> + {formConfig.design.map((section, i) => { + if (!section) return <Fragment />; + return ( + <div + key={i} + class="grid grid-cols-1 gap-x-8 gap-y-8 pt-5 md:grid-cols-3" + > + <div class="px-4 sm:px-0"> + <h2 class="text-base font-semibold leading-7 text-gray-900"> + {section.title} + </h2> + {section.description && ( + <p class="mt-1 text-sm leading-6 text-gray-600"> + {section.description} + </p> + )} + </div> + <div class="bg-white shadow-sm ring-1 ring-gray-900/5 rounded-md md:col-span-2"> + <div class="p-3"> + <div class="grid max-w-2xl grid-cols-1 gap-x-6 gap-y-8 sm:grid-cols-6"> + <RenderAllFieldsByUiConfig + key={i} + fields={convertUiField( + i18n, + section.fields, + handler, + getConverterById, + )} + /> + </div> + </div> + </div> + </div> + ); + })} + </div> </Fragment> ); } @@ -125,7 +148,7 @@ interface Consolidated { kyc: { [field: string]: { value: unknown; - provider: string; + provider?: string; since: AbsoluteTime; }; }; |