Skip to content

Commit 00ea744

Browse files
committed
chore: PR feedback
1 parent 4a11a8d commit 00ea744

File tree

3 files changed

+31
-49
lines changed

3 files changed

+31
-49
lines changed

src/features/transactions/components/transaction-view-table.tsx

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,31 +2,19 @@ import { cn } from '@/features/common/utils'
22
import { TransactionModel, TransactionType } from '../models'
33
import { DisplayAlgo } from '@/features/common/components/display-algo'
44
import { ellipseAddress } from '@/utils/ellipse-address'
5+
import { flattenInnerTransactions } from '@/utils/flatten-inner-transactions'
6+
import { useMemo } from 'react'
57

68
const graphConfig = {
79
indentationWidth: 20,
810
}
911

10-
type FlattenedTransaction = {
11-
nestingLevel: number
12-
transaction: TransactionModel
13-
}
14-
15-
function flattenInnerTransactions(transaction: TransactionModel, nestingLevel = 0): FlattenedTransaction[] {
16-
return [
17-
{
18-
nestingLevel,
19-
transaction,
20-
},
21-
].concat(transaction.transactions?.flatMap((transaction) => flattenInnerTransactions(transaction, nestingLevel + 1)) ?? [])
22-
}
23-
2412
type Props = {
2513
transaction: TransactionModel
2614
}
2715

2816
export function TransactionViewTable({ transaction }: Props) {
29-
const flattenedTransactions = flattenInnerTransactions(transaction)
17+
const flattenedTransactions = useMemo(() => flattenInnerTransactions(transaction), [transaction])
3018

3119
return (
3220
<table className={cn('w-full')}>

src/features/transactions/components/transaction-view-visual.tsx

Lines changed: 13 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import { DisplayAlgo } from '@/features/common/components/display-algo'
1111
import { DescriptionList } from '@/features/common/components/description-list'
1212
import { ellipseAddress } from '@/utils/ellipse-address'
1313
import { transactionPageConstants } from '@/features/theme/constant'
14+
import { flattenInnerTransactions } from '@/utils/flatten-inner-transactions'
1415

1516
const graphConfig = {
1617
rowHeight: 40,
@@ -262,38 +263,6 @@ function TransactionRow({
262263
)
263264
}
264265

265-
function unpackTransaction(transaction: TransactionModel, nestingLevel = 0) {
266-
let transactionCount = 1
267-
let accounts: string[] = []
268-
let maxNestingLevel = nestingLevel
269-
270-
accounts.push(transaction.sender)
271-
if (transaction.type === TransactionType.Payment) {
272-
accounts.push(transaction.receiver)
273-
}
274-
275-
transaction.transactions?.forEach((transaction) => {
276-
const {
277-
transactionCount: childTransactionCount,
278-
accounts: childAccounts,
279-
nestingLevel: childNestingLevel,
280-
} = unpackTransaction(transaction, nestingLevel + 1)
281-
282-
transactionCount += childTransactionCount
283-
accounts = [...accounts, ...childAccounts]
284-
maxNestingLevel = Math.max(maxNestingLevel, childNestingLevel)
285-
})
286-
287-
// Remove duplicates
288-
accounts = Array.from(new Set(accounts))
289-
290-
return {
291-
transactionCount: transactionCount,
292-
accounts: accounts,
293-
nestingLevel: maxNestingLevel,
294-
}
295-
}
296-
297266
function calcArrow(transaction: TransactionModel, accounts: string[]): Arrow {
298267
const fromAccount = accounts.findIndex((a) => transaction.sender === a)
299268

@@ -320,13 +289,23 @@ type Props = {
320289
}
321290

322291
export function TransactionViewVisual({ transaction }: Props) {
323-
const { transactionCount, accounts, nestingLevel } = unpackTransaction(transaction)
292+
const flattenedTransactions = useMemo(() => flattenInnerTransactions(transaction), [transaction])
293+
const transactionCount = flattenedTransactions.length
294+
const accounts = Array.from(
295+
new Set([
296+
...flattenedTransactions
297+
.map((t) => [t.transaction.sender, t.transaction.type === TransactionType.Payment ? t.transaction.receiver : undefined])
298+
.flat()
299+
.filter(isDefined),
300+
])
301+
)
302+
const maxNestingLevel = Math.max(...flattenedTransactions.map((t) => t.nestingLevel))
324303

325304
return (
326305
<div
327306
className={cn('relative grid')}
328307
style={{
329-
gridTemplateColumns: `minmax(${graphConfig.colWidth}px, ${graphConfig.colWidth + nestingLevel * graphConfig.indentationWidth}px) repeat(${accounts.length}, ${graphConfig.colWidth}px)`,
308+
gridTemplateColumns: `minmax(${graphConfig.colWidth}px, ${graphConfig.colWidth + maxNestingLevel * graphConfig.indentationWidth}px) repeat(${accounts.length}, ${graphConfig.colWidth}px)`,
330309
gridTemplateRows: `repeat(${transactionCount + 1}, ${graphConfig.rowHeight}px)`,
331310
}}
332311
>
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { TransactionModel } from '@/features/transactions/models'
2+
3+
export type FlattenedTransaction = {
4+
nestingLevel: number
5+
transaction: TransactionModel
6+
}
7+
8+
export function flattenInnerTransactions(transaction: TransactionModel, nestingLevel = 0): FlattenedTransaction[] {
9+
return [
10+
{
11+
nestingLevel,
12+
transaction,
13+
},
14+
].concat(transaction.transactions?.flatMap((transaction) => flattenInnerTransactions(transaction, nestingLevel + 1)) ?? [])
15+
}

0 commit comments

Comments
 (0)