From 8642619a6af41e88b9aa9ba2a46624e5f80f9089 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Tue, 21 Oct 2025 14:49:53 +0200 Subject: [PATCH] Form work --- packages/effect-fc/src/Form.ts | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/packages/effect-fc/src/Form.ts b/packages/effect-fc/src/Form.ts index 0ccac23..b91ff37 100644 --- a/packages/effect-fc/src/Form.ts +++ b/packages/effect-fc/src/Form.ts @@ -18,7 +18,7 @@ extends Pipeable.Pipeable { readonly schema: Schema.Schema readonly onSubmit: (value: NoInfer) => Effect.Effect - readonly autosubmit: Option.Option + readonly autosubmit: boolean readonly debounce: Option.Option readonly valueRef: SubscriptionRef.SubscriptionRef> @@ -37,7 +37,7 @@ extends Pipeable.Class() implements Form { constructor( readonly schema: Schema.Schema, readonly onSubmit: (value: NoInfer) => Effect.Effect, - readonly autosubmit: Option.Option, + readonly autosubmit: boolean, readonly debounce: Option.Option, readonly valueRef: SubscriptionRef.SubscriptionRef>, @@ -82,7 +82,7 @@ export const make: { return new FormImpl( options.schema, options.onSubmit, - Option.fromNullable(options.autosubmit), + options.autosubmit ?? false, Option.fromNullable(options.debounce), valueRef, @@ -128,13 +128,17 @@ export const run = ( onFailure: c => Option.match( Chunk.findFirst(Cause.failures(c), e => e._tag === "ParseError"), { - onSome: e => SubscriptionRef.set(self.errorRef, Option.some(e)), - onNone: () => Effect.void, + onSome: e => Effect.as(SubscriptionRef.set(self.errorRef, Option.some(e)), Option.none()), + onNone: () => Effect.succeed(Option.none()), }, ), }), Effect.uninterruptible, )), + Effect.andThen(value => Option.isSome(value) && self.autosubmit + ? + : Effect.void + ), Effect.scoped, Effect.forkScoped, )