commit e2b787ec40694efad923c6010b9b23423234c440
parent b677f250a8ee66b580189718960c5286b38b9bc0
Author: Sebastian <sebasjm@gmail.com>
Date: Mon, 23 Jun 2025 10:54:27 -0300
fix #10111
Diffstat:
5 files changed, 56 insertions(+), 7 deletions(-)
diff --git a/packages/aml-backoffice-ui/src/components/ShowDecisionLimitInfo.tsx b/packages/aml-backoffice-ui/src/components/ShowDecisionLimitInfo.tsx
@@ -14,9 +14,10 @@
GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
import { AbsoluteTime, KycRule } from "@gnu-taler/taler-util";
-import { useTranslationContext, Time } from "@gnu-taler/web-util/browser";
-import { h, VNode, Fragment } from "preact";
+import { Time, useTranslationContext } from "@gnu-taler/web-util/browser";
+import { Fragment, h, VNode } from "preact";
import { useState } from "preact/hooks";
+import { useServerMeasures } from "../hooks/server-info.js";
import { RulesInfo } from "./RulesInfo.js";
const TALER_SCREEN_ID = 120;
diff --git a/packages/aml-backoffice-ui/src/components/ShowDefaultRules.tsx b/packages/aml-backoffice-ui/src/components/ShowDefaultRules.tsx
@@ -0,0 +1,16 @@
+import { KycRule } from "@gnu-taler/taler-util";
+import { useTranslationContext } from "@gnu-taler/web-util/browser";
+import { Fragment, h, VNode } from "preact";
+import { RulesInfo } from "./RulesInfo.js";
+
+export function ShowDefaultRules({ rules }: { rules: KycRule[] }): VNode {
+ const { i18n } = useTranslationContext();
+ return (
+ <Fragment>
+ <h1 class="text-base font-semibold leading-6 text-black">
+ <i18n.Translate>Default rules</i18n.Translate>
+ </h1>
+ <RulesInfo rules={rules} />
+ </Fragment>
+ );
+}
diff --git a/packages/aml-backoffice-ui/src/pages/AccountDetails.tsx b/packages/aml-backoffice-ui/src/pages/AccountDetails.tsx
@@ -19,7 +19,7 @@ import {
HttpStatusCode,
TalerError,
TalerExchangeApi,
- TalerFormAttributes
+ TalerFormAttributes,
} from "@gnu-taler/taler-util";
import {
Attention,
@@ -35,6 +35,10 @@ import { ShowDecisionLimitInfo } from "../components/ShowDecisionLimitInfo.js";
import { useAccountInformation } from "../hooks/account.js";
import { DecisionRequest } from "../hooks/decision-request.js";
import { useAccountDecisions } from "../hooks/decisions.js";
+import { ShowDefaultRules } from "../components/ShowDefaultRules.js";
+import { Fragment } from "preact/jsx-runtime";
+import { useServerMeasures } from "../hooks/server-info.js";
+import { BANK_RULES, WALLET_RULES } from "./decision/Rules.js";
const TALER_SCREEN_ID = 116;
@@ -53,6 +57,9 @@ export function AccountDetails({
const details = useAccountInformation(account);
const history = useAccountDecisions(account);
+ const measures = useServerMeasures();
+
+
if (!details || !history) {
return <Loading />;
}
@@ -121,6 +128,18 @@ export function AccountDetails({
);
}
+
+ const defaultRules =
+ !measures || measures instanceof TalerError || measures.type === "fail"
+ ? []
+ : measures.body.default_rules;
+
+ const filteredRulesByType = !activeDecision ? defaultRules : defaultRules.filter((r) => {
+ return activeDecision.is_wallet
+ ? WALLET_RULES.includes(r.operation_type)
+ : BANK_RULES.includes(r.operation_type);
+ })
+
return (
<div class="min-w-60">
<header class="flex items-center justify-between border-b border-white/5 px-4 py-4 sm:px-6 sm:py-6 lg:px-8 gap-2">
@@ -163,7 +182,15 @@ export function AccountDetails({
)}
{!activeDecision ? (
- <Attention title={i18n.str`No active rules found`} type="warning" />
+ <Fragment>
+ <Attention title={i18n.str`No active decision found`} type="warning">
+ <i18n.Translate>
+ There is no decision for this account yet. The account is limited
+ by the default rules.
+ </i18n.Translate>
+ </Attention>
+ <ShowDefaultRules rules={filteredRulesByType} />
+ </Fragment>
) : (
<div class="my-4">
<h1 class="mb-4 text-base font-semibold leading-6 text-black">
diff --git a/packages/aml-backoffice-ui/src/pages/AccountList.tsx b/packages/aml-backoffice-ui/src/pages/AccountList.tsx
@@ -343,7 +343,7 @@ function JumpByIdForm({
}
setValid(found);
if (!found) {
- setError(i18n.str`account not found`);
+ setError(i18n.str`Invalid account`);
}
}, 500);
}, [account, session]);
diff --git a/packages/aml-backoffice-ui/src/pages/decision/Rules.tsx b/packages/aml-backoffice-ui/src/pages/decision/Rules.tsx
@@ -46,6 +46,7 @@ import { RulesInfo } from "../../components/RulesInfo.js";
import { ShowDecisionLimitInfo } from "../../components/ShowDecisionLimitInfo.js";
import { useCurrentDecisionRequest } from "../../hooks/decision-request.js";
import { useServerMeasures } from "../../hooks/server-info.js";
+import { ShowDefaultRules } from "../../components/ShowDefaultRules.js";
const TALER_SCREEN_ID = 103;
@@ -70,8 +71,8 @@ const ONLY_BANK_RULES = [
LimitOperationType.withdraw,
LimitOperationType.close,
];
-const WALLET_RULES = [...ONLY_WALLET_RULES, ...SHARED_RULES];
-const BANK_RULES = [...ONLY_BANK_RULES, ...SHARED_RULES];
+export const WALLET_RULES = [...ONLY_WALLET_RULES, ...SHARED_RULES];
+export const BANK_RULES = [...ONLY_BANK_RULES, ...SHARED_RULES];
export type RuleInconsistency =
| "missing-wallet-rules"
@@ -183,11 +184,15 @@ export function Rules({ newPayto }: { newPayto?: PaytoString }): VNode {
<i18n.Translate>Current active rules</i18n.Translate>
</h2>
{request.original === undefined ? (
+ <Fragment>
+
<p>
<i18n.Translate>
There are no rules for this account yet.
</i18n.Translate>
</p>
+ <ShowDefaultRules rules={defaultRules} />
+ </Fragment>
) : (
<ShowDecisionLimitInfo
fixed