From de774a8517e0fcbe491c715aad284e4441a90053 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Mon, 30 Mar 2026 16:45:15 +0200 Subject: [PATCH] Fix Form example --- packages/example/src/routes/form.tsx | 15 ++++++--------- packages/example/src/todo/TodoView.tsx | 26 ++++++++++++++------------ 2 files changed, 20 insertions(+), 21 deletions(-) diff --git a/packages/example/src/routes/form.tsx b/packages/example/src/routes/form.tsx index dd8f217..a822cc6 100644 --- a/packages/example/src/routes/form.tsx +++ b/packages/example/src/routes/form.tsx @@ -1,11 +1,11 @@ -import { Button, Container, Flex, Text } from "@radix-ui/themes" -import { createFileRoute } from "@tanstack/react-router" -import { Console, Effect, Match, Option, ParseResult, Schema } from "effect" -import { Component, Form, Subscribable } from "effect-fc" import { TextFieldFormInputView } from "@/lib/form/TextFieldFormInputView" import { TextFieldOptionalFormInputView } from "@/lib/form/TextFieldOptionalFormInputView" import { DateTimeUtcFromZonedInput } from "@/lib/schema" import { runtime } from "@/runtime" +import { Button, Container, Flex, Text } from "@radix-ui/themes" +import { createFileRoute } from "@tanstack/react-router" +import { Console, Effect, Match, Option, ParseResult, Schema } from "effect" +import { Component, Form, Subscribable } from "effect-fc" const email = Schema.pattern( @@ -96,14 +96,11 @@ class RegisterFormView extends Component.make("RegisterFormView")(function*() { }}> - - + diff --git a/packages/example/src/todo/TodoView.tsx b/packages/example/src/todo/TodoView.tsx index c883dcf..e826a3c 100644 --- a/packages/example/src/todo/TodoView.tsx +++ b/packages/example/src/todo/TodoView.tsx @@ -1,13 +1,13 @@ -import { Box, Button, Flex, IconButton } from "@radix-ui/themes" -import { GetRandomValues, makeUuid4 } from "@typed/id" -import { Chunk, type DateTime, Effect, Match, Option, Ref, Schema, Stream } from "effect" -import { Component, Form, Subscribable } from "effect-fc" -import { FaArrowDown, FaArrowUp } from "react-icons/fa" -import { FaDeleteLeft } from "react-icons/fa6" import * as Domain from "@/domain" import { TextFieldFormInputView } from "@/lib/form/TextFieldFormInputView" import { TextFieldOptionalFormInputView } from "@/lib/form/TextFieldOptionalFormInputView" import { DateTimeUtcFromZonedInput } from "@/lib/schema" +import { Box, Button, Flex, IconButton } from "@radix-ui/themes" +import { GetRandomValues, makeUuid4 } from "@typed/id" +import { Chunk, type DateTime, Effect, Match, Option, Ref, Schema, Stream } from "effect" +import { Component, Form, Lens, Subscribable } from "effect-fc" +import { FaArrowDown, FaArrowUp } from "react-icons/fa" +import { FaDeleteLeft } from "react-icons/fa6" import { TodosState } from "./TodosState" @@ -59,20 +59,19 @@ export class TodoView extends Component.make("TodoView")(function*(props: TodoPr Match.tag("new", () => Ref.update(state.ref, Chunk.prepend(todo)).pipe( Effect.andThen(makeTodo), Effect.andThen(Schema.encode(TodoFormSchema)), - Effect.andThen(v => Ref.set(form.encodedValue, v)), + Effect.andThen(v => Lens.set(form.encodedValue, v)), )), Match.tag("edit", ({ id }) => Ref.set(state.getElementRef(id), todo)), Match.exhaustive, ), autosubmit: props._tag === "edit", - debounce: "250 millis", }) return [ indexRef, form, - yield* form.field(["content"]), - yield* form.field(["completedAt"]), + Form.focusObjectField(form, "content"), + Form.focusObjectField(form, "completedAt"), ] as const }), [props._tag, props._tag === "edit" ? props.id : undefined]) @@ -92,11 +91,14 @@ export class TodoView extends Component.make("TodoView")(function*(props: TodoPr - +