From bbcae18f6a3f284f6fee719a9b90d156da960465 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Tue, 24 Aug 2021 12:00:34 -0300 Subject: fix ui transaction list --- .../src/components/TransactionItem.tsx | 169 +++++++++++++++++++ .../src/components/styled/index.tsx | 5 + .../src/popup/History.stories.tsx | 2 +- .../src/popup/History.tsx | 181 +-------------------- .../src/wallet/History.stories.tsx | 6 +- .../src/wallet/History.tsx | 175 +------------------- 6 files changed, 194 insertions(+), 344 deletions(-) create mode 100644 packages/taler-wallet-webextension/src/components/TransactionItem.tsx diff --git a/packages/taler-wallet-webextension/src/components/TransactionItem.tsx b/packages/taler-wallet-webextension/src/components/TransactionItem.tsx new file mode 100644 index 000000000..e5545b950 --- /dev/null +++ b/packages/taler-wallet-webextension/src/components/TransactionItem.tsx @@ -0,0 +1,169 @@ +import { AmountString, Timestamp, Transaction, TransactionType } from '@gnu-taler/taler-util'; +import { format, formatDistance } from 'date-fns'; +import { h } from 'preact'; +import imageBank from '../../static/img/ri-bank-line.svg'; +import imageHandHeart from '../../static/img/ri-hand-heart-line.svg'; +import imageRefresh from '../../static/img/ri-refresh-line.svg'; +import imageRefund from '../../static/img/ri-refund-2-line.svg'; +import imageShoppingCart from '../../static/img/ri-shopping-cart-line.svg'; +import { Pages } from "../NavigationBar"; +import { Column, ExtraLargeText, HistoryRow, SmallTextLight, LargeText } from './styled/index'; + +export function TransactionItem(props: { tx: Transaction, multiCurrency: boolean }): JSX.Element { + const tx = props.tx; + switch (tx.type) { + case TransactionType.Withdrawal: + return ( + + ); + case TransactionType.Payment: + return ( + + ); + case TransactionType.Refund: + return ( + + ); + case TransactionType.Tip: + return ( + + ); + case TransactionType.Refresh: + return ( + + ); + case TransactionType.Deposit: + return ( + + ); + } +} + +function TransactionLayout(props: TransactionLayoutProps): JSX.Element { + const date = new Date(props.timestamp.t_ms); + const dateStr = format(date, 'dd MMM, hh:mm') + + return ( + + + + + {props.title} + {props.pending ? ( + (Pending) + ) : null} + + {dateStr} + + + + ); +} + +interface TransactionLayoutProps { + debitCreditIndicator: "debit" | "credit" | "unknown"; + amount: AmountString | "unknown"; + timestamp: Timestamp; + title: string; + id: string; + iconPath: string; + pending: boolean; + multiCurrency: boolean; +} + +interface TransactionAmountProps { + debitCreditIndicator: "debit" | "credit" | "unknown"; + amount: AmountString | "unknown"; + pending: boolean; + multiCurrency: boolean; +} + +function TransactionAmount(props: TransactionAmountProps): JSX.Element { + const [currency, amount] = props.amount.split(":"); + let sign: string; + switch (props.debitCreditIndicator) { + case "credit": + sign = "+"; + break; + case "debit": + sign = "-"; + break; + case "unknown": + sign = ""; + } + return ( + + + {sign} + {amount} + + {props.multiCurrency &&
{currency}
} +
+ ); +} + diff --git a/packages/taler-wallet-webextension/src/components/styled/index.tsx b/packages/taler-wallet-webextension/src/components/styled/index.tsx index 6067fa446..66595d84c 100644 --- a/packages/taler-wallet-webextension/src/components/styled/index.tsx +++ b/packages/taler-wallet-webextension/src/components/styled/index.tsx @@ -269,6 +269,7 @@ export const RowLightBorderGray = styled(Row2)` export const HistoryRow = styled.a` text-decoration: none; + color: #212121; display: flex; justify-content: space-between; @@ -312,6 +313,10 @@ export const LightText = styled.div` export const SmallText = styled.div` font-size: small; ` +export const LargeText = styled.div` + font-size: large; +` + export const ExtraLargeText = styled.div` font-size: x-large; ` diff --git a/packages/taler-wallet-webextension/src/popup/History.stories.tsx b/packages/taler-wallet-webextension/src/popup/History.stories.tsx index c92033d49..c304b86e6 100644 --- a/packages/taler-wallet-webextension/src/popup/History.stories.tsx +++ b/packages/taler-wallet-webextension/src/popup/History.stories.tsx @@ -48,7 +48,7 @@ const exampleData = { withdraw: { ...commonTransaction, type: TransactionType.Withdrawal, - exchangeBaseUrl: 'http://exchange.taler', + exchangeBaseUrl: 'http://exchange.demo.taler.net', withdrawalDetails: { confirmed: false, exchangePaytoUris: ['payto://x-taler-bank/bank/account'], diff --git a/packages/taler-wallet-webextension/src/popup/History.tsx b/packages/taler-wallet-webextension/src/popup/History.tsx index fd97d975f..77d603886 100644 --- a/packages/taler-wallet-webextension/src/popup/History.tsx +++ b/packages/taler-wallet-webextension/src/popup/History.tsx @@ -14,19 +14,13 @@ TALER; see the file COPYING. If not, see */ -import { AmountString, Balance, Timestamp, Transaction, TransactionsResponse, TransactionType } from "@gnu-taler/taler-util"; -import { formatDistance } from "date-fns"; -import { JSX, h } from "preact"; +import { AmountString, Balance, Transaction, TransactionsResponse } from "@gnu-taler/taler-util"; +import { h, JSX } from "preact"; import { useEffect, useState } from "preact/hooks"; -import imageBank from '../../static/img/ri-bank-line.svg'; -import imageHandHeart from '../../static/img/ri-hand-heart-line.svg'; -import imageRefresh from '../../static/img/ri-refresh-line.svg'; -import imageRefund from '../../static/img/ri-refund-2-line.svg'; -import imageShoppingCart from '../../static/img/ri-shopping-cart-line.svg'; -import { Column, ExtraLargeText, HistoryRow, PopupBox, SmallTextLight } from "../components/styled"; +import { PopupBox } from "../components/styled"; +import { TransactionItem } from "../components/TransactionItem"; import { useBalances } from "../hooks/useBalances"; import * as wxApi from "../wxApi"; -import { Pages } from "../NavigationBar"; export function HistoryPage(props: any): JSX.Element { @@ -59,20 +53,20 @@ function amountToString(c: AmountString) { export function HistoryView({ list, balances }: { list: Transaction[], balances: Balance[] }) { + const multiCurrency = balances.length > 1 return {balances.length > 0 &&
- {balances.length === 1 &&
- Balance: {amountToString(balances[0].available)} -
} - {balances.length > 1 &&
+ {multiCurrency ?
Balance:
    {balances.map(b =>
  • {b.available}
  • )}
+
:
+ Balance: {amountToString(balances[0].available)}
}
}
{list.slice(0, 3).map((tx, i) => ( - + ))}
@@ -83,160 +77,3 @@ export function HistoryView({ list, balances }: { list: Transaction[], balances:
} - -function TransactionItem(props: { tx: Transaction }): JSX.Element { - const tx = props.tx; - switch (tx.type) { - case TransactionType.Withdrawal: - return ( - - ); - case TransactionType.Payment: - return ( - - ); - case TransactionType.Refund: - return ( - - ); - case TransactionType.Tip: - return ( - - ); - case TransactionType.Refresh: - return ( - - ); - case TransactionType.Deposit: - return ( - - ); - } -} - -function TransactionLayout(props: TransactionLayoutProps): JSX.Element { - const date = new Date(props.timestamp.t_ms); - const now = new Date(); - const dateStr = formatDistance(date, now, { addSuffix: true }) - return ( - - - - - {props.title} - {props.pending ? ( - (Pending) - ) : null} - - {dateStr} - - - - ); -} - -interface TransactionLayoutProps { - debitCreditIndicator: "debit" | "credit" | "unknown"; - amount: AmountString | "unknown"; - timestamp: Timestamp; - title: string; - id: string; - subtitle: string; - iconPath: string; - pending: boolean; -} - -interface TransactionAmountProps { - debitCreditIndicator: "debit" | "credit" | "unknown"; - amount: AmountString | "unknown"; - pending: boolean; -} - -function TransactionAmount(props: TransactionAmountProps): JSX.Element { - const [currency, amount] = props.amount.split(":"); - let sign: string; - switch (props.debitCreditIndicator) { - case "credit": - sign = "+"; - break; - case "debit": - sign = "-"; - break; - case "unknown": - sign = ""; - } - return ( - - - {sign} - {amount} - -
{currency}
-
- ); -} - diff --git a/packages/taler-wallet-webextension/src/wallet/History.stories.tsx b/packages/taler-wallet-webextension/src/wallet/History.stories.tsx index 7db13fef5..32499a264 100644 --- a/packages/taler-wallet-webextension/src/wallet/History.stories.tsx +++ b/packages/taler-wallet-webextension/src/wallet/History.stories.tsx @@ -50,7 +50,7 @@ const exampleData = { withdraw: { ...commonTransaction(), type: TransactionType.Withdrawal, - exchangeBaseUrl: 'http://exchange.taler', + exchangeBaseUrl: 'http://exchange.demo.taler.net', withdrawalDetails: { confirmed: false, exchangePaytoUris: ['payto://x-taler-bank/bank/account'], @@ -64,7 +64,7 @@ const exampleData = { info: { contractTermsHash: 'ASDZXCASD', merchant: { - name: 'the merchant', + name: 'Blog', }, orderId: '2021.167-03NPY6MCYMVGT', products: [], @@ -88,7 +88,7 @@ const exampleData = { tip: { ...commonTransaction(), type: TransactionType.Tip, - merchantBaseUrl: 'http://merchant.taler', + merchantBaseUrl: 'http://ads.merchant.taler.net/', } as TransactionTip, refund: { ...commonTransaction(), diff --git a/packages/taler-wallet-webextension/src/wallet/History.tsx b/packages/taler-wallet-webextension/src/wallet/History.tsx index 7f9a9b1a8..2bb59fcdb 100644 --- a/packages/taler-wallet-webextension/src/wallet/History.tsx +++ b/packages/taler-wallet-webextension/src/wallet/History.tsx @@ -14,19 +14,14 @@ TALER; see the file COPYING. If not, see */ -import { AmountString, Balance, Timestamp, Transaction, TransactionsResponse, TransactionType } from "@gnu-taler/taler-util"; +import { AmountString, Balance, Transaction, TransactionsResponse } from "@gnu-taler/taler-util"; import { format } from "date-fns"; -import { Fragment, JSX, h } from "preact"; +import { Fragment, h, JSX } from "preact"; import { useEffect, useState } from "preact/hooks"; -import imageBank from '../../static/img/ri-bank-line.svg'; -import imageHandHeart from '../../static/img/ri-hand-heart-line.svg'; -import imageRefresh from '../../static/img/ri-refresh-line.svg'; -import imageRefund from '../../static/img/ri-refund-2-line.svg'; -import imageShoppingCart from '../../static/img/ri-shopping-cart-line.svg'; -import { Column, ExtraLargeText, HistoryRow, WalletBox, DateSeparator, SmallTextLight } from "../components/styled"; +import { DateSeparator, WalletBox } from "../components/styled"; +import { TransactionItem } from "../components/TransactionItem"; import { useBalances } from "../hooks/useBalances"; import * as wxApi from "../wxApi"; -import { Pages } from "../NavigationBar"; export function HistoryPage(props: any): JSX.Element { @@ -65,6 +60,8 @@ export function HistoryView({ list, balances }: { list: Transaction[], balances: return rv; }, {} as { [x: string]: Transaction[] }); + const multiCurrency = balances.length > 1 + return {balances.length > 0 &&
{balances.length === 1 &&
@@ -81,168 +78,10 @@ export function HistoryView({ list, balances }: { list: Transaction[], balances: return {d} {byDate[d].map((tx, i) => ( - + ))} })} } - -function TransactionItem(props: { tx: Transaction }): JSX.Element { - const tx = props.tx; - switch (tx.type) { - case TransactionType.Withdrawal: - return ( - - ); - case TransactionType.Payment: - return ( - - ); - case TransactionType.Refund: - return ( - - ); - case TransactionType.Tip: - return ( - - ); - case TransactionType.Refresh: - return ( - - ); - case TransactionType.Deposit: - return ( - - ); - } -} - -function TransactionLayout(props: TransactionLayoutProps): JSX.Element { - const date = new Date(props.timestamp.t_ms); - const dateStr = format(date, 'HH:mm:ss') - return ( - // - - - - - {props.title} - {props.pending ? ( - (Pending) - ) : null} - - {dateStr} - - - - // - ); -} - -interface TransactionLayoutProps { - debitCreditIndicator: "debit" | "credit" | "unknown"; - amount: AmountString | "unknown"; - timestamp: Timestamp; - title: string; - id: string; - subtitle: string; - iconPath: string; - pending: boolean; -} - -interface TransactionAmountProps { - debitCreditIndicator: "debit" | "credit" | "unknown"; - amount: AmountString | "unknown"; - pending: boolean; -} - -function TransactionAmount(props: TransactionAmountProps): JSX.Element { - const [currency, amount] = props.amount.split(":"); - let sign: string; - switch (props.debitCreditIndicator) { - case "credit": - sign = "+"; - break; - case "debit": - sign = "-"; - break; - case "unknown": - sign = ""; - } - return ( - - - {sign} - {amount} - -
{currency}
-
- ); -} - -- cgit v1.2.3