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, )