From f04f6aa1471823b87b5286abdaa5b90327d22b2a Mon Sep 17 00:00:00 2001 From: gcch Date: Sat, 25 Apr 2026 10:29:10 +0200 Subject: [PATCH] wip --- .../src/scripts-effect/lib/api.ts | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/web/app/themes/haiku-atelier-2024/src/scripts-effect/lib/api.ts b/web/app/themes/haiku-atelier-2024/src/scripts-effect/lib/api.ts index 87d1e128..b8cb8033 100644 --- a/web/app/themes/haiku-atelier-2024/src/scripts-effect/lib/api.ts +++ b/web/app/themes/haiku-atelier-2024/src/scripts-effect/lib/api.ts @@ -30,6 +30,20 @@ class APIResponseError extends Schema.TaggedErrorClass()("APIR type APIError = APIRequestError | APIResponseError; +class WooCommerceErrorBody extends Schema.Class("WooCommerceErrorBody")({ + code: Schema.String, + data: Schema.Struct({ + status: Schema.Int, + }), + message: Schema.String, +}) {} +class WooCommerceError extends Schema.Class("WooCommerceError")({ + body: WooCommerceErrorBody, + status: Schema.Number, +}) {} + +type APIResponse = T | WooCommerceError; + /** Client `fetch` contenant les options et en-têtes de Requêtes pré-renseignées. */ const APIFetchClient = FetchHttpClient.layer.pipe( Layer.provide( @@ -96,7 +110,7 @@ class APIClient extends Context.Service()("haikuatelier.fr/APIClient" }); const AddProductToCart = Effect.fn("AppClient.AddProductToCart")( - function*(nonce: string, productToAdd: CartProduct): Effect.fn.Return { + function*(nonce: string, productToAdd: CartProduct): Effect.fn.Return, APIError> { const request = pipe( HttpClientRequest.post(`/wp-json/wc/store/cart/add-item`), HttpClientRequest.setHeader("Nonce", nonce), @@ -109,6 +123,9 @@ class APIClient extends Context.Service()("haikuatelier.fr/APIClient" Effect.flatMap(HttpClientResponse.schemaBodyJson(WooCommerceCart)), Effect.mapError(error => matchAPIError(error)), Effect.tapError(error => printErrorAsSuccinctMessage(error)), + Effect.catchTag("APIResponseError", error => { + if (error.cause.) + }), ); return response;