From ab68ecc7332281a43ce4acf28302f85a3c8f401a Mon Sep 17 00:00:00 2001 From: Sebastian Date: Fri, 11 Mar 2022 11:14:27 -0300 Subject: pending transaction, finally! --- .../src/components/Banner.stories.tsx | 2 +- .../src/components/Banner.tsx | 16 ++- .../src/components/PendingTransactions.stories.tsx | 143 +++++++++++++++++++++ .../src/components/PendingTransactions.tsx | 34 ++++- .../taler-wallet-webextension/src/mui/Button.tsx | 2 +- .../src/popup/BalancePage.tsx | 24 +--- .../src/popupEntryPoint.tsx | 2 + .../src/walletEntryPoint.tsx | 10 ++ 8 files changed, 201 insertions(+), 32 deletions(-) create mode 100644 packages/taler-wallet-webextension/src/components/PendingTransactions.stories.tsx (limited to 'packages/taler-wallet-webextension/src') diff --git a/packages/taler-wallet-webextension/src/components/Banner.stories.tsx b/packages/taler-wallet-webextension/src/components/Banner.stories.tsx index 665b0de6f..4d5b22208 100644 --- a/packages/taler-wallet-webextension/src/components/Banner.stories.tsx +++ b/packages/taler-wallet-webextension/src/components/Banner.stories.tsx @@ -91,7 +91,7 @@ export const PendingOperation = () => ( )} - + {elements.map((e, i) => ( - + {e.icon && ( - + {e.icon} )} {e.description} - + ))} {confirm && ( diff --git a/packages/taler-wallet-webextension/src/components/PendingTransactions.stories.tsx b/packages/taler-wallet-webextension/src/components/PendingTransactions.stories.tsx new file mode 100644 index 000000000..658a41aa8 --- /dev/null +++ b/packages/taler-wallet-webextension/src/components/PendingTransactions.stories.tsx @@ -0,0 +1,143 @@ +/* + This file is part of GNU Taler + (C) 2021 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 + */ + +/** + * + * @author Sebastian Javier Marchano (sebasjm) + */ + +import { PendingTransactionsView as TestedComponent } from "./PendingTransactions"; +import { Fragment, h, VNode } from "preact"; +import { createExample } from "../test-utils"; +import { Transaction, TransactionType } from "@gnu-taler/taler-util"; + +export default { + title: "component/PendingTransactions", + component: TestedComponent, +}; + +export const OnePendingTransaction = createExample(TestedComponent, { + transactions: [ + { + amountEffective: "USD:10", + type: TransactionType.Withdrawal, + timestamp: { + t_ms: 1, + }, + } as Transaction, + ], +}); + +export const ThreePendingTransactions = createExample(TestedComponent, { + transactions: [ + { + amountEffective: "USD:10", + type: TransactionType.Withdrawal, + timestamp: { + t_ms: 1, + }, + } as Transaction, + { + amountEffective: "USD:10", + type: TransactionType.Withdrawal, + timestamp: { + t_ms: 1, + }, + } as Transaction, + { + amountEffective: "USD:10", + type: TransactionType.Withdrawal, + timestamp: { + t_ms: 1, + }, + } as Transaction, + ], +}); + +export const TenPendingTransactions = createExample(TestedComponent, { + transactions: [ + { + amountEffective: "USD:10", + type: TransactionType.Withdrawal, + timestamp: { + t_ms: 1, + }, + } as Transaction, + { + amountEffective: "USD:10", + type: TransactionType.Withdrawal, + timestamp: { + t_ms: 1, + }, + } as Transaction, + { + amountEffective: "USD:10", + type: TransactionType.Withdrawal, + timestamp: { + t_ms: 1, + }, + } as Transaction, + { + amountEffective: "USD:10", + type: TransactionType.Withdrawal, + timestamp: { + t_ms: 1, + }, + } as Transaction, + { + amountEffective: "USD:10", + type: TransactionType.Withdrawal, + timestamp: { + t_ms: 1, + }, + } as Transaction, + { + amountEffective: "USD:10", + type: TransactionType.Withdrawal, + timestamp: { + t_ms: 1, + }, + } as Transaction, + { + amountEffective: "USD:10", + type: TransactionType.Withdrawal, + timestamp: { + t_ms: 1, + }, + } as Transaction, + { + amountEffective: "USD:10", + type: TransactionType.Withdrawal, + timestamp: { + t_ms: 1, + }, + } as Transaction, + { + amountEffective: "USD:10", + type: TransactionType.Withdrawal, + timestamp: { + t_ms: 1, + }, + } as Transaction, + { + amountEffective: "USD:10", + type: TransactionType.Withdrawal, + timestamp: { + t_ms: 1, + }, + } as Transaction, + ], +}); diff --git a/packages/taler-wallet-webextension/src/components/PendingTransactions.tsx b/packages/taler-wallet-webextension/src/components/PendingTransactions.tsx index 99f43a62b..b2e567d7d 100644 --- a/packages/taler-wallet-webextension/src/components/PendingTransactions.tsx +++ b/packages/taler-wallet-webextension/src/components/PendingTransactions.tsx @@ -1,20 +1,42 @@ -import { Amounts, Transaction } from "@gnu-taler/taler-util"; +import { Amounts, NotificationType, Transaction } from "@gnu-taler/taler-util"; import { PendingTaskInfo } from "@gnu-taler/taler-wallet-core"; -import { Fragment, h, VNode } from "preact"; +import { Fragment, h, JSX } from "preact"; +import { useAsyncAsHook } from "../hooks/useAsyncAsHook"; import { Avatar } from "../mui/Avatar"; import { Typography } from "../mui/Typography"; import Banner from "./Banner"; import { Time } from "./Time"; +import * as wxApi from "../wxApi"; -interface Props { - transactions: Transaction[]; +interface Props extends JSX.HTMLAttributes {} + +export function PendingTransactions({}: Props) { + const state = useAsyncAsHook(wxApi.getTransactions, [ + NotificationType.WithdrawGroupFinished, + ]); + const transactions = + !state || state.hasError ? [] : state.response.transactions; + + if (!state || state.hasError) { + return ; + } + return ; } -export function PendingTransactions({ transactions }: Props) { +export function PendingTransactionsView({ + transactions, +}: { + transactions: Transaction[]; +}) { return ( 3 ? "scroll" : "hidden", + }} elements={transactions.map((t) => { const amount = Amounts.parseOrThrow(t.amountEffective); return { diff --git a/packages/taler-wallet-webextension/src/mui/Button.tsx b/packages/taler-wallet-webextension/src/mui/Button.tsx index b185504e4..ccca360fa 100644 --- a/packages/taler-wallet-webextension/src/mui/Button.tsx +++ b/packages/taler-wallet-webextension/src/mui/Button.tsx @@ -15,7 +15,7 @@ interface Props { startIcon?: VNode; variant?: "contained" | "outlined" | "text"; color?: "primary" | "secondary" | "success" | "error" | "info" | "warning"; - onClick: () => void; + onClick?: () => void; } const baseStyle = css` diff --git a/packages/taler-wallet-webextension/src/popup/BalancePage.tsx b/packages/taler-wallet-webextension/src/popup/BalancePage.tsx index e85c00d60..53b4e1518 100644 --- a/packages/taler-wallet-webextension/src/popup/BalancePage.tsx +++ b/packages/taler-wallet-webextension/src/popup/BalancePage.tsx @@ -28,7 +28,6 @@ import { JustInDevMode } from "../components/JustInDevMode"; import { Loading } from "../components/Loading"; import { LoadingError } from "../components/LoadingError"; import { MultiActionButton } from "../components/MultiActionButton"; -import PendingTransactions from "../components/PendingTransactions"; import { ButtonBoxPrimary, ButtonPrimary } from "../components/styled"; import { useAsyncAsHook } from "../hooks/useAsyncAsHook"; import { AddNewActionView } from "../wallet/AddNewActionView"; @@ -46,19 +45,10 @@ export function BalancePage({ goToWalletHistory, }: Props): VNode { const [addingAction, setAddingAction] = useState(false); - const state = useAsyncAsHook( - async () => ({ - balance: await wxApi.getBalance(), - pending: await wxApi.getTransactions(), - }), - [NotificationType.WithdrawGroupFinished], - ); - const balances = - !state || state.hasError ? [] : state.response.balance.balances; - const pending = - !state || state.hasError - ? [] - : state.response.pending.transactions.filter((t) => t.pending); + const state = useAsyncAsHook(wxApi.getBalance, [ + NotificationType.WithdrawGroupFinished, + ]); + const balances = !state || state.hasError ? [] : state.response.balances; if (!state) { return ; @@ -80,7 +70,6 @@ export function BalancePage({ return ( void; goToAddAction: () => void; goToWalletDeposit: (currency: string) => void; @@ -99,7 +87,6 @@ export interface BalanceViewProps { export function BalanceView({ balances, - pending, goToWalletManualWithdraw, goToWalletDeposit, goToWalletHistory, @@ -117,9 +104,6 @@ export function BalanceView({ return ( - {/* {pending.length > 0 ? ( - - ) : undefined} */}
{({ devMode }: { devMode: boolean }) => ( + {({ path }: { path: string }) => } diff --git a/packages/taler-wallet-webextension/src/walletEntryPoint.tsx b/packages/taler-wallet-webextension/src/walletEntryPoint.tsx index f2240cdf1..df969c029 100644 --- a/packages/taler-wallet-webextension/src/walletEntryPoint.tsx +++ b/packages/taler-wallet-webextension/src/walletEntryPoint.tsx @@ -27,6 +27,7 @@ import Router, { route, Route } from "preact-router"; import Match from "preact-router/match"; import { useEffect, useState } from "preact/hooks"; import { LogoHeader } from "./components/LogoHeader"; +import PendingTransactions from "./components/PendingTransactions"; import { NavigationHeader, NavigationHeaderHolder, @@ -112,6 +113,15 @@ function Application(): VNode { ); }} +
+ +
{globalNotification && ( -- cgit v1.2.3