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 | |
parent | 24d05d87ecfb880b174e90a3d585240d190eaefe (diff) |
make signed request to exchange
Diffstat (limited to 'packages/aml-backoffice-ui/src/utils')
-rw-r--r-- | packages/aml-backoffice-ui/src/utils/Loading.tsx | 43 | ||||
-rw-r--r-- | packages/aml-backoffice-ui/src/utils/QR.tsx | 54 | ||||
-rw-r--r-- | packages/aml-backoffice-ui/src/utils/errors.tsx | 77 |
3 files changed, 174 insertions, 0 deletions
diff --git a/packages/aml-backoffice-ui/src/utils/Loading.tsx b/packages/aml-backoffice-ui/src/utils/Loading.tsx new file mode 100644 index 000000000..7cbdad681 --- /dev/null +++ b/packages/aml-backoffice-ui/src/utils/Loading.tsx @@ -0,0 +1,43 @@ +/* + This file is part of GNU Taler + (C) 2022 Taler Systems S.A. + + GNU Taler is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/> + */ + +import { h, VNode } from "preact"; + +export function Loading(): VNode { + return ( + <div + class="columns is-centered is-vcentered" + style={{ + height: "calc(100% - 3rem)", + position: "absolute", + width: "100%", + }} + > + <Spinner /> + </div> + ); +} + +export function Spinner(): VNode { + return ( + <div class="lds-ring"> + <div /> + <div /> + <div /> + <div /> + </div> + ); +} diff --git a/packages/aml-backoffice-ui/src/utils/QR.tsx b/packages/aml-backoffice-ui/src/utils/QR.tsx new file mode 100644 index 000000000..1dc1712b7 --- /dev/null +++ b/packages/aml-backoffice-ui/src/utils/QR.tsx @@ -0,0 +1,54 @@ +/* + This file is part of GNU Taler + (C) 2022 Taler Systems S.A. + + GNU Taler is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/> + */ + +import { h, VNode } from "preact"; +import { useEffect, useRef } from "preact/hooks"; +// import qrcode from "qrcode-generator"; + +export function QR({ text }: { text: string }): VNode { + const divRef = useRef<HTMLDivElement>(null); + useEffect(() => { + // const qr = qrcode(0, "L"); + // qr.addData(text); + // qr.make(); + // if (divRef.current) + // divRef.current.innerHTML = qr.createSvgTag({ + // scalable: true, + // }); + }); + + return ( + <div + style={{ + width: "100%", + display: "flex", + flexDirection: "column", + alignItems: "left", + }} + > + <div + style={{ + width: "50%", + minWidth: 200, + maxWidth: 300, + marginRight: "auto", + marginLeft: "auto", + }} + ref={divRef} + /> + </div> + ); +} 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"); +} |