diff --git a/packages/apps-config/src/api/constants.ts b/packages/apps-config/src/api/constants.ts index 9ad75ae7c7..5f1f422e1b 100644 --- a/packages/apps-config/src/api/constants.ts +++ b/packages/apps-config/src/api/constants.ts @@ -20,3 +20,5 @@ export const KUSAMA_GENESIS = getGenesis('kusama'); export const POLKADOT_GENESIS = getGenesis('polkadot'); export const POLKADOT_DENOM_BLOCK = new BN(1248328); + +export const ROCOCO_GENESIS = '0x47381ee0697153d64404fc578392c8fd5cba9073391908f46c888498415647bd'; diff --git a/packages/apps-config/src/endpoints/testingRococo.ts b/packages/apps-config/src/endpoints/testingRococo.ts index 354a6d85b0..dadcc363e5 100644 --- a/packages/apps-config/src/endpoints/testingRococo.ts +++ b/packages/apps-config/src/endpoints/testingRococo.ts @@ -4,6 +4,7 @@ import type { TFunction } from 'i18next'; import type { LinkOption } from '../settings/types'; +import { ROCOCO_GENESIS } from '../api/constants'; import { expandEndpoints } from './util'; /* eslint-disable sort-keys */ @@ -18,7 +19,7 @@ import { expandEndpoints } from './util'; export function createRococo (t: TFunction): LinkOption[] { return expandEndpoints(t, [{ dnslink: 'rococo', - genesisHash: '0x19c0e4fa8ab75f5ac7865e0b8f74ff91eb9a100d336f423cd013a8befba40299', + genesisHash: ROCOCO_GENESIS, info: 'rococo', text: t('rpc.rococo', 'Rococo', { ns: 'apps-config' }), providers: { diff --git a/packages/page-parachains/src/Auctions/Bid.tsx b/packages/page-parachains/src/Auctions/Bid.tsx index cf640cdcc3..3423aa70b2 100644 --- a/packages/page-parachains/src/Auctions/Bid.tsx +++ b/packages/page-parachains/src/Auctions/Bid.tsx @@ -41,14 +41,12 @@ function Bid ({ auctionInfo, className, id, ownedIds }: Props): React.ReactEleme (): Option[] => { const [leasePeriod] = auctionInfo || [null, null]; - if (!leasePeriod) { - return []; - } - - return RANGES.map(([first, last], value): Option => ({ - text: `${formatNumber(leasePeriod.addn(first))} - ${formatNumber(leasePeriod.addn(last))}`, - value - })); + return leasePeriod + ? RANGES.map(([first, last], value): Option => ({ + text: `${formatNumber(leasePeriod.addn(first))} - ${formatNumber(leasePeriod.addn(last))}`, + value + })) + : []; }, [auctionInfo] ); diff --git a/packages/page-parachains/src/Overview/Parachain.tsx b/packages/page-parachains/src/Overview/Parachain.tsx index 37215b3deb..c8f41d7ffb 100644 --- a/packages/page-parachains/src/Overview/Parachain.tsx +++ b/packages/page-parachains/src/Overview/Parachain.tsx @@ -1,7 +1,7 @@ // Copyright 2017-2021 @polkadot/app-parachains authors & contributors // SPDX-License-Identifier: Apache-2.0 -import type { bool, Option, Vec } from '@polkadot/types'; +import type { Option, Vec } from '@polkadot/types'; import type { AccountId, BlockNumber, CandidatePendingAvailability, HeadData, Header, ParaId, ParaInfo, ParaLifecycle } from '@polkadot/types/interfaces'; import type { Codec } from '@polkadot/types/types'; import type { EventMapInfo, QueuedAction } from './types'; @@ -12,7 +12,7 @@ import React, { useCallback, useEffect, useMemo, useState } from 'react'; import { AddressMini, Badge, Expander, ParaLink } from '@polkadot/react-components'; import { useApi, useCall, useCallMulti, useParaApi } from '@polkadot/react-hooks'; import { BlockToTime } from '@polkadot/react-query'; -import { formatNumber, isFunction } from '@polkadot/util'; +import { formatNumber } from '@polkadot/util'; import { useTranslation } from '../translate'; import { sliceHex } from '../util'; @@ -31,7 +31,7 @@ interface Props { validators?: AccountId[]; } -type QueryResult = [Option, Option, Option, Vec, Vec, Vec, Vec, Option, Option, Option]; +type QueryResult = [Option, Option, Option, Vec, Vec, Vec, Vec, Option, Option, Option]; interface QueryState { headHex: string | null; @@ -46,12 +46,6 @@ interface QueryState { watermark: BlockNumber | null; } -function getParaInfo (info: ParaInfo | bool | null): ParaInfo | null { - return !info || isFunction((info as bool).isTrue) - ? null - : info as ParaInfo; -} - const transformHeader = { transform: (header: Header) => header.number.unwrap() }; @@ -74,7 +68,7 @@ const optionsMulti = { ? sliceHex(headData.unwrap()) : null, lifecycle: optLifecycle.unwrapOr(null), - paraInfo: getParaInfo(optInfo.unwrapOr(null)), + paraInfo: optInfo.unwrapOr(null), pendingAvail: optPending.unwrapOr(null), qDmp: dmp.length, qHrmpE: hrmpE.length, diff --git a/packages/page-parachains/src/Proposals/Proposal.tsx b/packages/page-parachains/src/Proposals/Proposal.tsx index 3f8e45e819..11f3b84ecd 100644 --- a/packages/page-parachains/src/Proposals/Proposal.tsx +++ b/packages/page-parachains/src/Proposals/Proposal.tsx @@ -12,8 +12,8 @@ import { FormatBalance } from '@polkadot/react-query'; import { formatNumber } from '@polkadot/util'; import { useTranslation } from '../translate'; -import { useProposal } from '../useProposals'; import { sliceHex } from '../util'; +import useProposal from './useProposal'; interface Props { approvedIds: ParaId[]; diff --git a/packages/page-parachains/src/Proposals/useProposal.ts b/packages/page-parachains/src/Proposals/useProposal.ts new file mode 100644 index 0000000000..c6a7eb7a91 --- /dev/null +++ b/packages/page-parachains/src/Proposals/useProposal.ts @@ -0,0 +1,27 @@ +// Copyright 2017-2021 @polkadot/app-parachains authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import type { Option } from '@polkadot/types'; +import type { ParachainProposal, ParaId } from '@polkadot/types/interfaces'; +import type { ProposalExt, ScheduledProposals } from '../types'; + +import { useMemo } from 'react'; + +import { useApi, useCall } from '@polkadot/react-hooks'; + +export default function useProposal (id: ParaId, approvedIds: ParaId[], scheduled: ScheduledProposals[]): ProposalExt { + const { api } = useApi(); + const opt = useCall>(api.query.proposeParachain.proposals, [id]); + + return useMemo( + (): ProposalExt => ({ + id, + isApproved: approvedIds.some((a) => a.eq(id)), + isScheduled: scheduled.some(({ scheduledIds }) => scheduledIds.some((s) => s.eq(id))), + proposal: opt && opt.isSome + ? opt.unwrap() + : undefined + }), + [approvedIds, id, opt, scheduled] + ); +} diff --git a/packages/page-parachains/src/useOwnedIds.ts b/packages/page-parachains/src/useOwnedIds.ts index de04c863ac..e803876056 100644 --- a/packages/page-parachains/src/useOwnedIds.ts +++ b/packages/page-parachains/src/useOwnedIds.ts @@ -1,19 +1,13 @@ // Copyright 2017-2021 @polkadot/app-parachains authors & contributors // SPDX-License-Identifier: Apache-2.0 -import type { bool, Option } from '@polkadot/types'; +import type { Option } from '@polkadot/types'; import type { ParaId, ParaInfo } from '@polkadot/types/interfaces'; import type { OwnedId } from './types'; import { useEffect, useState } from 'react'; import { useAccounts, useApi, useEventTrigger } from '@polkadot/react-hooks'; -import { isFunction } from '@polkadot/util'; - -// Current Rococo returns a bool value for this entry -function isParaInfo (info: ParaInfo | bool): info is ParaInfo { - return !isFunction((info as bool).isTrue); -} export default function useOwnedIds (): OwnedId[] { const { api } = useApi(); @@ -24,23 +18,21 @@ export default function useOwnedIds (): OwnedId[] { useEffect((): void => { allAccounts && trigger && api.query.registrar?.paras - .entries, [ParaId]>() + .entries, [ParaId]>() .then((entries) => setState(() => entries .map(([{ args: [paraId] }, optInfo]): OwnedId | null => { - if (!optInfo.isSome) { + if (optInfo.isNone) { return null; } const paraInfo = optInfo.unwrap(); - return isParaInfo(paraInfo) - ? { - manager: paraInfo.manager.toString(), - paraId, - paraInfo - } - : null; + return { + manager: paraInfo.manager.toString(), + paraId, + paraInfo + }; }) .filter((info): info is OwnedId => !!info && allAccounts.some((a) => a === info.manager)) )) diff --git a/packages/page-parachains/src/useProposals.ts b/packages/page-parachains/src/useProposals.ts index 584f9cd866..6f1da373a3 100644 --- a/packages/page-parachains/src/useProposals.ts +++ b/packages/page-parachains/src/useProposals.ts @@ -1,13 +1,12 @@ // Copyright 2017-2021 @polkadot/app-parachains authors & contributors // SPDX-License-Identifier: Apache-2.0 -import type { Option } from '@polkadot/types'; -import type { ParachainProposal, ParaId, SessionIndex } from '@polkadot/types/interfaces'; -import type { ProposalExt, Proposals, ScheduledProposals } from './types'; +import type { ParaId, SessionIndex } from '@polkadot/types/interfaces'; +import type { Proposals } from './types'; -import { useEffect, useMemo, useState } from 'react'; +import { useEffect, useState } from 'react'; -import { useApi, useCall, useCallMulti, useEventTrigger, useIsMountedRef } from '@polkadot/react-hooks'; +import { useApi, useCallMulti, useEventTrigger, useIsMountedRef } from '@polkadot/react-hooks'; type MultiQuery = [SessionIndex | undefined, ParaId[] | undefined]; @@ -55,21 +54,3 @@ export default function useProposals (): Proposals | undefined { return state; } - -export function useProposal (id: ParaId, approvedIds: ParaId[], scheduled: ScheduledProposals[]): ProposalExt { - const { api } = useApi(); - // const opt = useCall>(api.query.proposeParachain_UNUSED?.proposals, [id]); - const opt = useCall>(api.query.proposeParachain.proposals, [id]); - - return useMemo( - (): ProposalExt => ({ - id, - isApproved: approvedIds.some((a) => a.eq(id)), - isScheduled: scheduled.some(({ scheduledIds }) => scheduledIds.some((s) => s.eq(id))), - proposal: opt && opt.isSome - ? opt.unwrap() - : undefined - }), - [approvedIds, id, opt, scheduled] - ); -}