From eeabe64b3f0ac02818561ea6fca364d619f061b7 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Mon, 29 Apr 2024 15:31:14 -0300 Subject: sync field ui --- packages/web-util/src/forms/FormProvider.tsx | 3 +-- packages/web-util/src/forms/InputLine.tsx | 31 ++++++++++++++-------------- packages/web-util/src/forms/useField.ts | 10 ++++----- 3 files changed, 20 insertions(+), 24 deletions(-) (limited to 'packages/web-util/src') diff --git a/packages/web-util/src/forms/FormProvider.tsx b/packages/web-util/src/forms/FormProvider.tsx index de19a6315..f4cdf8a68 100644 --- a/packages/web-util/src/forms/FormProvider.tsx +++ b/packages/web-util/src/forms/FormProvider.tsx @@ -43,8 +43,6 @@ export type FormState = { * Properties that can be defined by design or by computing state */ export type FieldUIOptions = { - /* text to be shown next to the field */ - error?: TranslatedString; /* instruction to be shown in the field */ placeholder?: TranslatedString; /* long text help to be shown on demand */ @@ -84,6 +82,7 @@ export type UIField = { value: string | undefined; onChange: (s: string) => void; state: FieldUIOptions; + error?: TranslatedString; }; export interface IconAddon { diff --git a/packages/web-util/src/forms/InputLine.tsx b/packages/web-util/src/forms/InputLine.tsx index c7f69dd8a..ee9150492 100644 --- a/packages/web-util/src/forms/InputLine.tsx +++ b/packages/web-util/src/forms/InputLine.tsx @@ -1,9 +1,8 @@ import { TranslatedString } from "@gnu-taler/taler-util"; import { ComponentChildren, Fragment, VNode, h } from "preact"; -import { useEffect, useState } from "preact/hooks"; import { UIFormProps } from "./FormProvider.js"; -import { useField } from "./useField.js"; import { noHandlerPropsAndNoContextForField } from "./InputArray.js"; +import { useField } from "./useField.js"; //@ts-ignore const TooltipIcon = ( @@ -163,20 +162,20 @@ export function InputLine( const { name, placeholder, before, after, converter, type } = props; //FIXME: remove deprecated const fieldCtx = useField(props.name); - const { value, onChange, state } = + const { value, onChange, state, error } = props.handler ?? fieldCtx ?? noHandlerPropsAndNoContextForField(props.name); - const [text, setText] = useState(""); + // const [text, setText] = useState(""); const fromString: (s: string) => any = converter?.fromStringUI ?? defaultFromString; const toString: (s: any) => string = converter?.toStringUI ?? defaultToString; - useEffect(() => { - const newValue = toString(value); - if (newValue) { - setText(newValue); - } - }, [value]); + // useEffect(() => { + // const newValue = toString(value); + // if (newValue) { + // setText(newValue); + // } + // }, [value]); if (state.hidden) return
; @@ -214,7 +213,7 @@ export function InputLine( } } } - const showError = value !== undefined && state.error; + const showError = value !== undefined && error; if (showError) { clazz += " text-red-900 ring-red-300 placeholder:text-red-300 focus:ring-red-500"; @@ -229,7 +228,7 @@ export function InputLine( {...props} help={props.help ?? state.help} disabled={state.disabled ?? false} - error={showError ? state.error : undefined} + error={showError ? error : undefined} >