Guard block detail fetch state
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user