11"use client"
2+ import type * as Context from "@effect/data/Context"
23import type { LazyArg } from "@effect/data/Function"
34import { pipe } from "@effect/data/Function"
45import * as Effect from "@effect/io/Effect"
@@ -8,6 +9,8 @@ import * as Scope from "@effect/io/Scope"
89import type * as Stream from "@effect/stream/Stream"
910import * as internalUseResult from "effect-react/internal/hooks/useResult"
1011import * as internalUseResultCallback from "effect-react/internal/hooks/useResultCallback"
12+ import * as internalUseService from "effect-react/internal/hooks/useService"
13+ import * as internalUseValue from "effect-react/internal/hooks/useValue"
1114import type * as ResultBag from "effect-react/ResultBag"
1215import type { DependencyList } from "react"
1316import { createContext } from "react"
@@ -35,6 +38,22 @@ export type UseResultCallback<R> = <Args extends Array<any>, R0 extends R, E, A>
3538 f : ( ...args : Args ) => Stream . Stream < R0 , E , A >
3639) => readonly [ ResultBag . ResultBag < E , A > , ( ...args : Args ) => void ]
3740
41+ /**
42+ * @since 1.0.0
43+ * @category hooks
44+ */
45+ export type UseValue < R > = < R0 extends R , A > (
46+ stream : Stream . Stream < R0 , never , A > ,
47+ initial : A ,
48+ deps : DependencyList
49+ ) => A
50+
51+ /**
52+ * @since 1.0.0
53+ * @category hooks
54+ */
55+ export type UseService < R > = < Tag extends Context . ValidTagsById < R > > ( tag : Tag ) => Context . Tag . Service < Tag >
56+
3857/**
3958 * @since 1.0.0
4059 * @category models
@@ -43,6 +62,8 @@ export interface ReactEffectBag<R> {
4362 readonly RuntimeContext : React . Context < Runtime . Runtime < R > >
4463 readonly useResultCallback : UseResultCallback < R >
4564 readonly useResult : UseResult < R >
65+ readonly useValue : UseValue < R >
66+ readonly useService : UseService < R >
4667}
4768
4869/**
@@ -65,7 +86,9 @@ export const makeFromLayer = <R, E>(
6586 return {
6687 RuntimeContext,
6788 useResultCallback : internalUseResultCallback . make ( RuntimeContext ) ,
68- useResult : internalUseResult . make ( RuntimeContext )
89+ useResult : internalUseResult . make ( RuntimeContext ) ,
90+ useValue : internalUseValue . make ( RuntimeContext ) ,
91+ useService : internalUseService . make ( RuntimeContext )
6992 }
7093}
7194
@@ -81,7 +104,9 @@ export const makeFromRuntime = <R>(
81104 return {
82105 RuntimeContext,
83106 useResultCallback : internalUseResultCallback . make ( RuntimeContext ) ,
84- useResult : internalUseResult . make ( RuntimeContext )
107+ useResult : internalUseResult . make ( RuntimeContext ) ,
108+ useValue : internalUseValue . make ( RuntimeContext ) ,
109+ useService : internalUseService . make ( RuntimeContext )
85110 }
86111}
87112
@@ -95,6 +120,8 @@ export const makeFromRuntimeContext = <R>(
95120 return {
96121 RuntimeContext,
97122 useResultCallback : internalUseResultCallback . make ( RuntimeContext ) ,
98- useResult : internalUseResult . make ( RuntimeContext )
123+ useResult : internalUseResult . make ( RuntimeContext ) ,
124+ useValue : internalUseValue . make ( RuntimeContext ) ,
125+ useService : internalUseService . make ( RuntimeContext )
99126 }
100127}
0 commit comments