@reffuse/extension-query 0.1.5 #16

Merged
Thilawyn merged 347 commits from next into master 2025-06-01 05:28:47 +02:00
2 changed files with 9 additions and 5 deletions
Showing only changes of commit fa0f8c6b24 - Show all commits

View File

@@ -11,7 +11,7 @@ export const Route = createFileRoute("/tests")({
function RouteComponent() { function RouteComponent() {
const deepRef = R.useRef({ value: "poulet" }) 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( // const value = R.useMemoScoped(Effect.addFinalizer(() => Console.log("cleanup")).pipe(
// Effect.andThen(makeUuid4), // Effect.andThen(makeUuid4),

View File

@@ -14,6 +14,10 @@ export interface ScopeOptions {
readonly finalizerExecutionStrategy?: ExecutionStrategy.ExecutionStrategy readonly finalizerExecutionStrategy?: ExecutionStrategy.ExecutionStrategy
} }
export type RefsA<T extends readonly SubscriptionRef.SubscriptionRef<any>[]> = {
[K in keyof T]: Effect.Effect.Success<T[K]>
}
export abstract class ReffuseNamespace<R> { export abstract class ReffuseNamespace<R> {
declare ["constructor"]: ReffuseNamespaceClass<R> declare ["constructor"]: ReffuseNamespaceClass<R>
@@ -401,18 +405,18 @@ export abstract class ReffuseNamespace<R> {
>( >(
this: ReffuseNamespace<R>, this: ReffuseNamespace<R>,
...refs: Refs ...refs: Refs
): [...{ [K in keyof Refs]: Effect.Effect.Success<Refs[K]> }] { ): RefsA<Refs> {
const [reactStateValue, setReactStateValue] = React.useState(this.useMemo( const [reactStateValue, setReactStateValue] = React.useState(this.useMemo(
() => Effect.all(refs as readonly SubscriptionRef.SubscriptionRef<any>[]), () => Effect.all(refs as readonly SubscriptionRef.SubscriptionRef<any>[]),
[], [],
{ doNotReExecuteOnRuntimeOrContextChange: true }, { doNotReExecuteOnRuntimeOrContextChange: true },
) as [...{ [K in keyof Refs]: Effect.Effect.Success<Refs[K]> }]) ) as RefsA<Refs>)
this.useFork(() => pipe( this.useFork(() => pipe(
refs.map(ref => Stream.changesWith(ref.changes, (x, y) => x === y)), refs.map(ref => Stream.changesWith(ref.changes, (x, y) => x === y)),
streams => Stream.zipLatestAll(...streams), streams => Stream.zipLatestAll(...streams),
Stream.runForEach(v => Stream.runForEach(v =>
Effect.sync(() => setReactStateValue(v as [...{ [K in keyof Refs]: Effect.Effect.Success<Refs[K]> }])) Effect.sync(() => setReactStateValue(v as RefsA<Refs>))
), ),
), refs) ), refs)
@@ -486,7 +490,7 @@ export abstract class ReffuseNamespace<R> {
this: ReffuseNamespace<R>, this: ReffuseNamespace<R>,
props: { props: {
readonly refs: Refs readonly refs: Refs
readonly children: (...args: [...{ [K in keyof Refs]: Effect.Effect.Success<Refs[K]> }]) => React.ReactNode readonly children: (...args: RefsA<Refs>) => React.ReactNode
}, },
): React.ReactNode { ): React.ReactNode {
return props.children(...this.useSubscribeRefs(...props.refs)) return props.children(...this.useSubscribeRefs(...props.refs))