taler-typescript-core

Wallet core logic and WebUIs for various components
Log | Files | Refs | Submodules | README | LICENSE

commit e2b787ec40694efad923c6010b9b23423234c440
parent b677f250a8ee66b580189718960c5286b38b9bc0
Author: Sebastian <sebasjm@gmail.com>
Date:   Mon, 23 Jun 2025 10:54:27 -0300

fix #10111

Diffstat:
Mpackages/aml-backoffice-ui/src/components/ShowDecisionLimitInfo.tsx | 5+++--
Apackages/aml-backoffice-ui/src/components/ShowDefaultRules.tsx | 16++++++++++++++++
Mpackages/aml-backoffice-ui/src/pages/AccountDetails.tsx | 31+++++++++++++++++++++++++++++--
Mpackages/aml-backoffice-ui/src/pages/AccountList.tsx | 2+-
Mpackages/aml-backoffice-ui/src/pages/decision/Rules.tsx | 9+++++++--
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