@reffuse/extension-query 0.1.4 #15

Merged
Thilawyn merged 340 commits from next into master 2025-05-26 04:15:01 +02:00
2 changed files with 13 additions and 7 deletions
Showing only changes of commit 1e8a5d412f - Show all commits

View File

@@ -1,6 +1,5 @@
import { BrowserStream } from "@effect/platform-browser"
import * as AsyncData from "@typed/async-data" 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 * as React from "react"
import { ReffuseExtension, type ReffuseHelpers } from "reffuse" import { ReffuseExtension, type ReffuseHelpers } from "reffuse"
import * as QueryRunner from "./QueryRunner.js" import * as QueryRunner from "./QueryRunner.js"
@@ -31,10 +30,7 @@ export const QueryExtension = ReffuseExtension.make(() => ({
Effect.andThen(runner.forkFetch), Effect.andThen(runner.forkFetch),
), [runner, ...props.key]) ), [runner, ...props.key])
this.useFork(() => Stream.runForEach( this.useFork(() => runner.refreshOnWindowFocus, [runner])
BrowserStream.fromEventListenerWindow("focus"),
() => runner.forkRefresh,
), [runner])
return React.useMemo(() => ({ return React.useMemo(() => ({
state: runner.stateRef, state: runner.stateRef,

View File

@@ -1,5 +1,6 @@
import { BrowserStream } from "@effect/platform-browser"
import * as AsyncData from "@typed/async-data" 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<A, E, R> { export interface QueryRunner<A, E, R> {
@@ -10,6 +11,8 @@ export interface QueryRunner<A, E, R> {
readonly forkInterrupt: Effect.Effect<Fiber.RuntimeFiber<void>> readonly forkInterrupt: Effect.Effect<Fiber.RuntimeFiber<void>>
readonly forkFetch: Effect.Effect<Fiber.RuntimeFiber<void>> readonly forkFetch: Effect.Effect<Fiber.RuntimeFiber<void>>
readonly forkRefresh: Effect.Effect<Fiber.RuntimeFiber<void>> readonly forkRefresh: Effect.Effect<Fiber.RuntimeFiber<void>>
readonly refreshOnWindowFocus: Effect.Effect<void>
} }
@@ -91,6 +94,11 @@ export const make = <A, E, R>(
Effect.forkDaemon, Effect.forkDaemon,
) )
const refreshOnWindowFocus = Stream.runForEach(
BrowserStream.fromEventListenerWindow("focus"),
() => forkRefresh,
)
return { return {
queryRef, queryRef,
stateRef, stateRef,
@@ -99,5 +107,7 @@ export const make = <A, E, R>(
forkInterrupt, forkInterrupt,
forkFetch, forkFetch,
forkRefresh, forkRefresh,
refreshOnWindowFocus,
} }
}) })