Files

89 lines
2.6 KiB
TypeScript
Raw Permalink Normal View History

2017-12-18 16:23:31 -05:00
import React, { Component } from 'react';
import { connect } from 'react-redux';
import EthTx from 'ethereumjs-tx';
import { AppState } from 'features/reducers';
import * as derivedSelectors from 'features/selectors';
import { walletSelectors } from 'features/wallet';
import {
transactionNetworkSelectors,
transactionSignSelectors,
transactionSelectors
} from 'features/transaction';
import { ConfirmationModal } from 'components/ConfirmationModal';
import { OnlineSend } from './OnlineSend';
2017-12-18 16:23:31 -05:00
export interface CallbackProps {
disabled: boolean;
signTx(): void;
openModal(): void;
2017-12-18 16:23:31 -05:00
}
interface StateProps {
walletType: walletSelectors.IWalletType;
serializedTransaction: AppState['transaction']['sign']['local']['signedTransaction'];
transaction: EthTx;
isFullTransaction: boolean;
networkRequestPending: boolean;
validGasPrice: boolean;
validGasLimit: boolean;
signedTx: boolean;
2017-12-18 16:23:31 -05:00
}
2018-02-06 23:39:24 -05:00
2017-12-18 16:23:31 -05:00
interface OwnProps {
2017-12-24 15:56:40 -06:00
onlyTransactionParameters?: boolean;
signing?: boolean;
2018-01-29 16:38:28 -05:00
Modal: typeof ConfirmationModal;
2017-12-18 16:23:31 -05:00
withProps(props: CallbackProps): React.ReactElement<any> | null;
}
type Props = StateProps & OwnProps;
2018-04-15 03:21:33 +05:00
export class SendButtonFactoryClass extends Component<Props> {
2017-12-18 16:23:31 -05:00
public render() {
const {
signing,
signedTx,
transaction,
isFullTransaction,
serializedTransaction,
networkRequestPending,
validGasPrice,
validGasLimit
} = this.props;
// return signing ? true : signedTx ? true : false
2017-12-18 16:23:31 -05:00
return (
(signing || (!signing && signedTx)) && (
<OnlineSend
withOnClick={({ openModal, signer }) =>
this.props.withProps({
disabled: signing
? !isFullTransaction || networkRequestPending || !validGasPrice || !validGasLimit
: !!(signing && !serializedTransaction),
signTx: () => signer(transaction),
openModal
})
}
Modal={this.props.Modal}
/>
)
2017-12-18 16:23:31 -05:00
);
}
}
const mapStateToProps = (state: AppState) => {
return {
walletType: walletSelectors.getWalletType(state),
serializedTransaction: derivedSelectors.getSerializedTransaction(state),
...derivedSelectors.getTransaction(state),
networkRequestPending: transactionNetworkSelectors.isNetworkRequestPending(state),
validGasPrice: transactionSelectors.isValidGasPrice(state),
validGasLimit: transactionSelectors.isValidGasLimit(state),
signedTx:
!!transactionSignSelectors.getSignedTx(state) || !!transactionSignSelectors.getWeb3Tx(state)
};
};
export const SendButtonFactory = connect(mapStateToProps)(SendButtonFactoryClass);