0.1.3 #5

Merged
Thilawyn merged 104 commits from next into master 2025-03-11 01:44:38 +01:00
7 changed files with 26 additions and 26 deletions
Showing only changes of commit ea768218a0 - Show all commits

View File

@@ -10,7 +10,7 @@ export const Route = createFileRoute("/lazyref")({
}) })
function RouteComponent() { function RouteComponent() {
const promise = R.usePromise(() => LazyRef.of(0)) const promise = R.usePromise(() => LazyRef.of(0), [])
return ( return (
<Suspense fallback={<Text>Loading...</Text>}> <Suspense fallback={<Text>Loading...</Text>}>

View File

@@ -20,7 +20,7 @@ function RouteComponent() {
HttpClient.withTracerPropagation(false), HttpClient.withTracerPropagation(false),
Effect.flatMap(res => res.json), Effect.flatMap(res => res.json),
Effect.flatMap(Schema.decodeUnknown(Result)), Effect.flatMap(Schema.decodeUnknown(Result)),
)) ), [])
return ( return (
<Suspense fallback={<Text>Loading...</Text>}> <Suspense fallback={<Text>Loading...</Text>}>

View File

@@ -18,11 +18,11 @@ function RouteComponent() {
R.useFork(() => Effect.addFinalizer(() => Console.log("cleanup")).pipe( R.useFork(() => Effect.addFinalizer(() => Console.log("cleanup")).pipe(
Effect.andThen(Console.log("ouient")), Effect.andThen(Console.log("ouient")),
Effect.delay("1 second"), Effect.delay("1 second"),
)) ), [])
const logValue = R.useCallbackSync(Effect.fn(function*(value: string) { const logValue = R.useCallbackSync(Effect.fn(function*(value: string) {
yield* Effect.log(value) yield* Effect.log(value)
})) }), [])
return ( return (

View File

@@ -15,7 +15,7 @@ export const Route = createFileRoute("/time")({
function Time() { function Time() {
const timeRef = R.useMemo(() => DateTime.now.pipe(Effect.flatMap(SubscriptionRef.make))) const timeRef = R.useMemo(() => DateTime.now.pipe(Effect.flatMap(SubscriptionRef.make)), [])
R.useFork(() => Effect.addFinalizer(() => Console.log("Cleanup")).pipe( R.useFork(() => Effect.addFinalizer(() => Console.log("Cleanup")).pipe(
Effect.andThen(Stream.runForEach(timeEverySecond, v => Ref.set(timeRef, v))) Effect.andThen(Stream.runForEach(timeEverySecond, v => Ref.set(timeRef, v)))

View File

@@ -18,7 +18,7 @@ export function VNewTodo() {
const runSync = R.useRunSync() const runSync = R.useRunSync()
const todoRef = R.useMemo(() => createEmptyTodo.pipe(Effect.flatMap(SubscriptionRef.make))) const todoRef = R.useMemo(() => createEmptyTodo.pipe(Effect.flatMap(SubscriptionRef.make)), [])
const [todo, setTodo] = R.useRefState(todoRef) const [todo, setTodo] = R.useRefState(todoRef)

View File

@@ -13,9 +13,9 @@ export function VTodos() {
Effect.flatMap(state => Effect.flatMap(state =>
Stream.runForEach(state.todos.changes, () => state.saveToLocalStorage) Stream.runForEach(state.todos.changes, () => state.saveToLocalStorage)
) )
)) ), [])
const todosRef = R.useMemo(() => TodosState.TodosState.pipe(Effect.map(state => state.todos))) const todosRef = R.useMemo(() => TodosState.TodosState.pipe(Effect.map(state => state.todos)), [])
const [todos] = R.useRefState(todosRef) const [todos] = R.useRefState(todosRef)

View File

@@ -85,21 +85,21 @@ export abstract class ReffuseHelpers<R> {
useMemo<A, E, R>( useMemo<A, E, R>(
this: ReffuseHelpers<R>, this: ReffuseHelpers<R>,
effect: () => Effect.Effect<A, E, R>, effect: () => Effect.Effect<A, E, R>,
deps?: React.DependencyList, deps: React.DependencyList,
options?: RenderOptions, options?: RenderOptions,
): A { ): A {
const runSync = this.useRunSync() const runSync = this.useRunSync()
return React.useMemo(() => runSync(effect()), [ return React.useMemo(() => runSync(effect()), [
...options?.doNotReExecuteOnRuntimeOrContextChange ? [] : [runSync], ...options?.doNotReExecuteOnRuntimeOrContextChange ? [] : [runSync],
...(deps ?? []), ...deps,
]) ])
} }
useMemoScoped<A, E, R>( useMemoScoped<A, E, R>(
this: ReffuseHelpers<R>, this: ReffuseHelpers<R>,
effect: () => Effect.Effect<A, E, R | Scope.Scope>, effect: () => Effect.Effect<A, E, R | Scope.Scope>,
deps?: React.DependencyList, deps: React.DependencyList,
options?: RenderOptions & ScopeOptions, options?: RenderOptions & ScopeOptions,
): A { ): A {
const runSync = this.useRunSync() const runSync = this.useRunSync()
@@ -140,7 +140,7 @@ export abstract class ReffuseHelpers<R> {
return () => { runSync(Scope.close(scope, Exit.void)) } return () => { runSync(Scope.close(scope, Exit.void)) }
}, [ }, [
...options?.doNotReExecuteOnRuntimeOrContextChange ? [] : [runSync], ...options?.doNotReExecuteOnRuntimeOrContextChange ? [] : [runSync],
...(deps ?? []), ...deps,
]) ])
return value return value
@@ -187,9 +187,9 @@ export abstract class ReffuseHelpers<R> {
) )
return () => { runSync(Scope.close(scope, Exit.void)) } return () => { runSync(Scope.close(scope, Exit.void)) }
}, [ }, deps && [
...options?.doNotReExecuteOnRuntimeOrContextChange ? [] : [runSync], ...options?.doNotReExecuteOnRuntimeOrContextChange ? [] : [runSync],
...(deps ?? []), ...deps,
]) ])
} }
@@ -235,9 +235,9 @@ export abstract class ReffuseHelpers<R> {
) )
return () => { runSync(Scope.close(scope, Exit.void)) } return () => { runSync(Scope.close(scope, Exit.void)) }
}, [ }, deps && [
...options?.doNotReExecuteOnRuntimeOrContextChange ? [] : [runSync], ...options?.doNotReExecuteOnRuntimeOrContextChange ? [] : [runSync],
...(deps ?? []), ...deps,
]) ])
} }
@@ -285,9 +285,9 @@ export abstract class ReffuseHelpers<R> {
runFork(Effect.provideService(effect(), Scope.Scope, scope), { ...options, scope }) runFork(Effect.provideService(effect(), Scope.Scope, scope), { ...options, scope })
return () => { runFork(Scope.close(scope, Exit.void)) } return () => { runFork(Scope.close(scope, Exit.void)) }
}, [ }, deps && [
...options?.doNotReExecuteOnRuntimeOrContextChange ? [] : [runSync, runFork], ...options?.doNotReExecuteOnRuntimeOrContextChange ? [] : [runSync],
...(deps ?? []), ...deps,
]) ])
} }
@@ -330,9 +330,9 @@ export abstract class ReffuseHelpers<R> {
cleanup() cleanup()
} }
}, [ }, deps && [
...options?.doNotReExecuteOnRuntimeOrContextChange ? [] : [runSync, runFork], ...options?.doNotReExecuteOnRuntimeOrContextChange ? [] : [runSync],
...(deps ?? []), ...deps,
]) ])
return value return value
@@ -341,28 +341,28 @@ export abstract class ReffuseHelpers<R> {
useCallbackSync<Args extends unknown[], A, E, R>( useCallbackSync<Args extends unknown[], A, E, R>(
this: ReffuseHelpers<R>, this: ReffuseHelpers<R>,
callback: (...args: Args) => Effect.Effect<A, E, R>, callback: (...args: Args) => Effect.Effect<A, E, R>,
deps?: React.DependencyList, deps: React.DependencyList,
options?: RenderOptions, options?: RenderOptions,
): (...args: Args) => A { ): (...args: Args) => A {
const runSync = this.useRunSync() const runSync = this.useRunSync()
return React.useCallback((...args) => runSync(callback(...args)), [ return React.useCallback((...args) => runSync(callback(...args)), [
...options?.doNotReExecuteOnRuntimeOrContextChange ? [] : [runSync], ...options?.doNotReExecuteOnRuntimeOrContextChange ? [] : [runSync],
...(deps ?? []), ...deps,
]) ])
} }
useCallbackPromise<Args extends unknown[], A, E, R>( useCallbackPromise<Args extends unknown[], A, E, R>(
this: ReffuseHelpers<R>, this: ReffuseHelpers<R>,
callback: (...args: Args) => Effect.Effect<A, E, R>, callback: (...args: Args) => Effect.Effect<A, E, R>,
deps?: React.DependencyList, deps: React.DependencyList,
options?: { readonly signal?: AbortSignal } & RenderOptions, options?: { readonly signal?: AbortSignal } & RenderOptions,
): (...args: Args) => Promise<A> { ): (...args: Args) => Promise<A> {
const runPromise = this.useRunPromise() const runPromise = this.useRunPromise()
return React.useCallback((...args) => runPromise(callback(...args), options), [ return React.useCallback((...args) => runPromise(callback(...args), options), [
...options?.doNotReExecuteOnRuntimeOrContextChange ? [] : [runPromise], ...options?.doNotReExecuteOnRuntimeOrContextChange ? [] : [runPromise],
...(deps ?? []), ...deps,
]) ])
} }