aboutsummaryrefslogtreecommitdiff
path: root/packages/aml-backoffice-ui/src/utils/errors.tsx
diff options
context:
space:
mode:
authorSebastian <sebasjm@gmail.com>2023-07-20 17:01:35 -0300
committerSebastian <sebasjm@gmail.com>2023-07-20 17:01:35 -0300
commit2335c3418cfbcc8a0196f0f161bab31ade99acb2 (patch)
tree76edf53acc5810ecfe215f6f99f755833a492af8 /packages/aml-backoffice-ui/src/utils/errors.tsx
parent24d05d87ecfb880b174e90a3d585240d190eaefe (diff)
make signed request to exchange
Diffstat (limited to 'packages/aml-backoffice-ui/src/utils/errors.tsx')
-rw-r--r--packages/aml-backoffice-ui/src/utils/errors.tsx77
1 files changed, 77 insertions, 0 deletions
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");
+}