2022-03-11 15:14:27 +01:00
|
|
|
import { Amounts, NotificationType, Transaction } from "@gnu-taler/taler-util";
|
2022-03-11 06:17:40 +01:00
|
|
|
import { PendingTaskInfo } from "@gnu-taler/taler-wallet-core";
|
2022-03-11 15:14:27 +01:00
|
|
|
import { Fragment, h, JSX } from "preact";
|
|
|
|
import { useAsyncAsHook } from "../hooks/useAsyncAsHook";
|
2022-03-11 06:17:40 +01:00
|
|
|
import { Avatar } from "../mui/Avatar";
|
|
|
|
import { Typography } from "../mui/Typography";
|
|
|
|
import Banner from "./Banner";
|
|
|
|
import { Time } from "./Time";
|
2022-03-11 15:14:27 +01:00
|
|
|
import * as wxApi from "../wxApi";
|
2022-03-11 06:17:40 +01:00
|
|
|
|
2022-03-11 20:18:26 +01:00
|
|
|
interface Props extends JSX.HTMLAttributes {
|
|
|
|
goToTransaction: (id: string) => void;
|
|
|
|
}
|
2022-03-11 15:14:27 +01:00
|
|
|
|
2022-03-11 20:18:26 +01:00
|
|
|
export function PendingTransactions({ goToTransaction }: Props) {
|
2022-03-11 15:14:27 +01:00
|
|
|
const state = useAsyncAsHook(wxApi.getTransactions, [
|
|
|
|
NotificationType.WithdrawGroupFinished,
|
|
|
|
]);
|
|
|
|
const transactions =
|
2022-03-11 20:18:26 +01:00
|
|
|
!state || state.hasError
|
|
|
|
? []
|
|
|
|
: state.response.transactions.filter((t) => t.pending);
|
2022-03-11 15:14:27 +01:00
|
|
|
|
2022-03-11 20:18:26 +01:00
|
|
|
if (!state || state.hasError || !transactions.length) {
|
2022-03-11 15:14:27 +01:00
|
|
|
return <Fragment />;
|
|
|
|
}
|
2022-03-11 20:18:26 +01:00
|
|
|
return (
|
|
|
|
<PendingTransactionsView
|
|
|
|
goToTransaction={goToTransaction}
|
|
|
|
transactions={transactions}
|
|
|
|
/>
|
|
|
|
);
|
2022-03-11 06:17:40 +01:00
|
|
|
}
|
|
|
|
|
2022-03-11 15:14:27 +01:00
|
|
|
export function PendingTransactionsView({
|
|
|
|
transactions,
|
2022-03-11 20:18:26 +01:00
|
|
|
goToTransaction,
|
2022-03-11 15:14:27 +01:00
|
|
|
}: {
|
2022-03-11 20:18:26 +01:00
|
|
|
goToTransaction: (id: string) => void;
|
2022-03-11 15:14:27 +01:00
|
|
|
transactions: Transaction[];
|
|
|
|
}) {
|
2022-03-11 06:17:40 +01:00
|
|
|
return (
|
|
|
|
<Banner
|
|
|
|
title="PENDING OPERATIONS"
|
2022-03-11 15:14:27 +01:00
|
|
|
style={{
|
|
|
|
backgroundColor: "lightcyan",
|
|
|
|
maxHeight: 150,
|
|
|
|
padding: 8,
|
2022-03-11 20:18:26 +01:00
|
|
|
flexGrow: 1,
|
|
|
|
maxWidth: 500,
|
2022-03-11 15:14:27 +01:00
|
|
|
overflowY: transactions.length > 3 ? "scroll" : "hidden",
|
|
|
|
}}
|
2022-03-11 06:17:40 +01:00
|
|
|
elements={transactions.map((t) => {
|
|
|
|
const amount = Amounts.parseOrThrow(t.amountEffective);
|
|
|
|
return {
|
|
|
|
icon: (
|
|
|
|
<Avatar
|
|
|
|
style={{
|
|
|
|
border: "solid blue 1px",
|
|
|
|
color: "blue",
|
|
|
|
boxSizing: "border-box",
|
|
|
|
}}
|
|
|
|
>
|
|
|
|
{t.type.substring(0, 1)}
|
|
|
|
</Avatar>
|
|
|
|
),
|
2022-03-11 20:18:26 +01:00
|
|
|
action: () => goToTransaction(t.transactionId),
|
2022-03-11 06:17:40 +01:00
|
|
|
description: (
|
|
|
|
<Typography>
|
|
|
|
<b>
|
|
|
|
{amount.currency} {Amounts.stringifyValue(amount)}
|
|
|
|
</b>{" "}
|
|
|
|
- <Time timestamp={t.timestamp} format="dd MMMM yyyy" />
|
|
|
|
</Typography>
|
|
|
|
),
|
|
|
|
};
|
|
|
|
})}
|
|
|
|
/>
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
export default PendingTransactions;
|