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, isValidGasPrice, isValidGasLimit } from 'selectors/transaction'; import { getWalletType } from 'selectors/wallet'; export interface CallbackProps { disabled: boolean; isWeb3Wallet: boolean; onClick(): void; } interface StateProps { transaction: EthTx; networkRequestPending: boolean; isFullTransaction: boolean; isWeb3Wallet: boolean; validGasPrice: boolean; validGasLimit: boolean; } interface OwnProps { withProps(props: CallbackProps): React.ReactElement | null; } type Props = OwnProps & StateProps; class GenerateTransactionFactoryClass extends Component { public render() { const { isFullTransaction, isWeb3Wallet, networkRequestPending, validGasPrice, validGasLimit, transaction } = this.props; const isButtonDisabled = !isFullTransaction || networkRequestPending || !validGasPrice || !validGasLimit; return ( this.props.withProps({ disabled: isButtonDisabled, isWeb3Wallet, onClick: () => signer(transaction) }) } /> ); } } export const GenerateTransactionFactory = connect((state: AppState) => ({ ...getTransaction(state), networkRequestPending: isNetworkRequestPending(state), isWeb3Wallet: getWalletType(state).isWeb3Wallet, validGasPrice: isValidGasPrice(state), validGasLimit: isValidGasLimit(state) }))(GenerateTransactionFactoryClass);