From 39d2176c615f58df8e6af8fee1e117ab9044935f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Fri, 25 Apr 2025 08:21:59 +0200 Subject: [PATCH] Working subref from path --- packages/example/src/routes/tests.tsx | 6 +----- packages/reffuse/src/ReffuseNamespace.ts | 13 ++++++++++++- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/packages/example/src/routes/tests.tsx b/packages/example/src/routes/tests.tsx index def5d5c..a2a073d 100644 --- a/packages/example/src/routes/tests.tsx +++ b/packages/example/src/routes/tests.tsx @@ -11,11 +11,7 @@ export const Route = createFileRoute("/tests")({ function RouteComponent() { const deepRef = R.useRef({ value: "poulet" }) - const deepValueRef = R.useSubRefFromGetSet( - deepRef, - b => b.value, - (b, a) => ({ ...b, value: a }), - ) + const deepValueRef = R.useSubRefFromPath(deepRef, ["value"]) // const value = R.useMemoScoped(Effect.addFinalizer(() => Console.log("cleanup")).pipe( // Effect.andThen(makeUuid4), diff --git a/packages/reffuse/src/ReffuseNamespace.ts b/packages/reffuse/src/ReffuseNamespace.ts index 1ad1d10..98e80e3 100644 --- a/packages/reffuse/src/ReffuseNamespace.ts +++ b/packages/reffuse/src/ReffuseNamespace.ts @@ -2,7 +2,7 @@ import { type Context, Effect, ExecutionStrategy, Exit, type Fiber, type Layer, import * as React from "react" import * as ReffuseContext from "./ReffuseContext.js" import * as ReffuseRuntime from "./ReffuseRuntime.js" -import { SetStateAction, SubscriptionSubRef } from "./types/index.js" +import { PropertyPath, SetStateAction, SubscriptionSubRef } from "./types/index.js" export interface RenderOptions { @@ -396,6 +396,17 @@ export abstract class ReffuseNamespace { ) } + useSubRefFromPath, R>( + this: ReffuseNamespace, + parent: SubscriptionRef.SubscriptionRef, + path: P, + ): SubscriptionSubRef.SubscriptionSubRef, B> { + return React.useMemo( + () => SubscriptionSubRef.makeFromPath(parent, path), + [parent], + ) + } + useSubscribeRefs< const Refs extends readonly SubscriptionRef.SubscriptionRef[], R,