From 2e59b9d19c8eb6fc28d29c262534df5c49d45e68 Mon Sep 17 00:00:00 2001 From: defiQUG Date: Thu, 16 Apr 2026 14:27:44 -0700 Subject: [PATCH] Tighten block transaction drilldown paging --- frontend/src/pages/blocks/[number].tsx | 21 ++++++++++---- .../src/services/api/transactions.test.ts | 14 ++++++++++ frontend/src/services/api/transactions.ts | 28 +++++++++++++++---- 3 files changed, 51 insertions(+), 12 deletions(-) diff --git a/frontend/src/pages/blocks/[number].tsx b/frontend/src/pages/blocks/[number].tsx index b83ed4d..97fd0a0 100644 --- a/frontend/src/pages/blocks/[number].tsx +++ b/frontend/src/pages/blocks/[number].tsx @@ -21,6 +21,8 @@ export default function BlockDetailPage() { const [blockTransactions, setBlockTransactions] = useState([]) const [loading, setLoading] = useState(true) const [transactionsLoading, setTransactionsLoading] = useState(true) + const [transactionsError, setTransactionsError] = useState(false) + const [hasNextTransactionsPage, setHasNextTransactionsPage] = useState(false) const [transactionPage, setTransactionPage] = useState(1) const blockTransactionPageSize = 25 @@ -39,12 +41,17 @@ export default function BlockDetailPage() { const loadBlockTransactions = useCallback(async () => { setTransactionsLoading(true) + setTransactionsError(false) try { - const { ok, data } = await transactionsApi.listByBlockSafe(chainId, blockNumber, transactionPage, blockTransactionPageSize) - setBlockTransactions(ok ? data : []) + const { ok, data, hasNextPage } = await transactionsApi.listByBlockSafe(chainId, blockNumber, transactionPage, blockTransactionPageSize) + setBlockTransactions(data) + setHasNextTransactionsPage(hasNextPage) + setTransactionsError(!ok) } catch (error) { console.error('Failed to load block transactions:', error) setBlockTransactions([]) + setHasNextTransactionsPage(false) + setTransactionsError(true) } finally { setTransactionsLoading(false) } @@ -57,6 +64,8 @@ export default function BlockDetailPage() { if (!isValidBlock) { setLoading(false) setTransactionsLoading(false) + setTransactionsError(false) + setHasNextTransactionsPage(false) setBlock(null) setBlockTransactions([]) return @@ -81,8 +90,6 @@ export default function BlockDetailPage() { const gasUtilization = block && block.gas_limit > 0 ? Math.round((block.gas_used / block.gas_limit) * 100) : null - const canGoNextTransactionsPage = blockTransactions.length === blockTransactionPageSize - const transactionColumns = [ { header: 'Hash', @@ -232,7 +239,9 @@ export default function BlockDetailPage() { columns={transactionColumns} data={blockTransactions} emptyMessage={ - block.transaction_count > 0 + transactionsError + ? 'Unable to load indexed block transactions right now. Please retry from this page in a moment.' + : block.transaction_count > 0 ? 'No indexed block transactions were returned for this page yet.' : 'This block does not contain any indexed transactions.' } @@ -255,7 +264,7 @@ export default function BlockDetailPage() {