aboutsummaryrefslogtreecommitdiff
path: root/packages/aml-backoffice-ui
diff options
context:
space:
mode:
Diffstat (limited to 'packages/aml-backoffice-ui')
-rw-r--r--packages/aml-backoffice-ui/src/NiceForm.tsx1
-rw-r--r--packages/aml-backoffice-ui/src/forms/902_15e.ts8
-rw-r--r--packages/aml-backoffice-ui/src/forms/index.ts2
-rw-r--r--packages/aml-backoffice-ui/src/forms/simplest.ts2
-rw-r--r--packages/aml-backoffice-ui/src/handlers/FormProvider.tsx13
-rw-r--r--packages/aml-backoffice-ui/src/pages/AntiMoneyLaunderingForm.tsx16
-rw-r--r--packages/aml-backoffice-ui/src/pages/CaseDetails.tsx9
-rw-r--r--packages/aml-backoffice-ui/src/pages/ShowConsolidated.tsx5
8 files changed, 29 insertions, 27 deletions
diff --git a/packages/aml-backoffice-ui/src/NiceForm.tsx b/packages/aml-backoffice-ui/src/NiceForm.tsx
index a78036a6b..53f29e580 100644
--- a/packages/aml-backoffice-ui/src/NiceForm.tsx
+++ b/packages/aml-backoffice-ui/src/NiceForm.tsx
@@ -1,4 +1,3 @@
-import { useTranslationContext } from "@gnu-taler/web-util/browser";
import { ComponentChildren, Fragment, h } from "preact";
import { FlexibleForm } from "./forms/index.js";
import { FormProvider } from "./handlers/FormProvider.js";
diff --git a/packages/aml-backoffice-ui/src/forms/902_15e.ts b/packages/aml-backoffice-ui/src/forms/902_15e.ts
index 0d90d82ee..6689896ab 100644
--- a/packages/aml-backoffice-ui/src/forms/902_15e.ts
+++ b/packages/aml-backoffice-ui/src/forms/902_15e.ts
@@ -1,8 +1,7 @@
import { AbsoluteTime, TranslatedString } from "@gnu-taler/taler-util";
-import { FormState } from "../handlers/FormProvider.js";
import { BaseForm } from "../pages/AntiMoneyLaunderingForm.js";
import { FlexibleForm } from "./index.js";
-import { Simplest, resolutionSection } from "./simplest.js";
+import { resolutionSection } from "./simplest.js";
export const v1 = (current: BaseForm): FlexibleForm<Form902_15.Form> => ({
design: [
@@ -152,11 +151,6 @@ export const v1 = (current: BaseForm): FlexibleForm<Form902_15.Form> => ({
},
resolutionSection(current),
],
- behavior: function formBehavior(
- v: Partial<Form902_15.Form>,
- ): FormState<Form902_15.Form> {
- return {};
- },
});
namespace Form902_15 {
diff --git a/packages/aml-backoffice-ui/src/forms/index.ts b/packages/aml-backoffice-ui/src/forms/index.ts
index 8feef0c49..74407ed82 100644
--- a/packages/aml-backoffice-ui/src/forms/index.ts
+++ b/packages/aml-backoffice-ui/src/forms/index.ts
@@ -4,7 +4,7 @@ import { DoubleColumnForm } from "../handlers/forms.js";
export interface FlexibleForm<T extends object> {
design: DoubleColumnForm;
- behavior: (form: Partial<T>) => FormState<T>;
+ behavior?: (form: Partial<T>) => FormState<T>;
}
export const languageList = [
diff --git a/packages/aml-backoffice-ui/src/forms/simplest.ts b/packages/aml-backoffice-ui/src/forms/simplest.ts
index 5acb58201..778d20b75 100644
--- a/packages/aml-backoffice-ui/src/forms/simplest.ts
+++ b/packages/aml-backoffice-ui/src/forms/simplest.ts
@@ -33,7 +33,7 @@ export const v1 = (current: BaseForm): FlexibleForm<Simplest.Form> => ({
): FormState<Simplest.Form> {
return {
comment: {
- help: ((v.comment?.length ?? 0) > 10 ? "too long" : "") as TranslatedString
+ help: ((v.comment?.length ?? 0) > 100 ? "keep it short" : "") as TranslatedString
},
threshold: {
disabled: v.state === AmlExchangeBackend.AmlState.frozen,
diff --git a/packages/aml-backoffice-ui/src/handlers/FormProvider.tsx b/packages/aml-backoffice-ui/src/handlers/FormProvider.tsx
index 2d9eec164..b3cb7a972 100644
--- a/packages/aml-backoffice-ui/src/handlers/FormProvider.tsx
+++ b/packages/aml-backoffice-ui/src/handlers/FormProvider.tsx
@@ -21,6 +21,17 @@ export interface FormType<T extends object> {
//@ts-ignore
export const FormContext = createContext<FormType<any>>({});
+/**
+ * Map of {[field]:BehaviorResult}
+ * for every field of type
+ * - any native (string, number, etc...)
+ * - absoluteTime
+ * - amountJson
+ *
+ * except for:
+ * - object => recurse into
+ * - array => behavior result and element field
+ */
export type FormState<T extends object> = {
[field in keyof T]?: T[field] extends AbsoluteTime
? BehaviorResult
@@ -28,7 +39,7 @@ export type FormState<T extends object> = {
? BehaviorResult
: T[field] extends Array<infer P extends object>
? InputArrayFieldState<P>
- : T[field] extends (object | undefined)
+ : T[field] extends (object)
? FormState<T[field]>
: BehaviorResult;
};
diff --git a/packages/aml-backoffice-ui/src/pages/AntiMoneyLaunderingForm.tsx b/packages/aml-backoffice-ui/src/pages/AntiMoneyLaunderingForm.tsx
index d1fb3b895..381f00ebb 100644
--- a/packages/aml-backoffice-ui/src/pages/AntiMoneyLaunderingForm.tsx
+++ b/packages/aml-backoffice-ui/src/pages/AntiMoneyLaunderingForm.tsx
@@ -1,5 +1,5 @@
import { AbsoluteTime, AmountJson, Amounts, Codec, OperationResult, buildCodecForObject, codecForNumber, codecForString, codecOptional } from "@gnu-taler/taler-util";
-import { FlexibleForm, useTranslationContext } from "@gnu-taler/web-util/browser";
+import { useTranslationContext } from "@gnu-taler/web-util/browser";
import { h } from "preact";
import { NiceForm } from "../NiceForm.js";
import { v1 as form_902_11e_v1 } from "../forms/902_11e.js";
@@ -10,10 +10,11 @@ import { v1 as form_902_1e_v1 } from "../forms/902_1e.js";
import { v1 as form_902_4e_v1 } from "../forms/902_4e.js";
import { v1 as form_902_5e_v1 } from "../forms/902_5e.js";
import { v1 as form_902_9e_v1 } from "../forms/902_9e.js";
-import { Simplest, v1 as simplest } from "../forms/simplest.js";
+import { v1 as simplest } from "../forms/simplest.js";
import { Pages } from "../pages.js";
import { AmlExchangeBackend } from "../types.js";
import { useExchangeApiContext } from "../context/config.js";
+import { FlexibleForm } from "../forms/index.js";
export function AntiMoneyLaunderingForm({ account, formId, onSubmit }: { account: string, formId: string, onSubmit: (justification: Justification, state: AmlExchangeBackend.AmlState, threshold: AmountJson) => Promise<void>; }) {
const { i18n } = useTranslationContext()
@@ -51,7 +52,6 @@ export function AntiMoneyLaunderingForm({ account, formId, onSubmit }: { account
>
<div class="mt-6 flex items-center justify-end gap-x-6">
<a
- // type="button"
href={Pages.account.url({ account })}
class="text-sm font-semibold leading-6 text-gray-900"
>
@@ -78,18 +78,18 @@ const DocumentDuplicateIcon = <svg xmlns="http://www.w3.org/2000/svg" fill="none
</svg>
-export type FormMetadata = {
+export type FormMetadata<T extends BaseForm> = {
label: string,
id: string,
version: number,
icon: h.JSX.Element,
- impl: (current: BaseForm) => FlexibleForm<BaseForm>
+ impl: (current: BaseForm) => FlexibleForm<T>
}
export type Justification<T = any> = {
// form values
value: T;
-} & Omit<Omit<FormMetadata, "icon">, "impl">
+} & Omit<Omit<FormMetadata<any>, "icon">, "impl">
export function stringifyJustification(j: Justification): string {
return JSON.stringify(j)
@@ -113,7 +113,7 @@ type ParseJustificationFail =
"form-not-found" |
"version-not-found";
-export function parseJustification(s: string, listOfAllKnownForms: FormMetadata[]): OperationResult<{ justification: Justification, metadata: FormMetadata }, ParseJustificationFail> {
+export function parseJustification(s: string, listOfAllKnownForms: FormMetadata<any>[]): OperationResult<{ justification: Justification, metadata: FormMetadata<any> }, ParseJustificationFail> {
try {
const justification = JSON.parse(s)
const info = codecForSimpleFormMetadata().decode(justification)
@@ -157,7 +157,7 @@ export function parseJustification(s: string, listOfAllKnownForms: FormMetadata[
}
-export const allForms: Array<FormMetadata> = [
+export const allForms: Array<FormMetadata<BaseForm>> = [
{
label: "Simple comment",
id: "simple_comment",
diff --git a/packages/aml-backoffice-ui/src/pages/CaseDetails.tsx b/packages/aml-backoffice-ui/src/pages/CaseDetails.tsx
index 1cfa65926..9d6126ce3 100644
--- a/packages/aml-backoffice-ui/src/pages/CaseDetails.tsx
+++ b/packages/aml-backoffice-ui/src/pages/CaseDetails.tsx
@@ -2,7 +2,6 @@ import {
AbsoluteTime,
AmountJson,
Amounts,
- OperationResult,
TalerError,
TranslatedString,
assertUnreachable
@@ -11,12 +10,12 @@ import { ErrorLoading, Loading, useTranslationContext } from "@gnu-taler/web-uti
import { format } from "date-fns";
import { Fragment, VNode, h } from "preact";
import { useState } from "preact/hooks";
+import { NiceForm } from "../NiceForm.js";
import { useCaseDetails } from "../hooks/useCaseDetails.js";
import { Pages } from "../pages.js";
import { AmlExchangeBackend } from "../types.js";
-import { ShowConsolidated } from "./ShowConsolidated.js";
import { FormMetadata, Justification, allForms, parseJustification } from "./AntiMoneyLaunderingForm.js";
-import { NiceForm } from "../NiceForm.js";
+import { ShowConsolidated } from "./ShowConsolidated.js";
export type AmlEvent = AmlFormEvent | AmlFormEventError | KycCollectionEvent | KycExpirationEvent;
type AmlFormEvent = {
@@ -24,7 +23,7 @@ type AmlFormEvent = {
when: AbsoluteTime;
title: TranslatedString;
justification: Justification;
- metadata: FormMetadata;
+ metadata: FormMetadata<any>;
state: AmlExchangeBackend.AmlState;
threshold: AmountJson;
};
@@ -112,7 +111,7 @@ export function getEventsFromAmlHistory(
export function CaseDetails({ account }: { account: string }) {
const [selected, setSelected] = useState<AbsoluteTime>(AbsoluteTime.now());
- const [showForm, setShowForm] = useState<{ justification: Justification, metadata: FormMetadata }>()
+ const [showForm, setShowForm] = useState<{ justification: Justification, metadata: FormMetadata<any> }>()
const { i18n } = useTranslationContext();
const details = useCaseDetails(account)
diff --git a/packages/aml-backoffice-ui/src/pages/ShowConsolidated.tsx b/packages/aml-backoffice-ui/src/pages/ShowConsolidated.tsx
index 0efc68632..bd25ce958 100644
--- a/packages/aml-backoffice-ui/src/pages/ShowConsolidated.tsx
+++ b/packages/aml-backoffice-ui/src/pages/ShowConsolidated.tsx
@@ -18,7 +18,6 @@ export function ShowConsolidated({
const cons = getConsolidated(history, until);
const form: FlexibleForm<Consolidated> = {
- versionId: "1",
behavior: (form) => {
return {
aml: {
@@ -93,10 +92,10 @@ export function ShowConsolidated({
return (
<Fragment>
<h1 class="text-base font-semibold leading-7 text-black">
- Consolidated information
+ Consolidated information
{until.t_ms === "never"
? ""
- : `after ${format(until.t_ms, "dd MMMM yyyy")}` }
+ : `after ${format(until.t_ms, "dd MMMM yyyy")}`}
</h1>
<NiceForm
key={`${String(Date.now())}`}