From b46bc1d54a2451b5cc9c3cdc88a6337bf9d9a0bd Mon Sep 17 00:00:00 2001 From: Arjun Porwal <65214523+ap211unitech@users.noreply.github.com> Date: Tue, 4 Mar 2025 19:59:09 +0530 Subject: [PATCH] fix: replace isEmpty checks with utility function in account info hooks (#11355) --- packages/react-hooks/src/useAccountInfo.ts | 5 +++-- packages/react-hooks/src/useOwnStashInfos.ts | 3 ++- packages/react-hooks/src/utils/isEmpty.ts | 14 ++++++++++++++ 3 files changed, 19 insertions(+), 3 deletions(-) create mode 100644 packages/react-hooks/src/utils/isEmpty.ts diff --git a/packages/react-hooks/src/useAccountInfo.ts b/packages/react-hooks/src/useAccountInfo.ts index 191eaa4522..01e5d12eec 100644 --- a/packages/react-hooks/src/useAccountInfo.ts +++ b/packages/react-hooks/src/useAccountInfo.ts @@ -11,6 +11,7 @@ import { useCallback, useEffect, useMemo, useState } from 'react'; import { keyring } from '@polkadot/ui-keyring'; import { isFunction, isHex } from '@polkadot/util'; +import { isEmpty } from './utils/isEmpty.js'; import { createNamedHook } from './createNamedHook.js'; import { useApi } from './useApi.js'; import { useCall } from './useCall.js'; @@ -59,14 +60,14 @@ function useAccountInfoImpl (value: string | null, isContract = false): UseAccou useEffect((): void => { validator && setFlags((flags) => ({ ...flags, - isValidator: !validator.isEmpty + isValidator: !isEmpty(validator) })); }, [validator]); useEffect((): void => { nominator && setFlags((flags) => ({ ...flags, - isNominator: !nominator.isEmpty + isNominator: !isEmpty(nominator) })); }, [nominator]); diff --git a/packages/react-hooks/src/useOwnStashInfos.ts b/packages/react-hooks/src/useOwnStashInfos.ts index d5b2e1ac35..5c5fd4546a 100644 --- a/packages/react-hooks/src/useOwnStashInfos.ts +++ b/packages/react-hooks/src/useOwnStashInfos.ts @@ -11,6 +11,7 @@ import { useEffect, useMemo, useState } from 'react'; import { u8aConcat, u8aToHex } from '@polkadot/util'; +import { isEmpty } from './utils/isEmpty.js'; import { createNamedHook } from './createNamedHook.js'; import { useAccounts } from './useAccounts.js'; import { useApi } from './useApi.js'; @@ -36,7 +37,7 @@ const QUERY_OPTS = { function getStakerState (stashId: string, allAccounts: string[], [isOwnStash, { claimedRewardsEras, controllerId: _controllerId, exposureMeta, exposurePaged, nextSessionIds: _nextSessionIds, nominators, rewardDestination, sessionIds: _sessionIds, stakingLedger, validatorPrefs }, validateInfo]: [boolean, DeriveStakingAccount, ValidatorInfo]): StakerState { const isStashNominating = !!(nominators?.length); - const isStashValidating = !(Array.isArray(validateInfo) ? validateInfo[1].isEmpty : validateInfo.isEmpty); + const isStashValidating = !(Array.isArray(validateInfo) ? isEmpty(validateInfo[1] as ValidatorPrefs) : isEmpty(validateInfo)); const nextSessionIds = _nextSessionIds instanceof Map ? [..._nextSessionIds.values()] : _nextSessionIds; diff --git a/packages/react-hooks/src/utils/isEmpty.ts b/packages/react-hooks/src/utils/isEmpty.ts new file mode 100644 index 0000000000..27047fd9ba --- /dev/null +++ b/packages/react-hooks/src/utils/isEmpty.ts @@ -0,0 +1,14 @@ +// Copyright 2017-2025 @polkadot/react-hooks authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import type { Struct } from '@polkadot/types-codec'; + +export const isEmpty = (struct: Struct) => { + for (const v of struct.values()) { + if (!v.isEmpty) { + return false; + } + } + + return true; +};