taler-typescript-core

Wallet core logic and WebUIs for various components
Log | Files | Refs | Submodules | README | LICENSE

commit cd4302880e99c6200822a6069863c99546b361ad
parent 27ae504ed714be9f715daa6867d2e545bc67bc22
Author: Florian Dold <florian@dold.me>
Date:   Mon, 24 Mar 2025 22:59:32 +0100

forms: implement preferred choices

Diffstat:
Mpackages/web-util/src/forms/fields/InputSelectOne.tsx | 26+++++++++++++++++++++-----
Mpackages/web-util/src/forms/forms-types.ts | 1+
Mpackages/web-util/src/forms/forms-utils.ts | 1+
Mpackages/web-util/src/forms/gana/VQF_902_1_customer.ts | 1+
4 files changed, 24 insertions(+), 5 deletions(-)

diff --git a/packages/web-util/src/forms/fields/InputSelectOne.tsx b/packages/web-util/src/forms/fields/InputSelectOne.tsx @@ -5,10 +5,13 @@ import { noHandlerPropsAndNoContextForField } from "./InputArray.js"; import { ChoiceS } from "./InputChoiceStacked.js"; import { LabelWithTooltipMaybeRequired } from "./InputLine.js"; +export interface InputSelectOneProps<Choices> { + preferredChoiceVals?: Choices[]; + choices: ChoiceS<Choices>[]; +} + export function InputSelectOne<Choices>( - props: { - choices: ChoiceS<Choices>[]; - } & UIFormProps<Choices>, + props: InputSelectOneProps<Choices> & UIFormProps<Choices>, ): VNode { const { label, choices, placeholder, tooltip, required, help, hidden } = props; @@ -28,10 +31,23 @@ export function InputSelectOne<Choices>( return <Fragment />; } - const filteredChoices = + const prefChoices = choices.filter( + (x) => + props.preferredChoiceVals && props.preferredChoiceVals.includes(x.value), + ); + const normalChoices = choices.filter( + (x) => + !( + props.preferredChoiceVals && props.preferredChoiceVals.includes(x.value) + ), + ); + + const sortedChoices = [...prefChoices, ...normalChoices]; + + let filteredChoices = filter === undefined ? undefined - : choices.filter((v) => { + : sortedChoices.filter((v) => { return regex.test(v.label); }); return ( diff --git a/packages/web-util/src/forms/forms-types.ts b/packages/web-util/src/forms/forms-types.ts @@ -220,6 +220,7 @@ type UIFormFieldDurationText = { type UIFormFieldSelectOne = { type: "selectOne"; choices: Array<SelectUiChoice>; + preferredChoiceVals?: string[]; } & UIFormFieldBaseConfig; type UIFormFieldText = { type: "text" } & UIFormFieldBaseConfig; diff --git a/packages/web-util/src/forms/forms-utils.ts b/packages/web-util/src/forms/forms-utils.ts @@ -277,6 +277,7 @@ export function convertFormConfigToUiField( config, getConverterByFieldType(config.type, config), ), + preferredChoiceVals: config.preferredChoiceVals, hidden, choices: config.choices, }, diff --git a/packages/web-util/src/forms/gana/VQF_902_1_customer.ts b/packages/web-util/src/forms/gana/VQF_902_1_customer.ts @@ -152,6 +152,7 @@ export function design_VQF_902_1_customer( label: i18n.str`Nationality`, type: "selectOne", choices: countryNationalityList(i18n), + preferredChoiceVals: ["CH"], required: true, }, fieldPersonalId(i18n),