|
2 | 2 | * @since 1.0.0 |
3 | 3 | */ |
4 | 4 | "use client" |
5 | | -import type * as Registry from "@effect-rx/rx/Registry" |
6 | | -import * as Result from "@effect-rx/rx/Result" |
| 5 | +import * as Registry from "@effect-rx/rx/Registry" |
| 6 | +import type * as Result from "@effect-rx/rx/Result" |
7 | 7 | import * as Rx from "@effect-rx/rx/Rx" |
8 | 8 | import type * as RxRef from "@effect-rx/rx/RxRef" |
| 9 | +import { Effect } from "effect" |
9 | 10 | import * as Cause from "effect/Cause" |
10 | 11 | import type * as Exit from "effect/Exit" |
11 | 12 | import { globalValue } from "effect/GlobalValue" |
@@ -129,22 +130,18 @@ export const useRxSet = <R, W>(rx: Rx.Writable<R, W>): (_: W | ((_: R) => W)) => |
129 | 130 | */ |
130 | 131 | export const useRxSetPromise = <E, A, W>( |
131 | 132 | rx: Rx.Writable<Result.Result<A, E>, W> |
132 | | -): (_: W) => Promise<Exit.Exit<A, E>> => { |
| 133 | +): ( |
| 134 | + _: W, |
| 135 | + options?: { |
| 136 | + readonly signal?: AbortSignal | undefined |
| 137 | + } | undefined |
| 138 | +) => Promise<Exit.Exit<A, E>> => { |
133 | 139 | const registry = React.useContext(RegistryContext) |
134 | | - const resolves = React.useMemo(() => new Set<(result: Exit.Exit<A, E>) => void>(), []) |
135 | | - React.useEffect(() => |
136 | | - registry.subscribe(rx, (result) => { |
137 | | - if (result.waiting || result._tag === "Initial") return |
138 | | - const fns = Array.from(resolves) |
139 | | - resolves.clear() |
140 | | - const exit = Result.toExit(result) |
141 | | - fns.forEach((resolve) => resolve(exit as any)) |
142 | | - }, { immediate: true }), [registry, rx, resolves]) |
143 | | - return React.useCallback((value) => |
144 | | - new Promise((resolve) => { |
145 | | - resolves.add(resolve) |
146 | | - registry.set(rx, value) |
147 | | - }), [registry, rx, resolves]) |
| 140 | + mountRx(registry, rx) |
| 141 | + return React.useCallback((value, options) => { |
| 142 | + registry.set(rx, value) |
| 143 | + return Effect.runPromiseExit(Registry.getResult(registry, rx), options) |
| 144 | + }, [registry, rx]) |
148 | 145 | } |
149 | 146 |
|
150 | 147 | /** |
|
0 commit comments