/* 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 { AbsoluteTime, Amounts } from "@gnu-taler/taler-util"; import { useTransactions } from "../../hooks/access.js"; import { Props, State, Transaction } from "./index.js"; export function useComponentState({ account }: Props): State { const result = useTransactions(account); if (result.loading) { return { status: "loading", error: undefined, }; } if (!result.ok) { return { status: "loading-error", error: result, }; } const transactions = result.data.transactions .map((item: unknown) => { if ( !item || typeof item !== "object" || !("direction" in item) || !("creditorIban" in item) || !("debtorIban" in item) || !("date" in item) || !("subject" in item) || !("currency" in item) || !("amount" in item) ) { //not valid return; } const anyItem = item as any; if ( !(typeof anyItem.creditorIban === "string") || !(typeof anyItem.debtorIban === "string") || !(typeof anyItem.date === "string") || !(typeof anyItem.subject === "string") || !(typeof anyItem.currency === "string") || !(typeof anyItem.amount === "string") ) { return; } const negative = anyItem.direction === "DBIT"; const counterpart = negative ? anyItem.creditorIban : anyItem.debtorIban; let date = anyItem.date ? parseInt(anyItem.date, 10) : 0; if (isNaN(date) || !isFinite(date)) { date = 0; } const when: AbsoluteTime = !date ? AbsoluteTime.never() : { t_ms: date, }; const amount = Amounts.parse(`${anyItem.currency}:${anyItem.amount}`); const subject = anyItem.subject; return { negative, counterpart, when, amount, subject, }; }) .filter((x): x is Transaction => x !== undefined); return { status: "ready", error: undefined, transactions, }; }