/* 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 { HttpResponsePaginated, useLocalStorage, useTranslationContext, } from "@gnu-taler/web-util/lib/index.browser"; import { Fragment, h, VNode } from "preact"; import { StateUpdater } from "preact/hooks"; import { Transactions } from "../components/Transactions/index.js"; import { usePublicAccounts } from "../hooks/access.js"; const logger = new Logger("PublicHistoriesPage"); // export function PublicHistoriesPage2(): VNode { // return ( // // // // ); // } interface Props { onLoadNotOk: (error: HttpResponsePaginated) => VNode; } /** * Show histories of public accounts. */ export function PublicHistoriesPage({ onLoadNotOk }: Props): VNode { const [showAccount, setShowAccount] = useShowPublicAccount(); const { i18n } = useTranslationContext(); const result = usePublicAccounts(); if (!result.ok) return onLoadNotOk(result); const { data } = result; const txs: Record = {}; const accountsBar = []; /** * Show the account specified in the props, or just one * from the list if that's not given. */ if (typeof showAccount === "undefined" && data.publicAccounts.length > 0) { setShowAccount(data.publicAccounts[1].accountLabel); } logger.trace(`Public history tab: ${showAccount}`); // Ask story of all the public accounts. for (const account of data.publicAccounts) { logger.trace("Asking transactions for", account.accountLabel); const isSelected = account.accountLabel == showAccount; accountsBar.push(
  • setShowAccount(account.accountLabel)} > {account.accountLabel}
  • , ); txs[account.accountLabel] = ; } return (

    {i18n.str`History of public accounts`}

      {accountsBar}
    {typeof showAccount !== "undefined" ? ( txs[showAccount] ) : (

    No public transactions found.

    )}
    Go back
    ); } /** * Stores in the state a object containing a 'username' * and 'password' field, in order to avoid losing the * handle of the data entered by the user in fields. */ function useShowPublicAccount( state?: string, ): [string | undefined, StateUpdater] { const ret = useLocalStorage("show-public-account", JSON.stringify(state)); const retObj: string | undefined = ret[0] ? JSON.parse(ret[0]) : ret[0]; const retSetter: StateUpdater = function (val) { const newVal = val instanceof Function ? JSON.stringify(val(retObj)) : JSON.stringify(val); ret[1](newVal); }; return [retObj, retSetter]; }