Guard block detail fetch state

This commit is contained in:
defiQUG
2026-04-16 15:46:48 -07:00
parent 06070e479e
commit 39d2f2482b

View File

@@ -1,6 +1,6 @@
'use client' 'use client'
import { useCallback, useEffect, useMemo, useState } from 'react' import { useEffect, useMemo, useState } from 'react'
import { useRouter } from 'next/router' import { useRouter } from 'next/router'
import { blocksApi, Block } from '@/services/api/blocks' import { blocksApi, Block } from '@/services/api/blocks'
import { Card, Address, Table } from '@/libs/frontend-ui-primitives' import { Card, Address, Table } from '@/libs/frontend-ui-primitives'
@@ -34,19 +34,6 @@ export default function BlockDetailPage() {
enabled: router.isReady && isValidBlock, enabled: router.isReady && isValidBlock,
}) })
const loadBlock = useCallback(async () => {
setLoading(true)
try {
const response = await blocksApi.getByNumber(chainId, blockNumber)
setBlock(response.data)
} catch (error) {
console.error('Failed to load block:', error)
setBlock(null)
} finally {
setLoading(false)
}
}, [chainId, blockNumber])
useEffect(() => { useEffect(() => {
if (!router.isReady) { if (!router.isReady) {
return return
@@ -56,8 +43,34 @@ export default function BlockDetailPage() {
setBlock(null) setBlock(null)
return return
} }
void loadBlock()
}, [isValidBlock, loadBlock, router.isReady]) let cancelled = false
setLoading(true)
void (async () => {
try {
const response = await blocksApi.getByNumber(chainId, blockNumber)
if (cancelled) {
return
}
setBlock(response.data)
} catch (error) {
console.error('Failed to load block:', error)
if (cancelled) {
return
}
setBlock(null)
} finally {
if (!cancelled) {
setLoading(false)
}
}
})()
return () => {
cancelled = true
}
}, [blockNumber, chainId, isValidBlock, router.isReady])
const gasUtilization = block && block.gas_limit > 0 const gasUtilization = block && block.gas_limit > 0
? Math.round((block.gas_used / block.gas_limit) * 100) ? Math.round((block.gas_used / block.gas_limit) * 100)