From 5f561f1d961246a38f848c8b96d9c3b6d22b5967 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sun, 10 Aug 2025 18:30:45 +0200 Subject: [PATCH] Input tests --- packages/example/src/lib/TextAreaInput.tsx | 45 +++++++++++++++++++++ packages/example/src/lib/TextFieldInput.tsx | 21 +++++----- packages/example/src/todo/Todo.tsx | 25 ++++-------- 3 files changed, 62 insertions(+), 29 deletions(-) create mode 100644 packages/example/src/lib/TextAreaInput.tsx diff --git a/packages/example/src/lib/TextAreaInput.tsx b/packages/example/src/lib/TextAreaInput.tsx new file mode 100644 index 0000000..4893148 --- /dev/null +++ b/packages/example/src/lib/TextAreaInput.tsx @@ -0,0 +1,45 @@ +import { Callout, Flex, TextArea, TextAreaProps } 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 TextAreaInputProps +extends + Omit, "schema">, + Omit +{} + +export const TextAreaInput = ( + schema: Schema.Schema +): Component.Component< + TextAreaInputProps, + React.JSX.Element, + ParseResult.ParseError, + R +> => Component.makeUntraced(function* TextFieldInput(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}
  • )}
+
+
+ } + +