Skip to content

Commit e5e4094

Browse files
tim-smartdatner
authored andcommitted
restructure
1 parent 1799a4e commit e5e4094

File tree

14 files changed

+433
-404
lines changed

14 files changed

+433
-404
lines changed

src/FiberStore.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import type * as Runtime from "@effect/io/Runtime"
2+
import type * as Stream from "@effect/stream/Stream"
3+
import * as internal from "effect-react/internal/fiberStore"
4+
import type * as ResultBag from "effect-react/ResultBag"
5+
6+
/**
7+
* @since 1.0.0
8+
* @category models
9+
*/
10+
export interface FiberStore<R, E, A> {
11+
readonly snapshot: () => ResultBag.ResultBag<E, A>
12+
readonly run: (stream: Stream.Stream<R, E, A>) => void
13+
readonly subscribe: (listener: () => void) => () => void
14+
readonly interruptIfRunning: () => void
15+
}
16+
17+
/**
18+
* @since 1.0.0
19+
* @category constructors
20+
*/
21+
export const make: <R, E, A>(runtime: Runtime.Runtime<R>) => FiberStore<R, E, A> = internal.make

src/ResultBag.ts

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import type * as Option from "@effect/data/Option"
2+
import type * as Cause from "@effect/io/Cause"
3+
import * as internal from "effect-react/internal/resultBag"
4+
import type * as Result from "effect-react/Result"
5+
import type * as TrackedProperties from "effect-react/TrackedProperties"
6+
7+
/**
8+
* @since 1.0.0
9+
* @category models
10+
*/
11+
export interface ResultBag<E, A> {
12+
readonly result: Result.Result<E, A>
13+
readonly dataUpdatedAt: Option.Option<Date>
14+
readonly errorUpdatedAt: Option.Option<Date>
15+
readonly errorRunningCount: number
16+
readonly failureCount: number
17+
readonly failureCause: Cause.Cause<E>
18+
readonly isError: boolean
19+
readonly isRefreshing: boolean
20+
readonly isRetrying: boolean
21+
readonly isLoading: boolean
22+
readonly isLoadingFailure: boolean
23+
readonly isRefreshingFailure: boolean
24+
readonly isSuccess: boolean
25+
// readonly isFetched: boolean;
26+
// readonly isFetchedAfterMount: boolean;
27+
// readonly isInitialLoading: boolean;
28+
// readonly isPreviousData: boolean;
29+
}
30+
31+
/**
32+
* @since 1.0.0
33+
* @category constructors
34+
*/
35+
export const make: <E, A>(
36+
result: Result.Result<E, A>,
37+
tracked: TrackedProperties.TrackedProperties
38+
) => ResultBag<E, A> = internal.make

src/RuntimeProvider.ts

Lines changed: 50 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,54 @@
11
"use client"
2+
import type { LazyArg } from "@effect/data/Function"
23
import { pipe } from "@effect/data/Function"
34
import * as Effect from "@effect/io/Effect"
45
import * as Layer from "@effect/io/Layer"
56
import type * as Runtime from "@effect/io/Runtime"
67
import * as Scope from "@effect/io/Scope"
7-
import type { UseResult } from "effect-react/hooks/useResult"
8-
import { makeUseResult } from "effect-react/hooks/useResult"
9-
import type { UseResultCallback } from "effect-react/hooks/useResultCallback"
10-
import { makeUseResultCallback } from "effect-react/hooks/useResultCallback"
8+
import type * as Stream from "@effect/stream/Stream"
9+
import * as internalUseResult from "effect-react/internal/hooks/useResult"
10+
import * as internalUseResultCallback from "effect-react/internal/hooks/useResultCallback"
11+
import type * as ResultBag from "effect-react/ResultBag"
12+
import type { DependencyList } from "react"
1113
import { createContext } from "react"
1214

13-
export { RuntimeContext } from "effect-react/internal/runtimeContext"
15+
/**
16+
* @since 1.0.0
17+
* @category models
18+
*/
19+
export type RuntimeContext<R> = React.Context<Runtime.Runtime<R>>
1420

21+
/**
22+
* @since 1.0.0
23+
* @category hooks
24+
*/
25+
export type UseResult<R> = <R0 extends R, E, A>(
26+
evaluate: LazyArg<Stream.Stream<R0, E, A>>,
27+
deps: DependencyList
28+
) => ResultBag.ResultBag<E, A>
29+
30+
/**
31+
* @since 1.0.0
32+
* @category hooks
33+
*/
34+
export type UseResultCallback<R> = <Args extends Array<any>, R0 extends R, E, A>(
35+
f: (...args: Args) => Stream.Stream<R0, E, A>
36+
) => readonly [ResultBag.ResultBag<E, A>, (...args: Args) => void]
37+
38+
/**
39+
* @since 1.0.0
40+
* @category models
41+
*/
1542
export interface ReactEffectBag<R> {
1643
readonly RuntimeContext: React.Context<Runtime.Runtime<R>>
1744
readonly useResultCallback: UseResultCallback<R>
1845
readonly useResult: UseResult<R>
1946
}
2047

48+
/**
49+
* @since 1.0.0
50+
* @category constructors
51+
*/
2152
export const makeFromLayer = <R, E>(
2253
layer: Layer.Layer<never, E, R>
2354
): ReactEffectBag<R> => {
@@ -33,29 +64,37 @@ export const makeFromLayer = <R, E>(
3364

3465
return {
3566
RuntimeContext,
36-
useResultCallback: makeUseResultCallback(RuntimeContext),
37-
useResult: makeUseResult(RuntimeContext)
67+
useResultCallback: internalUseResultCallback.make(RuntimeContext),
68+
useResult: internalUseResult.make(RuntimeContext)
3869
}
3970
}
4071

72+
/**
73+
* @since 1.0.0
74+
* @category constructors
75+
*/
4176
export const makeFromRuntime = <R>(
4277
runtime: Runtime.Runtime<R>
4378
): ReactEffectBag<R> => {
4479
const RuntimeContext = createContext(runtime)
4580

4681
return {
4782
RuntimeContext,
48-
useResultCallback: makeUseResultCallback(RuntimeContext),
49-
useResult: makeUseResult(RuntimeContext)
83+
useResultCallback: internalUseResultCallback.make(RuntimeContext),
84+
useResult: internalUseResult.make(RuntimeContext)
5085
}
5186
}
5287

88+
/**
89+
* @since 1.0.0
90+
* @category constructors
91+
*/
5392
export const makeFromRuntimeContext = <R>(
5493
RuntimeContext: React.Context<Runtime.Runtime<R>>
5594
): ReactEffectBag<R> => {
5695
return {
5796
RuntimeContext,
58-
useResultCallback: makeUseResultCallback(RuntimeContext),
59-
useResult: makeUseResult(RuntimeContext)
97+
useResultCallback: internalUseResultCallback.make(RuntimeContext),
98+
useResult: internalUseResult.make(RuntimeContext)
6099
}
61100
}

src/TrackedProperties.ts

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import type * as Option from "@effect/data/Option"
2+
import type * as Cause from "@effect/io/Cause"
3+
import * as internal from "effect-react/internal/trackedProperties"
4+
import type * as Result from "effect-react/Result"
5+
6+
/**
7+
* @since 1.0.0
8+
* @category models
9+
*/
10+
export interface TrackedProperties {
11+
dataUpdatedAt: Option.Option<Date>
12+
errorUpdatedAt: Option.Option<Date>
13+
currentErrorCount: number
14+
currentFailureCount: number
15+
currentDefectCount: number
16+
runningErrorCount: number
17+
invocationCount: number
18+
interruptCount: number
19+
currentStatus: Result.Result<any, any>["_tag"]
20+
failureCause: Cause.Cause<unknown>
21+
}
22+
23+
/**
24+
* @since 1.0.0
25+
* @category constructors
26+
*/
27+
export const initial: () => TrackedProperties = internal.initial
28+
29+
/**
30+
* @since 1.0.0
31+
* @category combinators
32+
*/
33+
export const updateFromResult: <E, A>(self: TrackedProperties, result: Result.Result<E, A>) => void =
34+
internal.updateFromResult

src/hooks/useResult.ts

Lines changed: 0 additions & 67 deletions
This file was deleted.

0 commit comments

Comments
 (0)