From 24d3c18205fc21d08811e62cf35ca978e6bf8720 Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Tue, 26 Mar 2019 12:51:08 +0100 Subject: [PATCH] Nominate/Stake for controllers (#846) --- .../app-staking/src/Account/Nominating.tsx | 18 ++++- packages/app-staking/src/Account/Staking.tsx | 13 +++- packages/app-staking/src/Account/index.tsx | 65 +++++++++++-------- 3 files changed, 65 insertions(+), 31 deletions(-) diff --git a/packages/app-staking/src/Account/Nominating.tsx b/packages/app-staking/src/Account/Nominating.tsx index 703e70db73..ef1fcbb4b4 100644 --- a/packages/app-staking/src/Account/Nominating.tsx +++ b/packages/app-staking/src/Account/Nominating.tsx @@ -5,7 +5,8 @@ import { I18nProps } from '@polkadot/ui-app/types'; import React from 'react'; -import { Button, Input, Modal, TxButton } from '@polkadot/ui-app'; +import { AccountId } from '@polkadot/types'; +import { Button, Input, InputAddress, Modal, TxButton } from '@polkadot/ui-app'; import keyring from '@polkadot/ui-keyring'; import translate from '../translate'; @@ -15,6 +16,7 @@ type Props = I18nProps & { isOpen: boolean, onClose: () => void, intentions: Array, + stashId: AccountId, validators: Array }; @@ -79,7 +81,7 @@ class Nominating extends React.PureComponent { } renderContent () { - const { t } = this.props; + const { accountId, stashId, t } = this.props; const { isNomineeValid, nominees } = this.state; return ( @@ -88,6 +90,18 @@ class Nominating extends React.PureComponent { {t('Nominate Validator')} + + void, - preferences: ValidatorPrefs + preferences: ValidatorPrefs, + stashId: AccountId }; type State = { @@ -91,7 +92,7 @@ class Staking extends React.PureComponent { } private renderContent () { - const { accountId, t } = this.props; + const { accountId, stashId, t } = this.props; const { unstakeThreshold, validatorPayment } = this.state; return ( @@ -106,6 +107,12 @@ class Staking extends React.PureComponent { label={t('account')} value={accountId} /> + , staking_bonded?: Option, + staking_ledger?: Option, staking_nominating?: Option, staking_nominatorsFor?: Array, staking_validators?: ValidatorPrefs, @@ -39,7 +40,8 @@ type State = { isStakingOpen: boolean, bondedId: AccountId | null, controllerId: AccountId | null, - nomineeId: AccountId | null + nomineeId: AccountId | null, + stashId: AccountId | null }; class Account extends React.PureComponent { @@ -50,10 +52,11 @@ class Account extends React.PureComponent { isStakingOpen: false, bondedId: null, controllerId: null, - nomineeId: null + nomineeId: null, + stashId: null }; - static getDerivedStateFromProps ({ session_nextKeyFor, staking_bonded, staking_nominating }: Props): Partial { + static getDerivedStateFromProps ({ session_nextKeyFor, staking_bonded, staking_ledger, staking_nominating }: Props): Partial { return { bondedId: staking_bonded ? staking_bonded.unwrapOr(null) @@ -63,6 +66,9 @@ class Account extends React.PureComponent { : null, nomineeId: staking_nominating ? staking_nominating.unwrapOr(null) + : null, + stashId: staking_ledger && staking_ledger.isSome + ? staking_ledger.unwrap().stash : null }; } @@ -126,9 +132,9 @@ class Account extends React.PureComponent { private renderStaking () { const { accountId, staking_validators } = this.props; - const { isStakingOpen } = this.state; + const { isStakingOpen, stashId } = this.state; - if (!staking_validators || !isStakingOpen) { + if (!staking_validators || !isStakingOpen || !stashId) { return null; } @@ -138,6 +144,7 @@ class Account extends React.PureComponent { isOpen onClose={this.toggleStaking} preferences={staking_validators} + stashId={stashId} /> ); } @@ -182,7 +189,11 @@ class Account extends React.PureComponent { private renderNominating () { const { accountId, intentions, validators } = this.props; - const { isNominateOpen } = this.state; + const { isNominateOpen, stashId } = this.state; + + if (!stashId) { + return null; + } return ( { isOpen={isNominateOpen} onClose={this.toggleNominate} intentions={intentions} + stashId={stashId} validators={validators} /> ); @@ -197,32 +209,32 @@ class Account extends React.PureComponent { private renderButtons () { const { t } = this.props; - const { bondedId, controllerId } = this.state; - const buttons = [ -