ghost-portal/packages/page-sudo/src/Sudo.tsx
Keith Ingram 2081464de8
Rewrite & update to page-contracts (#2873)
* first commit

* finish

* InputMegaGas, use BN consts'

* update util'

* tags issue

* manifest

* import bn_zero

* rm

* restore contract tags

* fix tags onClose

* sec to ms

* ms -> sec

Co-authored-by: Jaco Greeff <jacogr@gmail.com>
2020-06-09 14:56:10 +02:00

102 lines
3.1 KiB
TypeScript

// Copyright 2017-2020 @polkadot/app-js 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 { SubmittableExtrinsic } from '@polkadot/api/types';
import { ComponentProps as Props } from './types';
import BN from 'bn.js';
import React, { useCallback, useState } from 'react';
import styled from 'styled-components';
import { Button, Icon, Extrinsic, Toggle, TxButton, InputNumber } from '@polkadot/react-components';
import { useApi, useToggle } from '@polkadot/react-hooks';
import { BN_ZERO } from '@polkadot/util';
import { useTranslation } from './translate';
function Propose ({ className = '', isMine, sudoKey }: Props): React.ReactElement<Props> {
const { t } = useTranslation();
const { api, apiDefaultTxSudo } = useApi();
const [withWeight, toggleWithWeight] = useToggle();
const [method, setMethod] = useState<SubmittableExtrinsic<'promise'> | null>(null);
const [weight, setWeight] = useState<BN>(BN_ZERO);
const _onChangeExtrinsic = useCallback(
(method: SubmittableExtrinsic<'promise'> | null = null) =>
setMethod(() => method),
[]
);
const _onChangeWeight = useCallback(
(weight: BN = BN_ZERO) => setWeight(weight),
[]
);
return isMine
? (
<section className={className}>
<Extrinsic
defaultValue={apiDefaultTxSudo}
label={t<string>('submit the following change')}
onChange={_onChangeExtrinsic}
/>
<br />
{withWeight && (
<InputNumber
help={t<string>('The unchecked weight as specified for the sudoUncheckedWeight call.')}
isError={weight.eq(BN_ZERO)}
isZeroable={false}
label={t<string>('unchecked weight for this call')}
onChange={_onChangeWeight}
value={weight}
/>
)}
{api.tx.sudo.sudoUncheckedWeight && (
<Toggle
className='sudoToggle'
label={
withWeight
? t<string>('sudo with unchecked weight parameter')
: t<string>('sudo without unchecked weight parameter')
}
onChange={toggleWithWeight}
value={withWeight}
/>
)}
<Button.Group>
<TxButton
accountId={sudoKey}
icon='sign-in'
isDisabled={!method || (withWeight ? weight.eq(BN_ZERO) : false)}
label={t<string>('Submit Sudo')}
params={
withWeight
? [method, weight]
: [method]
}
tx={
withWeight
? 'sudo.sudoUncheckedWeight'
: 'sudo.sudo'
}
/>
</Button.Group>
</section>
)
: (
<article className='error padded'>
<div>
<Icon name='ban' />
{t<string>('You do not have access to the current sudo key')}
</div>
</article>
);
}
export default React.memo(styled(Propose)`
.sudoToggle {
width: 100%;
text-align: right;
}
`);