From 325cd4a1c8bee6f65feaa1980c85cc5cf132fcab Mon Sep 17 00:00:00 2001 From: Jaco Date: Sat, 9 Apr 2022 10:22:38 +0200 Subject: [PATCH] Combine bags ids & list hooks (#7335) --- packages/page-staking/src/Bags/Summary.tsx | 8 ++++---- packages/page-staking/src/Bags/index.tsx | 10 ++++------ packages/page-staking/src/Bags/useBagsIds.ts | 20 ------------------- packages/page-staking/src/Bags/useBagsList.ts | 12 ++++++++--- 4 files changed, 17 insertions(+), 33 deletions(-) delete mode 100644 packages/page-staking/src/Bags/useBagsIds.ts diff --git a/packages/page-staking/src/Bags/Summary.tsx b/packages/page-staking/src/Bags/Summary.tsx index 0dc28e40c9..089b852687 100644 --- a/packages/page-staking/src/Bags/Summary.tsx +++ b/packages/page-staking/src/Bags/Summary.tsx @@ -13,12 +13,12 @@ import { formatNumber, isNumber } from '@polkadot/util'; import { useTranslation } from '../translate'; interface Props { + bags?: unknown[]; className?: string; - ids?: BN[]; mapOwn?: BagMap; } -function Summary ({ className = '', ids, mapOwn }: Props): React.ReactElement { +function Summary ({ bags, className = '', mapOwn }: Props): React.ReactElement { const { t } = useTranslation(); const { api } = useApi(); const total = useCall(api.query.bagsList.counterForListNodes); @@ -31,8 +31,8 @@ function Summary ({ className = '', ids, mapOwn }: Props): React.ReactElement ('total bags')}> - {ids - ? formatNumber(ids.length) + {bags + ? formatNumber(bags.length) : } diff --git a/packages/page-staking/src/Bags/index.tsx b/packages/page-staking/src/Bags/index.tsx index 807c53dfa6..52d157c719 100644 --- a/packages/page-staking/src/Bags/index.tsx +++ b/packages/page-staking/src/Bags/index.tsx @@ -11,7 +11,6 @@ import { Button, Table, ToggleGroup } from '@polkadot/react-components'; import { useTranslation } from '../translate'; import Bag from './Bag'; import Summary from './Summary'; -import useBagsIds from './useBagsIds'; import useBagsList from './useBagsList'; import useBagsNodes from './useBagsNodes'; @@ -34,8 +33,7 @@ function Bags ({ ownStashes }: Props): React.ReactElement { [ownStashes] ); const [filterIndex, setFilterIndex] = useState(() => stashIds.length ? 0 : 1); - const ids = useBagsIds(); - const list = useBagsList(ids); + const bags = useBagsList(); const mapOwn = useBagsNodes(stashIds); const headerRef = useRef([ @@ -57,14 +55,14 @@ function Bags ({ ownStashes }: Props): React.ReactElement { [stashIds, t] ); const filtered = useMemo( - () => list && mapOwn && sortNodes(list, mapOwn, !filterIndex), - [filterIndex, list, mapOwn] + () => bags && mapOwn && sortNodes(bags, mapOwn, !filterIndex), + [bags, filterIndex, mapOwn] ); return ( <> diff --git a/packages/page-staking/src/Bags/useBagsIds.ts b/packages/page-staking/src/Bags/useBagsIds.ts deleted file mode 100644 index 9ef7b18f9f..0000000000 --- a/packages/page-staking/src/Bags/useBagsIds.ts +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2017-2022 @polkadot/app-staking authors & contributors -// SPDX-License-Identifier: Apache-2.0 - -import type { StorageKey, u64 } from '@polkadot/types'; -import type { BN } from '@polkadot/util'; - -import { createNamedHook, useApi, useMapKeys } from '@polkadot/react-hooks'; - -const KEY_OPTS = { - transform: (keys: StorageKey<[u64]>[]): BN[] => - keys.map(({ args: [id] }) => id) -}; - -function useBagsIdsImpl (): BN[] | undefined { - const { api } = useApi(); - - return useMapKeys(api.query.bagsList.listBags, KEY_OPTS); -} - -export default createNamedHook('useBagsIds', useBagsIdsImpl); diff --git a/packages/page-staking/src/Bags/useBagsList.ts b/packages/page-staking/src/Bags/useBagsList.ts index 73f8001417..5d9e238563 100644 --- a/packages/page-staking/src/Bags/useBagsList.ts +++ b/packages/page-staking/src/Bags/useBagsList.ts @@ -1,16 +1,21 @@ // Copyright 2017-2022 @polkadot/app-staking authors & contributors // SPDX-License-Identifier: Apache-2.0 -import type { Option } from '@polkadot/types'; +import type { Option, StorageKey, u64 } from '@polkadot/types'; import type { PalletBagsListListBag } from '@polkadot/types/lookup'; import type { BN } from '@polkadot/util'; import type { BagInfo } from './types'; import { useEffect, useState } from 'react'; -import { createNamedHook, useApi, useCall } from '@polkadot/react-hooks'; +import { createNamedHook, useApi, useCall, useMapKeys } from '@polkadot/react-hooks'; import { BN_ZERO } from '@polkadot/util'; +const KEY_OPTS = { + transform: (keys: StorageKey<[u64]>[]): BN[] => + keys.map(({ args: [id] }) => id) +}; + const MULTI_OPTS = { transform: ([[ids], opts]: [[BN[]], Option[]]): BagInfo[] => { const sorted = ids @@ -45,9 +50,10 @@ function merge (prev: BagInfo[] | undefined, curr: BagInfo[]): BagInfo[] { ); } -function useBagsListImpl (ids?: BN[]): BagInfo[] | undefined { +function useBagsListImpl (): BagInfo[] | undefined { const { api } = useApi(); const [result, setResult] = useState(); + const ids = useMapKeys(api.query.bagsList.listBags, KEY_OPTS); const query = useCall(ids && ids.length !== 0 && api.query.bagsList.listBags.multi, [ids], MULTI_OPTS); useEffect((): void => {