useRefsState work
Some checks failed
Lint / lint (push) Failing after 11s

This commit is contained in:
Julien Valverdé
2025-04-11 02:10:21 +02:00
parent ef13e87d12
commit d1ba4148f2

View File

@@ -410,6 +410,38 @@ export abstract class ReffuseHelpers<R> {
return [reactStateValue, setValue]
}
useRefsState<
Refs extends { [K in keyof Refs]: SubscriptionRef.SubscriptionRef<any> },
R,
>(
this: ReffuseHelpers<R>,
refs: Refs,
): {
[K in keyof Refs]: readonly [
Effect.Effect<Refs[K]>,
React.Dispatch<React.SetStateAction<Effect.Effect<Refs[K]>>>,
]
} {
const initialState = this.useMemo(() => Effect.Do.pipe(
Effect.bindAll(() => refs)
), [], { doNotReExecuteOnRuntimeOrContextChange: true })
const [reactStateValue, setReactStateValue] = React.useState(initialState)
this.useFork(() => Stream.runForEach(
Stream.changesWith(ref.changes, (x, y) => x === y),
v => Effect.sync(() => setReactStateValue(v)),
), [ref])
const setValue = this.useCallbackSync((setStateAction: React.SetStateAction<A>) =>
Ref.update(ref, prevState =>
SetStateAction.value(setStateAction, prevState)
),
[ref])
return [reactStateValue, setValue]
}
useStreamFromValues<const A extends React.DependencyList, R>(
this: ReffuseHelpers<R>,
values: A,