diff options
author | Sebastian <sebasjm@gmail.com> | 2023-07-20 17:01:35 -0300 |
---|---|---|
committer | Sebastian <sebasjm@gmail.com> | 2023-07-20 17:01:35 -0300 |
commit | 2335c3418cfbcc8a0196f0f161bab31ade99acb2 (patch) | |
tree | 76edf53acc5810ecfe215f6f99f755833a492af8 /packages/aml-backoffice-ui/src/utils/errors.tsx | |
parent | 24d05d87ecfb880b174e90a3d585240d190eaefe (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.tsx | 77 |
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"); +} |