From 40e8bf6a1f0ef8ec3b419b1af5c6725471afc14f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Mon, 3 Mar 2025 19:42:33 +0100 Subject: [PATCH] Query work --- packages/example/src/main.tsx | 4 ++-- packages/extension-query/src/QueryRunner.ts | 16 ++++++++++++---- packages/extension-query/src/index.ts | 2 +- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/packages/example/src/main.tsx b/packages/example/src/main.tsx index 8fe1e6d..fc8645f 100644 --- a/packages/example/src/main.tsx +++ b/packages/example/src/main.tsx @@ -26,11 +26,11 @@ declare module "@tanstack/react-router" { createRoot(document.getElementById("root")!).render( - + // - + // ) diff --git a/packages/extension-query/src/QueryRunner.ts b/packages/extension-query/src/QueryRunner.ts index 3bfa162..aa66331 100644 --- a/packages/extension-query/src/QueryRunner.ts +++ b/packages/extension-query/src/QueryRunner.ts @@ -1,5 +1,5 @@ import * as AsyncData from "@typed/async-data" -import { Effect, Fiber, flow, identity, Option, Ref, SubscriptionRef } from "effect" +import { Effect, Fiber, identity, Option, Ref, SubscriptionRef } from "effect" export interface QueryRunner { @@ -24,9 +24,17 @@ export const make = ( const interrupt = fiberRef.pipe( Effect.flatMap(Option.match({ - onSome: flow( - Fiber.interrupt, - Effect.andThen(Ref.set(fiberRef, Option.none())), + onSome: fiber => Ref.set(fiberRef, Option.none()).pipe( + Effect.andThen(Fiber.interrupt(fiber)) + ), + onNone: () => Effect.void, + })) + ) + + const forkInterrupt = fiberRef.pipe( + Effect.flatMap(Option.match({ + onSome: fiber => Ref.set(fiberRef, Option.none()).pipe( + Effect.andThen(Fiber.interruptFork(fiber)) ), onNone: () => Effect.void, })) diff --git a/packages/extension-query/src/index.ts b/packages/extension-query/src/index.ts index 390a9cc..e647a3a 100644 --- a/packages/extension-query/src/index.ts +++ b/packages/extension-query/src/index.ts @@ -25,7 +25,7 @@ export const QueryExtension = ReffuseExtension.make(() => ({ this.useFork(() => Stream.runForEach(runner.fiberRef.changes, Console.log), []) - this.useFork(() => Effect.addFinalizer(() => runner.interrupt).pipe( + this.useEffect(() => Effect.addFinalizer(() => Effect.void).pipe( Effect.andThen(Ref.set(runner.queryRef, props.effect())), Effect.andThen(runner.forkFetch), ), [runner, ...props.deps])