From 42028ee98e383c3a5f70cd760ff787c6f06f3784 Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Tue, 4 Aug 2020 09:56:45 +0200 Subject: [PATCH] Parachain cleanups & FIXME's (#3328) * Parachain cleanups & FIXME's * Small cleanups in display --- .../src/Overview/Parachain.tsx | 43 ++++++++++------ .../src/Overview/Parachains.tsx | 12 +++-- .../page-parachains/src/Overview/Register.tsx | 14 +++--- .../page-parachains/src/Overview/index.tsx | 50 ++++--------------- .../src/Parachain/Deregister.tsx | 19 ++++--- .../page-parachains/src/ParachainInfo.tsx | 18 +++---- 6 files changed, 72 insertions(+), 84 deletions(-) diff --git a/packages/page-parachains/src/Overview/Parachain.tsx b/packages/page-parachains/src/Overview/Parachain.tsx index af9e530e34..0bf989c44c 100644 --- a/packages/page-parachains/src/Overview/Parachain.tsx +++ b/packages/page-parachains/src/Overview/Parachain.tsx @@ -2,14 +2,18 @@ // This software may be modified and distributed under the terms // of the Apache-2.0 license. See the LICENSE file for details. +import { HeadData } from '@polkadot/types/interfaces'; import { DeriveParachain } from '@polkadot/api-derive/types'; import React, { useCallback } from 'react'; import { useHistory } from 'react-router-dom'; import styled from 'styled-components'; import { Badge, Button, Icon } from '@polkadot/react-components'; -import ParachainInfo from '../ParachainInfo'; +import { useApi, useCall } from '@polkadot/react-hooks'; +import { Option } from '@polkadot/types'; +import { formatNumber } from '@polkadot/util'; +import ParachainInfo from '../ParachainInfo'; import { useTranslation } from '../translate'; interface Props { @@ -19,8 +23,19 @@ interface Props { function Parachain ({ className = '', parachain: { didUpdate, id, info, pendingSwapId, relayDispatchQueueSize = 0 } }: Props): React.ReactElement { const { t } = useTranslation(); - const history = useHistory(); + const { api } = useApi(); + const headHex = useCall(api.query.parachains.heads, [id], { + transform: (headData: Option): string | null => { + if (headData.isNone) { + return null; + } + const hex = headData.toHex(); + + return `${hex.slice(0, 8)}…${hex.slice(-6)}`; + } + }); + const history = useHistory(); const _onClick = useCallback( (): void => { history.push(`/parachains/${id.toString()}`); @@ -40,34 +55,26 @@ function Parachain ({ className = '', parachain: { didUpdate, id, info, pendingS
('Updated in the latest block') : t('Not updated in the last block') } - info={ - - } - isGray={!didUpdate} + info={} /> ('{{relayDispatchQueueSize}} dispatch messages pending', { - replace: { - relayDispatchQueueSize - } - })} - info={relayDispatchQueueSize} - isGray={relayDispatchQueueSize <= 0} + color={relayDispatchQueueSize ? 'counter' : 'gray'} + hover={t('{{relayDispatchQueueSize}} dispatch messages pending', { replace: { relayDispatchQueueSize } })} + info={formatNumber(relayDispatchQueueSize)} />
- + {headHex} {pendingSwapId?.toString()} @@ -111,6 +118,10 @@ export default React.memo(styled(Parachain)` } } + td.headhex { + font-family: monospace; + } + .did-update { margin-bottom: 0; } diff --git a/packages/page-parachains/src/Overview/Parachains.tsx b/packages/page-parachains/src/Overview/Parachains.tsx index e01db1f87e..6a75b8756e 100644 --- a/packages/page-parachains/src/Overview/Parachains.tsx +++ b/packages/page-parachains/src/Overview/Parachains.tsx @@ -12,22 +12,26 @@ import { useTranslation } from '../translate'; import Parachain from './Parachain'; interface Props { - parachains: DeriveParachain[]; + parachains?: DeriveParachain[]; } function Parachains ({ parachains }: Props): React.ReactElement { const { t } = useTranslation(); const header = useMemo(() => [ - [t('parachains'), 'start', 4], + [t('parachains'), 'start', 3], + [t('heads'), 'start'], [t('swap to id')], [t('scheduling')], [] ], [t]); return ( - - {parachains.map((parachain): React.ReactNode => ( +
('There are no registered parachains')} + header={header} + > + {parachains?.map((parachain): React.ReactNode => ( | null { +function Register ({ isDisabled, nextFreeId = BN_THOUSAND, sudoKey }: Props): React.ReactElement | null { const { t } = useTranslation(); const { api } = useApi(); const { isOpen, onClose, onOpen } = useModal(); @@ -59,12 +60,13 @@ function Register ({ nextFreeId = BN_THOUSAND, sudoKey }: Props): React.ReactEle const extrinsic = useMemo( (): SubmittableExtrinsic | null => { try { - return api.tx.registrar.registerPara( + // FIXME democracy + return api.tx.sudo.sudo(api.tx.registrar.registerPara( id, info, code ? u8aToHex(code) : null, initialHeadState ? u8aToString(initialHeadState) : null - ); + )); } catch (error) { console.log(error); @@ -79,6 +81,7 @@ function Register ({ nextFreeId = BN_THOUSAND, sudoKey }: Props): React.ReactEle