import { toUnit } from '@lamassu/coins/lightUtils' import BigNumber from 'bignumber.js' import * as R from 'ramda' import React from 'react' import DataTable from '../../../components/tables/DataTable' import { H3, H4, Label1, Label2, P } from '../../../components/typography' import TxInIcon from '../../../styling/icons/direction/cash-in.svg?react' import TxOutIcon from '../../../styling/icons/direction/cash-out.svg?react' import { ifNotNull } from '../../../utils/nullCheck' import { formatDate } from '../../../utils/timezones' import CopyToClipboard from '../../../components/CopyToClipboard.jsx' const TransactionsList = ({ customer, data, loading }) => { const LastTxIcon = customer.lastTxClass === 'cashOut' ? TxOutIcon : TxInIcon const hasData = !(R.isEmpty(data) || R.isNil(data)) const { lastUsedMachineName } = customer const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone const summaryElements = [ { header: 'Transactions', size: 127, value: ifNotNull( customer.totalTxs, `${Number.parseInt(customer.totalTxs)}`, ), }, { header: 'Transaction volume', size: 167, value: ifNotNull( customer.totalSpent, `${Number.parseFloat(customer.totalSpent)} ${customer.lastTxFiatCode}`, ), }, { header: 'Last active', size: 142, value: !R.isNil(timezone) && ((customer.lastActive && formatDate(customer.lastActive, timezone, 'yyyy-MM-dd')) ?? ''), }, { header: 'Last transaction', size: 198, value: ifNotNull( customer.lastTxFiat, <> {`${Number.parseFloat(customer.lastTxFiat)} ${customer.lastTxFiatCode}`} , ), }, { header: 'Last used machine', size: 198, value: ifNotNull(lastUsedMachineName, <>{lastUsedMachineName}), }, ] const tableElements = [ { width: 40, view: it => ( <> {it.txClass === 'cashOut' ? ( ) : ( )} ), }, { header: 'Machine', width: 160, view: R.path(['machineName']), }, { header: 'Transaction ID', width: 145, view: it => ( {it.id} ), }, { header: 'Cash', width: 155, textAlign: 'right', view: it => ( <> {`${Number.parseFloat(it.fiat)} `} {it.fiatCode} ), }, { header: 'Crypto', width: 145, textAlign: 'right', view: it => ( <> {`${toUnit(new BigNumber(it.cryptoAtoms), it.cryptoCode).toFormat( 5, )} `} {it.cryptoCode} ), }, { header: 'Date', width: 100, view: it => formatDate(it.created, timezone, 'yyyy‑MM‑dd'), }, { header: 'Time (h:m:s)', width: 130, view: it => formatDate(it.created, timezone, 'HH:mm:ss'), }, ] return ( <>

Transactions

{summaryElements.map(({ size, header }, idx) => ( {header} ))}
{summaryElements.map(({ size, value }, idx) => (

{value}

))}
{loading ? (

Loading

) : hasData ? ( ) : (

No transactions so far

)}
) } export default TransactionsList