From ffbea9788cfa772b806b67caf70f24b15056eff1 Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Mon, 2 Dec 2019 13:51:29 +0100 Subject: [PATCH] Democracy display updates (#1974) * Democracy updates * Democracy UI cleanups * Cleanup labels * Move seconding, again... --- .../app-democracy/src/Overview/Proposal.tsx | 69 +++++++++----- .../src/Overview/ProposalCell.tsx | 39 ++++++++ .../app-democracy/src/Overview/Proposals.tsx | 24 +++-- .../app-democracy/src/Overview/Referendum.tsx | 92 ++++++------------- .../src/Overview/Referendums.tsx | 26 ++++-- .../app-democracy/src/Overview/Seconding.tsx | 16 ++-- .../app-staking/src/Actions/Account/index.tsx | 6 +- packages/app-staking/src/Overview/Address.tsx | 3 +- .../app-staking/src/Overview/CurrentList.tsx | 41 +++------ .../app-staking/src/Targets/Validator.tsx | 3 +- packages/app-staking/src/Targets/index.tsx | 25 +---- packages/react-components/src/AddressMini.tsx | 44 +++++---- .../src/AddressSmall.tsx | 5 +- .../react-components/src/Chart/HorizBar.tsx | 14 +-- .../src/Table.tsx | 17 +++- packages/react-components/src/index.tsx | 2 + 16 files changed, 221 insertions(+), 205 deletions(-) create mode 100644 packages/app-democracy/src/Overview/ProposalCell.tsx rename packages/{app-staking => react-components}/src/AddressSmall.tsx (90%) rename packages/{app-staking => react-components}/src/Table.tsx (90%) diff --git a/packages/app-democracy/src/Overview/Proposal.tsx b/packages/app-democracy/src/Overview/Proposal.tsx index cf7fa971ce..68ce300eab 100644 --- a/packages/app-democracy/src/Overview/Proposal.tsx +++ b/packages/app-democracy/src/Overview/Proposal.tsx @@ -6,44 +6,63 @@ import { DeriveProposal } from '@polkadot/api-derive/types'; import { I18nProps } from '@polkadot/react-components/types'; import React from 'react'; -import { ActionItem, InputAddress, Static } from '@polkadot/react-components'; +import styled from 'styled-components'; +import { AddressMini, AddressSmall } from '@polkadot/react-components'; import { FormatBalance } from '@polkadot/react-query'; +import { formatNumber } from '@polkadot/util'; import translate from '../translate'; +import ProposalCell from './ProposalCell'; import Seconding from './Seconding'; interface Props extends I18nProps { value: DeriveProposal; } -function Proposal ({ className, t, value: { balance, index, proposal, seconds } }: Props): React.ReactElement { +function Proposal ({ className, t, value: { balance, index, proposal, proposer, seconds } }: Props): React.ReactElement { return ( - - - {balance && seconds && ( -
- {seconds.map((address, count): React.ReactNode => ( - + {formatNumber(index)} + + + + + {t('locked')}} value={balance} /> + + + + {seconds + .filter((_address, index): boolean => index !== 0) + .map((address, count): React.ReactNode => ( + ))} - - - -
- )} -
+ + + + + ); } -export default translate(Proposal); +export default translate( + styled(Proposal)` + .identityIcon { + &:first-child { + padding-top: 0; + } + + &:last-child { + margin-bottom: 4px; + } + } + ` +); diff --git a/packages/app-democracy/src/Overview/ProposalCell.tsx b/packages/app-democracy/src/Overview/ProposalCell.tsx new file mode 100644 index 0000000000..112db37e00 --- /dev/null +++ b/packages/app-democracy/src/Overview/ProposalCell.tsx @@ -0,0 +1,39 @@ +// 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 { Proposal } from '@polkadot/types/interfaces'; +import { I18nProps } from '@polkadot/react-components/types'; + +import React from 'react'; +import { registry } from '@polkadot/react-api'; +import { Call } from '@polkadot/react-components'; + +import translate from '../translate'; + +interface Props extends I18nProps { + proposal: Proposal; +} + +function ProposalCell ({ className, proposal, t }: Props): React.ReactElement { + const { meta, method, section } = registry.findMetaCall(proposal.callIndex); + + return ( + +
{section}.{method}
+
+ { + meta && meta.documentation + ? meta.documentation.join(' ') + : t('Details') + } + +
+ + ); +} + +export default translate(ProposalCell); diff --git a/packages/app-democracy/src/Overview/Proposals.tsx b/packages/app-democracy/src/Overview/Proposals.tsx index 6fa6201a49..cad9bfdb01 100644 --- a/packages/app-democracy/src/Overview/Proposals.tsx +++ b/packages/app-democracy/src/Overview/Proposals.tsx @@ -6,6 +6,7 @@ import { DeriveProposal } from '@polkadot/api-derive/types'; import { I18nProps as Props } from '@polkadot/react-components/types'; import React from 'react'; +import { Table } from '@polkadot/react-components'; import { useApi, trackStream } from '@polkadot/react-hooks'; import ProposalDisplay from './Proposal'; @@ -18,15 +19,20 @@ function Proposals ({ className, t }: Props): React.ReactElement { return (

{t('proposals')}

- { - proposals?.length - ? proposals.map((proposal): React.ReactNode => ( - - )) - : t('No active proposals') + {proposals?.length + ? ( + + + {proposals.map((proposal): React.ReactNode => ( + + ))} + +
+ ) + : t('No active proposals') }
); diff --git a/packages/app-democracy/src/Overview/Referendum.tsx b/packages/app-democracy/src/Overview/Referendum.tsx index 7d444a4437..9c18376815 100644 --- a/packages/app-democracy/src/Overview/Referendum.tsx +++ b/packages/app-democracy/src/Overview/Referendum.tsx @@ -9,15 +9,13 @@ import { I18nProps } from '@polkadot/react-components/types'; import BN from 'bn.js'; import React, { useEffect, useState } from 'react'; import styled from 'styled-components'; -import { ActionItem, Chart, Static, Voting } from '@polkadot/react-components'; -import { formatBalance, formatNumber } from '@polkadot/util'; -import VoteThreshold from '@polkadot/react-params/Param/VoteThreshold'; +import { formatNumber } from '@polkadot/util'; import { withCalls, withMulti } from '@polkadot/react-api'; +import { FormatBalance } from '@polkadot/react-query'; import translate from '../translate'; - -const COLORS_AYE = ['#64bebe', '#5badad']; -const COLORS_NAY = ['#d75ea1', '#e189ba']; +import ProposalCell from './ProposalCell'; +import Voting from './Voting'; interface Props extends I18nProps { idNumber: BN; @@ -37,7 +35,7 @@ interface State { } function Referendum ({ chain_bestNumber, className, democracy_enactmentPeriod, democracy_referendumVotesFor, t, value }: Props): React.ReactElement | null { - const [{ voteCount, voteCountAye, voteCountNay, votedAye, votedNay, votedTotal }, setState] = useState({ + const [{ voteCountAye, voteCountNay, votedAye, votedNay }, setState] = useState({ voteCount: 0, voteCountAye: 0, voteCountNay: 0, @@ -85,63 +83,29 @@ function Referendum ({ chain_bestNumber, className, democracy_enactmentPeriod, d const enactBlock = (democracy_enactmentPeriod || new BN(0)).add(value.info.end); return ( - - } - > -
- - {t('block #{{blockNumber}}, {{remaining}} blocks remaining', { - replace: { - blockNumber: formatNumber(value.info.end), - remaining: formatNumber(value.info.end.sub(chain_bestNumber).subn(1)) - } - })} - - - {t('block #{{blockNumber}}', { - replace: { - blockNumber: formatNumber(enactBlock) - } - })} - - - {voteCount !== 0 && votedTotal.gtn(0) && ( -
- -
- )} -
-
+ + {formatNumber(value.index)} + + + + {formatNumber(value.info.end.sub(chain_bestNumber).subn(1))} blocks + + + + {formatNumber(enactBlock)} + + + + + + + + + + + + + ); } diff --git a/packages/app-democracy/src/Overview/Referendums.tsx b/packages/app-democracy/src/Overview/Referendums.tsx index f47d89093f..2e3a7eafb2 100644 --- a/packages/app-democracy/src/Overview/Referendums.tsx +++ b/packages/app-democracy/src/Overview/Referendums.tsx @@ -6,6 +6,7 @@ import { DerivedReferendum } from '@polkadot/api-derive/types'; import { I18nProps as Props } from '@polkadot/react-components/types'; import React from 'react'; +import { Table } from '@polkadot/react-components'; import { useApi, trackStream } from '@polkadot/react-hooks'; import Referendum from './Referendum'; @@ -18,16 +19,21 @@ function Referendums ({ className, t }: Props): React.ReactElement { return (

{t('referenda')}

- { - referendums?.length - ? referendums.map((referendum): React.ReactNode => ( - - )) - : t('No active referendums') + {referendums?.length + ? ( + + + {referendums.map((referendum): React.ReactNode => ( + + ))} + +
+ ) + : t('No active referendums') }
); diff --git a/packages/app-democracy/src/Overview/Seconding.tsx b/packages/app-democracy/src/Overview/Seconding.tsx index 400fab0ae4..5061e1d610 100644 --- a/packages/app-democracy/src/Overview/Seconding.tsx +++ b/packages/app-democracy/src/Overview/Seconding.tsx @@ -62,7 +62,7 @@ function Seconding ({ depositors, proposalId, t }: Props): React.ReactElement @@ -70,14 +70,12 @@ function Seconding ({ depositors, proposalId, t }: Props): React.ReactElement )} - -