From 4d411bc8dccfa68c2a44ca5d079b4c67f74775df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Thu, 16 Jan 2025 00:02:56 +0100 Subject: [PATCH] useFork refactoring --- packages/reffuse/src/Reffuse.ts | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/packages/reffuse/src/Reffuse.ts b/packages/reffuse/src/Reffuse.ts index e66eec8..32ef466 100644 --- a/packages/reffuse/src/Reffuse.ts +++ b/packages/reffuse/src/Reffuse.ts @@ -119,15 +119,23 @@ export class Reffuse { useFork( effect: Effect.Effect, deps?: React.DependencyList, - options?: Runtime.RunForkOptions & RenderOptions, + options?: Runtime.RunForkOptions & RenderOptions & ScopeOptions, ): void { + const runSync = this.useRunSync() const runFork = this.useRunFork() return React.useEffect(() => { - const fiber = runFork(Effect.scoped(effect), options) - return () => { runFork(Fiber.interrupt(fiber)) } + const scope = runSync(Scope.make(options?.finalizerExecutionStrategy)) + const fiber = runFork(Effect.provideService(effect, Scope.Scope, scope), options) + + return () => { + Fiber.interrupt(fiber).pipe( + Effect.flatMap(() => Scope.close(scope, Exit.void)), + runFork, + ) + } }, [ - ...options?.doNotReExecuteOnRuntimeOrContextChange ? [] : [runFork], + ...options?.doNotReExecuteOnRuntimeOrContextChange ? [] : [runSync, runFork], ...(deps ?? []), ]) }