diff --git a/packages/effect-fc/src/SynchronizedForm.ts b/packages/effect-fc/src/SynchronizedForm.ts index 1d2890a..451a30c 100644 --- a/packages/effect-fc/src/SynchronizedForm.ts +++ b/packages/effect-fc/src/SynchronizedForm.ts @@ -146,15 +146,22 @@ const makeEncodedValueLens = ( ): Lens.Lens => Lens.make({ get get() { return self.internalEncodedValue.get }, get changes() { return self.internalEncodedValue.changes }, - modify: f => self.internalEncodedValue.get.pipe( - Effect.flatMap(f), - Effect.flatMap(([b, nextEncodedValue]) => Effect.as( - Effect.andThen( - Lens.set(self.internalEncodedValue, nextEncodedValue), - self.synchronizeEncodedValue(nextEncodedValue), - ), - b, - )), + modify: f => self.internalEncodedValue.modify( + encodedValue => Effect.map( + f(encodedValue), + ([b, nextEncodedValue]) => [ + [b, nextEncodedValue] as const, + nextEncodedValue, + ] as const + ) + ).pipe( + Effect.tap(([, nextEncodedValue]) => + self.synchronizeEncodedValue(nextEncodedValue).pipe( + Effect.forkScoped, + Effect.provide(self.context), + ) + ), + Effect.map(([b]) => b), ), })