commit 17020c9cb78963269de13b2e715eb23bfaf78615
parent b60e7d0c9dc418628635638becefabf557a0159c
Author: Sebastian <sebasjm@taler-systems.com>
Date: Mon, 8 Dec 2025 13:16:26 -0300
fix #10637
Diffstat:
3 files changed, 40 insertions(+), 25 deletions(-)
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/orders/list/ListPage.tsx b/packages/merchant-backoffice-ui/src/paths/instance/orders/list/ListPage.tsx
@@ -212,6 +212,7 @@ export function ListPage({
<CardTable
orders={orders}
onCreate={onCreate}
+ showRefund={!!isRefundedActive}
onSelect={onSelectOrder}
onRefund={onRefundOrder}
onLoadMoreAfter={onLoadMoreAfter}
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/orders/list/Table.tsx b/packages/merchant-backoffice-ui/src/paths/instance/orders/list/Table.tsx
@@ -45,9 +45,7 @@ import { Input } from "../../../../components/form/Input.js";
import { InputCurrency } from "../../../../components/form/InputCurrency.js";
import { InputGroup } from "../../../../components/form/InputGroup.js";
import { InputSelector } from "../../../../components/form/InputSelector.js";
-import {
- HtmlPersonaFlag
-} from "../../../../components/menu/SideBar.js";
+import { HtmlPersonaFlag } from "../../../../components/menu/SideBar.js";
import { ConfirmModal } from "../../../../components/modal/index.js";
import { useSessionContext } from "../../../../context/session.js";
import { WithId } from "../../../../declaration.js";
@@ -59,7 +57,6 @@ import {
import { mergeRefunds } from "../../../../utils/amount.js";
import { getOrderAmountAndWirefee } from "../details/DetailPage.js";
-
const TALER_SCREEN_ID = 48;
type Entity = TalerMerchantApi.OrderHistoryEntry & WithId;
@@ -70,10 +67,12 @@ interface Props {
onSelect: (order: Entity) => void;
onLoadMoreBefore?: () => void;
onLoadMoreAfter?: () => void;
+ showRefund?: boolean;
}
export function CardTable({
orders,
+ showRefund = false,
onCreate,
onRefund,
onSelect,
@@ -124,6 +123,7 @@ export function CardTable({
instances={orders}
onSelect={onSelect}
onRefund={onRefund}
+ showRefund={showRefund}
rowSelection={rowSelection}
rowSelectionHandler={rowSelectionHandler}
onLoadMoreAfter={onLoadMoreAfter}
@@ -146,10 +146,12 @@ interface TableProps {
rowSelectionHandler: StateUpdater<string[]>;
onLoadMoreBefore?: () => void;
onLoadMoreAfter?: () => void;
+ showRefund: boolean;
}
function Table({
instances,
+ showRefund,
onSelect,
onRefund,
onLoadMoreAfter,
@@ -194,6 +196,12 @@ function Table({
<th style={{ minWidth: 100 }}>
<i18n.Translate>Amount</i18n.Translate>
</th>
+ {showRefund ? (
+ <th style={{ minWidth: 100 }}>
+ <i18n.Translate>Refunded</i18n.Translate>
+ </th>
+ ) : undefined}
+
<th style={{ minWidth: 400 }}>
<i18n.Translate>Summary</i18n.Translate>
</th>
@@ -211,9 +219,9 @@ function Table({
{i.timestamp.t_s === "never"
? i18n.str`Never`
: format(
- new Date(i.timestamp.t_s * 1000),
- datetimeFormatForSettings(settings),
- )}
+ new Date(i.timestamp.t_s * 1000),
+ datetimeFormatForSettings(settings),
+ )}
</td>
<td
onClick={(): void => onSelect(i)}
@@ -221,6 +229,14 @@ function Table({
>
{i.amount}
</td>
+ {showRefund ? (
+ <td
+ onClick={(): void => onSelect(i)}
+ style={{ cursor: "pointer" }}
+ >
+ {i.refund_amount}
+ </td>
+ ) : undefined}
<td
onClick={(): void => onSelect(i)}
style={{ cursor: "pointer" }}
@@ -314,8 +330,11 @@ export function RefundModal({
let amount: AmountString | undefined;
if (order.order_status === "paid") {
- const orderam = getOrderAmountAndWirefee(order)
- amount = typeof orderam === "string" ? undefined : Amounts.stringify(orderam.amount)
+ const orderam = getOrderAmountAndWirefee(order);
+ amount =
+ typeof orderam === "string"
+ ? undefined
+ : Amounts.stringify(orderam.amount);
}
const refunds = (
@@ -361,14 +380,14 @@ export function RefundModal({
const req: TalerMerchantApi.RefundRequest | undefined = !form.refund
? undefined
: {
- refund: Amounts.stringify(
- Amounts.add(Amounts.parse(form.refund)!, totalRefunded).amount,
- ),
- reason:
- form.description === undefined
- ? form.mainReason || ""
- : `${form.mainReason}: ${form.description}`,
- };
+ refund: Amounts.stringify(
+ Amounts.add(Amounts.parse(form.refund)!, totalRefunded).amount,
+ ),
+ reason:
+ form.description === undefined
+ ? form.mainReason || ""
+ : `${form.mainReason}: ${form.description}`,
+ };
const refund = safeFunctionHandler(
(token: AccessToken, id: string, request: TalerMerchantApi.RefundRequest) =>
@@ -431,9 +450,9 @@ export function RefundModal({
{r.timestamp.t_s === "never"
? i18n.str`Never`
: format(
- new Date(r.timestamp.t_s * 1000),
- datetimeFormatForSettings(settings),
- )}
+ new Date(r.timestamp.t_s * 1000),
+ datetimeFormatForSettings(settings),
+ )}
</td>
<td>{r.amount}</td>
<td>{r.reason}</td>
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/orders/list/index.tsx b/packages/merchant-backoffice-ui/src/paths/instance/orders/list/index.tsx
@@ -213,8 +213,3 @@ function RefundModalForTable({ id, onConfirmed, onCancel }: RefundProps): VNode
/>
);
}
-
-async function copyToClipboard(text: string): Promise<void> {
- console.log("copied", text);
- return navigator.clipboard.writeText(text);
-}