diff --git a/src/components/popup/home/Transactions.tsx b/src/components/popup/home/Transactions.tsx index 83950e85..e4ea44b1 100644 --- a/src/components/popup/home/Transactions.tsx +++ b/src/components/popup/home/Transactions.tsx @@ -6,7 +6,6 @@ import { Loading, Text } from "@arconnect/components"; import { gql } from "~gateways/api"; import styled from "styled-components"; -import { balanceToFractioned, formatFiatBalance } from "~tokens/currency"; import { AO_RECEIVER_QUERY, AO_SENT_QUERY, @@ -20,6 +19,10 @@ import { suggestedGateways } from "~gateways/gateway"; import { Spacer } from "@arconnect/components"; import { Heading, ViewAll, TokenCount } from "../Title"; import { + getFormattedAmount, + getFormattedFiatAmount, + getFullMonthName, + getTransactionDescription, processTransactions, sortFn, type ExtendedTransaction @@ -118,49 +121,6 @@ export default function Transactions() { push(`/transaction/${id}?back=${encodeURIComponent("/transactions")}`); }; - const getFormattedAmount = (transaction: ExtendedTransaction) => { - switch (transaction.transactionType) { - case "sent": - case "received": - return `${parseFloat(transaction.node.quantity.ar).toFixed(3)} AR`; - case "aoSent": - case "aoReceived": - if (transaction.aoInfo) { - return `${balanceToFractioned(transaction.aoInfo.quantity, { - divisibility: transaction.aoInfo.denomination - }).toFixed()} ${transaction.aoInfo.tickerName}`; - } - return ""; - default: - return ""; - } - }; - - const getTransactionDescription = (transaction: ExtendedTransaction) => { - switch (transaction.transactionType) { - case "sent": - return `${browser.i18n.getMessage("sent")} AR`; - case "received": - return `${browser.i18n.getMessage("received")} AR`; - case "aoSent": - return `${browser.i18n.getMessage("sent")} ${ - transaction.aoInfo.tickerName - }`; - case "aoReceived": - return `${browser.i18n.getMessage("received")} ${ - transaction.aoInfo.tickerName - }`; - default: - return ""; - } - }; - - const getFullMonthName = (monthYear: string) => { - const [month, year] = monthYear.split("-").map(Number); - const date = new Date(year, month - 1); - return date.toLocaleString("default", { month: "long" }); - }; - return ( <> @@ -170,7 +130,7 @@ export default function Transactions() { - 0}> + 0 && !loading}> {!loading && (transactions.length > 0 ? ( transactions.map((transaction, index) => ( @@ -192,11 +152,7 @@ export default function Transactions() {
{getFormattedAmount(transaction)}
- {transaction.node.quantity && - formatFiatBalance( - transaction.node.quantity.ar, - currency - )} + {getFormattedFiatAmount(transaction, arPrice, currency)}
diff --git a/src/lib/transactions.ts b/src/lib/transactions.ts index cb2c348a..47d30e85 100644 --- a/src/lib/transactions.ts +++ b/src/lib/transactions.ts @@ -6,6 +6,9 @@ import { formatAddress } from "~utils/format"; import { ExtensionStorage } from "~utils/storage"; import { getTokenInfo } from "~tokens/aoTokens/router"; import type { Token } from "~tokens/token"; +import BigNumber from "bignumber.js"; +import browser from "webextension-polyfill"; +import { balanceToFractioned, formatFiatBalance } from "~tokens/currency"; let tokens: TokenInfo[] = null; export let tokenInfoMap = new Map(); @@ -126,3 +129,62 @@ export const processTransactions = async ( return Promise.resolve([]); } }; + +export const getFormattedAmount = (transaction: ExtendedTransaction) => { + switch (transaction.transactionType) { + case "sent": + case "received": + return `${parseFloat(transaction.node.quantity.ar).toFixed(3)} AR`; + case "aoSent": + case "aoReceived": + if (transaction.aoInfo) { + return `${balanceToFractioned(transaction.aoInfo.quantity, { + divisibility: transaction.aoInfo.denomination + }).toFixed()} ${transaction.aoInfo.tickerName}`; + } + return ""; + default: + return ""; + } +}; + +export const getFormattedFiatAmount = ( + transaction: ExtendedTransaction, + arPrice: number, + currency: string +) => { + try { + if (transaction.node.quantity) { + const fiatBalance = BigNumber(transaction.node.quantity.ar).multipliedBy( + arPrice + ); + return formatFiatBalance(fiatBalance, currency); + } + } catch {} + return ""; +}; + +export const getTransactionDescription = (transaction: ExtendedTransaction) => { + switch (transaction.transactionType) { + case "sent": + return `${browser.i18n.getMessage("sent")} AR`; + case "received": + return `${browser.i18n.getMessage("received")} AR`; + case "aoSent": + return `${browser.i18n.getMessage("sent")} ${ + transaction.aoInfo.tickerName + }`; + case "aoReceived": + return `${browser.i18n.getMessage("received")} ${ + transaction.aoInfo.tickerName + }`; + default: + return ""; + } +}; + +export const getFullMonthName = (monthYear: string) => { + const [month, year] = monthYear.split("-").map(Number); + const date = new Date(year, month - 1); + return date.toLocaleString("default", { month: "long" }); +}; diff --git a/src/routes/popup/transaction/transactions.tsx b/src/routes/popup/transaction/transactions.tsx index 3ab4592d..b476b310 100644 --- a/src/routes/popup/transaction/transactions.tsx +++ b/src/routes/popup/transaction/transactions.tsx @@ -7,7 +7,6 @@ import { useStorage } from "@plasmohq/storage/hook"; import { gql } from "~gateways/api"; import styled from "styled-components"; import { Empty, TitleMessage } from "../notifications"; -import { balanceToFractioned, formatFiatBalance } from "~tokens/currency"; import { AO_RECEIVER_QUERY_WITH_CURSOR, AO_SENT_QUERY_WITH_CURSOR, @@ -24,7 +23,11 @@ import { sortFn, processTransactions, type GroupedTransactions, - type ExtendedTransaction + type ExtendedTransaction, + getFormattedAmount, + getFormattedFiatAmount, + getFullMonthName, + getTransactionDescription } from "~lib/transactions"; const defaultCursors = ["", "", "", ""]; @@ -190,49 +193,6 @@ export default function Transactions() { push(`/transaction/${id}?back=${encodeURIComponent("/transactions")}`); }; - const getFormattedAmount = (transaction: ExtendedTransaction) => { - switch (transaction.transactionType) { - case "sent": - case "received": - return `${parseFloat(transaction.node.quantity.ar).toFixed(3)} AR`; - case "aoSent": - case "aoReceived": - if (transaction.aoInfo) { - return `${balanceToFractioned(transaction.aoInfo.quantity, { - divisibility: transaction.aoInfo.denomination - }).toFixed()} ${transaction.aoInfo.tickerName}`; - } - return ""; - default: - return ""; - } - }; - - const getTransactionDescription = (transaction: ExtendedTransaction) => { - switch (transaction.transactionType) { - case "sent": - return `${browser.i18n.getMessage("sent")} AR`; - case "received": - return `${browser.i18n.getMessage("received")} AR`; - case "aoSent": - return `${browser.i18n.getMessage("sent")} ${ - transaction.aoInfo.tickerName - }`; - case "aoReceived": - return `${browser.i18n.getMessage("received")} ${ - transaction.aoInfo.tickerName - }`; - default: - return ""; - } - }; - - const getFullMonthName = (monthYear: string) => { - const [month, year] = monthYear.split("-").map(Number); - const date = new Date(year, month - 1); - return date.toLocaleString("default", { month: "long" }); - }; - return ( <> @@ -260,11 +220,11 @@ export default function Transactions() {
{getFormattedAmount(transaction)}
- {transaction.node.quantity && - formatFiatBalance( - transaction.node.quantity.ar, - currency - )} + {getFormattedFiatAmount( + transaction, + arPrice, + currency + )}