From 5f5ef5614b517be7b8ffbf7567d9371def8f8fdd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sat, 12 Apr 2025 00:16:04 +0200 Subject: [PATCH] Working SubscribeRefs --- packages/example/src/routes/tests.tsx | 8 ++++---- packages/reffuse/src/ReffuseHelpers.ts | 14 ++++++++++++++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/packages/example/src/routes/tests.tsx b/packages/example/src/routes/tests.tsx index 14c9552..928c2d8 100644 --- a/packages/example/src/routes/tests.tsx +++ b/packages/example/src/routes/tests.tsx @@ -26,7 +26,7 @@ function RouteComponent() { const aRef = R.useRef("a value") const anotherRef = R.useRef(69) - const res = R.useRefsState({ aRef, anotherRef }) + const res = R.useSubscribeRefs(aRef, anotherRef) const [reactValue, setReactValue] = useState("initial") @@ -46,9 +46,9 @@ function RouteComponent() { return ( - - {([aValue]) => {aValue}} - + + {(aValue, anotherRef) => {aValue} / {anotherRef}} + diff --git a/packages/reffuse/src/ReffuseHelpers.ts b/packages/reffuse/src/ReffuseHelpers.ts index 4e3d3de..15716ab 100644 --- a/packages/reffuse/src/ReffuseHelpers.ts +++ b/packages/reffuse/src/ReffuseHelpers.ts @@ -19,6 +19,7 @@ export abstract class ReffuseHelpers { declare ["constructor"]: ReffuseHelpersClass constructor() { + this.SubscribeRefs = this.SubscribeRefs.bind(this as any) as any this.RefState = this.RefState.bind(this as any) as any } @@ -448,6 +449,19 @@ export abstract class ReffuseHelpers { } + SubscribeRefs< + const Refs extends readonly SubscriptionRef.SubscriptionRef[], + R, + >( + this: ReffuseHelpers, + props: { + readonly refs: Refs + readonly children: (...args: [...{ [K in keyof Refs]: Effect.Effect.Success }]) => React.ReactNode + }, + ): React.ReactNode { + return props.children(...this.useSubscribeRefs(...props.refs)) + } + RefState( this: ReffuseHelpers, props: {