From 229d8983531e0e736e9da075d67ab0fa98ba8955 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sun, 17 Aug 2025 21:15:16 +0200 Subject: [PATCH] TextFieldInput --- packages/example/src/lib/TextFieldInput.tsx | 56 +++++++++++---------- 1 file changed, 30 insertions(+), 26 deletions(-) diff --git a/packages/example/src/lib/TextFieldInput.tsx b/packages/example/src/lib/TextFieldInput.tsx index 52bd0fd..afff9d4 100644 --- a/packages/example/src/lib/TextFieldInput.tsx +++ b/packages/example/src/lib/TextFieldInput.tsx @@ -8,30 +8,33 @@ import * as React from "react" export type TextFieldInputProps = Omit, "schema"> & Omit export type TextFieldOptionalInputProps = Omit, "schema"> & Omit -export const TextFieldInput: { - (options: { - readonly optional: true - readonly schema: Schema.Schema - }): Component.Component, React.JSX.Element, ParseResult.ParseError, R> - (options: { - readonly optional?: false - readonly schema: Schema.Schema - }): Component.Component, React.JSX.Element, ParseResult.ParseError, R> -} = (options: { - readonly optional?: boolean +export const TextFieldInput = (options: { + readonly optional?: O readonly schema: Schema.Schema -}) => Component.makeUntraced(function* TextFieldInput(props: TextFieldOptionalInputProps | TextFieldInputProps) { - const input = options.optional - // eslint-disable-next-line react-hooks/rules-of-hooks - ? yield* useOptionalInput({ - schema: options.schema, - ...props as TextFieldOptionalInputProps, - }) - // eslint-disable-next-line react-hooks/rules-of-hooks - : yield* useInput({ - schema: options.schema, - ...props as TextFieldInputProps, - }) +}) => Component.makeUntraced(function* TextFieldInput(props: O extends true + ? TextFieldOptionalInputProps + : TextFieldInputProps +) { + const input: ( + | { readonly optional: true } & useOptionalInput.Result + | { readonly optional: false } & useInput.Result + ) = options.optional + ? { + optional: true, + // eslint-disable-next-line react-hooks/rules-of-hooks + ...yield* useOptionalInput({ + schema: options.schema, + ...props as TextFieldOptionalInputProps, + }), + } + : { + optional: false, + // eslint-disable-next-line react-hooks/rules-of-hooks + ...yield* useInput({ + schema: options.schema, + ...props as TextFieldInputProps, + }) + } const issues = React.useMemo(() => Option.map( input.error, @@ -49,15 +52,16 @@ export const TextFieldInput: { } - {options.optional && + {input.optional && input.setDisabled(!checked)} /> } | TextFieldInputProps, "ref")} />