From 685b6aa732800cbfeb00e7aadc67f748b71fcd83 Mon Sep 17 00:00:00 2001 From: Jaco Date: Fri, 23 Dec 2022 11:10:29 +0200 Subject: [PATCH] Always pass through voting lock period (#8601) * Always pass through voting lock period * const from voting pallet * Only allow non-empty --- .../page-accounts/src/modals/Delegate.tsx | 4 +++ .../page-democracy/src/Overview/Voting.tsx | 4 +++ .../page-referenda/src/Referenda/Vote.tsx | 4 +-- .../src/Referenda/VoteStandard.tsx | 2 +- .../src/ConvictionDropdown.tsx | 29 ++++++++----------- 5 files changed, 23 insertions(+), 20 deletions(-) diff --git a/packages/page-accounts/src/modals/Delegate.tsx b/packages/page-accounts/src/modals/Delegate.tsx index f1631a3092..25431aa70f 100644 --- a/packages/page-accounts/src/modals/Delegate.tsx +++ b/packages/page-accounts/src/modals/Delegate.tsx @@ -100,6 +100,10 @@ function Delegate ({ onClose, previousAmount, previousConviction, previousDelega label={t('conviction')} onChange={setConviction} value={conviction} + voteLockingPeriod={ + api.consts.democracy.voteLockingPeriod || + api.consts.democracy.enactmentPeriod + } /> diff --git a/packages/page-democracy/src/Overview/Voting.tsx b/packages/page-democracy/src/Overview/Voting.tsx index bc9907fa69..6b977f1f58 100644 --- a/packages/page-democracy/src/Overview/Voting.tsx +++ b/packages/page-democracy/src/Overview/Voting.tsx @@ -74,6 +74,10 @@ function Voting ({ proposal, referendumId }: Props): React.ReactElement | label={t('conviction')} onChange={setConviction} value={conviction} + voteLockingPeriod={ + api.consts.democracy.voteLockingPeriod || + api.consts.democracy.enactmentPeriod + } /> diff --git a/packages/page-referenda/src/Referenda/Vote.tsx b/packages/page-referenda/src/Referenda/Vote.tsx index dff62e434e..b79c7c8afc 100644 --- a/packages/page-referenda/src/Referenda/Vote.tsx +++ b/packages/page-referenda/src/Referenda/Vote.tsx @@ -146,7 +146,7 @@ function Voting ({ className, id, isConvictionVote, isMember, members, palletVot id={id} isAye onChange={setParams} - voteLockingPeriod={api.consts.convictionVoting.voteLockingPeriod} + voteLockingPeriod={api.consts[palletVote as 'convictionVoting'].voteLockingPeriod} /> ) : voteTypeIndex === 1 @@ -155,7 +155,7 @@ function Voting ({ className, id, isConvictionVote, isMember, members, palletVot accountId={accountId} id={id} onChange={setParams} - voteLockingPeriod={api.consts.convictionVoting.voteLockingPeriod} + voteLockingPeriod={api.consts[palletVote as 'convictionVoting'].voteLockingPeriod} /> ) : voteTypeIndex === 2 diff --git a/packages/page-referenda/src/Referenda/VoteStandard.tsx b/packages/page-referenda/src/Referenda/VoteStandard.tsx index 36c1bb95bd..559e72d8b0 100644 --- a/packages/page-referenda/src/Referenda/VoteStandard.tsx +++ b/packages/page-referenda/src/Referenda/VoteStandard.tsx @@ -11,7 +11,7 @@ import { ConvictionDropdown, Modal, VoteValue } from '@polkadot/react-components import { useTranslation } from '../translate'; interface Props extends VoteTypeProps { - voteLockingPeriod?: BN; + voteLockingPeriod: BN; } function VoteStandard ({ accountId, id, isAye, onChange, voteLockingPeriod }: Props): React.ReactElement { diff --git a/packages/react-components/src/ConvictionDropdown.tsx b/packages/react-components/src/ConvictionDropdown.tsx index 0237c340eb..5b534c837b 100644 --- a/packages/react-components/src/ConvictionDropdown.tsx +++ b/packages/react-components/src/ConvictionDropdown.tsx @@ -5,10 +5,9 @@ import type { TFunction } from 'i18next'; import React, { useRef } from 'react'; -import { ApiPromise } from '@polkadot/api'; -import { useApi, useBlockInterval } from '@polkadot/react-hooks'; +import { useBlockInterval } from '@polkadot/react-hooks'; import { calcBlockTime } from '@polkadot/react-hooks/useBlockTime'; -import { BN } from '@polkadot/util'; +import { BN, BN_ZERO } from '@polkadot/util'; import Dropdown from './Dropdown'; import { useTranslation } from './translate'; @@ -19,23 +18,21 @@ export interface Props { label?: React.ReactNode; onChange?: (value: number) => void; value?: number; - voteLockingPeriod?: BN; + voteLockingPeriod: BN; } -const CONVICTIONS: [number, number, BN][] = [1, 2, 4, 8, 16, 32].map((lock, index) => [index + 1, lock, new BN(lock)]); +const CONVICTIONS = [1, 2, 4, 8, 16, 32].map((lock, index): [value: number, duration: number, durationBn: BN] => [index + 1, lock, new BN(lock)]); -function createOptions (api: ApiPromise, t: TFunction, blockTime: BN, voteLockingPeriod?: BN): { text: string; value: number }[] { +function createOptions (blockTime: BN, voteLockingPeriod: BN, t: TFunction): { text: string; value: number }[] { return [ { text: t('0.1x voting balance, no lockup period'), value: 0 }, - ...CONVICTIONS.map(([value, lock, bnLock]): { text: string; value: number } => ({ - text: t('{{value}}x voting balance, locked for {{lock}}x duration ({{period}})', { + ...CONVICTIONS.map(([value, duration, durationBn]): { text: string; value: number } => ({ + text: t('{{value}}x voting balance, locked for {{duration}}x duration{{period}}', { replace: { - lock, - period: calcBlockTime(blockTime, bnLock.mul( - voteLockingPeriod || - api.consts.democracy.voteLockingPeriod || - api.consts.democracy.enactmentPeriod - ), t)[1], + duration, + period: voteLockingPeriod && voteLockingPeriod.gt(BN_ZERO) + ? ` (${calcBlockTime(blockTime, durationBn.mul(voteLockingPeriod), t)[1]})` + : '', value } }), @@ -45,11 +42,9 @@ function createOptions (api: ApiPromise, t: TFunction, blockTime: BN, voteLockin } function Convictions ({ className = '', help, label, onChange, value, voteLockingPeriod }: Props): React.ReactElement | null { - const { api } = useApi(); const { t } = useTranslation(); const blockTime = useBlockInterval(); - - const optionsRef = useRef(createOptions(api, t, blockTime, voteLockingPeriod)); + const optionsRef = useRef(createOptions(blockTime, voteLockingPeriod, t)); return (