From 161eed0e60238ecb38f4db2b321050b3678e6f7c Mon Sep 17 00:00:00 2001 From: Fr4ctalbit <55669487+fr4ctalbit@users.noreply.github.com> Date: Wed, 9 Oct 2019 17:58:14 +0200 Subject: [PATCH] Turn Submit proposal tab into a modal (#1698) * Turn Submit proposal tab into a modal * Fix linting issues * adjust imports, remove account field * switch the order of arguments in txParams --- .../src/{ => Overview}/Propose.tsx | 96 +++++++++---------- packages/app-democracy/src/Overview/index.tsx | 2 + packages/app-democracy/src/index.tsx | 9 -- 3 files changed, 47 insertions(+), 60 deletions(-) rename packages/app-democracy/src/{ => Overview}/Propose.tsx (53%) diff --git a/packages/app-democracy/src/Propose.tsx b/packages/app-democracy/src/Overview/Propose.tsx similarity index 53% rename from packages/app-democracy/src/Propose.tsx rename to packages/app-democracy/src/Overview/Propose.tsx index 7377d3a941..3bcde41958 100644 --- a/packages/app-democracy/src/Propose.tsx +++ b/packages/app-democracy/src/Overview/Propose.tsx @@ -3,51 +3,71 @@ // of the Apache-2.0 license. See the LICENSE file for details. import { Call } from '@polkadot/types/interfaces'; -import { I18nProps } from '@polkadot/react-components/types'; import { ApiProps } from '@polkadot/react-api/types'; import BN from 'bn.js'; import React from 'react'; -import { RouteComponentProps } from 'react-router'; -import { withRouter } from 'react-router-dom'; import { createType } from '@polkadot/types'; -import { Button, Extrinsic, InputAddress, InputBalance, TxButton, TxComponent } from '@polkadot/react-components'; +import { Button, Extrinsic, InputBalance } from '@polkadot/react-components'; +import TxModal, { TxModalState, TxModalProps } from '@polkadot/react-components/TxModal'; import { withApi, withMulti } from '@polkadot/react-api'; -import translate from './translate'; +import translate from '../translate'; -interface Props extends I18nProps, ApiProps, RouteComponentProps { - basePath: string; -} +interface Props extends TxModalProps, ApiProps {} -interface State { +interface State extends TxModalState { accountId?: string | null; method: Call | null; value: BN; isValid: boolean; } -class Propose extends TxComponent { +class Propose extends TxModal { public state: State = { - method: null, - value: new BN(0), - isValid: false + ...this.defaultState, + value: new BN(0) }; - public render (): React.ReactNode { + protected headerText = (): string => this.props.t('Submit proposal'); + + protected txMethod = (): string => 'democracy.propose'; + + protected txParams = (): [Call, BN] => { + const { value, method } = this.state; + return [createType('Proposal', method), value]; + } + + protected isDisabled = (): boolean => { + const { accountId, value, method } = this.state; + const hasValue = !!value && value.gtn(0); + const hasMethod = !!method; + + return !accountId || !hasValue || !hasMethod; + } + + protected renderTrigger = (): React.ReactNode => { + const { t } = this.props; + + return ( + +