diff options
author | Nic Eigel <nic@eigel.ch> | 2024-06-24 01:50:38 +0200 |
---|---|---|
committer | Nic Eigel <nic@eigel.ch> | 2024-06-24 01:50:38 +0200 |
commit | 0b90a34e7c7c5d9bcca9a2ebe74df9fdfafc6577 (patch) | |
tree | 6a1818c24f8fcad09d1756d96e171d32a1f9c0f7 /packages/auditor-backoffice-ui/src/components | |
parent | bf94287904c08f2c62acbb5b52c2cc0d1fcb964b (diff) | |
download | wallet-core-0b90a34e7c7c5d9bcca9a2ebe74df9fdfafc6577.tar.xz |
real-time-auditor
Diffstat (limited to 'packages/auditor-backoffice-ui/src/components')
13 files changed, 67 insertions, 348 deletions
diff --git a/packages/auditor-backoffice-ui/src/components/exception/loading.tsx b/packages/auditor-backoffice-ui/src/components/exception/loading.tsx index 5c249f79d..11b62c124 100644 --- a/packages/auditor-backoffice-ui/src/components/exception/loading.tsx +++ b/packages/auditor-backoffice-ui/src/components/exception/loading.tsx @@ -22,27 +22,27 @@ 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> - ); + 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> - ); + return ( + <div class="lds-ring"> + <div /> + <div /> + <div /> + <div /> + </div> + ); } diff --git a/packages/auditor-backoffice-ui/src/components/form/JumpToElementById.tsx b/packages/auditor-backoffice-ui/src/components/form/JumpToElementById.tsx deleted file mode 100644 index a0e1d6ae4..000000000 --- a/packages/auditor-backoffice-ui/src/components/form/JumpToElementById.tsx +++ /dev/null @@ -1,59 +0,0 @@ -import { TranslatedString } from "@gnu-taler/taler-util"; -import { useTranslationContext } from "@gnu-taler/web-util/browser"; -import { h, VNode } from "preact"; -import { useState } from "preact/hooks"; - -export function JumpToElementById({ testIfExist, onSelect, placeholder, description }: { placeholder: TranslatedString, description: TranslatedString, testIfExist: (id: string) => Promise<any>, onSelect: (id: string) => void }): VNode { - const { i18n } = useTranslationContext() - - const [error, setError] = useState<string | undefined>( - undefined, - ); - - const [id, setId] = useState<string>() - async function check(currentId: string | undefined): Promise<void> { - if (!currentId) { - setError(i18n.str`missing id`); - return; - } - try { - await testIfExist(currentId); - onSelect(currentId); - setError(undefined); - } catch { - setError(i18n.str`not found`); - } - } - - return <div class="level"> - <div class="level-left"> - <div class="level-item"> - <div class="field has-addons"> - <div class="control"> - <input - class={error ? "input is-danger" : "input"} - type="text" - value={id ?? ""} - onChange={(e) => setId(e.currentTarget.value)} - placeholder={placeholder} - /> - {error && <p class="help is-danger">{error}</p>} - </div> - <span - class="has-tooltip-bottom" - data-tooltip={description} - > - <button - class="button" - onClick={(e) => check(id)} - > - <span class="icon"> - <i class="mdi mdi-arrow-right" /> - </span> - </button> - </span> - </div> - </div> - </div> - </div> -} diff --git a/packages/auditor-backoffice-ui/src/components/form/useGroupField.tsx b/packages/auditor-backoffice-ui/src/components/form/useGroupField.tsx deleted file mode 100644 index 4fbfc4a75..000000000 --- a/packages/auditor-backoffice-ui/src/components/form/useGroupField.tsx +++ /dev/null @@ -1,41 +0,0 @@ -/* - This file is part of GNU Taler - (C) 2021-2024 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/> - */ - -/** - * - * @author Sebastian Javier Marchano (sebasjm) - */ - -import { useFormContext } from "./FormProvider.js"; - -interface Use { - hasError?: boolean; -} - -export function useGroupField<T>(name: keyof T): Use { - const f = useFormContext<T>(); - if (!f) return {}; - - return { - hasError: readField(f.errors, String(name)), - }; -} - -const readField = (object: any, name: string) => { - return name - .split(".") - .reduce((prev, current) => prev && prev[current], object); -}; diff --git a/packages/auditor-backoffice-ui/src/components/form/FormProvider.tsx b/packages/auditor-backoffice-ui/src/components/forms/FormProvider.tsx index a5f3c1d2f..a5f3c1d2f 100644 --- a/packages/auditor-backoffice-ui/src/components/form/FormProvider.tsx +++ b/packages/auditor-backoffice-ui/src/components/forms/FormProvider.tsx diff --git a/packages/auditor-backoffice-ui/src/components/form/Input.tsx b/packages/auditor-backoffice-ui/src/components/forms/Input.tsx index 899061c35..899061c35 100644 --- a/packages/auditor-backoffice-ui/src/components/form/Input.tsx +++ b/packages/auditor-backoffice-ui/src/components/forms/Input.tsx diff --git a/packages/auditor-backoffice-ui/src/components/form/InputCurrency.tsx b/packages/auditor-backoffice-ui/src/components/forms/InputCurrency.tsx index c1359e641..c1359e641 100644 --- a/packages/auditor-backoffice-ui/src/components/form/InputCurrency.tsx +++ b/packages/auditor-backoffice-ui/src/components/forms/InputCurrency.tsx diff --git a/packages/auditor-backoffice-ui/src/components/form/InputNumber.tsx b/packages/auditor-backoffice-ui/src/components/forms/InputNumber.tsx index 10b28cd93..10b28cd93 100644 --- a/packages/auditor-backoffice-ui/src/components/form/InputNumber.tsx +++ b/packages/auditor-backoffice-ui/src/components/forms/InputNumber.tsx diff --git a/packages/auditor-backoffice-ui/src/components/form/InputSelector.tsx b/packages/auditor-backoffice-ui/src/components/forms/InputSelector.tsx index f567f7247..f567f7247 100644 --- a/packages/auditor-backoffice-ui/src/components/form/InputSelector.tsx +++ b/packages/auditor-backoffice-ui/src/components/forms/InputSelector.tsx diff --git a/packages/auditor-backoffice-ui/src/components/form/InputToggle.tsx b/packages/auditor-backoffice-ui/src/components/forms/InputToggle.tsx index 89b815b4b..89b815b4b 100644 --- a/packages/auditor-backoffice-ui/src/components/form/InputToggle.tsx +++ b/packages/auditor-backoffice-ui/src/components/forms/InputToggle.tsx diff --git a/packages/auditor-backoffice-ui/src/components/form/InputWithAddon.tsx b/packages/auditor-backoffice-ui/src/components/forms/InputWithAddon.tsx index b8cd4c2d2..b8cd4c2d2 100644 --- a/packages/auditor-backoffice-ui/src/components/form/InputWithAddon.tsx +++ b/packages/auditor-backoffice-ui/src/components/forms/InputWithAddon.tsx diff --git a/packages/auditor-backoffice-ui/src/components/form/useField.tsx b/packages/auditor-backoffice-ui/src/components/forms/useField.tsx index 49bba4984..49bba4984 100644 --- a/packages/auditor-backoffice-ui/src/components/form/useField.tsx +++ b/packages/auditor-backoffice-ui/src/components/forms/useField.tsx diff --git a/packages/auditor-backoffice-ui/src/components/menu/SideBar.tsx b/packages/auditor-backoffice-ui/src/components/menu/SideBar.tsx index e3387d597..0b662d8de 100644 --- a/packages/auditor-backoffice-ui/src/components/menu/SideBar.tsx +++ b/packages/auditor-backoffice-ui/src/components/menu/SideBar.tsx @@ -15,57 +15,20 @@ */ /** - * - * @author Sebastian Javier Marchano (sebasjm) + * @author Nic Eigel */ import { useTranslationContext } from "@gnu-taler/web-util/browser"; import { Fragment, h, VNode } from "preact"; -import { useBackendContext } from "../../context/backend.js"; import { useConfigContext } from "../../context/config.js"; -import { useInstanceKYCDetails } from "../../hooks/instance.js"; -import { LangSelector } from "./LangSelector.js"; -const GIT_HASH = typeof __GIT_HASH__ !== "undefined" ? __GIT_HASH__ : undefined; -const VERSION = typeof __VERSION__ !== "undefined" ? __VERSION__ : undefined; - -interface Props { - onLogout: () => void; - onShowSettings: () => void; - mobile?: boolean; - instance: string; - admin?: boolean; - mimic?: boolean; - isPasswordOk: boolean; -} - -export function Sidebar({ - mobile, - instance, - onShowSettings, - onLogout, - admin, - mimic, - isPasswordOk -}: Props): VNode { - const config = useConfigContext(); - const { url: backendURL } = useBackendContext() +export function Sidebar(props: any): VNode { + const configData = useConfigContext(); const { i18n } = useTranslationContext(); - const kycStatus = useInstanceKYCDetails(); - const needKYC = kycStatus.ok && kycStatus.data.type === "redirect"; + console.log(configData); return ( <aside class="aside is-placed-left is-expanded" style={{ overflowY: "scroll" }}> - {mobile && ( - <div - class="footer" - onClick={(e) => { - return e.stopImmediatePropagation(); - }} - > - <LangSelector /> - </div> - )} <div class="aside-tools"> <div class="aside-tools-label"> <div> @@ -75,210 +38,66 @@ export function Sidebar({ class="is-size-7 has-text-right" style={{ lineHeight: 0, marginTop: -10 }} > - {VERSION} ({config.version}) + (Version {configData.version}) </div> </div> </div> <div class="menu is-menu-main"> - {instance ? ( - <Fragment> - <ul class="menu-list"> - <li> - <a href={"/orders"} class="has-icon"> - <span class="icon"> - <i class="mdi mdi-cash-register" /> - </span> - <span class="menu-item-label"> - <i18n.Translate>Orders</i18n.Translate> - </span> - </a> - </li> - <li> - <a href={"/inventory"} class="has-icon"> - <span class="icon"> - <i class="mdi mdi-shopping" /> - </span> - <span class="menu-item-label"> - <i18n.Translate>Inventory</i18n.Translate> - </span> - </a> - </li> - <li> - <a href={"/transfers"} class="has-icon"> - <span class="icon"> - <i class="mdi mdi-arrow-left-right" /> - </span> - <span class="menu-item-label"> - <i18n.Translate>Transfers</i18n.Translate> - </span> - </a> - </li> - <li> - <a href={"/templates"} class="has-icon"> - <span class="icon"> - <i class="mdi mdi-newspaper" /> - </span> - <span class="menu-item-label"> - <i18n.Translate>Templates</i18n.Translate> - </span> - </a> - </li> - {needKYC && ( - <li> - <a href={"/kyc"} class="has-icon"> - <span class="icon"> - <i class="mdi mdi-account-check" /> - </span> - <span class="menu-item-label">KYC Status</span> - </a> - </li> - )} - </ul> - <p class="menu-label"> - <i18n.Translate>Configuration</i18n.Translate> - </p> - <ul class="menu-list"> - <li> - <a href={"/bank"} class="has-icon"> + <Fragment> + <ul class="menu-list"> + <li> + <a href={"/key-figures"} class="has-icon"> <span class="icon"> <i class="mdi mdi-bank" /> </span> - <span class="menu-item-label"> - <i18n.Translate>Bank account</i18n.Translate> + <span class="menu-item-label"> + <i18n.Translate>Key figures</i18n.Translate> </span> - </a> - </li> - <li> - <a href={"/otp-devices"} class="has-icon"> + </a> + </li> + <li> + <a href={"/critical-errors"} class="has-icon"> <span class="icon"> - <i class="mdi mdi-lock" /> + <i class="mdi mdi-alert" /> </span> - <span class="menu-item-label"> - <i18n.Translate>OTP Devices</i18n.Translate> + <span class="menu-item-label"> + <i18n.Translate>Critical errors</i18n.Translate> </span> - </a> - </li> - <li> - <a href={"/reserves"} class="has-icon"> + </a> + </li> + <li> + <a href={"/operating-status"} class="has-icon"> <span class="icon"> - <i class="mdi mdi-cash" /> + <i class="mdi mdi-close-network" /> + </span> + <span class="menu-item-label"> + <i18n.Translate>Operating status</i18n.Translate> </span> - <span class="menu-item-label">Reserves</span> - </a> - </li> - <li> - <a href={"/webhooks"} class="has-icon"> + </a> + </li> + <li> + <a href={"/detail-view"} class="has-icon"> <span class="icon"> - <i class="mdi mdi-newspaper" /> + <i class="mdi mdi-format-wrap-tight" /> </span> - <span class="menu-item-label"> - <i18n.Translate>Webhooks</i18n.Translate> + <span class="menu-item-label"> + <i18n.Translate>Inconsistencies</i18n.Translate> </span> - </a> - </li> - <li> - <a href={"/settings"} class="has-icon"> + </a> + </li> + <li> + <a href={"/settings"} class="has-icon"> <span class="icon"> <i class="mdi mdi-square-edit-outline" /> </span> - <span class="menu-item-label"> + <span class="menu-item-label"> <i18n.Translate>Settings</i18n.Translate> </span> - </a> - </li> - <li> - <a href={"/token"} class="has-icon"> - <span class="icon"> - <i class="mdi mdi-security" /> - </span> - <span class="menu-item-label"> - <i18n.Translate>Access token</i18n.Translate> - </span> - </a> - </li> - </ul> - </Fragment> - ) : undefined} - <p class="menu-label"> - <i18n.Translate>Connection</i18n.Translate> - </p> - <ul class="menu-list"> - <li> - <a class="has-icon is-state-info is-hoverable" - onClick={(): void => onShowSettings()} - > - <span class="icon"> - <i class="mdi mdi-newspaper" /> - </span> - <span class="menu-item-label"> - <i18n.Translate>Interface</i18n.Translate> - </span> - </a> - </li> - <li> - <div> - <span style={{ width: "3rem" }} class="icon"> - <i class="mdi mdi-web" /> - </span> - <span class="menu-item-label"> - {new URL(backendURL).hostname} - </span> - </div> - </li> - <li> - <div> - <span style={{ width: "3rem" }} class="icon"> - ID - </span> - <span class="menu-item-label"> - {!instance ? "default" : instance} - </span> - </div> - </li> - {admin && !mimic && ( - <Fragment> - <p class="menu-label"> - <i18n.Translate>Instances</i18n.Translate> - </p> - <li> - <a href={"/instance/new"} class="has-icon"> - <span class="icon"> - <i class="mdi mdi-plus" /> - </span> - <span class="menu-item-label"> - <i18n.Translate>New</i18n.Translate> - </span> - </a> - </li> - <li> - <a href={"/instances"} class="has-icon"> - <span class="icon"> - <i class="mdi mdi-format-list-bulleted" /> - </span> - <span class="menu-item-label"> - <i18n.Translate>List</i18n.Translate> - </span> - </a> - </li> - </Fragment> - )} - {isPasswordOk ? - <li> - <a - class="has-icon is-state-info is-hoverable" - onClick={(): void => onLogout()} - > - <span class="icon"> - <i class="mdi mdi-logout default" /> - </span> - <span class="menu-item-label"> - <i18n.Translate>Log out</i18n.Translate> - </span> </a> - </li> : undefined - } - </ul> + </li> + </ul> + </Fragment> </div> </aside> ); -} +}
\ No newline at end of file diff --git a/packages/auditor-backoffice-ui/src/components/modal/index.tsx b/packages/auditor-backoffice-ui/src/components/modal/index.tsx index c684ba7a3..ab2834d86 100644 --- a/packages/auditor-backoffice-ui/src/components/modal/index.tsx +++ b/packages/auditor-backoffice-ui/src/components/modal/index.tsx @@ -22,11 +22,11 @@ import { useTranslationContext } from "@gnu-taler/web-util/browser"; import { ComponentChildren, Fragment, h, VNode } from "preact"; import { useState } from "preact/hooks"; -import { useInstanceContext } from "../../context/instance.js"; +import { useEntityContext } from "../../context/entity.js"; import { DEFAULT_REQUEST_TIMEOUT } from "../../utils/constants.js"; import { Spinner } from "../exception/loading.js"; -import { FormProvider } from "../form/FormProvider.js"; -import { Input } from "../form/Input.js"; +import { FormProvider } from "../forms/FormProvider.js"; +import { Input } from "../forms/Input.js"; interface Props { active?: boolean; @@ -310,9 +310,9 @@ export function UpdateTokenModal({ (k) => (errors as any)[k] !== undefined, ); - const instance = useInstanceContext(); + const instance = useEntityContext(); - const text = i18n.str`You are updating the access token from instance with id ${instance.id}`; + const text = i18n.str`You are updating the access token from instance with id `; return ( <ClearConfirmModal |