0.2.2 #31
@@ -1,9 +1,8 @@
|
|||||||
/** biome-ignore-all lint/complexity/noBannedTypes: {} is the default type for React props */
|
/** biome-ignore-all lint/complexity/noBannedTypes: {} is the default type for React props */
|
||||||
/** biome-ignore-all lint/complexity/useArrowFunction: necessary for class prototypes */
|
/** 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 * as React from "react"
|
||||||
import { Memoized } from "./index.js"
|
import { Memoized } from "./index.js"
|
||||||
import * as Result from "./Result.js"
|
|
||||||
|
|
||||||
|
|
||||||
export const TypeId: unique symbol = Symbol.for("@effect-fc/Component/Component")
|
export const TypeId: unique symbol = Symbol.for("@effect-fc/Component/Component")
|
||||||
@@ -514,65 +513,6 @@ export const useOnChange: {
|
|||||||
), [scope])
|
), [scope])
|
||||||
})
|
})
|
||||||
|
|
||||||
export namespace useOnMountResult {
|
|
||||||
export interface Options<A, E, P> extends Result.forkEffectScoped.Options<P> {
|
|
||||||
readonly equivalence?: Equivalence.Equivalence<Result.Result<A, E, P>>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export const useOnMountResult: {
|
|
||||||
<A, E, R, P = never>(
|
|
||||||
f: () => Effect.Effect<A, E, Result.forkEffectScoped.InputContext<R, NoInfer<P>>>,
|
|
||||||
options?: useOnChangeResult.Options<A, E, P>,
|
|
||||||
): Effect.Effect<Result.Result<A, E, P>, never, Result.forkEffectScoped.OutputContext<R>>
|
|
||||||
} = Effect.fnUntraced(function* <A, E, R, P = never>(
|
|
||||||
f: () => Effect.Effect<A, E, Result.forkEffectScoped.InputContext<R, NoInfer<P>>>,
|
|
||||||
options?: useOnChangeResult.Options<A, E, P>,
|
|
||||||
) {
|
|
||||||
const [result, setResult] = React.useState(() => Result.initial() as Result.Result<A, E, P>)
|
|
||||||
|
|
||||||
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<A, E, P>
|
|
||||||
extends useOnMountResult.Options<A, E, P>, useReactEffect.Options {}
|
|
||||||
}
|
|
||||||
|
|
||||||
export const useOnChangeResult: {
|
|
||||||
<A, E, R, P = never>(
|
|
||||||
f: () => Effect.Effect<A, E, Result.forkEffectScoped.InputContext<R, NoInfer<P>>>,
|
|
||||||
deps?: React.DependencyList,
|
|
||||||
options?: useOnChangeResult.Options<A, E, P>,
|
|
||||||
): Effect.Effect<
|
|
||||||
Result.Result<A, E, P>,
|
|
||||||
never,
|
|
||||||
Exclude<Result.forkEffectScoped.OutputContext<R>, Scope.Scope>
|
|
||||||
>
|
|
||||||
} = Effect.fnUntraced(function* <A, E, R, P = never>(
|
|
||||||
f: () => Effect.Effect<A, E, Result.forkEffectScoped.InputContext<R, NoInfer<P>>>,
|
|
||||||
deps?: React.DependencyList,
|
|
||||||
options?: useOnChangeResult.Options<A, E, P>,
|
|
||||||
) {
|
|
||||||
const [result, setResult] = React.useState(() => Result.initial() as Result.Result<A, E, P>)
|
|
||||||
|
|
||||||
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 namespace useReactEffect {
|
||||||
export interface Options {
|
export interface Options {
|
||||||
readonly finalizerExecutionMode?: "sync" | "fork"
|
readonly finalizerExecutionMode?: "sync" | "fork"
|
||||||
|
|||||||
Reference in New Issue
Block a user