diff --git a/packages/extension-query/src/QueryExtension.ts b/packages/extension-query/src/QueryExtension.ts index 380ff56..8ad003f 100644 --- a/packages/extension-query/src/QueryExtension.ts +++ b/packages/extension-query/src/QueryExtension.ts @@ -1,6 +1,5 @@ -import { BrowserStream } from "@effect/platform-browser" import * as AsyncData from "@typed/async-data" -import { Effect, Fiber, Ref, Stream, SubscriptionRef } from "effect" +import { Effect, Fiber, Ref, SubscriptionRef } from "effect" import * as React from "react" import { ReffuseExtension, type ReffuseHelpers } from "reffuse" import * as QueryRunner from "./QueryRunner.js" @@ -31,10 +30,7 @@ export const QueryExtension = ReffuseExtension.make(() => ({ Effect.andThen(runner.forkFetch), ), [runner, ...props.key]) - this.useFork(() => Stream.runForEach( - BrowserStream.fromEventListenerWindow("focus"), - () => runner.forkRefresh, - ), [runner]) + this.useFork(() => runner.refreshOnWindowFocus, [runner]) return React.useMemo(() => ({ state: runner.stateRef, diff --git a/packages/extension-query/src/QueryRunner.ts b/packages/extension-query/src/QueryRunner.ts index 93cef0f..2a75a70 100644 --- a/packages/extension-query/src/QueryRunner.ts +++ b/packages/extension-query/src/QueryRunner.ts @@ -1,5 +1,6 @@ +import { BrowserStream } from "@effect/platform-browser" import * as AsyncData from "@typed/async-data" -import { Effect, Fiber, identity, Option, Ref, SubscriptionRef } from "effect" +import { Effect, Fiber, identity, Option, Ref, Stream, SubscriptionRef } from "effect" export interface QueryRunner { @@ -10,6 +11,8 @@ export interface QueryRunner { readonly forkInterrupt: Effect.Effect> readonly forkFetch: Effect.Effect> readonly forkRefresh: Effect.Effect> + + readonly refreshOnWindowFocus: Effect.Effect } @@ -91,6 +94,11 @@ export const make = ( Effect.forkDaemon, ) + const refreshOnWindowFocus = Stream.runForEach( + BrowserStream.fromEventListenerWindow("focus"), + () => forkRefresh, + ) + return { queryRef, stateRef, @@ -99,5 +107,7 @@ export const make = ( forkInterrupt, forkFetch, forkRefresh, + + refreshOnWindowFocus, } })