0.1.11 #14

Merged
Thilawyn merged 318 commits from next into master 2025-05-19 14:01:41 +02:00
6 changed files with 20 additions and 20 deletions
Showing only changes of commit d5ac84b2cc - Show all commits

View File

@@ -1,6 +1,6 @@
import { R } from "@/reffuse" import { R } from "@/reffuse"
import { createFileRoute } from "@tanstack/react-router" import { createFileRoute } from "@tanstack/react-router"
import { Ref } from "effect" import { Effect, Ref } from "effect"
export const Route = createFileRoute("/count")({ export const Route = createFileRoute("/count")({
@@ -11,7 +11,7 @@ function Count() {
const runSync = R.useRunSync() const runSync = R.useRunSync()
const countRef = R.useRef(0) const countRef = R.useRef(() => Effect.succeed(0))
const [count] = R.useRefState(countRef) const [count] = R.useRefState(countRef)

View File

@@ -14,7 +14,7 @@ export const Route = createFileRoute("/query/service")({
function RouteComponent() { function RouteComponent() {
const query = R.useQuery({ const query = R.useQuery({
key: R.useStreamFromValues(["uuid4", 10 as number]), key: R.useStreamFromReactiveValues(["uuid4", 10 as number]),
query: ([, count]) => Console.log(`Querying ${ count } IDs...`).pipe( query: ([, count]) => Console.log(`Querying ${ count } IDs...`).pipe(
Effect.andThen(Effect.sleep("500 millis")), Effect.andThen(Effect.sleep("500 millis")),
Effect.andThen(HttpClient.get(`https://www.uuidtools.com/api/generate/v4/count/${ count }`)), Effect.andThen(HttpClient.get(`https://www.uuidtools.com/api/generate/v4/count/${ count }`)),

View File

@@ -20,7 +20,7 @@ function RouteComponent() {
const [count, setCount] = useState(1) const [count, setCount] = useState(1)
const query = R.useQuery({ const query = R.useQuery({
key: R.useStreamFromValues(["uuid4", count]), key: R.useStreamFromReactiveValues(["uuid4", count]),
query: ([, count]) => Console.log(`Querying ${ count } IDs...`).pipe( query: ([, count]) => Console.log(`Querying ${ count } IDs...`).pipe(
Effect.andThen(Effect.sleep("500 millis")), Effect.andThen(Effect.sleep("500 millis")),
Effect.andThen(HttpClient.get(`https://www.uuidtools.com/api/generate/v4/count/${ count }`)), Effect.andThen(HttpClient.get(`https://www.uuidtools.com/api/generate/v4/count/${ count }`)),

View File

@@ -10,7 +10,7 @@ export const Route = createFileRoute("/tests")({
}) })
function RouteComponent() { function RouteComponent() {
const deepRef = R.useRef({ value: "poulet" }) const deepRef = R.useRef(() => Effect.succeed({ value: "poulet" }))
const deepValueRef = R.useSubRef(deepRef, ["value"]) const deepValueRef = R.useSubRef(deepRef, ["value"])
// const value = R.useMemoScoped(Effect.addFinalizer(() => Console.log("cleanup")).pipe( // const value = R.useMemoScoped(Effect.addFinalizer(() => Console.log("cleanup")).pipe(
@@ -25,8 +25,8 @@ function RouteComponent() {
), []) ), [])
const uuidRef = R.useRef("none") const uuidRef = R.useRef(() => Effect.succeed("none"))
const anotherRef = R.useRef(69) const anotherRef = R.useRef(() => Effect.succeed(69))
const logValue = R.useCallbackSync(Effect.fn(function*(value: string) { const logValue = R.useCallbackSync(Effect.fn(function*(value: string) {

View File

@@ -16,7 +16,7 @@ export function VTodos() {
), []) ), [])
const todosRef = R.useMemo(() => TodosState.TodosState.pipe(Effect.map(state => state.todos)), []) const todosRef = R.useMemo(() => TodosState.TodosState.pipe(Effect.map(state => state.todos)), [])
const [todos] = R.useRefState(todosRef) const [todos] = R.useSubscribeRefs(todosRef)
return ( return (

View File

@@ -523,19 +523,19 @@ export abstract class ReffuseNamespace<R> {
return reactStateValue as InitialA extends A ? Option.Some<A> : Option.Option<A> return reactStateValue as InitialA extends A ? Option.Some<A> : Option.Option<A>
} }
usePullStream<A, InitialA extends A | undefined, E, R>( // usePullStream<A, InitialA extends A | undefined, E, R>(
this: ReffuseNamespace<R>, // this: ReffuseNamespace<R>,
stream: Stream.Stream<A, E, R>, // stream: Stream.Stream<A, E, R>,
initialValue?: InitialA, // initialValue?: InitialA,
): [ // ): [
latestValue: InitialA extends A ? Option.Some<A> : Option.Option<A>, // latestValue: InitialA extends A ? Option.Some<A> : Option.Option<A>,
pull: () => void, // pull: () => void,
] { // ] {
const [reactStateValue, setReactStateValue] = React.useState<Option.Option<A>>(Option.fromNullable(initialValue)) // const [reactStateValue, setReactStateValue] = React.useState<Option.Option<A>>(Option.fromNullable(initialValue))
const pull = this.useMemo(() => Stream.toPull(stream), [stream]) // const pull = this.useMemo(() => Stream.toPull(stream), [stream])
return reactStateValue as InitialA extends A ? Option.Some<A> : Option.Option<A> // return reactStateValue as InitialA extends A ? Option.Some<A> : Option.Option<A>
} // }
SubRef<B, const P extends PropertyPath.Paths<B>, R>( SubRef<B, const P extends PropertyPath.Paths<B>, R>(