0.1.13 #18
26
packages/example/src/QueryErrorHandler.tsx
Normal file
26
packages/example/src/QueryErrorHandler.tsx
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
import { HttpClientError } from "@effect/platform"
|
||||||
|
import { ErrorHandler } from "@reffuse/extension-query"
|
||||||
|
import { Cause, Chunk, Effect, flow, Match, Stream } from "effect"
|
||||||
|
import { R } from "./reffuse"
|
||||||
|
|
||||||
|
|
||||||
|
export class QueryErrorHandler extends ErrorHandler.Tag("QueryErrorHandler")<QueryErrorHandler,
|
||||||
|
HttpClientError.HttpClientError
|
||||||
|
>() {}
|
||||||
|
|
||||||
|
export const QueryErrorHandlerLive = ErrorHandler.layer(QueryErrorHandler)
|
||||||
|
|
||||||
|
|
||||||
|
export function VQueryErrorHandler() {
|
||||||
|
R.useFork(() => QueryErrorHandler.pipe(Effect.flatMap(handler =>
|
||||||
|
Stream.runForEach(handler.errors, flow(
|
||||||
|
Cause.failures,
|
||||||
|
Chunk.map(flow(Match.value,
|
||||||
|
Match.tag("RequestError", () => Effect.sync(() => {})),
|
||||||
|
Match.tag("ResponseError", () => Effect.sync(() => {})),
|
||||||
|
Match.exhaustive,
|
||||||
|
)),
|
||||||
|
Effect.all,
|
||||||
|
))
|
||||||
|
)), [])
|
||||||
|
}
|
||||||
@@ -6,6 +6,7 @@ import { Layer } from "effect"
|
|||||||
import { StrictMode } from "react"
|
import { StrictMode } from "react"
|
||||||
import { createRoot } from "react-dom/client"
|
import { createRoot } from "react-dom/client"
|
||||||
import { ReffuseRuntime } from "reffuse"
|
import { ReffuseRuntime } from "reffuse"
|
||||||
|
import { QueryErrorHandler, QueryErrorHandlerLive } from "./QueryErrorHandler"
|
||||||
import { GlobalContext } from "./reffuse"
|
import { GlobalContext } from "./reffuse"
|
||||||
import { routeTree } from "./routeTree.gen"
|
import { routeTree } from "./routeTree.gen"
|
||||||
|
|
||||||
@@ -15,7 +16,8 @@ const layer = Layer.empty.pipe(
|
|||||||
Layer.provideMerge(Geolocation.layer),
|
Layer.provideMerge(Geolocation.layer),
|
||||||
Layer.provideMerge(Permissions.layer),
|
Layer.provideMerge(Permissions.layer),
|
||||||
Layer.provideMerge(FetchHttpClient.layer),
|
Layer.provideMerge(FetchHttpClient.layer),
|
||||||
Layer.provideMerge(QueryClient.layer()),
|
Layer.provideMerge(QueryClient.layer({ ErrorHandler: QueryErrorHandler })),
|
||||||
|
Layer.provideMerge(QueryErrorHandlerLive),
|
||||||
)
|
)
|
||||||
|
|
||||||
const router = createRouter({ routeTree })
|
const router = createRouter({ routeTree })
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
import { HttpClientError } from "@effect/platform"
|
|
||||||
import { QueryService } from "@reffuse/extension-query"
|
import { QueryService } from "@reffuse/extension-query"
|
||||||
import { ParseResult, Schema } from "effect"
|
import { ParseResult, Schema } from "effect"
|
||||||
|
|
||||||
@@ -8,5 +7,5 @@ export const Result = Schema.Array(Schema.String)
|
|||||||
export class Uuid4Query extends QueryService.Tag("Uuid4Query")<Uuid4Query,
|
export class Uuid4Query extends QueryService.Tag("Uuid4Query")<Uuid4Query,
|
||||||
readonly ["uuid4", number],
|
readonly ["uuid4", number],
|
||||||
typeof Result.Type,
|
typeof Result.Type,
|
||||||
HttpClientError.HttpClientError | ParseResult.ParseError
|
ParseResult.ParseError
|
||||||
>() {}
|
>() {}
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
import { HttpClient } from "@effect/platform"
|
import { HttpClient, HttpClientError } from "@effect/platform"
|
||||||
import { Clipboard, Geolocation, Permissions } from "@effect/platform-browser"
|
import { Clipboard, Geolocation, Permissions } from "@effect/platform-browser"
|
||||||
import { LazyRefExtension } from "@reffuse/extension-lazyref"
|
import { LazyRefExtension } from "@reffuse/extension-lazyref"
|
||||||
import { ErrorHandler, QueryClient, QueryExtension } from "@reffuse/extension-query"
|
import { QueryClient, QueryExtension } from "@reffuse/extension-query"
|
||||||
import { Reffuse, ReffuseContext } from "reffuse"
|
import { Reffuse, ReffuseContext } from "reffuse"
|
||||||
|
import { QueryErrorHandler } from "./QueryErrorHandler"
|
||||||
|
|
||||||
|
|
||||||
export const GlobalContext = ReffuseContext.make<
|
export const GlobalContext = ReffuseContext.make<
|
||||||
@@ -10,8 +11,8 @@ export const GlobalContext = ReffuseContext.make<
|
|||||||
| Geolocation.Geolocation
|
| Geolocation.Geolocation
|
||||||
| Permissions.Permissions
|
| Permissions.Permissions
|
||||||
| HttpClient.HttpClient
|
| HttpClient.HttpClient
|
||||||
| QueryClient.QueryClient<ErrorHandler.DefaultErrorHandler, never>
|
| QueryClient.QueryClient<QueryErrorHandler, HttpClientError.HttpClientError>
|
||||||
| ErrorHandler.DefaultErrorHandler
|
| QueryErrorHandler
|
||||||
>()
|
>()
|
||||||
|
|
||||||
export class GlobalReffuse extends Reffuse.Reffuse.pipe(
|
export class GlobalReffuse extends Reffuse.Reffuse.pipe(
|
||||||
|
|||||||
Reference in New Issue
Block a user