mirror of
https://github.com/pezkuwichain/pezkuwi-apps.git
synced 2026-10-21 11:16:28 +00:00
65 lines
2.0 KiB
TypeScript
65 lines
2.0 KiB
TypeScript
// Copyright 2017-2026 @pezkuwi/react-hooks authors & contributors
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
import type { DeriveBalancesAll } from '@pezkuwi/api-derive/types';
|
|
import type { BN } from '@pezkuwi/util';
|
|
|
|
import { useMemo } from 'react';
|
|
|
|
import { createNamedHook } from './createNamedHook.js';
|
|
import { useApi } from './useApi.js';
|
|
import { useCall } from './useCall.js';
|
|
import { useStakingAsyncApis } from './useStakingAsyncApis.js';
|
|
|
|
export interface VestingInfo {
|
|
isVesting: boolean;
|
|
vestedBalance: BN;
|
|
vestedClaimable: BN;
|
|
vesting: {
|
|
startingBlock: BN;
|
|
endBlock: BN;
|
|
perBlock: BN;
|
|
locked: BN;
|
|
vested: BN;
|
|
}[];
|
|
vestingTotal: BN;
|
|
vestingLocked: BN;
|
|
}
|
|
|
|
/**
|
|
* Gets the account vesting information from the correct chain.
|
|
* After Asset Hub migration, vesting data lives on Asset Hub (paraId 1000),
|
|
* not on the relay chain. This hook automatically queries the correct chain.
|
|
*
|
|
* @param accountAddress The account address of which vesting info is to be returned
|
|
* @returns vesting information for the account
|
|
*/
|
|
function useVestingImpl (accountAddress: string): VestingInfo | undefined {
|
|
const { api } = useApi();
|
|
const { ahApi, isRelayChain } = useStakingAsyncApis();
|
|
|
|
// Determine which API to use for vesting queries
|
|
// If on relay chain, vesting data is on Asset Hub
|
|
// Otherwise, vesting data is on the current chain
|
|
const vestingApi = isRelayChain && ahApi ? ahApi : api;
|
|
|
|
const balancesAll = useCall<DeriveBalancesAll>(vestingApi.derive.balances?.all, [accountAddress]);
|
|
|
|
return useMemo((): VestingInfo | undefined => {
|
|
if (!balancesAll) {
|
|
return undefined;
|
|
}
|
|
|
|
return {
|
|
isVesting: balancesAll.isVesting,
|
|
vestedBalance: balancesAll.vestedBalance,
|
|
vestedClaimable: balancesAll.vestedClaimable,
|
|
vesting: balancesAll.vesting,
|
|
vestingLocked: balancesAll.vestingLocked,
|
|
vestingTotal: balancesAll.vestingTotal
|
|
};
|
|
}, [balancesAll]);
|
|
}
|
|
|
|
export const useVesting = createNamedHook('useVesting', useVestingImpl);
|