diff --git a/packages/effect-fc/src/Component.ts b/packages/effect-fc/src/Component.ts index 8694fff..7252f79 100644 --- a/packages/effect-fc/src/Component.ts +++ b/packages/effect-fc/src/Component.ts @@ -1,9 +1,8 @@ /** biome-ignore-all lint/complexity/noBannedTypes: {} is the default type for React props */ /** biome-ignore-all lint/complexity/useArrowFunction: necessary for class prototypes */ -import { Context, type Duration, Effect, Effectable, Equivalence, ExecutionStrategy, Exit, Fiber, Function, HashMap, Layer, ManagedRuntime, Option, Predicate, Ref, Runtime, Scope, Stream, Tracer, type Utils } from "effect" +import { Context, type Duration, Effect, Effectable, Equivalence, ExecutionStrategy, Exit, Fiber, Function, HashMap, Layer, ManagedRuntime, Option, Predicate, Ref, Runtime, Scope, Tracer, type Utils } from "effect" import * as React from "react" import { Memoized } from "./index.js" -import * as Result from "./Result.js" export const TypeId: unique symbol = Symbol.for("@effect-fc/Component/Component") @@ -514,65 +513,6 @@ export const useOnChange: { ), [scope]) }) -export namespace useOnMountResult { - export interface Options extends Result.forkEffectScoped.Options

{ - readonly equivalence?: Equivalence.Equivalence> - } -} - -export const useOnMountResult: { - ( - f: () => Effect.Effect>>, - options?: useOnChangeResult.Options, - ): Effect.Effect, never, Result.forkEffectScoped.OutputContext> -} = Effect.fnUntraced(function* ( - f: () => Effect.Effect>>, - options?: useOnChangeResult.Options, -) { - const [result, setResult] = React.useState(() => Result.initial() as Result.Result) - - yield* useOnMount(() => Result.forkEffectScoped(f(), options).pipe( - Effect.andThen(Stream.fromQueue), - Stream.unwrap, - Stream.changesWith(options?.equivalence ?? Equivalence.strict()), - Stream.runForEach(result => Effect.sync(() => setResult(result))), - )) - - return result -}) - -export namespace useOnChangeResult { - export interface Options - extends useOnMountResult.Options, useReactEffect.Options {} -} - -export const useOnChangeResult: { - ( - f: () => Effect.Effect>>, - deps?: React.DependencyList, - options?: useOnChangeResult.Options, - ): Effect.Effect< - Result.Result, - never, - Exclude, Scope.Scope> - > -} = Effect.fnUntraced(function* ( - f: () => Effect.Effect>>, - deps?: React.DependencyList, - options?: useOnChangeResult.Options, -) { - const [result, setResult] = React.useState(() => Result.initial() as Result.Result) - - yield* useReactEffect(() => Result.forkEffectScoped(f(), options).pipe( - Effect.andThen(Stream.fromQueue), - Stream.unwrap, - Stream.changesWith(options?.equivalence ?? Equivalence.strict()), - Stream.runForEach(result => Effect.sync(() => setResult(result))), - ), deps, options) - - return result -}) - export namespace useReactEffect { export interface Options { readonly finalizerExecutionMode?: "sync" | "fork"