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 { 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 const TextFieldInput = ( schema: Schema.Schema ): Component.Component< TextFieldInputProps, React.JSX.Element, ParseResult.ParseError, R > => Component.makeUntraced(function* TextFieldInput(props) { const ref = React.useMemo(() => props.optional ? SubscriptionSubRef.makeFromGetSet(props.ref, { }) : props.ref, [props.optional, props.ref]) 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}
  • )}
}
) })