import React from 'react'; import { connect } from 'react-redux'; import { getStepsModalCurrentStep } from '../../../store/ui/selectors'; import { StoreState } from '../../../types/store'; import { BaseStepModal } from './base_step_modal'; import { StepItem } from './steps_progress'; import { ContractReceipt, ContractTransaction } from 'ethers'; import { initBalances, setPaymasterMinBalance, setPaymasterPaymentToken } from '../../../store/actions'; import { StepSetPaymentToken } from '../../../types/steps-modal'; import { getWeb3Wrapper } from '../../../services/web3_wrapper'; interface OwnProps { buildStepsProgress: (currentStepItem: StepItem) => StepItem[]; } interface StateProps { step: StepSetPaymentToken; } interface DispatchProps { onSend: ( address: string ) => Promise; initBalances: () => any } type Props = OwnProps & StateProps & DispatchProps; class SetPaymentTokenStep extends React.Component { public render = () => { const { buildStepsProgress, step } = this.props; const title = `Set Payment Token`; const confirmCaption = `Confirm on Metamask Send Transaction`; const loadingCaption = "Sending Transaction"; const doneCaption = "Transaction Mined"; const errorCaption = `Failed to Send Transaction`; const loadingFooterCaption = `Waiting for confirmation...`; const doneFooterCaption = `Sent`; return ( ); }; private readonly _runAction = async ({ onLoading, onDone, onError }: any) => { const { step, onSend, initBalances } = this.props; const web3Wrapper = await getWeb3Wrapper(); try { const contractTransaction: ContractTransaction = await onSend(step.address); onLoading(); const contractReceipt: ContractReceipt = await contractTransaction.wait(); await web3Wrapper.waitForTransaction(contractReceipt.transactionHash); initBalances() onDone() } catch(e) { console.log(e) onError(e) } }; } const mapStateToProps = (state: StoreState): StateProps => { return { step: getStepsModalCurrentStep(state) as StepSetPaymentToken, }; }; const mapDispatchToProps = (dispatch: any): DispatchProps => { return { onSend: (address: string) => dispatch(setPaymasterPaymentToken(address)), initBalances: () => dispatch(initBalances()) } } const SetPaymentTokenStepContainer = connect( mapStateToProps, mapDispatchToProps )(SetPaymentTokenStep); export { SetPaymentTokenStep, SetPaymentTokenStepContainer };