From 43d6f3d9690aaa4f0cbbab86ffbdabc1e3f20939 Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Mon, 2 Dec 2019 15:49:46 +0100 Subject: [PATCH] Rework council display (#1976) * Rework council layout * Updates * Bump API --- package.json | 6 +- packages/app-contracts/package.json | 2 +- .../app-council/src/Overview/Candidate.tsx | 41 +++++---- .../app-council/src/Overview/Candidates.tsx | 63 +++++++++++++ packages/app-council/src/Overview/Member.tsx | 41 --------- packages/app-council/src/Overview/Members.tsx | 86 +++++------------- packages/app-council/src/Overview/Summary.tsx | 4 +- packages/app-council/src/Overview/Vote.tsx | 3 +- packages/app-council/src/Overview/index.tsx | 78 ++++++++++------ packages/app-council/src/index.tsx | 22 ++++- packages/react-api/package.json | 2 +- yarn.lock | 90 +++++++++---------- 12 files changed, 230 insertions(+), 208 deletions(-) create mode 100644 packages/app-council/src/Overview/Candidates.tsx delete mode 100644 packages/app-council/src/Overview/Member.tsx diff --git a/package.json b/package.json index d758be067e..c19dd8ceb4 100644 --- a/package.json +++ b/package.json @@ -10,10 +10,10 @@ "packages/*" ], "resolutions": { - "@polkadot/api": "^0.98.0-beta.1", - "@polkadot/api-contract": "^0.98.0-beta.1", + "@polkadot/api": "^0.98.0-beta.2", + "@polkadot/api-contract": "^0.98.0-beta.2", "@polkadot/keyring": "^1.7.1", - "@polkadot/types": "^0.98.0-beta.1", + "@polkadot/types": "^0.98.0-beta.2", "@polkadot/util": "^1.7.1", "@polkadot/util-crypto": "^1.7.1", "babel-core": "^7.0.0-bridge.0", diff --git a/packages/app-contracts/package.json b/packages/app-contracts/package.json index de013ec888..7688b1e62c 100644 --- a/packages/app-contracts/package.json +++ b/packages/app-contracts/package.json @@ -11,7 +11,7 @@ "license": "Apache-2.0", "dependencies": { "@babel/runtime": "^7.7.4", - "@polkadot/api-contract": "^0.98.0-beta.1", + "@polkadot/api-contract": "^0.98.0-beta.2", "@polkadot/react-components": "^0.38.0-beta.12" } } diff --git a/packages/app-council/src/Overview/Candidate.tsx b/packages/app-council/src/Overview/Candidate.tsx index 37594e27ad..8f432454e8 100644 --- a/packages/app-council/src/Overview/Candidate.tsx +++ b/packages/app-council/src/Overview/Candidate.tsx @@ -3,39 +3,38 @@ // of the Apache-2.0 license. See the LICENSE file for details. import { I18nProps } from '@polkadot/react-components/types'; -import { AccountId } from '@polkadot/types/interfaces'; +import { AccountId, Balance } from '@polkadot/types/interfaces'; import React from 'react'; -import { AddressCard, Badge, Icon } from '@polkadot/react-components'; +import { AddressSmall } from '@polkadot/react-components'; +import { FormatBalance } from '@polkadot/react-query'; import translate from '../translate'; import Voters from './Voters'; interface Props extends I18nProps { address: AccountId; - isRunnerUp?: boolean; + balance?: Balance; voters?: AccountId[]; } -function Candidate ({ address, isRunnerUp, t, voters }: Props): React.ReactElement { +function Candidate ({ address, balance, t, voters }: Props): React.ReactElement { return ( - } - isTooltip - type='runnerup' - /> - )} - value={address} - withIndexOrAddress - > - {voters && voters.length !== 0 && ( - - )} - + + + + + + {balance && balance.gtn(0) && ( + {t('backing')}} value={balance} /> + )} + + + {voters && voters.length !== 0 && ( + + )} + + ); } diff --git a/packages/app-council/src/Overview/Candidates.tsx b/packages/app-council/src/Overview/Candidates.tsx new file mode 100644 index 0000000000..b8e6e1d021 --- /dev/null +++ b/packages/app-council/src/Overview/Candidates.tsx @@ -0,0 +1,63 @@ +/* eslint-disable @typescript-eslint/camelcase */ +// Copyright 2017-2019 @polkadot/app-democracy authors & contributors +// This software may be modified and distributed under the terms +// of the Apache-2.0 license. See the LICENSE file for details. + +import { AccountId } from '@polkadot/types/interfaces'; +import { I18nProps } from '@polkadot/react-components/types'; +import { ComponentProps } from './types'; + +import React from 'react'; +import { Table } from '@polkadot/react-components'; + +import translate from '../translate'; +import Candidate from './Candidate'; + +interface Props extends I18nProps, ComponentProps { + allVotes?: Record; + className?: string; +} + +function Candidates ({ allVotes = {}, className, electionsInfo: { candidates, runnersUp }, t }: Props): React.ReactElement { + return ( +
+

{t('runners up')}

+ {runnersUp.length + ? ( + + + {runnersUp.map(([accountId, balance]): React.ReactNode => ( + + ))} + +
+ ) + : t('No runners up found') + } +

{t('candidates')}

+ {candidates.length + ? ( + + + {candidates.map((accountId): React.ReactNode => ( + + ))} + +
+ ) + : t('No candidates found') + } +
+ ); +} + +export default translate(Candidates); diff --git a/packages/app-council/src/Overview/Member.tsx b/packages/app-council/src/Overview/Member.tsx deleted file mode 100644 index e75d822fd7..0000000000 --- a/packages/app-council/src/Overview/Member.tsx +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2017-2019 @polkadot/app-democracy authors & contributors -// This software may be modified and distributed under the terms -// of the Apache-2.0 license. See the LICENSE file for details. - -import { I18nProps } from '@polkadot/react-components/types'; -import { AccountId } from '@polkadot/types/interfaces'; - -import React from 'react'; -import { AddressCard, Badge, Icon } from '@polkadot/react-components'; - -import translate from '../translate'; -import Voters from './Voters'; - -interface Props extends I18nProps { - address: AccountId; - voters?: AccountId[]; -} - -function Member ({ address, t, voters }: Props): React.ReactElement { - return ( - } - isTooltip - type='selected' - /> - } - value={address} - withIndexOrAddress - > - {voters && voters.length !== 0 && ( - - )} - - ); -} - -export default translate(Member); diff --git a/packages/app-council/src/Overview/Members.tsx b/packages/app-council/src/Overview/Members.tsx index 7048c6e16c..689aa2ea64 100644 --- a/packages/app-council/src/Overview/Members.tsx +++ b/packages/app-council/src/Overview/Members.tsx @@ -8,78 +8,38 @@ import { I18nProps } from '@polkadot/react-components/types'; import { ComponentProps } from './types'; import React from 'react'; -import { withCalls } from '@polkadot/react-api'; -import { Columar, Column } from '@polkadot/react-components'; +import { Table } from '@polkadot/react-components'; import translate from '../translate'; import Candidate from './Candidate'; -import Member from './Member'; interface Props extends I18nProps, ComponentProps { allVotes?: Record; + className?: string; } -function Members ({ allVotes = {}, electionsInfo: { candidates, members, runnersUp }, t }: Props): React.ReactElement { +function Members ({ allVotes = {}, className, electionsInfo: { members }, t }: Props): React.ReactElement { return ( - - - {members.map(([accountId]): React.ReactNode => ( - - ))} - - - {(!!candidates.length || !!runnersUp.length) && ( - <> - {runnersUp.map(([accountId]): React.ReactNode => ( - - ))} - {candidates.map((accountId): React.ReactNode => ( - - ))} - - )} - - +
+ {members.length + ? ( + + + {members.map(([accountId, balance]): React.ReactNode => ( + + ))} + +
+ ) + : t('No members found') + } +
); } -export default translate( - withCalls( - ['query.electionsPhragmen.votesOf', { - propName: 'allVotes', - transform: ([voters, casted]: [AccountId[], AccountId[][]]): Record => - voters.reduce((result: Record, voter, index): Record => { - casted[index].forEach((candidate): void => { - const address = candidate.toString(); - - if (!result[address]) { - result[address] = []; - } - - result[address].push(voter); - }); - - return result; - }, {}) - }] - )(Members) -); +export default translate(Members); diff --git a/packages/app-council/src/Overview/Summary.tsx b/packages/app-council/src/Overview/Summary.tsx index c9a63aec49..448b8489c1 100644 --- a/packages/app-council/src/Overview/Summary.tsx +++ b/packages/app-council/src/Overview/Summary.tsx @@ -17,9 +17,9 @@ interface Props extends I18nProps, ComponentProps { bestNumber?: BlockNumber; } -function Summary ({ bestNumber, electionsInfo: { members, candidateCount, desiredSeats, runnersUp, termDuration, voteCount }, t }: Props): React.ReactElement { +function Summary ({ bestNumber, className, electionsInfo: { members, candidateCount, desiredSeats, runnersUp, termDuration, voteCount }, t }: Props): React.ReactElement { return ( - +
{formatNumber(members.length)}/{formatNumber(desiredSeats)} diff --git a/packages/app-council/src/Overview/Vote.tsx b/packages/app-council/src/Overview/Vote.tsx index 9830bd3aaf..b011169c0b 100644 --- a/packages/app-council/src/Overview/Vote.tsx +++ b/packages/app-council/src/Overview/Vote.tsx @@ -56,8 +56,7 @@ const Candidates = styled.div` border: 1px solid #eee; border-radius: 0.25rem; margin: 0.25rem; - padding-bottom: 0.25rem; - padding-right: 0.5rem; + padding: 0 0.5rem 0.25rem; position: relative; &::after { diff --git a/packages/app-council/src/Overview/index.tsx b/packages/app-council/src/Overview/index.tsx index ef8e3abb49..464923e0c4 100644 --- a/packages/app-council/src/Overview/index.tsx +++ b/packages/app-council/src/Overview/index.tsx @@ -3,21 +3,23 @@ // of the Apache-2.0 license. See the LICENSE file for details. import { DerivedElectionsInfo } from '@polkadot/api-derive/types'; -import { BlockNumber } from '@polkadot/types/interfaces'; -import { ComponentProps } from './types'; +import { AccountId, BlockNumber } from '@polkadot/types/interfaces'; import React from 'react'; -import { withCalls, registry } from '@polkadot/react-api'; +import { useLocation } from 'react-router-dom'; +import { registry } from '@polkadot/react-api'; import { Button } from '@polkadot/react-components'; +import { useApi, trackStream } from '@polkadot/react-hooks'; import { createType } from '@polkadot/types'; +import Candidates from './Candidates'; import Members from './Members'; import SubmitCandidacy from './SubmitCandidacy'; import Summary from './Summary'; import Vote from './Vote'; -interface Props extends ComponentProps { - bestNumber?: BlockNumber; +interface Props { + className?: string; } const NULL_INFO: DerivedElectionsInfo = { @@ -29,28 +31,54 @@ const NULL_INFO: DerivedElectionsInfo = { termDuration: createType(registry, 'BlockNumber') }; -function Overview ({ bestNumber, electionsInfo = NULL_INFO }: Props): React.ReactElement { +export default function Overview ({ className }: Props): React.ReactElement { + const { api } = useApi(); + const bestNumber = trackStream(api.derive.chain.bestNumber, []); + const _electionsInfo = trackStream(api.derive.elections.info, []); + const allVotes = trackStream>(api.query.electionsPhragmen.votesOf, [], { + transform: ([voters, casted]: [AccountId[], AccountId[][]]): Record => + voters.reduce((result: Record, voter, index): Record => { + casted[index].forEach((candidate): void => { + const address = candidate.toString(); + + if (!result[address]) { + result[address] = []; + } + + result[address].push(voter); + }); + + return result; + }, {}) + }); + const { pathname } = useLocation(); + const electionsInfo = _electionsInfo || NULL_INFO; + return ( - <> - + {pathname === '/council' && ( + <> + + + + + + + + )} + - - - - - - - + + ); } - -export default withCalls( - ['derive.elections.info', { - propName: 'electionsInfo' - }], - ['derive.chain.bestNumber', { - propName: 'bestNumber' - }] -)(Overview); diff --git a/packages/app-council/src/index.tsx b/packages/app-council/src/index.tsx index 145768d333..1ffe9ad66e 100644 --- a/packages/app-council/src/index.tsx +++ b/packages/app-council/src/index.tsx @@ -6,6 +6,8 @@ import { AppProps, BareProps, I18nProps } from '@polkadot/react-components/types import React from 'react'; import { Route, Switch } from 'react-router'; +import { useLocation } from 'react-router-dom'; +import styled from 'styled-components'; import { Tabs } from '@polkadot/react-components'; import Overview from './Overview'; @@ -14,9 +16,11 @@ import translate from './translate'; interface Props extends AppProps, BareProps, I18nProps {} -function App ({ basePath, t }: Props): React.ReactElement { +function App ({ basePath, className, t }: Props): React.ReactElement { + const { pathname } = useLocation(); + return ( -
+
{ name: 'overview', text: t('Council overview') }, + { + name: 'candidates', + text: t('Candidates') + }, { name: 'motions', text: t('Motions') @@ -35,10 +43,16 @@ function App ({ basePath, t }: Props): React.ReactElement {
- +
); } -export default translate(App); +export default translate( + styled(App)` + .council--hidden { + display: none; + } + ` +); diff --git a/packages/react-api/package.json b/packages/react-api/package.json index 7235a23bb0..b3ad666439 100644 --- a/packages/react-api/package.json +++ b/packages/react-api/package.json @@ -31,7 +31,7 @@ "homepage": "https://github.com/polkadot-js/ui/tree/master/packages/ui-reactive#readme", "dependencies": { "@babel/runtime": "^7.7.4", - "@polkadot/api": "^0.98.0-beta.1", + "@polkadot/api": "^0.98.0-beta.2", "@polkadot/extension-dapp": "^0.14.0-beta.6", "edgeware-node-types": "^1.0.10", "rxjs-compat": "^6.5.3" diff --git a/yarn.lock b/yarn.lock index b2e135faf3..c5d98d7e13 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2029,35 +2029,35 @@ dependencies: "@types/node" ">= 8" -"@polkadot/api-contract@^0.98.0-beta.1": - version "0.98.0-beta.1" - resolved "https://registry.yarnpkg.com/@polkadot/api-contract/-/api-contract-0.98.0-beta.1.tgz#dde866e8968566f4245db1f304e41aa7cacf0f07" - integrity sha512-y6VQF6jB/jYUVqspmlq28ALFVeyAU0Vr7MlsXAshGA5Ejx7XjSJYqEkl4ESeraIDYGrLxHBJZxz8828xb3w88Q== +"@polkadot/api-contract@^0.98.0-beta.2": + version "0.98.0-beta.2" + resolved "https://registry.yarnpkg.com/@polkadot/api-contract/-/api-contract-0.98.0-beta.2.tgz#8ad3cf5f3928840618a6b30198994417cb5d9f97" + integrity sha512-nfnDEt+SFxf0AkypLKXlaauInDZNmMrWGHQQMwyZB1VnekmTugw/Ftj7ptDoSsFqKu0XFIIswLgfeVFkyX9dxA== dependencies: "@babel/runtime" "^7.7.4" - "@polkadot/types" "^0.98.0-beta.1" + "@polkadot/types" "^0.98.0-beta.2" -"@polkadot/api-derive@^0.98.0-beta.1": - version "0.98.0-beta.1" - resolved "https://registry.yarnpkg.com/@polkadot/api-derive/-/api-derive-0.98.0-beta.1.tgz#2d8eaa185f6351b32f906d25fb49e81334311a41" - integrity sha512-MpcbN7oRJ8xmQ2mynAN62CrwXFDJQG9wLewA7SgUAgSMXM/D3g88iyxuIFV6N/lAZKFfVWqg86ALWep+DpJYJQ== +"@polkadot/api-derive@^0.98.0-beta.2": + version "0.98.0-beta.2" + resolved "https://registry.yarnpkg.com/@polkadot/api-derive/-/api-derive-0.98.0-beta.2.tgz#b42ce023391263c7f94476e5c37340f7579b7dd5" + integrity sha512-CxaCv1+CHrXOFKEM+X1ZBmLJH5Af/+g5IPTBCb9QFzWuGFkOy+4u4Zra9mkVvmr0/FGoE0Mmy6X4XMjTaHnHLA== dependencies: "@babel/runtime" "^7.7.4" - "@polkadot/api" "^0.98.0-beta.1" - "@polkadot/types" "^0.98.0-beta.1" + "@polkadot/api" "^0.98.0-beta.2" + "@polkadot/types" "^0.98.0-beta.2" -"@polkadot/api@^0.98.0-beta.1": - version "0.98.0-beta.1" - resolved "https://registry.yarnpkg.com/@polkadot/api/-/api-0.98.0-beta.1.tgz#ad1bf45c9db4a310326c21ecc6fe6b3a6286715a" - integrity sha512-4JIEIbtPnl38EXWOB+TjMnICMCvSMEbXZq4JbbLHl8FY0E0vOaeSWRrwuB4sz+Ho9oCt0usFtpomdowFHA6neQ== +"@polkadot/api@^0.98.0-beta.2": + version "0.98.0-beta.2" + resolved "https://registry.yarnpkg.com/@polkadot/api/-/api-0.98.0-beta.2.tgz#3b2cfe28ad700bba84cd2ae7a6d20946e1efcd29" + integrity sha512-gg0rF/NVNnHfFk+AcikjWrvS3s1RmM87RyQV/PsgSvPjciAg2kYhs41r6Tg/UMupgJ6EOGeYodBNuuQx7rWyxg== dependencies: "@babel/runtime" "^7.7.4" - "@polkadot/api-derive" "^0.98.0-beta.1" + "@polkadot/api-derive" "^0.98.0-beta.2" "@polkadot/keyring" "^1.7.1" - "@polkadot/metadata" "^0.98.0-beta.1" - "@polkadot/rpc-core" "^0.98.0-beta.1" - "@polkadot/rpc-provider" "^0.98.0-beta.1" - "@polkadot/types" "^0.98.0-beta.1" + "@polkadot/metadata" "^0.98.0-beta.2" + "@polkadot/rpc-core" "^0.98.0-beta.2" + "@polkadot/rpc-provider" "^0.98.0-beta.2" + "@polkadot/types" "^0.98.0-beta.2" "@polkadot/util-crypto" "^1.7.1" "@polkadot/dev-react@^0.32.0-beta.15": @@ -2161,10 +2161,10 @@ dependencies: "@babel/runtime" "^7.7.4" -"@polkadot/jsonrpc@^0.98.0-beta.1": - version "0.98.0-beta.1" - resolved "https://registry.yarnpkg.com/@polkadot/jsonrpc/-/jsonrpc-0.98.0-beta.1.tgz#8c0a09b94d9fa432e64ec08bc52ca5db9ba8fd4b" - integrity sha512-dhFECHZq0vE1orTxxQ0yfkj+9goH1bFzVSWoNIt6UW4JSaOsKhTmMX3zjGxOBkzl88dOgMzaqF9HE4Vp3Ghyiw== +"@polkadot/jsonrpc@^0.98.0-beta.2": + version "0.98.0-beta.2" + resolved "https://registry.yarnpkg.com/@polkadot/jsonrpc/-/jsonrpc-0.98.0-beta.2.tgz#6ede1e788bd56cee980c1db35f1af0b80853040b" + integrity sha512-kAqvjkcLWvZJ/lO3LbsYkOz+ItsIeWZhS3Hzd+dCSTdTcapOXpKTVWP7Miwk1lg+xtyYlHzaFWn8Jdi0m6jl1w== dependencies: "@babel/runtime" "^7.7.4" @@ -2177,13 +2177,13 @@ "@polkadot/util" "^1.7.1" "@polkadot/util-crypto" "^1.7.1" -"@polkadot/metadata@^0.98.0-beta.1": - version "0.98.0-beta.1" - resolved "https://registry.yarnpkg.com/@polkadot/metadata/-/metadata-0.98.0-beta.1.tgz#3491cc376b0a466423315c4f18f1bc38853db0be" - integrity sha512-233F/gFt+kv1Fm43TvUHHVYk/WcknBBUmBSQ015rX/wyLtrxl0lCEUrPe5mGrTrhSxzhjDRLt2KPUAAA1RDVjg== +"@polkadot/metadata@^0.98.0-beta.2": + version "0.98.0-beta.2" + resolved "https://registry.yarnpkg.com/@polkadot/metadata/-/metadata-0.98.0-beta.2.tgz#2660d6d28371cd15cfd431d231b973a8922fdd46" + integrity sha512-uneR572tQb62OxoL1K2hQRDpjuasT52LRrRY8bBfkPC9O4gcMEslHUtUlEIHbqyAloYCAhoNpKAY5dxlFELjEQ== dependencies: "@babel/runtime" "^7.7.4" - "@polkadot/types" "^0.98.0-beta.1" + "@polkadot/types" "^0.98.0-beta.2" "@polkadot/util" "^1.7.1" "@polkadot/util-crypto" "^1.7.1" @@ -2212,25 +2212,25 @@ qrcode-generator "^1.4.4" react-qr-reader "^2.2.1" -"@polkadot/rpc-core@^0.98.0-beta.1": - version "0.98.0-beta.1" - resolved "https://registry.yarnpkg.com/@polkadot/rpc-core/-/rpc-core-0.98.0-beta.1.tgz#211838c2566771556a368fba0a0aaa52f9efefa9" - integrity sha512-e0dtdg08Yl3uJ1G9QoWj4h5zyQ1v5CY4+SEWryk5WaXUGcUCaHWBI30pi/8vD6KZ8S2p51+MsZ1x5kOLlFskRg== +"@polkadot/rpc-core@^0.98.0-beta.2": + version "0.98.0-beta.2" + resolved "https://registry.yarnpkg.com/@polkadot/rpc-core/-/rpc-core-0.98.0-beta.2.tgz#8900d6f8120d286ebccf9e3d94e1ee3fb0106edd" + integrity sha512-zZcutXF2RGrnsbg3Eg68S4d0lYQYEYgqGnKp8pEhlPnnmRbniat9E9veYa2UIjh7XrJ4vHsy0zbkbQe2aduWAg== dependencies: "@babel/runtime" "^7.7.4" - "@polkadot/jsonrpc" "^0.98.0-beta.1" - "@polkadot/rpc-provider" "^0.98.0-beta.1" - "@polkadot/types" "^0.98.0-beta.1" + "@polkadot/jsonrpc" "^0.98.0-beta.2" + "@polkadot/rpc-provider" "^0.98.0-beta.2" + "@polkadot/types" "^0.98.0-beta.2" "@polkadot/util" "^1.7.1" rxjs "^6.5.3" -"@polkadot/rpc-provider@^0.98.0-beta.1": - version "0.98.0-beta.1" - resolved "https://registry.yarnpkg.com/@polkadot/rpc-provider/-/rpc-provider-0.98.0-beta.1.tgz#d3f45ddc5d98213cc2b7ba146ae693a23b758eb7" - integrity sha512-JtoqWDesXQQaIw8I0BNvo15/BR/yNOZLBaAxfMV+wgppaAlPBTjm/YmALsd36KG7a68XqaOV6cua4Gqc3d7QRw== +"@polkadot/rpc-provider@^0.98.0-beta.2": + version "0.98.0-beta.2" + resolved "https://registry.yarnpkg.com/@polkadot/rpc-provider/-/rpc-provider-0.98.0-beta.2.tgz#d5edd198cc60d2244df42e6adcf86a6fb37d6bd0" + integrity sha512-bUM+9Vez/dV9sL8PPOEddgmMs9XLVQTcSF8hoFDlT8Y3d4ARHGwQDhTTngZw1p9cNYMKVqi9f4AwPL4rGpUm3w== dependencies: "@babel/runtime" "^7.7.4" - "@polkadot/metadata" "^0.98.0-beta.1" + "@polkadot/metadata" "^0.98.0-beta.2" "@polkadot/util" "^1.7.1" "@polkadot/util-crypto" "^1.7.1" eventemitter3 "^4.0.0" @@ -2244,10 +2244,10 @@ dependencies: "@types/chrome" "^0.0.91" -"@polkadot/types@^0.98.0-beta.1": - version "0.98.0-beta.1" - resolved "https://registry.yarnpkg.com/@polkadot/types/-/types-0.98.0-beta.1.tgz#01f6e9f896a6e7224bc0f269df445ea561149de5" - integrity sha512-9vCaK/gdbfs1ABAaAhrcFDrTVhUXLqwdZ/JlJiPxiI7o1Ful+SYO4f0jOpsX8RMsbA6ErwmbFYdvW+bNvgmdCA== +"@polkadot/types@^0.98.0-beta.2": + version "0.98.0-beta.2" + resolved "https://registry.yarnpkg.com/@polkadot/types/-/types-0.98.0-beta.2.tgz#1fd5d987944c7ea7918b521c4d2bdea9c7eebf87" + integrity sha512-qHqT7vJcjTRZjkQhfIb+13oDNQRWB63MSPCvcy6VTdEvz233wSxsdFNCYVSo1hQfSBS4O2mtZghE7+MWjR7suw== dependencies: "@babel/runtime" "^7.7.4" "@polkadot/util" "^1.7.1"