/*
This file is part of GNU Taler
(C) 2022 Taler Systems S.A.
GNU Taler is free software; you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software
Foundation; either version 3, or (at your option) any later version.
GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with
GNU Taler; see the file COPYING. If not, see
*/
import { Logger } from "@gnu-taler/taler-util";
import { h, VNode } from "preact";
import { useEffect } from "preact/hooks";
import useSWR from "swr";
import { useTranslationContext } from "../../context/translation.js";
const logger = new Logger("Transactions");
/**
* Show one page of transactions.
*/
export function Transactions({
pageNumber,
accountLabel,
balanceValue,
}: {
pageNumber: number;
accountLabel: string;
balanceValue?: string;
}): VNode {
const { i18n } = useTranslationContext();
const { data, error, mutate } = useSWR(
`access-api/accounts/${accountLabel}/transactions?page=${pageNumber}`,
);
useEffect(() => {
if (balanceValue) {
mutate();
}
}, [balanceValue ?? ""]);
if (typeof error !== "undefined") {
logger.error("transactions not found error", error);
switch (error.status) {
case 404: {
return
Transactions page {pageNumber} was not found.
;
}
case 401: {
return Wrong credentials given.
;
}
default: {
return Transaction page {pageNumber} could not be retrieved.
;
}
}
}
if (!data) {
logger.trace(`History data of ${accountLabel} not arrived`);
return Transactions page loading...
;
}
logger.trace(`History data of ${accountLabel}`, data);
return (
{i18n.str`Date`} |
{i18n.str`Amount`} |
{i18n.str`Counterpart`} |
{i18n.str`Subject`} |
{data.transactions.map((item: any, idx: number) => {
const sign = item.direction == "DBIT" ? "-" : "";
const counterpart =
item.direction == "DBIT" ? item.creditorIban : item.debtorIban;
// Pattern:
//
// DD/MM YYYY subject -5 EUR
// DD/MM YYYY subject 5 EUR
const dateRegex = /^([0-9]{4})-([0-9]{2})-([0-9]{1,2})/;
const dateParse = dateRegex.exec(item.date);
const date =
dateParse !== null
? `${dateParse[3]}/${dateParse[2]} ${dateParse[1]}`
: "date not found";
return (
{date} |
{sign}
{item.amount} {item.currency}
|
{counterpart} |
{item.subject} |
);
})}
);
}