zepio/app/containers/send.js

73 lines
1.6 KiB
JavaScript

// @flow
import { connect } from 'react-redux';
import eres from 'eres';
import { BigNumber } from 'bignumber.js';
import rpc from '../../services/api';
import { SendView } from '../views/send';
import {
sendTransaction,
sendTransactionSuccess,
sendTransactionError,
} from '../redux/modules/send';
import filterObjectNullKeys from '../utils/filterObjectNullKeys';
import type { AppState } from '../types/app-state';
import type { Dispatch } from '../types/redux';
export type SendTransactionInput = {
from: string,
to: string,
amount: string,
fee: number,
memo: string,
};
const mapStateToProps = ({ walletSummary, sendStatus }: AppState) => ({
balance: walletSummary.total,
zecPrice: walletSummary.zecPrice,
addresses: walletSummary.addresses,
error: sendStatus.error,
isSending: sendStatus.isSending,
});
const mapDispatchToProps = (dispatch: Dispatch) => ({
sendTransaction: async ({
from,
to,
amount,
fee,
memo,
}: SendTransactionInput) => {
dispatch(sendTransaction());
const [sendErr] = await eres(
rpc.z_sendmany(
from,
// $FlowFixMe
[
filterObjectNullKeys({
address: to,
amount: new BigNumber(amount).toNumber(),
memo,
}),
],
1,
new BigNumber(fee).toNumber(),
),
);
// eslint-disable-next-line
if (sendErr) return dispatch(sendTransactionError({ error: sendErr.message }));
dispatch(sendTransactionSuccess());
},
});
export const SendContainer = connect(
mapStateToProps,
mapDispatchToProps,
)(SendView);