diff --git a/packages/extension-query/src/QueryExtension.ts b/packages/extension-query/src/QueryExtension.ts index ddd6b07..a4d26df 100644 --- a/packages/extension-query/src/QueryExtension.ts +++ b/packages/extension-query/src/QueryExtension.ts @@ -1,32 +1,18 @@ import type * as AsyncData from "@typed/async-data" -import { type Cause, type Context, Effect, type Fiber, Layer, type Option, type Stream, type SubscriptionRef } from "effect" +import { type Context, Effect, type Fiber, Layer, type Stream, type SubscriptionRef } from "effect" import * as React from "react" import { ReffuseExtension, type ReffuseNamespace } from "reffuse" +import { MutationRunner } from "./internal/index.js" import type * as MutationService from "./MutationService.js" import * as QueryClient from "./QueryClient.js" import type * as QueryProgress from "./QueryProgress.js" -import type * as QueryService from "./QueryService.js" -import { MutationRunner, QueryRunner } from "./internal/index.js" +import * as QueryRunner from "./QueryRunner.js" export interface UseQueryProps { readonly key: Stream.Stream readonly query: (key: K) => Effect.Effect - readonly refreshOnWindowFocus?: boolean -} - -export interface UseQueryResult { - readonly latestKey: SubscriptionRef.SubscriptionRef> - readonly state: SubscriptionRef.SubscriptionRef> - - readonly forkRefresh: Effect.Effect | AsyncData.Failure, Cause.NoSuchElementException>, - state: Stream.Stream>, - ]> - - readonly layer: ( - tag: Context.TagClass> - ) => Layer.Layer + readonly options?: QueryRunner.RunOptions } @@ -61,32 +47,16 @@ export const QueryExtension = ReffuseExtension.make(() => ({ >( this: ReffuseNamespace.ReffuseNamespace>, props: UseQueryProps, - ): UseQueryResult> { + ): QueryRunner.QueryRunner, QR> { const runner = this.useMemo(() => QueryRunner.make({ QueryClient: QueryClient.makeGenericTagClass(), key: props.key, query: props.query, }), [props.key]) - this.useFork(() => runner.fetchOnKeyChange, [runner]) + this.useFork(() => QueryRunner.run(runner, props.options), [runner]) - this.useFork(() => (props.refreshOnWindowFocus ?? true) - ? runner.refreshOnWindowFocus - : Effect.void, - [props.refreshOnWindowFocus, runner]) - - return React.useMemo(() => ({ - latestKey: runner.latestKeyRef, - state: runner.stateRef, - - forkRefresh: runner.forkRefresh, - - layer: tag => Layer.succeed(tag, { - latestKey: runner.latestKeyRef, - state: runner.stateRef, - forkRefresh: runner.forkRefresh, - }), - }), [runner]) + return runner }, useMutation< diff --git a/packages/extension-query/src/QueryProgress.ts b/packages/extension-query/src/QueryProgress.ts index 4a78ec5..ba8288e 100644 --- a/packages/extension-query/src/QueryProgress.ts +++ b/packages/extension-query/src/QueryProgress.ts @@ -10,7 +10,7 @@ export class QueryProgress extends Effect.Tag("@reffuse/extension-query/QueryPro f: (previous: Option.Option) => AsyncData.Progress ) => Effect.Effect }>() { - static readonly Live: Layer.Layer< + static readonly Default: Layer.Layer< QueryProgress, never, QueryState.QueryState diff --git a/packages/extension-query/src/internal/QueryRunner.ts b/packages/extension-query/src/QueryRunner.ts similarity index 97% rename from packages/extension-query/src/internal/QueryRunner.ts rename to packages/extension-query/src/QueryRunner.ts index 981813c..d31d357 100644 --- a/packages/extension-query/src/internal/QueryRunner.ts +++ b/packages/extension-query/src/QueryRunner.ts @@ -1,9 +1,9 @@ import { BrowserStream } from "@effect/platform-browser" import * as AsyncData from "@typed/async-data" import { type Cause, type Context, Effect, Fiber, identity, Option, Queue, Ref, type Scope, Stream, SubscriptionRef } from "effect" -import type * as QueryClient from "../QueryClient.js" -import * as QueryProgress from "../QueryProgress.js" -import * as QueryState from "./QueryState.js" +import type * as QueryClient from "./QueryClient.js" +import * as QueryProgress from "./QueryProgress.js" +import { QueryState } from "./internal/index.js" export interface QueryRunner { @@ -97,7 +97,7 @@ export const make = )), Effect.provide(context), - Effect.provide(QueryProgress.QueryProgress.Live), + Effect.provide(QueryProgress.QueryProgress.Default), ) const forkFetch = Queue.unbounded>>().pipe( diff --git a/packages/extension-query/src/QueryService.ts b/packages/extension-query/src/QueryService.ts index ef447b9..a26330e 100644 --- a/packages/extension-query/src/QueryService.ts +++ b/packages/extension-query/src/QueryService.ts @@ -1,5 +1,6 @@ import type * as AsyncData from "@typed/async-data" import { type Cause, Effect, type Fiber, type Option, type Stream, type SubscriptionRef } from "effect" +import * as QueryRunner from "./QueryRunner.js" export interface QueryService { @@ -12,5 +13,5 @@ export interface QueryService { } export const Tag = (id: Id) => < - Self, K extends readonly unknown[], A, E = never, ->() => Effect.Tag(id)>() + Self, K extends readonly unknown[], A, E = never, R = never, +>() => Effect.Tag(id)>() diff --git a/packages/extension-query/src/index.ts b/packages/extension-query/src/index.ts index 4f0feaf..67d26d3 100644 --- a/packages/extension-query/src/index.ts +++ b/packages/extension-query/src/index.ts @@ -3,4 +3,5 @@ export * as QueryClient from "./QueryClient.js" export * as QueryErrorHandler from "./QueryErrorHandler.js" export * from "./QueryExtension.js" export * as QueryProgress from "./QueryProgress.js" +export * as QueryRunner from "./QueryRunner.js" export * as QueryService from "./QueryService.js" diff --git a/packages/extension-query/src/internal/MutationRunner.ts b/packages/extension-query/src/internal/MutationRunner.ts index 3865223..5e53dc8 100644 --- a/packages/extension-query/src/internal/MutationRunner.ts +++ b/packages/extension-query/src/internal/MutationRunner.ts @@ -55,7 +55,7 @@ export const make = )), Effect.provide(context), - Effect.provide(QueryProgress.QueryProgress.Live), + Effect.provide(QueryProgress.QueryProgress.Default), ) const mutate = (...key: K) => Effect.provide(run(key), QueryState.layer( diff --git a/packages/extension-query/src/internal/index.ts b/packages/extension-query/src/internal/index.ts index 425849b..4f4784e 100644 --- a/packages/extension-query/src/internal/index.ts +++ b/packages/extension-query/src/internal/index.ts @@ -1,3 +1,2 @@ export * as MutationRunner from "./MutationRunner.js" -export * as QueryRunner from "./QueryRunner.js" export * as QueryState from "./QueryState.js"