// Copyright 2017-2025 @polkadot/react-components authors & contributors // SPDX-License-Identifier: Apache-2.0 import type { DeriveStakingAccount } from '@polkadot/api-derive/types'; import type { Option } from '@polkadot/types'; import type { SlashingSpans } from '@polkadot/types/interfaces'; import type { BN } from '@polkadot/util'; import React from 'react'; import { useAccounts, useApi, useCall } from '@polkadot/react-hooks'; import { FormatBalance } from '@polkadot/react-query'; import { useTranslation } from './translate.js'; import TxButton from './TxButton.js'; interface DeriveStakingAccountPartial { controllerId: DeriveStakingAccount['controllerId'] | string; stashId: DeriveStakingAccount['stashId'] | string; redeemable?: BN; } interface Props { className?: string; isPool?: boolean; stakingInfo?: DeriveStakingAccountPartial; } const OPT_SPAN = { transform: (optSpans: Option): number => optSpans.isNone ? 0 : optSpans.unwrap().prior.length + 1 }; function StakingRedeemable ({ className = '', isPool, stakingInfo }: Props): React.ReactElement | null { const { api } = useApi(); const { allAccounts } = useAccounts(); const { t } = useTranslation(); const spanCount = useCall(api.query.staking.slashingSpans, [stakingInfo?.stashId], OPT_SPAN); if (!stakingInfo?.redeemable?.gtn(0)) { return null; } return (
{allAccounts.includes((stakingInfo.controllerId || '').toString()) ? ( ) :  }
); } export default React.memo(StakingRedeemable);