From bebbc1d7de2e3860f0dc7e32c5a594f56d5781ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Tue, 18 Feb 2025 02:23:40 +0100 Subject: [PATCH] Promise tests --- packages/example/src/routes/tests.tsx | 29 ++++++++++++++++--- packages/example/src/todos/views/VNewTodo.tsx | 17 ++++++----- 2 files changed, 34 insertions(+), 12 deletions(-) diff --git a/packages/example/src/routes/tests.tsx b/packages/example/src/routes/tests.tsx index 28117f0..8282be1 100644 --- a/packages/example/src/routes/tests.tsx +++ b/packages/example/src/routes/tests.tsx @@ -1,6 +1,8 @@ import { R } from "@/reffuse" import { createFileRoute } from "@tanstack/react-router" +import { GetRandomValues, makeUuid4 } from "@typed/id" import { Console, Effect } from "effect" +import { useEffect, useState } from "react" export const Route = createFileRoute("/tests")({ @@ -14,10 +16,29 @@ function RouteComponent() { // ), []) // console.log(value) - R.useFork(Effect.addFinalizer(() => Console.log("cleanup")).pipe( - Effect.andThen(Console.log("ouient")), - Effect.delay("1 second"), - )) + // R.useFork(Effect.addFinalizer(() => Console.log("cleanup")).pipe( + // Effect.andThen(Console.log("ouient")), + // Effect.delay("1 second"), + // )) + + const runPromise = R.useRunPromise() + const [promise, setPromise] = useState | null>(null) + const [, setValue] = useState("") + + useEffect(() => { + makeUuid4.pipe( + Effect.provide(GetRandomValues.CryptoRandom), + Effect.tap(id => Effect.sync(() => setValue(id))), + Effect.andThen(Console.log), + Effect.delay("1 second"), + + runPromise, + setPromise, + ) + }, [runPromise]) + + console.log(promise) + return
Hello "/tests"!
} diff --git a/packages/example/src/todos/views/VNewTodo.tsx b/packages/example/src/todos/views/VNewTodo.tsx index eeb20f2..ccb4346 100644 --- a/packages/example/src/todos/views/VNewTodo.tsx +++ b/packages/example/src/todos/views/VNewTodo.tsx @@ -5,18 +5,19 @@ import { R } from "../reffuse" import { TodosState } from "../services" +const createEmptyTodo = Todo.generateUniqueID.pipe( + Effect.map(id => Todo.Todo.make({ + id, + content: "", + completedAt: Option.none(), + }, true)) +) + + export function VNewTodo() { const runSync = R.useRunSync() - const createEmptyTodo = Todo.generateUniqueID.pipe( - Effect.map(id => Todo.Todo.make({ - id, - content: "", - completedAt: Option.none(), - }, true)) - ) - const todoRef = R.useMemo(createEmptyTodo.pipe(Effect.flatMap(SubscriptionRef.make))) const [todo, setTodo] = R.useRefState(todoRef)