diff --git a/packages/example/src/routes/tests.tsx b/packages/example/src/routes/tests.tsx index cb9b4c5..0ffe0c1 100644 --- a/packages/example/src/routes/tests.tsx +++ b/packages/example/src/routes/tests.tsx @@ -2,8 +2,8 @@ import { R } from "@/reffuse" import { Button, Flex, Text } from "@radix-ui/themes" import { createFileRoute } from "@tanstack/react-router" import { GetRandomValues, makeUuid4 } from "@typed/id" -import { Console, Effect, Option, Random, Scope, Stream } from "effect" -import { useEffect, useMemo, useState } from "react" +import { Console, Effect, Option, Scope } from "effect" +import { useEffect, useState } from "react" const makeUuid = Effect.provide(makeUuid4, GetRandomValues.CryptoRandom) @@ -22,8 +22,7 @@ function RouteComponent() { ), []) const uuidStream = R.useStreamFromReactiveValues([uuid]) - const stream2 = useMemo(() => Stream.repeatEffect(Random.nextInt), []) - const uuidStreamLatestValue = R.useSubscribeStream(stream2, true) + const uuidStreamLatestValue = R.useSubscribeStream(uuidStream) const scope = R.useScope([uuid]) diff --git a/packages/reffuse/src/ReffuseNamespace.ts b/packages/reffuse/src/ReffuseNamespace.ts index 02a4a93..0250fdc 100644 --- a/packages/reffuse/src/ReffuseNamespace.ts +++ b/packages/reffuse/src/ReffuseNamespace.ts @@ -1,4 +1,4 @@ -import { type Cause, Chunk, type Context, Effect, ExecutionStrategy, Exit, type Fiber, flow, Function, type Layer, Match, Option, pipe, Pipeable, PubSub, Queue, Ref, Runtime, Scope, Stream, SubscriptionRef } from "effect" +import { Chunk, type Context, Effect, ExecutionStrategy, Exit, type Fiber, flow, type Layer, Match, Option, pipe, Pipeable, PubSub, Ref, Runtime, Scope, Stream, SubscriptionRef } from "effect" import * as React from "react" import * as ReffuseContext from "./ReffuseContext.js" import * as ReffuseRuntime from "./ReffuseRuntime.js" @@ -501,11 +501,6 @@ export abstract class ReffuseNamespace { this: ReffuseNamespace, stream: Stream.Stream, ): Option.Option - useSubscribeStream( - this: ReffuseNamespace, - stream: Stream.Stream, - pullLatestValue: true, - ): Option.Some useSubscribeStream( this: ReffuseNamespace, stream: Stream.Stream, @@ -514,25 +509,11 @@ export abstract class ReffuseNamespace { useSubscribeStream( this: ReffuseNamespace, stream: Stream.Stream, - pullLatestOrInitialValue?: true | (() => Effect.Effect), + initialValue?: () => Effect.Effect, ): Option.Option { - const [reactStateValue, setReactStateValue] = React.useState(this.useMemo< - Option.Option, - Cause.NoSuchElementException | Cause.Cause> | IE, - R - >( - () => pullLatestOrInitialValue - ? Function.isFunction(pullLatestOrInitialValue) - ? Effect.map(pullLatestOrInitialValue(), Option.some) - : Stream.toQueueOfElements(stream).pipe( - Effect.flatMap(Queue.takeAll), - Effect.flatMap(Chunk.last), - Effect.flatMap(Exit.matchEffect({ - onSuccess: v => Effect.succeed(Option.some(v)), - onFailure: Effect.fail, - })), - Effect.scoped, - ) + const [reactStateValue, setReactStateValue] = React.useState(this.useMemo( + () => initialValue + ? Effect.map(initialValue(), Option.some) : Effect.succeed(Option.none()), [], { doNotReExecuteOnRuntimeOrContextChange: true },