From 5fc8f95a5d4ce8dea03b2dbec7eb5c37e7ff3f15 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Fri, 9 Dec 2022 12:15:15 -0300 Subject: simplify directories --- packages/demobank-ui/src/pages/Transactions.tsx | 106 ++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 packages/demobank-ui/src/pages/Transactions.tsx (limited to 'packages/demobank-ui/src/pages/Transactions.tsx') diff --git a/packages/demobank-ui/src/pages/Transactions.tsx b/packages/demobank-ui/src/pages/Transactions.tsx new file mode 100644 index 000000000..ca88abd4d --- /dev/null +++ b/packages/demobank-ui/src/pages/Transactions.tsx @@ -0,0 +1,106 @@ +/* + 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 "@gnu-taler/web-util/lib/index.browser"; + +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 ( +
+ + + + + + + + + + + {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 ( + + + + + + + ); + })} + +
{i18n.str`Date`}{i18n.str`Amount`}{i18n.str`Counterpart`}{i18n.str`Subject`}
{date} + {sign} + {item.amount} {item.currency} + {counterpart}{item.subject}
+
+ ); +} -- cgit v1.2.3