diff --git a/packages/reffuse/src/ReffuseNamespace.ts b/packages/reffuse/src/ReffuseNamespace.ts index c17b3d2..0066cfb 100644 --- a/packages/reffuse/src/ReffuseNamespace.ts +++ b/packages/reffuse/src/ReffuseNamespace.ts @@ -492,6 +492,21 @@ export abstract class ReffuseNamespace { return reactStateValue as InitialA extends A ? Option.Some : Option.Option } + useSubscribePullStream( + this: ReffuseNamespace, + stream: Stream.Stream, + initialValue?: InitialA, + ): [latest: InitialA extends A ? Option.Some : Option.Option, pull: () => void] { + const [reactStateValue, setReactStateValue] = React.useState>(Option.fromNullable(initialValue)) + + this.useFork(() => Stream.runForEach( + Stream.changesWith(stream, (x, y) => x === y), + v => Effect.sync(() => setReactStateValue(Option.some(v))), + ), [stream]) + + return reactStateValue as InitialA extends A ? Option.Some : Option.Option + } + SubRef, R>( this: ReffuseNamespace,