import { useParams, Link } from 'react-router-dom';
import { Box, Clock, ArrowUpRight, Layers, Activity, Zap } from 'lucide-react';
import { useBlock } from '../hooks/useApi';
import TransactionList from '../components/TransactionList';
import CopyButton from '../components/CopyButton';
import BlockRelationshipDiagram from '../components/BlockRelationshipDiagram';
import { formatDateTime, truncateHash } from '../lib/utils';
export default function Block() {
const { hash } = useParams<{ hash: string }>();
const { data: block, isLoading, error } = useBlock(hash || '');
if (!hash) {
return
Block hash is required
;
}
if (isLoading) {
return ;
}
if (error) {
return (
Error loading block: {error.message}
);
}
if (!block) {
return Block not found
;
}
return (
{/* Modern Header */}
{/* Background glow */}
Block Details
Blue Score: {block.blueScore.toLocaleString()}
{block.isChainBlock && (
Chain Block
)}
{/* Quick stats */}
Transactions
{block.transactionCount}
{/* Block Relationship Diagram */}
{/* Block Info Card */}
Block Information
{block.hash}
{formatDateTime(block.timestamp)}
{block.blueScore.toLocaleString()}
{block.daaScore.toLocaleString()}
{block.difficulty.toLocaleString()}
{block.transactionCount}
{block.version}
{block.nonce.toLocaleString()}
{block.blueWork}
{/* Parent Blocks */}
{block.parentHashes.length > 0 && (
Parent Blocks ({block.parentHashes.length})
{block.parentHashes.map((parentHash, i) => (
{i === 0 && (
Selected
)}
{truncateHash(parentHash, 16, 16)}
))}
)}
{/* Child Blocks */}
{block.childrenHashes.length > 0 && (
Child Blocks ({block.childrenHashes.length})
{block.childrenHashes.map((childHash) => (
{truncateHash(childHash, 16, 16)}
))}
)}
{/* Transactions */}
{block.transactions && block.transactions.length > 0 && (
)}
);
}
function InfoRow({ label, children }: { label: string; children: React.ReactNode }) {
return (
{label}
{children}
);
}
function BlockSkeleton() {
return (
{Array.from({ length: 8 }).map((_, i) => (
))}
);
}