diff --git a/packages/page-parachains/src/Overview/Parachain.tsx b/packages/page-parachains/src/Overview/Parachain.tsx index 8d57feb905..414fb370a0 100644 --- a/packages/page-parachains/src/Overview/Parachain.tsx +++ b/packages/page-parachains/src/Overview/Parachain.tsx @@ -4,7 +4,7 @@ import type { LinkOption } from '@polkadot/apps-config/settings/types'; import type { Option } from '@polkadot/types'; import type { Balance, BlockNumber, HeadData, Header, ParaId, RelayChainBlockNumber } from '@polkadot/types/interfaces'; -import type { ITuple } from '@polkadot/types/types'; +import type { Codec, ITuple } from '@polkadot/types/types'; import BN from 'bn.js'; import React, { useMemo } from 'react'; @@ -22,6 +22,10 @@ interface Props { lastInclusion?: [string, string]; } +const transformDmpUmp = { + transform: (list: Codec[][]) => list.length +}; + const transformHead = { transform: (headData: Option): string | null => headData.isSome @@ -58,10 +62,14 @@ function getChainLink (endpoints: LinkOption[]): React.ReactNode { function Parachain ({ bestNumber, className = '', id, lastInclusion }: Props): React.ReactElement { const { api } = useApi(); const { api: paraApi, endpoints } = useParaApi(id); - const headHex = useCall(api.query.paras.heads, [id], transformHead); const paraBest = useCall(paraApi?.derive.chain.bestNumber); const paraIssu = useCall(paraApi?.query.balances?.totalIssuance); + const headHex = useCall(api.query.paras.heads, [id], transformHead); const updateAt = useCall(api.query.paras.futureCodeUpgrades, [id], transformUpgrade); + const qDmp = useCall(api.query.dmp.downwardMessageQueues, [id], transformDmpUmp); + const qUmp = useCall(api.query.dmp.relayDispatchQueues, [id], transformDmpUmp); + const qHrmpE = useCall(api.query.hrmp.hrmpEgressChannelsIndex, [id], transformDmpUmp); + const qHrmpI = useCall(api.query.hrmp.hrmpIngressChannelsIndex, [id], transformDmpUmp); const lastRelayNumber = useCall(lastInclusion && api.rpc.chain.getHeader, [lastInclusion && lastInclusion[1]], transformLast); const blockDelay = useMemo( @@ -88,7 +96,7 @@ function Parachain ({ bestNumber, className = '', id, lastInclusion }: Props): R {paraBest && <>{formatNumber(paraBest)}} {paraIssu && } - + {updateAt && bestNumber && ( <> @@ -96,6 +104,9 @@ function Parachain ({ bestNumber, className = '', id, lastInclusion }: Props): R )} + + {formatNumber(qUmp)} / {formatNumber(qDmp)} / {formatNumber(qHrmpE)} / {formatNumber(qHrmpI)} + ); } diff --git a/packages/page-parachains/src/Overview/ParachainList.tsx b/packages/page-parachains/src/Overview/ParachainList.tsx index 0afc0a44a6..dc128b8ff1 100644 --- a/packages/page-parachains/src/Overview/ParachainList.tsx +++ b/packages/page-parachains/src/Overview/ParachainList.tsx @@ -60,7 +60,8 @@ function ParachainList ({ ids }: Props): React.ReactElement { [t('relay parent'), undefined, 2], [t('chain best'), 'media--900'], [t('issuance'), 'media--1100'], - [t('upgrade'), ' media--1200'] + [t('upgrade'), 'media--1300'], + [t('ump/dmp/hrmp'), 'media--1200'] ]); return ( diff --git a/packages/react-api/src/Api.tsx b/packages/react-api/src/Api.tsx index 867334f332..bc58e8a8fb 100644 --- a/packages/react-api/src/Api.tsx +++ b/packages/react-api/src/Api.tsx @@ -165,7 +165,6 @@ async function loadOnReady (api: ApiPromise, injectedPromise: Promise { + const a = apiOverride || api; const blockTime = ( - api.consts.babe?.expectedBlockTime || - api.consts.difficulty?.targetBlockTime || - api.consts.timestamp?.minimumPeriod.muln(2) || + a.consts.babe?.expectedBlockTime || + a.consts.difficulty?.targetBlockTime || + a.consts.timestamp?.minimumPeriod.muln(2) || DEFAULT_TIME ); const time = extractTime(blockTime.mul(blocks).toNumber()); @@ -45,6 +47,6 @@ export function useBlockTime (blocks = BN_ONE): Result { time ]; }, - [api, blocks, t] + [api, apiOverride, blocks, t] ); } diff --git a/packages/react-query/src/BlockToTime.tsx b/packages/react-query/src/BlockToTime.tsx index f060444f34..93d87ca76e 100644 --- a/packages/react-query/src/BlockToTime.tsx +++ b/packages/react-query/src/BlockToTime.tsx @@ -1,6 +1,8 @@ // Copyright 2017-2021 @polkadot/react-query authors & contributors // SPDX-License-Identifier: Apache-2.0 +import type { ApiPromise } from '@polkadot/api'; + import BN from 'bn.js'; import React from 'react'; import styled from 'styled-components'; @@ -8,6 +10,7 @@ import styled from 'styled-components'; import { useBlockTime } from '@polkadot/react-hooks'; interface Props { + api?: ApiPromise; blocks?: BN; children?: React.ReactNode; className?: string; @@ -15,8 +18,8 @@ interface Props { label?: React.ReactNode; } -function BlockToTime ({ blocks, children, className = '', isInline, label }: Props): React.ReactElement | null { - const [, text] = useBlockTime(blocks); +function BlockToTime ({ api, blocks, children, className = '', isInline, label }: Props): React.ReactElement | null { + const [, text] = useBlockTime(blocks, api); if (blocks?.ltn(0)) { return null; diff --git a/packages/react-query/src/TimeNow.tsx b/packages/react-query/src/TimeNow.tsx index 9867d5ab0e..fcd35512d4 100644 --- a/packages/react-query/src/TimeNow.tsx +++ b/packages/react-query/src/TimeNow.tsx @@ -14,20 +14,17 @@ interface Props { children?: React.ReactNode; className?: string; label?: React.ReactNode; + value?: Moment; } -function TimeNow ({ children, className = '', label }: Props): React.ReactElement { - const { api, isSubstrateV2 } = useApi(); - const timestamp = useCall(api.query.timestamp.now); +function TimeNow ({ children, className = '', label, value }: Props): React.ReactElement { + const { api } = useApi(); + const timestamp = useCall(!value && api.query.timestamp.now); const [now, setNow] = useState(); useEffect((): void => { - setNow( - isSubstrateV2 || !timestamp - ? timestamp - : timestamp.muln(1000) - ); - }, [timestamp, isSubstrateV2]); + setNow(value || timestamp); + }, [timestamp, value]); return (