From d06accc782a4f2a8f3d84706f026e27fa51bc39a Mon Sep 17 00:00:00 2001 From: Sebastian Date: Mon, 13 May 2024 14:47:32 -0300 Subject: fix some inputs --- packages/aml-backoffice-ui/src/forms.json | 14 +++++------ packages/web-util/src/forms/InputArray.tsx | 28 +++++++++++++++++++--- .../web-util/src/forms/InputChoiceHorizontal.tsx | 5 ++-- packages/web-util/src/forms/converter.ts | 21 ++++++++++++---- packages/web-util/src/forms/forms.ts | 2 +- 5 files changed, 51 insertions(+), 19 deletions(-) diff --git a/packages/aml-backoffice-ui/src/forms.json b/packages/aml-backoffice-ui/src/forms.json index f095e6eb2..e3fed36d0 100644 --- a/packages/aml-backoffice-ui/src/forms.json +++ b/packages/aml-backoffice-ui/src/forms.json @@ -511,16 +511,14 @@ "type": "double-column", "design": [ { - "title": "Amount inputs", + "title": "File inputs", "fields": [ { - "type": "amount", - "name": "thedate", - "id": ".amount", - "converterId": "Taler.Amount", - "help": "how much do you have?", - "currency":"EUR", - "label": "Amount" + "type": "file", + "name": "photo", + "id": ".photo", + "label": "Photo", + "accept": "*.png" } ] } diff --git a/packages/web-util/src/forms/InputArray.tsx b/packages/web-util/src/forms/InputArray.tsx index 1ac96437c..d90028508 100644 --- a/packages/web-util/src/forms/InputArray.tsx +++ b/packages/web-util/src/forms/InputArray.tsx @@ -99,7 +99,7 @@ export function InputArray( const [selectedIndex, setSelected] = useState(undefined); const selected = selectedIndex === undefined ? undefined : list[selectedIndex]; - + return (
(
{list.map((v, idx) => { + const label = getValueDeeper(v, labelField.split(".")) return (
); } + + + +export function getValueDeeper( + object: Record, + names: string[], +): string { + if (names.length === 0) { + return object as any as string; + } + const [head, ...rest] = names; + if (!head) { + return getValueDeeper(object, rest); + } + if (object === undefined) { + return "" + } + return getValueDeeper(object[head], rest); +} + + diff --git a/packages/web-util/src/forms/InputChoiceHorizontal.tsx b/packages/web-util/src/forms/InputChoiceHorizontal.tsx index d8361718d..86d3aa926 100644 --- a/packages/web-util/src/forms/InputChoiceHorizontal.tsx +++ b/packages/web-util/src/forms/InputChoiceHorizontal.tsx @@ -34,11 +34,12 @@ export function InputChoiceHorizontal(
{choices.map((choice, idx) => { + const convertedValue = converter?.fromStringUI(choice.value as any) const isFirst = idx === 0; const isLast = idx === choices.length - 1; let clazz = "relative inline-flex items-center px-3 py-2 text-sm font-semibold text-gray-900 ring-1 ring-inset ring-gray-300 focus:z-10"; - if (converter?.fromStringUI(choice.value as any) === value) { + if (convertedValue !== undefined && convertedValue === value) { clazz += " text-white bg-indigo-600 hover:bg-indigo-500 ring-2 ring-indigo-600 hover:ring-indigo-500"; } else { @@ -61,7 +62,7 @@ export function InputChoiceHorizontal( class={clazz} onClick={(e) => { onChange( - (value === choice.value ? undefined : converter?.fromStringUI(choice.value as any)) as any, + (value === choice.value ? undefined : convertedValue) as any, ); }} > diff --git a/packages/web-util/src/forms/converter.ts b/packages/web-util/src/forms/converter.ts index 3a522bf7e..eee891776 100644 --- a/packages/web-util/src/forms/converter.ts +++ b/packages/web-util/src/forms/converter.ts @@ -53,6 +53,15 @@ function parseAmlState(s: string | undefined): TalerExchangeApi.AmlState { } } +const nullConverter: StringConverter = { + fromStringUI(v: string | undefined): string { + return v ?? ""; + }, + toStringUI(v: unknown): string { + return v as string; + }, +}; + function amountConverter(config: any): StringConverter { const currency = config["currency"]; if (!currency || typeof currency !== "string") { @@ -61,7 +70,9 @@ function amountConverter(config: any): StringConverter { return { fromStringUI(v: string | undefined): AmountJson { // FIXME: requires currency - return Amounts.parse(`${currency}:${v}`) ?? Amounts.zeroOfCurrency(currency); + return ( + Amounts.parse(`${currency}:${v}`) ?? Amounts.zeroOfCurrency(currency) + ); }, toStringUI(v: unknown): string { return v === undefined ? "" : Amounts.stringifyValue(v as AmountJson); @@ -82,7 +93,7 @@ function absTimeConverter(config: any): StringConverter { try { const time = parse(v, pattern, new Date()); return AbsoluteTime.fromMilliseconds(time.getTime()); - } catch(e) { + } catch (e) { return AbsoluteTime.never(); } }, @@ -91,9 +102,9 @@ function absTimeConverter(config: any): StringConverter { const d = v as AbsoluteTime; if (d.t_ms === "never") return "never"; try { - return format(d.t_ms, pattern) + return format(d.t_ms, pattern); } catch (e) { - return "" + return ""; } }, }; @@ -115,5 +126,5 @@ export function getConverterById( // @ts-expect-error check this return amlStateConverter; } - return undefined!; + return nullConverter as StringConverter; } diff --git a/packages/web-util/src/forms/forms.ts b/packages/web-util/src/forms/forms.ts index cb2ee0145..4c5050830 100644 --- a/packages/web-util/src/forms/forms.ts +++ b/packages/web-util/src/forms/forms.ts @@ -354,7 +354,7 @@ function converBaseFieldsProps( }; } -function getValueDeeper2( +export function getValueDeeper2( object: Record, names: string[], ): UIFieldHandler { -- cgit v1.2.3