diff --git a/src/components/ChainDataSections.tsx b/src/components/ChainDataSections.tsx index ea9b2d0..f844aa5 100644 --- a/src/components/ChainDataSections.tsx +++ b/src/components/ChainDataSections.tsx @@ -5,6 +5,7 @@ import type { SuiChainData, CosmosChainData, EthereumChainData, + PolkadotChainData, } from '@/types/api'; // --- Styles (matching ValidatorProfile patterns) --- @@ -699,6 +700,38 @@ function EthereumChainSections({ ); } +function PolkadotChainSections({ + data, + isMobile, +}: { + data: PolkadotChainData; + isMobile: boolean; +}) { + // Replaces the demoted dot_not_elected feed event. Badge renders + // only when the worker has populated chain_data.is_elected — during + // the deploy gap window where worker is_elected hasn't reached prod + // yet, undefined would render falsy and incorrectly show "No". Better + // to render nothing than to show wrong data. + if (typeof data.is_elected !== 'boolean') { + return null; + } + return ( +
+ + {data.is_elected ? 'Yes' : 'No'} + + } + /> + {data.observed_at_block != null && ( + + )} +
+ ); +} + // --- Main export --- interface ChainDataSectionsProps { @@ -721,6 +754,8 @@ export function ChainDataSections({ chainData, isMobile }: ChainDataSectionsProp return ( ); + case 'polkadot': + return ; default: return null; } diff --git a/src/types/api.ts b/src/types/api.ts index cf30689..379be55 100644 --- a/src/types/api.ts +++ b/src/types/api.ts @@ -478,6 +478,11 @@ export interface EthereumChainData { slashed: boolean; } +export interface PolkadotChainData { + is_elected: boolean; + observed_at_block: number; +} + // --- Scan Analysis --- export interface ScanAnalysisSummary {