import { Callout, Flex, Spinner, TextField } from "@radix-ui/themes" import { Array, Option } from "effect" import { Component, Form, Subscribable } from "effect-fc" export declare namespace TextFieldFormInputView { export interface Props extends TextField.RootProps, Form.useInput.Options { readonly field: Form.FormField } } export class TextFieldFormInputView extends Component.make("TextFieldFormInputView")(function*( props: TextFieldFormInputView.Props ) { const input = yield* Form.useInput(props.field, props) const [issues, isValidating, isSubmitting] = yield* Subscribable.useSubscribables([ props.field.issues, props.field.isValidating, props.field.isSubmitting, ]) return ( input.setValue(e.target.value)} disabled={isSubmitting} {...props} > {isValidating && } {props.children} {Option.match(Array.head(issues), { onSome: issue => ( {issue.message} ), onNone: () => <>, })} ) }) {}