Files
pwap/pezkuwi-sdk-ui/packages/page-staking2/src/Pools/usePoolInfo.ts
T
pezkuwichain 1295c36241 Rebrand: polkadot → pezkuwi build fixes
- Fixed TypeScript type assertion issues
- Updated imports from api-augment/substrate to api-augment/bizinikiwi
- Fixed imgConvert.mjs header and imports
- Added @ts-expect-error for runtime-converted types
- Fixed all @polkadot copyright headers to @pezkuwi
2026-01-07 02:32:54 +03:00

64 lines
2.3 KiB
TypeScript

// Copyright 2017-2025 @pezkuwi/app-staking authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { Bytes, Option } from '@pezkuwi/types';
import type { PezframeSystemAccountInfo, PezpalletNominationPoolsBondedPoolInner, PezpalletNominationPoolsRewardPool, PezpalletStakingNominations } from '@pezkuwi/types/lookup';
import type { BN } from '@pezkuwi/util';
import type { PoolInfo, PoolInfoBase } from './types.js';
import { useMemo } from 'react';
import { createNamedHook, useApi, useCallMulti } from '@pezkuwi/react-hooks';
import { BN_ZERO, bnMax } from '@pezkuwi/util';
import usePoolAccounts from './usePoolAccounts.js';
const OPT_MULTI = {
defaultValue: null,
transform: ([optBonded, metadata, optReward, optNominating, accountInfo]: [Option<PezpalletNominationPoolsBondedPoolInner>, Bytes, Option<PezpalletNominationPoolsRewardPool>, Option<PezpalletStakingNominations>, PezframeSystemAccountInfo]): PoolInfoBase | null =>
optBonded.isSome && optReward.isSome
? {
bonded: optBonded.unwrap(),
metadata: metadata.length
? transformName(
metadata.isUtf8
? metadata.toUtf8()
: metadata.toString()
)
: null,
nominating: optNominating
.unwrapOr({ targets: [] })
.targets.map((n) => n.toString()),
reward: optReward.unwrap(),
rewardClaimable: accountInfo.data.free
}
: null
};
function transformName (input: string): string {
return input.replace(/[^\x20-\x7E]/g, '');
}
function usePoolInfoImpl (poolId: BN): PoolInfo | null | undefined {
const { api } = useApi();
const accounts = usePoolAccounts(poolId);
const baseInfo = useCallMulti([
[api.query.nominationPools.bondedPools, poolId],
[api.query.nominationPools.metadata, poolId],
[api.query.nominationPools.rewardPools, poolId],
[api.query.staking.nominators, accounts.stashId],
[api.query.system.account, accounts.rewardId]
], OPT_MULTI);
return useMemo(
() => baseInfo && {
...accounts,
...baseInfo,
rewardClaimable: bnMax(BN_ZERO, baseInfo.rewardClaimable.sub(api.consts.balances.existentialDeposit))
},
[api, baseInfo, accounts]
);
}
export default createNamedHook('usePoolInfo', usePoolInfoImpl);