MyCrypto/common/components/GenerateTransaction/GenerateTransaction.tsx
Danny Skubak e0c4599b64 Advanced Settings Input Validation (#872)
* add gas limit/price constants

* add gas limit/price validators & selectors

* apply new gas limit/price validation to components and sagas

* create/apply function to sanitize advanced fields input

* add types, update tests

* fix unrelated failing test
2018-01-21 12:41:20 -06:00

69 lines
1.8 KiB
TypeScript

import translate from 'translations';
import { WithSigner } from './Container';
import EthTx from 'ethereumjs-tx';
import React, { Component } from 'react';
import { connect } from 'react-redux';
import { AppState } from 'reducers';
import {
getTransaction,
isNetworkRequestPending,
isValidAmount,
isValidGasPrice,
isValidGasLimit
} from 'selectors/transaction';
import { getWalletType } from 'selectors/wallet';
interface StateProps {
transaction: EthTx;
networkRequestPending: boolean;
isFullTransaction: boolean;
isWeb3Wallet: boolean;
validAmount: boolean;
validGasPrice: boolean;
validGasLimit: boolean;
}
class GenerateTransactionClass extends Component<StateProps> {
public render() {
const {
isFullTransaction,
isWeb3Wallet,
transaction,
networkRequestPending,
validAmount,
validGasPrice,
validGasLimit
} = this.props;
const isButtonDisabled =
!isFullTransaction ||
networkRequestPending ||
!validAmount ||
!validGasPrice ||
!validGasLimit;
return (
<WithSigner
isWeb3={isWeb3Wallet}
withSigner={signer => (
<button
disabled={isButtonDisabled}
className="btn btn-info btn-block"
onClick={signer(transaction)}
>
{isWeb3Wallet ? translate('Send to MetaMask / Mist') : translate('DEP_signtx')}
</button>
)}
/>
);
}
}
export const GenerateTransaction = connect((state: AppState) => ({
...getTransaction(state),
networkRequestPending: isNetworkRequestPending(state),
isWeb3Wallet: getWalletType(state).isWeb3Wallet,
validAmount: isValidAmount(state),
validGasPrice: isValidGasPrice(state),
validGasLimit: isValidGasLimit(state)
}))(GenerateTransactionClass);