/ src / components / search / stats.tsx
stats.tsx
 1  "use client"
 2  import { Wifi, WifiOff, Layers, Hash, HardDrive, CheckCircle } from "lucide-react"
 3  import { formatNumber, formatBytes } from '@/services/api/main'
 4  import { useNetwork } from '@/contexts/networkcontext'
 5  interface NetworkData {
 6    latestBlock: number
 7    totalTransactions: number
 8    totalPayloadSize: number
 9    successRate: number
10    isConnected: boolean
11  }
12  
13  interface LiveStatsProps {
14    liveStreaming: boolean
15    networkData: NetworkData
16  }
17  
18  export default function LiveStats({ liveStreaming, networkData }: LiveStatsProps) {
19    const { currentNetwork, switchNetwork, isMainnet, isTestnet } = useNetwork();
20    
21    return (
22      <div className="text-center space-y-6">
23        <h1 className="text-3xl font-medium tracking-wide text-gray-900">COMPOSABLE SCAN</h1>
24        <div className="flex items-center justify-center gap-x-4 text-sm text-gray-600 overflow-x-auto">
25          <span className="flex items-center gap-2 whitespace-nowrap">
26            {networkData.isConnected ? (
27              <Wifi className="w-4 h-4 text-green-500" />
28            ) : (
29              <WifiOff className="w-4 h-4 text-red-500" />
30            )}
31            <button
32              onClick={() => switchNetwork(isMainnet ? 'testnet' : 'mainnet')}
33              className={`
34                px-3 py-1 text-xs font-bold rounded-full transition-all duration-200 shadow-sm
35                ${isMainnet 
36                  ? 'bg-green-500 hover:bg-green-600 text-white' 
37                  : 'bg-orange-500 hover:bg-orange-600 text-white'
38                }
39              `}
40              title={`Switch to ${isMainnet ? 'testnet' : 'mainnet'}`}
41            >
42              {currentNetwork.toUpperCase()}
43            </button>
44          </span>
45          <span className="flex items-center gap-1 whitespace-nowrap">
46            <Layers className="w-4 h-4 text-gray-500" />
47            <span className="font-mono">Block #{networkData.latestBlock}</span>
48          </span>
49          <span className="flex items-center gap-1 whitespace-nowrap">
50            <Hash className="w-4 h-4 text-gray-500" />
51            <span className="font-mono">TXs: #{networkData.totalTransactions}</span>
52          </span>
53          <span className="flex items-center gap-1 whitespace-nowrap">
54            <HardDrive className="w-4 h-4 text-gray-500" />
55            <span className="font-mono">Data: {formatBytes(networkData.totalPayloadSize)}</span>
56          </span>
57          <span className="flex items-center gap-1 whitespace-nowrap">
58            <CheckCircle className="w-4 h-4 text-gray-500" />
59            <span className="font-mono">Success: {(networkData.successRate * 100).toFixed(2)}%</span>
60          </span>
61        </div>
62      </div>
63    )
64  }