diff --git a/packages/example/src/routes/tests.tsx b/packages/example/src/routes/tests.tsx index a2a073d..440c904 100644 --- a/packages/example/src/routes/tests.tsx +++ b/packages/example/src/routes/tests.tsx @@ -11,7 +11,7 @@ export const Route = createFileRoute("/tests")({ function RouteComponent() { const deepRef = R.useRef({ value: "poulet" }) - const deepValueRef = R.useSubRefFromPath(deepRef, ["value"]) + const deepValueRef = R.useSubRef(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 3612520..50dbea1 100644 --- a/packages/reffuse/src/ReffuseNamespace.ts +++ b/packages/reffuse/src/ReffuseNamespace.ts @@ -14,6 +14,10 @@ export interface ScopeOptions { readonly finalizerExecutionStrategy?: ExecutionStrategy.ExecutionStrategy } +export type RefsA[]> = { + [K in keyof T]: Effect.Effect.Success +} + export abstract class ReffuseNamespace { declare ["constructor"]: ReffuseNamespaceClass @@ -401,18 +405,18 @@ export abstract class ReffuseNamespace { >( this: ReffuseNamespace, ...refs: Refs - ): [...{ [K in keyof Refs]: Effect.Effect.Success }] { + ): RefsA { const [reactStateValue, setReactStateValue] = React.useState(this.useMemo( () => Effect.all(refs as readonly SubscriptionRef.SubscriptionRef[]), [], { doNotReExecuteOnRuntimeOrContextChange: true }, - ) as [...{ [K in keyof Refs]: Effect.Effect.Success }]) + ) as RefsA) this.useFork(() => pipe( refs.map(ref => Stream.changesWith(ref.changes, (x, y) => x === y)), streams => Stream.zipLatestAll(...streams), Stream.runForEach(v => - Effect.sync(() => setReactStateValue(v as [...{ [K in keyof Refs]: Effect.Effect.Success }])) + Effect.sync(() => setReactStateValue(v as RefsA)) ), ), refs) @@ -486,7 +490,7 @@ export abstract class ReffuseNamespace { this: ReffuseNamespace, props: { readonly refs: Refs - readonly children: (...args: [...{ [K in keyof Refs]: Effect.Effect.Success }]) => React.ReactNode + readonly children: (...args: RefsA) => React.ReactNode }, ): React.ReactNode { return props.children(...this.useSubscribeRefs(...props.refs))