// Copyright 2017-2026 @pezkuwi/app-staking authors & contributors // SPDX-License-Identifier: Apache-2.0 import type { DeriveStakingOverview } from '@pezkuwi/api-derive/types'; import type { SortedTargets } from '../types.js'; import React from 'react'; import SummarySession from '@pezkuwi/app-explorer/SummarySession'; import { CardSummary, styled, SummaryBox } from '@pezkuwi/react-components'; import { formatNumber } from '@pezkuwi/util'; import { useTranslation } from '../translate.js'; interface Props { className?: string; nominators?: string[]; stakingOverview?: DeriveStakingOverview; targets: SortedTargets; } function Summary ({ className = '', stakingOverview, targets: { counterForNominators, inflation: { idealStake, inflation, stakedFraction }, nominators, waitingIds } }: Props): React.ReactElement { const { t } = useTranslation(); const percent = %; return (
{stakingOverview ? <>{formatNumber(stakingOverview.validators.length)} / {formatNumber(stakingOverview.validatorCount)} : 999 / 999 } {waitingIds ? formatNumber(waitingIds.length) : 99 } {nominators ? ( <> {formatNumber(nominators.length)} {counterForNominators && ( <> / {formatNumber(counterForNominators)} )} ) : 999 / 999 }
{(idealStake > 0) && Number.isFinite(idealStake) && ( <>{(idealStake * 100).toFixed(1)}{percent} )} {(stakedFraction > 0) && ( <>{(stakedFraction * 100).toFixed(1)}{percent} )} {(inflation > 0) && Number.isFinite(inflation) && ( <>{inflation.toFixed(1)}{percent} )}
); } const StyledSummaryBox = styled(SummaryBox)` .validator--Account-block-icon { display: inline-block; margin-right: 0.75rem; margin-top: -0.25rem; vertical-align: middle; } .validator--Summary-authors { .validator--Account-block-icon+.validator--Account-block-icon { margin-left: -1.5rem; } } .percent { font-size: var(--font-percent-tiny); } `; export default React.memo(Summary);