From 11030ddc2b0be38660bd6d9c9d2d7497e6ad3f4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Fri, 17 Jan 2025 20:38:23 +0100 Subject: [PATCH] useStreamState --- packages/reffuse/src/Reffuse.ts | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/packages/reffuse/src/Reffuse.ts b/packages/reffuse/src/Reffuse.ts index d881af1..4915b94 100644 --- a/packages/reffuse/src/Reffuse.ts +++ b/packages/reffuse/src/Reffuse.ts @@ -1,4 +1,4 @@ -import { Context, Effect, ExecutionStrategy, Exit, Fiber, Ref, Runtime, Scope, Stream, SubscriptionRef } from "effect" +import { Context, Effect, ExecutionStrategy, Exit, Fiber, Option, Ref, Runtime, Scope, Stream, SubscriptionRef } from "effect" import React from "react" import * as ReffuseContext from "./ReffuseContext.js" import * as ReffuseRuntime from "./ReffuseRuntime.js" @@ -280,6 +280,17 @@ export class Reffuse { return [reactStateValue, setValue] } + + useStreamState(stream: Stream.Stream): Option.Option { + const [reactStateValue, setReactStateValue] = React.useState(Option.none()) + + this.useFork(Stream.runForEach(stream, v => Effect.sync(() => + setReactStateValue(Option.some(v)) + )), [stream]) + + return reactStateValue + } + }