// Copyright 2017-2025 @polkadot/app-explorer authors & contributors // SPDX-License-Identifier: Apache-2.0 import type { AugmentedBlockHeader } from '@polkadot/react-hooks/ctx/types'; import React from 'react'; import { Link } from 'react-router-dom'; import { AddressSmall, styled } from '@polkadot/react-components'; import { formatNumber } from '@polkadot/util'; interface Props { headers: AugmentedBlockHeader[]; } function formatValue (value: number, type = 's', withDecimal = false): React.ReactNode { const [pre, post] = value.toFixed().split('.'); return withDecimal && post?.trim()?.length > 0 ? <>{pre}.{post} {type} ago : <>{pre} {type} ago; } function getDisplayValue (elapsed: number): React.ReactNode { return (elapsed < 60) ? formatValue(elapsed, 'secs', elapsed < 15) : (elapsed < 3600) ? formatValue(elapsed / 60, 'mins') : formatValue(elapsed / 3600, 'hrs'); } function BlockHeader ({ headers }: Props): React.ReactElement | null { return ( <> {headers.map((value, index) => { const hashHex = value.hash.toHex(); return (

{formatNumber(value.number)}

{hashHex} {value.author && ( )} {getDisplayValue((Date.now() - value.timestamp.toNumber()) / 1000)}
); })} ); } const BASE_BORDER = 0.125; const BORDER_TOP = `${BASE_BORDER * 3}rem solid var(--bg-page)`; const BORDER_RADIUS = `${BASE_BORDER * 4}rem`; const StyledTr = styled.tr<{isFirstItem: boolean; isLastItem: boolean}>` .blockTime { text-align: right; font-style: italic; } td { border-top: ${(props) => props.isFirstItem && BORDER_TOP}; border-radius: 0rem !important; &:first-child { border-top-left-radius: ${(props) => props.isFirstItem ? BORDER_RADIUS : '0rem'}!important; border-bottom-left-radius: ${(props) => props.isLastItem ? BORDER_RADIUS : '0rem'}!important; } &:last-child { border-top-right-radius: ${(props) => props.isFirstItem ? BORDER_RADIUS : '0rem'}!important; border-bottom-right-radius: ${(props) => props.isLastItem ? BORDER_RADIUS : '0rem'}!important; } .timeUnit { font-size: var(--font-percent-small); } } `; export default React.memo(BlockHeader);