diff options
author | Sebastian <sebasjm@gmail.com> | 2024-02-09 12:17:30 -0300 |
---|---|---|
committer | Sebastian <sebasjm@gmail.com> | 2024-02-09 12:17:33 -0300 |
commit | 59fa89ab7a824f4c372896aba09dc247f048adf0 (patch) | |
tree | 933716d94befacdc13d38062ab71e901172a7b9f /packages/merchant-backoffice-ui | |
parent | 8055f8834974773170f83c7013174e141ced53cb (diff) | |
download | wallet-core-59fa89ab7a824f4c372896aba09dc247f048adf0.tar.xz |
fix #8356: warn about no accounts for admin, prevent using the instance without bank account for non-admin
Diffstat (limited to 'packages/merchant-backoffice-ui')
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<MerchantBackend.ErrorDetail>, @@ -247,6 +251,28 @@ export function InstanceRoutes({ updateDefaultToken(undefined) }; + if (accounts !== undefined && !admin && accounts.length < 1) { + return <InstanceContextProvider value={value}> + <Menu + instance={id} + admin={admin} + onShowSettings={() => { + route(InstancePaths.interface) + }} + path={path} + onLogout={clearTokenAndGoToRoot} + setInstanceName={setInstanceName} + isPasswordOk={defaultToken !== undefined} + /> + <NotificationCard notification={{ + type: "INFO", + message: i18n.str`You need to associate a bank account to receive revenue.`, + description: i18n.str`Without this the merchant backend will refuse to create new orders.` + }} /> + <BankAccountCreatePage onConfirm={() => { }} /> + </InstanceContextProvider> + } + return ( <InstanceContextProvider value={value}> <Menu diff --git a/packages/merchant-backoffice-ui/src/hooks/bank.ts b/packages/merchant-backoffice-ui/src/hooks/bank.ts index 03b064646..5d5785442 100644 --- a/packages/merchant-backoffice-ui/src/hooks/bank.ts +++ b/packages/merchant-backoffice-ui/src/hooks/bank.ts @@ -25,7 +25,7 @@ import { MAX_RESULT_SIZE, PAGE_SIZE } from "../utils/constants.js"; import { useBackendInstanceRequest, useMatchMutate } from "./backend.js"; // FIX default import https://github.com/microsoft/TypeScript/issues/49189 -import _useSWR, { SWRHook } from "swr"; +import _useSWR, { SWRHook, mutate } from "swr"; const useSWR = _useSWR as unknown as SWRHook; // const MOCKED_ACCOUNTS: Record<string, MerchantBackend.BankAccounts.AccountAddDetails> = { @@ -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 ( <Fragment> <NotificationCard notification={notif} /> - + {result.data.accounts.length < 1 && + <NotificationCard notification={{ + type: "WARN", + message: i18n.str`You need to associate a bank account to receive revenue.`, + description: i18n.str`Without this the merchant backend will refuse to create new orders.` + }} /> + } <ListPage devices={result.data.accounts} onLoadMoreBefore={ |