diff options
author | Florian Dold <florian@dold.me> | 2024-08-27 02:03:13 +0200 |
---|---|---|
committer | Florian Dold <florian@dold.me> | 2024-08-27 02:03:13 +0200 |
commit | f5dd32d1cfc1f363ba0f68b1c7dad29610253edd (patch) | |
tree | ee4493aaca67a0bd2a0538acd7115eaca42ee4ef /packages | |
parent | c5b383417d887d3918ead8f612ad051da57faee9 (diff) |
formatting
Diffstat (limited to 'packages')
-rw-r--r-- | packages/auditor-backoffice-ui/src/components/menu/index.tsx | 374 | ||||
-rw-r--r-- | packages/auditor-backoffice-ui/src/paths/login/index.tsx | 213 |
2 files changed, 292 insertions, 295 deletions
diff --git a/packages/auditor-backoffice-ui/src/components/menu/index.tsx b/packages/auditor-backoffice-ui/src/components/menu/index.tsx index e411939c7..214b6bd3b 100644 --- a/packages/auditor-backoffice-ui/src/components/menu/index.tsx +++ b/packages/auditor-backoffice-ui/src/components/menu/index.tsx @@ -22,221 +22,219 @@ GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/> * @author Nic Eigel */ -import {ComponentChildren, Fragment, h, VNode} from "preact"; -import {useEffect, useState} from "preact/hooks"; -import {Paths} from "../../InstanceRoutes.js"; -import {Notification} from "../../utils/types.js"; -import {NavigationBar} from "./NavigationBar.js"; -import {Sidebar} from "./SideBar.js"; +import { ComponentChildren, Fragment, h, VNode } from "preact"; +import { useEffect, useState } from "preact/hooks"; +import { Paths } from "../../InstanceRoutes.js"; +import { Notification } from "../../utils/types.js"; +import { NavigationBar } from "./NavigationBar.js"; +import { Sidebar } from "./SideBar.js"; function getInstanceTitle(path: string): string { - switch (path) { - case Paths.key_figures: - return 'Key figures'; - case Paths.critical_errors: - return 'Critical errors'; - case Paths.operating_status: - return 'Operating status'; - case Paths.detail_view: - return 'Inconsistencies'; - case Paths.amount_arithmethic_inconsistency_list: - return `Amount arithmetic inconsistencies`; - case Paths.bad_sig_losses_list: - return `Bad sig losses`; - case Paths.balance_list: - return `Balances`; - case Paths.closure_lag_list: - return `Closure Lags`; - case Paths.coin_inconsistency_list: - return `Coin inconsistencies`; - case Paths.denomination_key_validity_withdraw_inconsistency_list: - return `Denomination key validity withdraw inconsistency`; - case Paths.denomination_pending_list: - return `Denominations pending`; - case Paths.denomination_without_sig_list: - return `Denominations without sigs`; - case Paths.deposit_confirmation_list: - return `Deposit confirmations`; - case Paths.deposit_confirmation_update: - return `Update deposit confirmation`; - case Paths.emergency_list: - return `Emergencies`; - case Paths.emergency_by_count_list: - return `Emergencies by count`; - case Paths.exchange_signkey_list: - return `Exchange signkeys`; - case Paths.fee_time_inconsistency_list: - return `Fee time inconsistencies`; - case Paths.historic_denomination_revenue_list: - return `Historic denomination revenue`; - case Paths.misattribution_in_inconsistency_list: - return `Misattribution in inconsistencies`; - case Paths.progress_list: - return `Progress`; - case Paths.purse_not_closed_inconsistency_list: - return `Purse not closed inconsistencies`; - case Paths.purse_list: - return `Purses`; - case Paths.refresh_hanging_list: - return `Refreshes hanging`; - case Paths.reserve_balance_insufficient_inconsistency_list: - return `Reserve balance insufficient inconsistencies`; - case Paths.reserve_balance_summary_wrong_inconsistency_list: - return `Reserve balance summary wrong inconsistencies`; - case Paths.reserve_in_inconsistency_list: - return `Reserves in inconsistencies`; - case Paths.reserve_not_closed_inconsistency_list: - return `Reserves not closed inconsistencies`; - case Paths.row_inconsistency_list: - return `Row inconsistencies`; - case Paths.row_minor_inconsistency_list: - return `Row minor inconsistencies`; - case Paths.wire_format_inconsistency_list: - return `Wire format inconsistencies`; - case Paths.wire_out_inconsistency_list: - return `Wire out inconsistencies`; - case Paths.settings: - return `Settings`; - default: - return ""; - } + switch (path) { + case Paths.key_figures: + return "Key figures"; + case Paths.critical_errors: + return "Critical errors"; + case Paths.operating_status: + return "Operating status"; + case Paths.detail_view: + return "Inconsistencies"; + case Paths.amount_arithmethic_inconsistency_list: + return `Amount arithmetic inconsistencies`; + case Paths.bad_sig_losses_list: + return `Bad sig losses`; + case Paths.balance_list: + return `Balances`; + case Paths.closure_lag_list: + return `Closure Lags`; + case Paths.coin_inconsistency_list: + return `Coin inconsistencies`; + case Paths.denomination_key_validity_withdraw_inconsistency_list: + return `Denomination key validity withdraw inconsistency`; + case Paths.denomination_pending_list: + return `Denominations pending`; + case Paths.denomination_without_sig_list: + return `Denominations without sigs`; + case Paths.deposit_confirmation_list: + return `Deposit confirmations`; + case Paths.deposit_confirmation_update: + return `Update deposit confirmation`; + case Paths.emergency_list: + return `Emergencies`; + case Paths.emergency_by_count_list: + return `Emergencies by count`; + case Paths.exchange_signkey_list: + return `Exchange signkeys`; + case Paths.fee_time_inconsistency_list: + return `Fee time inconsistencies`; + case Paths.historic_denomination_revenue_list: + return `Historic denomination revenue`; + case Paths.misattribution_in_inconsistency_list: + return `Misattribution in inconsistencies`; + case Paths.progress_list: + return `Progress`; + case Paths.purse_not_closed_inconsistency_list: + return `Purse not closed inconsistencies`; + case Paths.purse_list: + return `Purses`; + case Paths.refresh_hanging_list: + return `Refreshes hanging`; + case Paths.reserve_balance_insufficient_inconsistency_list: + return `Reserve balance insufficient inconsistencies`; + case Paths.reserve_balance_summary_wrong_inconsistency_list: + return `Reserve balance summary wrong inconsistencies`; + case Paths.reserve_in_inconsistency_list: + return `Reserves in inconsistencies`; + case Paths.reserve_not_closed_inconsistency_list: + return `Reserves not closed inconsistencies`; + case Paths.row_inconsistency_list: + return `Row inconsistencies`; + case Paths.row_minor_inconsistency_list: + return `Row minor inconsistencies`; + case Paths.wire_format_inconsistency_list: + return `Wire format inconsistencies`; + case Paths.wire_out_inconsistency_list: + return `Wire out inconsistencies`; + case Paths.settings: + return `Settings`; + default: + return ""; + } } interface MenuProps { - title?: string; - path: string; - onShowSettings: () => void; + title?: string; + path: string; + onShowSettings: () => void; } function WithTitle({ - title, - children, - }: { - title: string; - children: ComponentChildren; + title, + children, +}: { + title: string; + children: ComponentChildren; }): VNode { - useEffect(() => { - document.title = `Taler Backoffice: ${title}`; - }, [title]); - return <Fragment>{children}</Fragment>; + useEffect(() => { + document.title = `Taler Backoffice: ${title}`; + }, [title]); + return <Fragment>{children}</Fragment>; } -export function Menu({ - onShowSettings, - title, - path, - }: MenuProps): VNode { - const [mobileOpen, setMobileOpen] = useState(false); - const titleWithSubtitle = getInstanceTitle(path.replace("app/#", "")); - return ( - <WithTitle title={titleWithSubtitle}> - <div - class={mobileOpen ? "has-aside-mobile-expanded" : ""} - onClick={() => setMobileOpen(false)} - > - <NavigationBar - onMobileMenu={() => setMobileOpen(!mobileOpen)} - title={titleWithSubtitle} - /> - - <Sidebar - onShowSettings={onShowSettings} - mobile={mobileOpen} - /> - </div> - </WithTitle> - ); +export function Menu({ onShowSettings, title, path }: MenuProps): VNode { + const [mobileOpen, setMobileOpen] = useState(false); + const titleWithSubtitle = getInstanceTitle(path.replace("app/#", "")); + return ( + <WithTitle title={titleWithSubtitle}> + <div + class={mobileOpen ? "has-aside-mobile-expanded" : ""} + onClick={() => setMobileOpen(false)} + > + <NavigationBar + onMobileMenu={() => setMobileOpen(!mobileOpen)} + title={titleWithSubtitle} + /> + + <Sidebar onShowSettings={onShowSettings} mobile={mobileOpen} /> + </div> + </WithTitle> + ); } interface NotYetReadyAppMenuProps { - title: string; - onShowSettings: () => void; + title: string; + onShowSettings: () => void; } interface NotifProps { - notification?: Notification; + notification?: Notification; } -export function NotificationCard({notification: n}: NotifProps): VNode | null { - if (!n) return null; - return ( - <div class="notification"> - <div class="columns is-vcentered"> - <div class="column is-12"> - <article - class={ - n.type === "ERROR" - ? "message is-danger" - : n.type === "WARN" - ? "message is-warning" - : "message is-info" - } - > - <div class="message-header"> - <p>{n.message}</p> - </div> - {n.description && ( - <div class="message-body"> - <div>{n.description}</div> - {n.details && <pre>{n.details}</pre>} - </div> - )} - </article> - </div> +export function NotificationCard({ + notification: n, +}: NotifProps): VNode | null { + if (!n) return null; + return ( + <div class="notification"> + <div class="columns is-vcentered"> + <div class="column is-12"> + <article + class={ + n.type === "ERROR" + ? "message is-danger" + : n.type === "WARN" + ? "message is-warning" + : "message is-info" + } + > + <div class="message-header"> + <p>{n.message}</p> </div> + {n.description && ( + <div class="message-body"> + <div>{n.description}</div> + {n.details && <pre>{n.details}</pre>} + </div> + )} + </article> </div> - ); + </div> + </div> + ); } interface NotConnectedAppMenuProps { - title: string; + title: string; } export function NotConnectedAppMenu({ - title, - }: NotConnectedAppMenuProps): VNode { - const [mobileOpen, setMobileOpen] = useState(false); - - useEffect(() => { - document.title = `Taler Backoffice: ${title}`; - }, [title]); - - return ( - <div - class={mobileOpen ? "has-aside-mobile-expanded" : ""} - onClick={() => setMobileOpen(false)} - > - <NavigationBar - onMobileMenu={() => setMobileOpen(!mobileOpen)} - title={title} - /> - </div> - ); + title, +}: NotConnectedAppMenuProps): VNode { + const [mobileOpen, setMobileOpen] = useState(false); + + useEffect(() => { + document.title = `Taler Backoffice: ${title}`; + }, [title]); + + return ( + <div + class={mobileOpen ? "has-aside-mobile-expanded" : ""} + onClick={() => setMobileOpen(false)} + > + <NavigationBar + onMobileMenu={() => setMobileOpen(!mobileOpen)} + title={title} + /> + </div> + ); } - export function NotYetReadyAppMenu({ - onShowSettings, - title - }: NotYetReadyAppMenuProps): VNode { - const [mobileOpen, setMobileOpen] = useState(false); - - useEffect(() => { - document.title = `Taler Backoffice: ${title}`; - }, [title]); - - return ( - <div - class={mobileOpen ? "has-aside-mobile-expanded" : ""} - onClick={() => setMobileOpen(false)} - > - <NavigationBar - onMobileMenu={() => setMobileOpen(!mobileOpen)} - title={title} - /> - ( - <Sidebar onShowSettings={onShowSettings} instance="" mobile={mobileOpen}/> - ) - </div> - ); -}
\ No newline at end of file + onShowSettings, + title, +}: NotYetReadyAppMenuProps): VNode { + const [mobileOpen, setMobileOpen] = useState(false); + + useEffect(() => { + document.title = `Taler Backoffice: ${title}`; + }, [title]); + + return ( + <div + class={mobileOpen ? "has-aside-mobile-expanded" : ""} + onClick={() => setMobileOpen(false)} + > + <NavigationBar + onMobileMenu={() => setMobileOpen(!mobileOpen)} + title={title} + /> + ( + <Sidebar + onShowSettings={onShowSettings} + instance="" + mobile={mobileOpen} + /> + ) + </div> + ); +} diff --git a/packages/auditor-backoffice-ui/src/paths/login/index.tsx b/packages/auditor-backoffice-ui/src/paths/login/index.tsx index c99dc6050..16fb18fdf 100644 --- a/packages/auditor-backoffice-ui/src/paths/login/index.tsx +++ b/packages/auditor-backoffice-ui/src/paths/login/index.tsx @@ -22,106 +22,102 @@ import { useTranslationContext } from "@gnu-taler/web-util/browser"; import { ComponentChildren, Fragment, h, VNode } from "preact"; -import { useCallback, useState } from "preact/hooks"; -import { useBackendContext, useBackendTokenContext } from "../../context/backend.js"; +import { Route } from "preact-router"; +import { useCallback, useState } from "preact/hooks"; import { NotificationCard } from "../../components/menu/index.js"; -import { Notification } from "../../utils/types.js"; +import { useBackendTokenContext } from "../../context/backend.js"; import { useBackendToken } from "../../hooks/backend.js"; -import { Route } from "preact-router"; import { Paths, Redirect } from "../../InstanceRoutes.js"; +import { Notification } from "../../utils/types.js"; export function LoginPage(): VNode { const [token, setToken] = useState(""); const [notif, setNotif] = useState<Notification | undefined>(undefined); const { i18n } = useTranslationContext(); - const doLogin = useCallback(async function doLoginImpl() { - - const result = useBackendToken(); - if (!result.ok) { - } - if (result.ok) { - //TODO fixme - const { token } = useBackendTokenContext(); - /* return ( + const doLogin = useCallback( + async function doLoginImpl() { + const result = useBackendToken(); + if (!result.ok) { + } + if (result.ok) { + //TODO fixme + const { token } = useBackendTokenContext(); + /* return ( <Route path="/" component={Redirect} to={Paths.key_figures}/> );*/ - } else { - setNotif({ - message: "Your password is incorrect", - type: "ERROR", - }); - } - }, [token]); - - return ( - <Route path="/" component={Redirect} to={Paths.key_figures}/> + } else { + setNotif({ + message: "Your password is incorrect", + type: "ERROR", + }); + } + }, + [token], ); + return <Route path="/" component={Redirect} to={Paths.key_figures} />; + return ( <div class="columns is-centered" style={{ margin: "auto" }}> - <div class="column is-two-thirds "> - <div class="modal-card" style={{ width: "100%", margin: 0 }}> - <header - class="modal-card-head" - style={{ border: "1px solid", borderBottom: 0 }} - > - <p class="modal-card-title">{i18n.str`Token required`}</p> - </header> - <section - class="modal-card-body" - style={{ border: "1px solid", borderTop: 0, borderBottom: 0 }} - > - - <p> - <i18n.Translate>Need the access token for the API.</i18n.Translate> - </p> - <div class="field is-horizontal"> - <div class="field-label is-normal"> - <label class="label"> - <i18n.Translate>Access Token</i18n.Translate> - </label> - </div> - <div class="field-body"> - <div class="field"> - <p class="control is-expanded"> - <input - class="input" - type="password" - placeholder={"current access token"} - name="token" - onKeyPress={(e) => - e.keyCode === 13 - ? doLogin() - : null - } - value={token} - onInput={(e): void => setToken(e?.currentTarget.value)} - /> - </p> + <div class="column is-two-thirds "> + <div class="modal-card" style={{ width: "100%", margin: 0 }}> + <header + class="modal-card-head" + style={{ border: "1px solid", borderBottom: 0 }} + > + <p class="modal-card-title">{i18n.str`Token required`}</p> + </header> + <section + class="modal-card-body" + style={{ border: "1px solid", borderTop: 0, borderBottom: 0 }} + > + <p> + <i18n.Translate> + Need the access token for the API. + </i18n.Translate> + </p> + <div class="field is-horizontal"> + <div class="field-label is-normal"> + <label class="label"> + <i18n.Translate>Access Token</i18n.Translate> + </label> + </div> + <div class="field-body"> + <div class="field"> + <p class="control is-expanded"> + <input + class="input" + type="password" + placeholder={"current access token"} + name="token" + onKeyPress={(e) => (e.keyCode === 13 ? doLogin() : null)} + value={token} + onInput={(e): void => setToken(e?.currentTarget.value)} + /> + </p> + </div> </div> </div> - </div> - </section> - <footer - class="modal-card-foot " - style={{ - justifyContent: "flex-end", - border: "1px solid", - borderTop: 0, - }} - > - <AsyncButton - onClick={() => doLogin()} + </section> + <footer + class="modal-card-foot " + style={{ + justifyContent: "flex-end", + border: "1px solid", + borderTop: 0, + }} > - <i18n.Translate>Confirm</i18n.Translate> - </AsyncButton> - </footer> + <AsyncButton onClick={() => doLogin()}> + <i18n.Translate>Confirm</i18n.Translate> + </AsyncButton> + </footer> + </div> </div> </div> - </div>); - + ); - return (<Fragment> + return ( + <Fragment> <NotificationCard notification={notif} /> <div class="columns is-centered" style={{ margin: "auto" }}> <div class="column is-two-thirds "> @@ -145,7 +141,6 @@ export function LoginPage(): VNode { </label> </div> <div class="field-body"> - <div class="field"> <p class="control is-expanded"> <input @@ -154,9 +149,7 @@ export function LoginPage(): VNode { placeholder={"current access token"} name="token" onKeyPress={(e) => - e.keyCode === 13 - ? doLogin() - : null + e.keyCode === 13 ? doLogin() : null } value={token} onInput={(e): void => setToken(e?.currentTarget.value)} @@ -175,39 +168,45 @@ export function LoginPage(): VNode { }} > <div /> - <AsyncButton - type="is-info" - onClick={doLogin} - > + <AsyncButton type="is-info" onClick={doLogin}> <i18n.Translate>Confirm</i18n.Translate> </AsyncButton> - </footer> </div> </div> </div> </Fragment> - ); } -function AsyncButton({ onClick, disabled, type = "", children }: { - type?: string, - disabled?: boolean, - onClick: () => Promise<void>, - children: ComponentChildren +function AsyncButton({ + onClick, + disabled, + type = "", + children, +}: { + type?: string; + disabled?: boolean; + onClick: () => Promise<void>; + children: ComponentChildren; }): VNode { const [running, setRunning] = useState(false); - return <button class={"button " + type} disabled={disabled || running} onClick={() => { - setRunning(true); - onClick().then(() => { - setRunning(false); - }).catch(() => { - setRunning(false); - }); - }}> - {children} - </button>; + return ( + <button + class={"button " + type} + disabled={disabled || running} + onClick={() => { + setRunning(true); + onClick() + .then(() => { + setRunning(false); + }) + .catch(() => { + setRunning(false); + }); + }} + > + {children} + </button> + ); } - - |