summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian <sebasjm@gmail.com>2024-02-09 12:17:30 -0300
committerSebastian <sebasjm@gmail.com>2024-02-09 12:17:33 -0300
commit59fa89ab7a824f4c372896aba09dc247f048adf0 (patch)
tree933716d94befacdc13d38062ab71e901172a7b9f
parent8055f8834974773170f83c7013174e141ced53cb (diff)
downloadwallet-core-59fa89ab7a824f4c372896aba09dc247f048adf0.tar.gz
wallet-core-59fa89ab7a824f4c372896aba09dc247f048adf0.tar.bz2
wallet-core-59fa89ab7a824f4c372896aba09dc247f048adf0.zip
fix #8356: warn about no accounts for admin, prevent using the instance without bank account for non-admin
-rw-r--r--packages/merchant-backoffice-ui/src/Application.tsx10
-rw-r--r--packages/merchant-backoffice-ui/src/InstanceRoutes.tsx26
-rw-r--r--packages/merchant-backoffice-ui/src/hooks/bank.ts18
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/accounts/list/index.tsx8
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={