refactor: sync list items with onchain design#8731
Conversation
GladosBlueWallet
left a comment
There was a problem hiding this comment.
PR intent: UI refactor for Ark/Lightning transaction rows (on-chain-style icons, refill status view, strip SDK default memos) plus refill note/hash fixes. Verdict: Core logic is coherent, but you shipped dead asset duplication, an icon-file explosion, a NaN confirmations flash, and a whole commit about note sync with zero test coverage. The facility frowns.
Inline findings (could not anchor on diff)
screen/transactions/TransactionStatus.tsx:1123— [MEDIUM]boarding-*rows forcereceivedbefore Electrum returns, yetisOnChainTxstill prints confirmations.Number(undefined)is NaN — enjoy your 'confirmations: NaN' victory screen. You traded one flash for another.
GladosBlueWallet
left a comment
There was a problem hiding this comment.
REF/UI pass for Ark tx rows: unified icons, refill hash + detail screen, note-key helpers. Facility log notes note keys fracture on refill promotion, invoice icon tests barely exist, and one mislabeled pending invoice you carried forward like a cherished tumor. Commits ignore CONTRIBUTING prefixes; improvements/lint are not atomic. PR screenshot present.
| if (!tx) return undefined; | ||
| const txid = tx.txid; | ||
| // Ark refills keep the synthetic boarding- id as the note key (not the on-chain hash). | ||
| if (typeof txid === 'string' && txid.startsWith('boarding-')) return txid; |
There was a problem hiding this comment.
[HIGH] Your 'refill note sync' keys off boarding-* txids. Pending rows use boarding-utxo-…, settled rows use boarding-… — same deposit, two keys. Subject annotates a pending refill; settlement deletes the note. Congratulations on inventing amnesia.
|
|
||
| import { resolveTransactionListIconVariant } from '../../components/icons/TransactionListIcon'; | ||
|
|
||
| describe('resolveTransactionListIconVariant', () => { |
There was a problem hiding this comment.
[HIGH] Four assertions for a resolver with invoice expiry, paid_invoice, low-conf receives, and generic in/out paths. You tested the easy quadrants and declared victory. Edge-case coverage is essentially cake.
| label = loc.transactions.offchain; | ||
| } else if (iconVariant === 'expired') { | ||
| label = loc.transactions.expired_transaction; | ||
| } else if (iconVariant === 'pending' && (item.type === 'user_invoice' || item.type === 'payment_request') && !item.ispaid) { |
There was a problem hiding this comment.
[MEDIUM] Unpaid, not-yet-expired invoices get iconVariant === 'pending' but you stamp expired_transaction on the label. Pending icon, expired words — even our liars try harder.
| screen: 'SendDetails', | ||
| params: { | ||
| transactionMemo: loc.lnd.refill_lnd_balance, | ||
| transactionMemo: loc.lnd.refill, |
There was a problem hiding this comment.
[MEDIUM] Refill send memo downgraded from 'Refill Lightning Wallet Balance' to bare 'Refill'. Unrelated string surgery smuggled into a list-row PR — science loves surprise variables.
|
|
||
| const handleOnCopyAmountTap = useCallback(() => Clipboard.setString(rowTitle.replace(/[\s\\-]/g, '')), [rowTitle]); | ||
| const handleOnCopyTransactionID = useCallback(() => Clipboard.setString(item.hash), [item.hash]); | ||
| const handleOnCopyTransactionID = useCallback(() => Clipboard.setString(transactionIdentifier ?? ''), [transactionIdentifier]); |
There was a problem hiding this comment.
[LOW] Copy TXID falls back to payment_hash when hash is absent. Menu says TXID; clipboard gets a hash-shaped pretender. Mislabeling: also a form of testing.
|
Wake the fuck up samurai, we have PRs to merge [all PRs for @Overtorment] https://github.com/BlueWallet/BlueWallet/pulls/review-requested/Overtorment |
1 similar comment
|
Wake the fuck up samurai, we have PRs to merge [all PRs for @Overtorment] https://github.com/BlueWallet/BlueWallet/pulls/review-requested/Overtorment |

Uh oh!
There was an error while loading. Please reload this page.