From 2335c3418cfbcc8a0196f0f161bab31ade99acb2 Mon Sep 17 00:00:00 2001
From: Sebastian <sebasjm@gmail.com>
Date: Thu, 20 Jul 2023 17:01:35 -0300
Subject: make signed request to exchange

---
 packages/aml-backoffice-ui/src/utils/errors.tsx | 77 +++++++++++++++++++++++++
 1 file changed, 77 insertions(+)
 create mode 100644 packages/aml-backoffice-ui/src/utils/errors.tsx

(limited to 'packages/aml-backoffice-ui/src/utils/errors.tsx')

diff --git a/packages/aml-backoffice-ui/src/utils/errors.tsx b/packages/aml-backoffice-ui/src/utils/errors.tsx
new file mode 100644
index 000000000..b67d61a5f
--- /dev/null
+++ b/packages/aml-backoffice-ui/src/utils/errors.tsx
@@ -0,0 +1,77 @@
+import {
+  ErrorType,
+  HttpResponse,
+  HttpResponsePaginated,
+  notifyError,
+  useTranslationContext,
+} from "@gnu-taler/web-util/browser";
+import { VNode, h } from "preact";
+import { Loading } from "./Loading.js";
+import { HttpStatusCode, TranslatedString } from "@gnu-taler/taler-util";
+import { AmlExchangeBackend } from "../types.js";
+
+export function handleNotOkResult<Error extends AmlExchangeBackend.AmlError>(
+  i18n: ReturnType<typeof useTranslationContext>["i18n"],
+): <T>(
+  result: HttpResponsePaginated<T, Error> | HttpResponse<T, Error>,
+) => VNode {
+  return function handleNotOkResult2<T>(
+    result: HttpResponsePaginated<T, Error> | HttpResponse<T, Error>,
+  ): VNode {
+    if (result.loading) return <Loading />;
+    if (!result.ok) {
+      switch (result.type) {
+        case ErrorType.TIMEOUT: {
+          notifyError(i18n.str`Request timeout, try again later.`, undefined);
+          break;
+        }
+        case ErrorType.CLIENT: {
+          if (result.status === HttpStatusCode.Unauthorized) {
+            notifyError(i18n.str`Wrong credentials`, undefined);
+            return <div> not authorized</div>;
+          }
+          const errorData = result.payload;
+          notifyError(
+            i18n.str`Could not load due to a client error`,
+            errorData.hint as TranslatedString,
+            JSON.stringify(result),
+          );
+          break;
+        }
+        case ErrorType.SERVER: {
+          notifyError(
+            i18n.str`Server returned with error`,
+            result.payload.hint as TranslatedString,
+            JSON.stringify(result.payload),
+          );
+          break;
+        }
+        case ErrorType.UNREADABLE: {
+          notifyError(
+            i18n.str`Unexpected error.`,
+            `Response from ${result.info?.url} is unreadable, http status: ${result.status}` as TranslatedString,
+            JSON.stringify(result),
+          );
+          break;
+        }
+        case ErrorType.UNEXPECTED: {
+          notifyError(
+            i18n.str`Unexpected error.`,
+            `Diagnostic from ${result.info?.url} is "${result.message}"` as TranslatedString,
+            JSON.stringify(result),
+          );
+          break;
+        }
+        default: {
+          assertUnreachable(result);
+        }
+      }
+
+      return <div>error</div>;
+    }
+    return <div />;
+  };
+}
+export function assertUnreachable(x: never): never {
+  throw new Error("Didn't expect to get here");
+}
-- 
cgit v1.2.3

