@reffuse/extension-query 0.1.4 #15
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@reffuse/extension-lazyref",
|
"name": "@reffuse/extension-lazyref",
|
||||||
"version": "0.1.2",
|
"version": "0.1.3",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"files": [
|
"files": [
|
||||||
"./README.md",
|
"./README.md",
|
||||||
@@ -37,6 +37,6 @@
|
|||||||
"@types/react": "^19.0.0",
|
"@types/react": "^19.0.0",
|
||||||
"effect": "^3.13.0",
|
"effect": "^3.13.0",
|
||||||
"react": "^19.0.0",
|
"react": "^19.0.0",
|
||||||
"reffuse": "^0.1.6"
|
"reffuse": "^0.1.7"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,16 +1,43 @@
|
|||||||
import * as LazyRef from "@typed/lazy-ref"
|
import * as LazyRef from "@typed/lazy-ref"
|
||||||
import { Effect, Stream } from "effect"
|
import { Effect, pipe, Stream } from "effect"
|
||||||
import * as React from "react"
|
import * as React from "react"
|
||||||
import { ReffuseExtension, type ReffuseNamespace, SetStateAction } from "reffuse"
|
import { ReffuseExtension, type ReffuseNamespace, SetStateAction } from "reffuse"
|
||||||
|
|
||||||
|
|
||||||
export const LazyRefExtension = ReffuseExtension.make(() => ({
|
export const LazyRefExtension = ReffuseExtension.make(() => ({
|
||||||
|
useSubscribeLazyRefs<
|
||||||
|
const Refs extends readonly LazyRef.LazyRef<any>[],
|
||||||
|
R,
|
||||||
|
>(
|
||||||
|
this: ReffuseNamespace.ReffuseNamespace<R>,
|
||||||
|
...refs: Refs
|
||||||
|
): [...{ [K in keyof Refs]: Effect.Effect.Success<Refs[K]> }] {
|
||||||
|
const [reactStateValue, setReactStateValue] = React.useState(this.useMemo(
|
||||||
|
() => Effect.all(refs as readonly LazyRef.LazyRef<any>[]),
|
||||||
|
[],
|
||||||
|
{ doNotReExecuteOnRuntimeOrContextChange: true },
|
||||||
|
) as [...{ [K in keyof Refs]: Effect.Effect.Success<Refs[K]> }])
|
||||||
|
|
||||||
|
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<Refs[K]> }]))
|
||||||
|
),
|
||||||
|
), refs)
|
||||||
|
|
||||||
|
return reactStateValue
|
||||||
|
},
|
||||||
|
|
||||||
useLazyRefState<A, E, R>(
|
useLazyRefState<A, E, R>(
|
||||||
this: ReffuseNamespace.ReffuseNamespace<R>,
|
this: ReffuseNamespace.ReffuseNamespace<R>,
|
||||||
ref: LazyRef.LazyRef<A, E, R>,
|
ref: LazyRef.LazyRef<A, E, R>,
|
||||||
): [A, React.Dispatch<React.SetStateAction<A>>] {
|
): [A, React.Dispatch<React.SetStateAction<A>>] {
|
||||||
const initialState = this.useMemo(() => ref, [], { doNotReExecuteOnRuntimeOrContextChange: true })
|
const [reactStateValue, setReactStateValue] = React.useState(this.useMemo(
|
||||||
const [reactStateValue, setReactStateValue] = React.useState(initialState)
|
() => ref,
|
||||||
|
[],
|
||||||
|
{ doNotReExecuteOnRuntimeOrContextChange: true },
|
||||||
|
))
|
||||||
|
|
||||||
this.useFork(() => Stream.runForEach(
|
this.useFork(() => Stream.runForEach(
|
||||||
Stream.changesWith(ref.changes, (x, y) => x === y),
|
Stream.changesWith(ref.changes, (x, y) => x === y),
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "reffuse",
|
"name": "reffuse",
|
||||||
"version": "0.1.6",
|
"version": "0.1.7",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"files": [
|
"files": [
|
||||||
"./README.md",
|
"./README.md",
|
||||||
|
|||||||
@@ -419,8 +419,11 @@ export abstract class ReffuseNamespace<R> {
|
|||||||
this: ReffuseNamespace<R>,
|
this: ReffuseNamespace<R>,
|
||||||
ref: SubscriptionRef.SubscriptionRef<A>,
|
ref: SubscriptionRef.SubscriptionRef<A>,
|
||||||
): [A, React.Dispatch<React.SetStateAction<A>>] {
|
): [A, React.Dispatch<React.SetStateAction<A>>] {
|
||||||
const initialState = this.useMemo(() => ref, [], { doNotReExecuteOnRuntimeOrContextChange: true })
|
const [reactStateValue, setReactStateValue] = React.useState(this.useMemo(
|
||||||
const [reactStateValue, setReactStateValue] = React.useState(initialState)
|
() => ref,
|
||||||
|
[],
|
||||||
|
{ doNotReExecuteOnRuntimeOrContextChange: true },
|
||||||
|
))
|
||||||
|
|
||||||
this.useFork(() => Stream.runForEach(
|
this.useFork(() => Stream.runForEach(
|
||||||
Stream.changesWith(ref.changes, (x, y) => x === y),
|
Stream.changesWith(ref.changes, (x, y) => x === y),
|
||||||
|
|||||||
Reference in New Issue
Block a user