Skip to content

Commit 8a6cc55

Browse files
authored
Merge pull request #986 from PayButton/feat/format-amount-payments
feat: format numbers payments
2 parents def434f + 927df25 commit 8a6cc55

5 files changed

Lines changed: 38 additions & 30 deletions

File tree

pages/payments/index.tsx

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import XECIcon from 'assets/xec-logo.png'
1111
import BCHIcon from 'assets/bch-logo.png'
1212
import EyeIcon from 'assets/eye-icon.png'
1313
import { formatQuoteValue, compareNumericString, removeUnserializableFields } from 'utils/index'
14-
import { XEC_NETWORK_ID, BCH_TX_EXPLORER_URL, XEC_TX_EXPLORER_URL, NETWORK_TICKERS_FROM_ID } from 'constants/index'
14+
import { XEC_NETWORK_ID, BCH_TX_EXPLORER_URL, XEC_TX_EXPLORER_URL, NETWORK_TICKERS_FROM_ID, DECIMALS } from 'constants/index'
1515
import moment from 'moment-timezone'
1616
import TopBar from 'components/TopBar'
1717
import { fetchUserWithSupertokens, UserWithSupertokens } from 'services/userService'
@@ -144,10 +144,26 @@ export default function Payments ({ user, userId }: PaybuttonsProps): React.Reac
144144
},
145145
{
146146
Header: () => (<div style={{ textAlign: 'right' }}>Amount</div>),
147+
accessor: 'amount',
148+
sortType: compareNumericString,
149+
Cell: (cellProps) => {
150+
const { networkId, amount } = cellProps.cell.row.original
151+
const networkTicker = NETWORK_TICKERS_FROM_ID[networkId]
152+
const formattedAmount = Number(amount).toLocaleString(undefined, {
153+
minimumFractionDigits: DECIMALS[networkTicker],
154+
maximumFractionDigits: DECIMALS[networkTicker]
155+
})
156+
157+
return <div style={{ textAlign: 'right', fontWeight: '600' }}>{formattedAmount}</div>
158+
}
159+
},
160+
{
161+
Header: () => (<div style={{ textAlign: 'right' }}>Value</div>),
147162
accessor: 'values',
148163
sortType: compareNumericString,
164+
disableSortBy: true,
149165
Cell: (cellProps) => {
150-
return <div style={{ textAlign: 'right', fontWeight: '600' }}> {cellProps.cell.value.amount} (${formatQuoteValue(cellProps.cell.value.values, user.userProfile.preferredCurrencyId)})</div>
166+
return <div style={{ textAlign: 'right', fontWeight: '600' }}> ${formatQuoteValue(cellProps.cell.value, user.userProfile.preferredCurrencyId)}</div>
151167
}
152168
},
153169
{

redis/dashboardCache.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -69,14 +69,14 @@ export const getButtonPaymentData = (n: number, periodString: string, paymentLis
6969
},
7070
total: {
7171
payments: 1,
72-
revenue: p.values.values
72+
revenue: p.values
7373
}
7474
}
7575
buttonPaymentData[b.id] = newEntry
7676
return
7777
}
7878
prevObj.total.payments += 1
79-
prevObj.total.revenue = sumQuoteValues(prevObj.total.revenue, p.values.values)
79+
prevObj.total.revenue = sumQuoteValues(prevObj.total.revenue, p.values)
8080
prevObj.displayData.isXec = prevObj.displayData.isXec === true || (p.networkId === XEC_NETWORK_ID)
8181
prevObj.displayData.isBch = prevObj.displayData.isBch === true || (p.networkId === BCH_NETWORK_ID)
8282
const lastPayment = prevObj.displayData.lastPayment as number
@@ -100,8 +100,8 @@ export const sumPaymentsValue = function (paymentList: Payment[]): QuoteValues {
100100
}
101101

102102
for (const p of paymentList) {
103-
ret.usd = ret.usd.plus(p.values.values.usd)
104-
ret.cad = ret.cad.plus(p.values.values.cad)
103+
ret.usd = ret.usd.plus(p.values.usd)
104+
ret.cad = ret.cad.plus(p.values.cad)
105105
}
106106
return ret
107107
}
@@ -161,11 +161,11 @@ const generateDashboardDataFromStream = async function (
161161
if (paybuttonIds !== undefined && paybuttonIds.length > 0) {
162162
const paymentButtonIds = payment.buttonDisplayDataList.map(b => b.id)
163163
if (paymentButtonIds.some(item => paybuttonIds.includes(item))) {
164-
revenueAccumulators[period][index] = sumQuoteValues(revenueAccumulators[period][index], payment.values.values)
164+
revenueAccumulators[period][index] = sumQuoteValues(revenueAccumulators[period][index], payment.values)
165165
paymentCounters[period][index] += 1
166166
}
167167
} else {
168-
revenueAccumulators[period][index] = sumQuoteValues(revenueAccumulators[period][index], payment.values.values)
168+
revenueAccumulators[period][index] = sumQuoteValues(revenueAccumulators[period][index], payment.values)
169169
paymentCounters[period][index] += 1
170170
}
171171
}
@@ -315,13 +315,13 @@ function processButtonData (
315315
lastPayment: payment.timestamp
316316
},
317317
total: {
318-
revenue: payment.values.values,
318+
revenue: payment.values,
319319
payments: 1
320320
}
321321
}
322322
} else {
323323
const buttonData = buttonDataAccumulators[period][button.id]
324-
buttonData.total.revenue = sumQuoteValues(buttonData.total.revenue, payment.values.values)
324+
buttonData.total.revenue = sumQuoteValues(buttonData.total.revenue, payment.values)
325325
buttonData.total.payments += 1
326326
buttonData.displayData.lastPayment = Math.max(
327327
buttonData.displayData.lastPayment ?? 0,

redis/paymentCache.ts

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -81,10 +81,8 @@ export const generatePaymentFromTx = async (tx: TransactionsWithPaybuttonsAndPri
8181
}
8282
return {
8383
timestamp: tx.timestamp,
84-
values: {
85-
values,
86-
amount: tx.amount
87-
},
84+
values,
85+
amount: tx.amount,
8886
networkId: tx.address.networkId,
8987
hash: tx.hash,
9088
buttonDisplayDataList,
@@ -112,7 +110,7 @@ export const generateAndCacheGroupedPaymentsAndInfoForAddress = async (address:
112110
paymentCount
113111
}
114112

115-
paymentList = paymentList.filter((p) => p.values.values.usd > new Prisma.Decimal(0))
113+
paymentList = paymentList.filter((p) => p.values.usd > new Prisma.Decimal(0))
116114
const groupedPayments = getPaymentsByWeek(address.address, paymentList)
117115
return {
118116
groupedPayments,
@@ -196,7 +194,7 @@ export const cacheManyTxs = async (txs: TransactionsWithPaybuttonsAndPrices[]):
196194
const zero = new Prisma.Decimal(0)
197195
for (const tx of txs.filter(tx => tx.amount > zero)) {
198196
const payment = await generatePaymentFromTx(tx)
199-
if (payment.values.values.usd !== new Prisma.Decimal(0)) {
197+
if (payment.values.usd !== new Prisma.Decimal(0)) {
200198
const paymentsGroupedByKey = getPaymentsByWeek(tx.address.address, [payment])
201199
void await cacheGroupedPaymentsAppend(paymentsGroupedByKey)
202200
}

redis/types.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,14 +46,11 @@ export interface ButtonDisplayData {
4646
lastPayment?: number
4747
providerUserId?: string
4848
}
49-
export interface AmountData {
50-
values: QuoteValues
51-
amount: Decimal
52-
}
5349

5450
export interface Payment {
5551
timestamp: number
56-
values: AmountData
52+
values: QuoteValues
53+
amount?: Decimal
5754
networkId: number
5855
hash: string
5956
buttonDisplayDataList: ButtonDisplayData[]

services/transactionService.ts

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -151,11 +151,10 @@ export async function fetchTransactionsByAddressListWithPagination (
151151
pageSize: number,
152152
orderBy?: string,
153153
orderDesc = true,
154-
networkIdsListFilter?: number[],
154+
networkIdsListFilter?: number[]
155155
): Promise<TransactionsWithPaybuttonsAndPrices[]> {
156-
157156
const orderDescString: Prisma.SortOrder = orderDesc ? 'desc' : 'asc'
158-
157+
159158
// Get query for orderBy that works with nested properties (e.g. `address.networkId`)
160159
let orderByQuery
161160
if (orderBy !== undefined && orderBy !== '') {
@@ -192,7 +191,7 @@ export async function fetchTransactionsByAddressListWithPagination (
192191
include: includePaybuttonsAndPrices,
193192
orderBy: orderByQuery,
194193
skip: page * pageSize,
195-
take: pageSize,
194+
take: pageSize
196195
})
197196
}
198197

@@ -578,7 +577,7 @@ export async function fetchTransactionsByPaybuttonIdWithPagination (
578577
pageSize,
579578
orderBy,
580579
orderDesc,
581-
networkIds);
580+
networkIds)
582581

583582
if (transactions.length === 0) {
584583
throw new Error(RESPONSE_MESSAGES.NO_TRANSACTION_FOUND_404.message)
@@ -705,11 +704,9 @@ export async function getPaymentsByUserIdOrderedByButtonName (
705704
})
706705
if (tx.amount > 0) {
707706
payments.push({
707+
amount: tx.amount,
708708
timestamp: tx.timestamp,
709-
values: {
710-
values: ret,
711-
amount: tx.amount
712-
},
709+
values: ret,
713710
networkId: tx.networkId,
714711
hash: tx.hash,
715712
buttonDisplayDataList

0 commit comments

Comments
 (0)