diff --git a/package.json b/package.json index b2964405f0..efd22d739f 100644 --- a/package.json +++ b/package.json @@ -33,12 +33,12 @@ "afterSign": "electron-builder-notarize" }, "resolutions": { - "@polkadot/api": "^1.27.1", - "@polkadot/api-contract": "^1.27.1", - "@polkadot/keyring": "^3.0.1", - "@polkadot/types": "^1.27.1", - "@polkadot/util": "^3.0.1", - "@polkadot/util-crypto": "^3.0.1", + "@polkadot/api": "^1.28.0-beta.0", + "@polkadot/api-contract": "^1.28.0-beta.0", + "@polkadot/keyring": "^3.1.0-beta.2", + "@polkadot/types": "^1.28.0-beta.0", + "@polkadot/util": "^3.1.0-beta.2", + "@polkadot/util-crypto": "^3.1.0-beta.2", "@polkadot/wasm-crypto": "^1.2.1", "babel-core": "^7.0.0-bridge.0" }, @@ -82,7 +82,7 @@ "@babel/runtime": "^7.11.0", "@pinata/sdk": "^1.1.10", "@polkadot/dev": "^0.55.31", - "@polkadot/ts": "^0.3.31", + "@polkadot/ts": "^0.3.32", "@types/bn.js": "^4.11.6", "@types/chart.js": "^2.9.23", "@types/file-saver": "^2.0.1", diff --git a/packages/apps-routing/src/parachains.ts b/packages/apps-routing/src/parachains.ts index 3193fc4fcc..e6e34fe41d 100644 --- a/packages/apps-routing/src/parachains.ts +++ b/packages/apps-routing/src/parachains.ts @@ -11,7 +11,7 @@ export default function create (t: (key: string, text: string, opti Component, display: { needsApi: [ - 'query.parachains.code' + ['query.parachains.code', 'query.parachainUpgrade.didUpdateVFPs'] ] }, icon: 'link', diff --git a/packages/page-contracts/package.json b/packages/page-contracts/package.json index 4ca15ad676..ad7c674a0c 100644 --- a/packages/page-contracts/package.json +++ b/packages/page-contracts/package.json @@ -12,6 +12,6 @@ "license": "Apache-2.0", "dependencies": { "@babel/runtime": "^7.11.0", - "@polkadot/api-contract": "^1.27.1" + "@polkadot/api-contract": "^1.28.0-beta.0" } } diff --git a/packages/page-parachains/src/Overview/Parachain.tsx b/packages/page-parachains/src/Overview/Parachain.tsx index 0bf989c44c..e17772f606 100644 --- a/packages/page-parachains/src/Overview/Parachain.tsx +++ b/packages/page-parachains/src/Overview/Parachain.tsx @@ -30,16 +30,15 @@ function Parachain ({ className = '', parachain: { didUpdate, id, info, pendingS return null; } - const hex = headData.toHex(); + const hex = headData.unwrap().toHex(); - return `${hex.slice(0, 8)}…${hex.slice(-6)}`; + return `${hex.slice(0, 10)}…${hex.slice(-8)}`; } }); const history = useHistory(); + const _onClick = useCallback( - (): void => { - history.push(`/parachains/${id.toString()}`); - }, + () => history.push(`/parachains/${id.toString()}`), [history, id] ); diff --git a/packages/page-parachains/src/Overview/Summary.tsx b/packages/page-parachains/src/Overview/Summary.tsx index 3fd3c983af..c60d0838f4 100644 --- a/packages/page-parachains/src/Overview/Summary.tsx +++ b/packages/page-parachains/src/Overview/Summary.tsx @@ -5,25 +5,36 @@ import BN from 'bn.js'; import React from 'react'; import { SummaryBox, CardSummary } from '@polkadot/react-components'; +import { useApi } from '@polkadot/react-hooks'; import { BestNumber } from '@polkadot/react-query'; +import { formatNumber } from '@polkadot/util'; import { useTranslation } from '../translate'; interface Props { - parachainCount: number; + parachainCount?: number; nextFreeId?: BN; } function Summary ({ nextFreeId, parachainCount }: Props): React.ReactElement { const { t } = useTranslation(); + const { api } = useApi(); return (
- ('parachains')}> - {parachainCount.toString()} + ('relay')}> + {api.query.parachains + ? t('yes') + : t('no') + } - {nextFreeId && ( + {parachainCount && ( + ('parachains')}> + {formatNumber(parachainCount)} + + )} + {api.query.parachains && nextFreeId && ( ('next id')}> {nextFreeId.toString()} diff --git a/packages/page-parachains/src/Overview/index.tsx b/packages/page-parachains/src/Overview/index.tsx index 2d166c71e3..033501bf4d 100644 --- a/packages/page-parachains/src/Overview/index.tsx +++ b/packages/page-parachains/src/Overview/index.tsx @@ -21,24 +21,28 @@ interface Props { function Overview ({ isMine, sudoKey }: Props): React.ReactElement { const { api } = useApi(); - const parachains = useCall(api.derive.parachains.overview); - const nextFreeId = useCall(api.query.registrar.nextFreeId); + const parachains = useCall(api.derive.parachains?.overview); + const nextFreeId = useCall(api.query.registrar?.nextFreeId); return ( <> - + {api.query.parachains && ( + + )} - + {api.query.parachains && ( + + )} ); } diff --git a/packages/page-parachains/src/Parachain/index.tsx b/packages/page-parachains/src/Parachain/index.tsx index e498237c8f..778de7d47b 100644 --- a/packages/page-parachains/src/Parachain/index.tsx +++ b/packages/page-parachains/src/Parachain/index.tsx @@ -4,7 +4,7 @@ import { DeriveParachainInfo, DeriveParachainFull } from '@polkadot/api-derive/types'; -import React from 'react'; +import React, { useCallback } from 'react'; import { useHistory, useParams } from 'react-router-dom'; import styled from 'styled-components'; import { Button, CardSummary, Columar, Column, Icon, Menu, Popup, Spinner, SummaryBox } from '@polkadot/react-components'; @@ -35,6 +35,11 @@ function Parachain ({ basePath, className = '', isMine, paraInfoRef, sudoKey }: const { isOpen: isDeregisterOpen, onClose: onDeregisterClose, onOpen: onDeregisterOpen } = useModal(); const parachain = useCall(api.derive.parachains.info, [id || null]); + const onDeregister = useCallback( + () => history.push(basePath), + [basePath, history] + ); + if (isUndefined(parachain)) { return ( @@ -58,10 +63,6 @@ function Parachain ({ basePath, className = '', isMine, paraInfoRef, sudoKey }: paraInfoRef.current = parachain.info; } - const onDeregister = (): void => { - history.push(basePath); - }; - return (
diff --git a/packages/page-parachains/src/Transfer.tsx b/packages/page-parachains/src/Transfer.tsx index 85a45129ab..df0d0491f3 100644 --- a/packages/page-parachains/src/Transfer.tsx +++ b/packages/page-parachains/src/Transfer.tsx @@ -2,44 +2,76 @@ // This software may be modified and distributed under the terms // of the Apache-2.0 license. See the LICENSE file for details. +import { SubmittableExtrinsic } from '@polkadot/api/types'; import { DeriveParachain } from '@polkadot/api-derive/types'; import BN from 'bn.js'; -import React, { useMemo, useState } from 'react'; -import { Button, Dropdown, Input, InputAddress, InputBalance, Modal, TxButton } from '@polkadot/react-components'; -import { useAccounts, useToggle } from '@polkadot/react-hooks'; +import React, { useEffect, useMemo, useState } from 'react'; +import styled from 'styled-components'; +import { Button, Dropdown, Input, InputAddress, InputBalance, InputNumber, Modal, Toggle, TxButton } from '@polkadot/react-components'; +import { useAccounts, useApi, useToggle } from '@polkadot/react-hooks'; import { Available } from '@polkadot/react-query'; import { useTranslation } from './translate'; interface Props { + className?: string; parachains?: DeriveParachain[]; } -function Transfer ({ parachains }: Props): React.ReactElement { +function Transfer ({ className, parachains }: Props): React.ReactElement { const { t } = useTranslation(); + const { api } = useApi(); const { allAccounts } = useAccounts(); const [isVisible, toggleVisible] = useToggle(); const [accountId, setAccountId] = useState(null); + const [recipientId, setRecipientId] = useState(null); const [amount, setAmount] = useState(); - const [toId, setToId] = useState(); + const [paraId, setParaId] = useState(null); const [remark, setRemark] = useState(''); + const [isParachain, setIsParachain] = useState(true); + const [extrinsic, setExtrinsic] = useState | null>(null); const idOptions = useMemo((): { text: string, value: string }[] => { return (parachains || []).map(({ id }) => ({ text: id.toString(), value: id.toString() })); }, [parachains]); + useEffect((): void => { + setExtrinsic((): SubmittableExtrinsic<'promise'> | null => { + if (amount?.gtn(0)) { + if (api.query.parachainUpgrade) { + return recipientId + ? isParachain + ? api.tx.tokenDealer.transferTokensToParachainChain(paraId, recipientId, amount) + : api.tx.tokenDealer.transferTokensToRelayChain(recipientId, amount) + : null; + } else { + return api.tx.parachains.transferToParachain(paraId, amount, remark); + } + } + + return null; + }); + }, [amount, api, isParachain, paraId, recipientId, remark]); + + const isActionDisabled = !allAccounts.length || ( + api.query.parachains + ? !parachains?.length + : !api.query.parachainUpgrade + ); + return ( <>