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}
  • )}
}
) })