diff --git a/packages/effect-fc/src/hooks/Hooks/input/useOptionalInput.ts b/packages/effect-fc/src/hooks/Hooks/input/useOptionalInput.ts index 08eae54..5b91e3e 100644 --- a/packages/effect-fc/src/hooks/Hooks/input/useOptionalInput.ts +++ b/packages/effect-fc/src/hooks/Hooks/input/useOptionalInput.ts @@ -51,15 +51,19 @@ export const useOptionalInput: { // Sync the upstream state with the internal state // Only mutate the internal state if the upstream value is actually different. This avoids infinite re-render loops. Stream.runForEach(Stream.changesWith(options.ref.changes, Equivalence.strict()), Option.match({ - onSome: upstreamValue => Effect.whenEffect( - Schema.encode(options.schema)(upstreamValue).pipe( - Effect.andThen(encodedUpstreamValue => Ref.set(internalRef, encodedUpstreamValue)), - Effect.andThen(Ref.set(enabledRef, true)), - ), - internalRef.pipe( - Effect.andThen(Schema.decode(options.schema)), - Effect.andThen(decodedInternalValue => !(options.equivalence ?? Equal.equals)(upstreamValue, decodedInternalValue)), - Effect.catchTag("ParseError", () => Effect.succeed(false)), + onSome: upstreamValue => Effect.andThen( + Ref.set(enabledRef, true), + + Effect.whenEffect( + Effect.andThen( + Schema.encode(options.schema)(upstreamValue), + encodedUpstreamValue => Ref.set(internalRef, encodedUpstreamValue), + ), + internalRef.pipe( + Effect.andThen(Schema.decode(options.schema)), + Effect.andThen(decodedInternalValue => !(options.equivalence ?? Equal.equals)(upstreamValue, decodedInternalValue)), + Effect.catchTag("ParseError", () => Effect.succeed(false)), + ), ), ),