From ee8c202d9fb7502a2dfb4f9e6e5a32408b81dfb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sat, 16 Aug 2025 23:57:43 +0200 Subject: [PATCH] Work --- packages/example/src/lib/TextFieldInput.tsx | 17 ++++--- .../example/src/lib/input/OptionalInput.tsx | 44 ------------------- 2 files changed, 8 insertions(+), 53 deletions(-) delete mode 100644 packages/example/src/lib/input/OptionalInput.tsx diff --git a/packages/example/src/lib/TextFieldInput.tsx b/packages/example/src/lib/TextFieldInput.tsx index a2c1983..6c867fb 100644 --- a/packages/example/src/lib/TextFieldInput.tsx +++ b/packages/example/src/lib/TextFieldInput.tsx @@ -1,20 +1,19 @@ import { Callout, Flex, TextField } from "@radix-ui/themes" import { Option, ParseResult, Schema, Struct, SubscriptionRef } from "effect" import { Component } from "effect-fc" -import { useInput } from "effect-fc/hooks" +import { useInput, useOptionalInput } from "effect-fc/hooks" import { SubscriptionSubRef } from "effect-fc/types" import * as React from "react" -export type TextFieldInputProps = ( - & ( - | { readonly optional: true } & Omit, R>, "schema"> - | { readonly optional?: false } & Omit, "schema"> - ) - & Omit -) +export type TextFieldInputProps = Omit, "schema"> & Omit +export type TextFieldOptionalInputProps = Omit, "schema"> & Omit -export const TextFieldInput = ( +export const TextFieldInput: { + ( + schema: Schema.Schema + ): Component.Component, React.JSX.Element, ParseResult.ParseError, R> +} = ( schema: Schema.Schema ): Component.Component< TextFieldInputProps, diff --git a/packages/example/src/lib/input/OptionalInput.tsx b/packages/example/src/lib/input/OptionalInput.tsx deleted file mode 100644 index 20073f4..0000000 --- a/packages/example/src/lib/input/OptionalInput.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import { Callout, Flex, TextField } from "@radix-ui/themes" -import { Option, ParseResult, Schema, Struct } from "effect" -import { Component } from "effect-fc" -import { useInput } from "effect-fc/hooks" -import * as React from "react" - - -export interface OptionalInputProps, T, R> -extends - Omit, "schema"> -{} - -export const OptionalInput = , T, R>( - schema: Schema.Schema -): Component.Component< - OptionalInputProps, - React.JSX.Element, - ParseResult.ParseError, - R -> => Component.makeUntraced(function* OptionalInput(props) { - const input = yield* useInput({ schema, ...props }) - const issues = React.useMemo(() => Option.map( - input.error, - ParseResult.ArrayFormatter.formatErrorSync, - ), [input.error]) - - return ( - - {Option.isSome(issues) && - - -
    {issues.value.map((issue, i) =>
  • {issue.message}
  • )}
-
-
- } - - -
- ) -})