From 59fa89ab7a824f4c372896aba09dc247f048adf0 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Fri, 9 Feb 2024 12:17:30 -0300 Subject: fix #8356: warn about no accounts for admin, prevent using the instance without bank account for non-admin --- .../merchant-backoffice-ui/src/Application.tsx | 10 ++++----- .../merchant-backoffice-ui/src/InstanceRoutes.tsx | 26 ++++++++++++++++++++++ packages/merchant-backoffice-ui/src/hooks/bank.ts | 18 +++++---------- .../src/paths/instance/accounts/list/index.tsx | 8 ++++++- 4 files changed, 43 insertions(+), 19 deletions(-) diff --git a/packages/merchant-backoffice-ui/src/Application.tsx b/packages/merchant-backoffice-ui/src/Application.tsx index e78a6fc0b..57ecb5299 100644 --- a/packages/merchant-backoffice-ui/src/Application.tsx +++ b/packages/merchant-backoffice-ui/src/Application.tsx @@ -19,16 +19,14 @@ * @author Sebastian Javier Marchano (sebasjm) */ -import { HttpStatusCode, LibtoolVersion, TranslatedString } from "@gnu-taler/taler-util"; +import { HttpStatusCode, LibtoolVersion } from "@gnu-taler/taler-util"; import { ErrorType, TranslationProvider, - notifyError, - notifyException, - useTranslationContext, + useTranslationContext } from "@gnu-taler/web-util/browser"; import { Fragment, VNode, h } from "preact"; -import { useEffect, useErrorBoundary, useMemo } from "preact/hooks"; +import { useMemo } from "preact/hooks"; import { ApplicationReadyRoutes } from "./ApplicationReadyRoutes.js"; import { Loading } from "./components/exception/loading.js"; import { @@ -140,7 +138,7 @@ function ApplicationStatusRoutes(): VNode { ); } - const SUPPORTED_VERSION = "5:0:1" + const SUPPORTED_VERSION = "8:1:4" if (result.data && !LibtoolVersion.compare( SUPPORTED_VERSION, result.data.version, diff --git a/packages/merchant-backoffice-ui/src/InstanceRoutes.tsx b/packages/merchant-backoffice-ui/src/InstanceRoutes.tsx index a7fd3eb0f..1f3a2b1f8 100644 --- a/packages/merchant-backoffice-ui/src/InstanceRoutes.tsx +++ b/packages/merchant-backoffice-ui/src/InstanceRoutes.tsx @@ -76,6 +76,7 @@ import { LoginToken, MerchantBackend } from "./declaration.js"; import { Settings } from "./paths/settings/index.js"; import { dateFormatForSettings, useSettings } from "./hooks/useSettings.js"; import { TranslatedString } from "@gnu-taler/taler-util"; +import { useInstanceBankAccounts } from "./hooks/bank.js"; export enum InstancePaths { error = "/error", @@ -170,6 +171,9 @@ export function InstanceRoutes({ [id, token, admin], ); + const instance = useInstanceBankAccounts(); + const accounts = !instance.ok ? undefined : instance.data.accounts; + function ServerErrorRedirectTo(to: InstancePaths | AdminPaths) { return function ServerErrorRedirectToImpl( error: HttpError, @@ -247,6 +251,28 @@ export function InstanceRoutes({ updateDefaultToken(undefined) }; + if (accounts !== undefined && !admin && accounts.length < 1) { + return + { + route(InstancePaths.interface) + }} + path={path} + onLogout={clearTokenAndGoToRoot} + setInstanceName={setInstanceName} + isPasswordOk={defaultToken !== undefined} + /> + + { }} /> + + } + return ( = { @@ -106,6 +106,10 @@ export interface BankAccountAPI { export interface InstanceBankAccountFilter { } +export function revalidateInstanceBankAccounts() { + // mutate(key => key instanceof) + return mutate((key) => Array.isArray(key) && key[key.length - 1] === "/private/accounts", undefined, { revalidate: true }); +} export function useInstanceBankAccounts( args?: InstanceBankAccountFilter, updatePosition?: (id: string) => void, @@ -113,17 +117,7 @@ export function useInstanceBankAccounts( MerchantBackend.BankAccounts.AccountsSummaryResponse, MerchantBackend.ErrorDetail > { - // return { - // ok: true, - // loadMore() { }, - // loadMorePrev() { }, - // data: { - // accounts: Object.values(MOCKED_ACCOUNTS).map(e => ({ - // ...e, - // active: true, - // })) - // } - // } + const { fetcher } = useBackendInstanceRequest(); const [pageAfter, setPageAfter] = useState(1); diff --git a/packages/merchant-backoffice-ui/src/paths/instance/accounts/list/index.tsx b/packages/merchant-backoffice-ui/src/paths/instance/accounts/list/index.tsx index 100241e22..04b6c51fd 100644 --- a/packages/merchant-backoffice-ui/src/paths/instance/accounts/list/index.tsx +++ b/packages/merchant-backoffice-ui/src/paths/instance/accounts/list/index.tsx @@ -74,7 +74,13 @@ export default function ListOtpDevices({ return ( - + {result.data.accounts.length < 1 && + + }