zepio/app/containers/transactions.js

92 lines
2.7 KiB
JavaScript
Raw Normal View History

2018-12-15 14:36:50 -08:00
// @flow
2019-02-04 20:41:45 -08:00
2018-12-15 14:36:50 -08:00
import eres from 'eres';
2019-02-04 20:41:45 -08:00
import { connect } from 'react-redux';
2019-01-09 05:14:02 -08:00
import { BigNumber } from 'bignumber.js';
import uuidv4 from 'uuid/v4';
2018-12-15 14:36:50 -08:00
import { TransactionsView } from '../views/transactions';
import {
loadTransactions,
loadTransactionsSuccess,
loadTransactionsError,
2019-02-12 08:50:24 -08:00
resetTransactionsList,
2018-12-15 14:36:50 -08:00
} from '../redux/modules/transactions';
import rpc from '../../services/api';
import { listShieldedTransactions } from '../../services/shielded-transactions';
2018-12-15 14:36:50 -08:00
import store from '../../config/electron-store';
2019-02-11 11:36:29 -08:00
import { sortByDescend } from '../utils/sort-by-descend';
2019-01-08 08:01:20 -08:00
2018-12-15 14:36:50 -08:00
import type { AppState } from '../types/app-state';
import type { Dispatch } from '../types/redux';
2019-02-12 08:50:24 -08:00
import type { Transaction } from '../components/transaction-item';
2018-12-15 14:36:50 -08:00
const mapStateToProps = ({ transactions }: AppState) => ({
transactions: transactions.list,
isLoading: transactions.isLoading,
error: transactions.error,
zecPrice: transactions.zecPrice,
2019-02-12 08:50:24 -08:00
hasNextPage: transactions.hasNextPage,
2018-12-15 14:36:50 -08:00
});
2019-02-12 08:50:24 -08:00
export type MapStateToProps = {
transactions: Transaction[],
isLoading: boolean,
error: string | null,
zecPrice: number,
hasNextPage: boolean,
};
export type MapDispatchToProps = {|
getTransactions: ({
offset: number,
count: number,
shieldedTransactionsCount: number,
}) => Promise<void>,
resetTransactionsList: () => void,
|};
const mapDispatchToProps = (dispatch: Dispatch): MapDispatchToProps => ({
resetTransactionsList: () => dispatch(resetTransactionsList()),
getTransactions: async ({ offset, count, shieldedTransactionsCount }) => {
2018-12-15 14:36:50 -08:00
dispatch(loadTransactions());
2019-02-12 08:50:24 -08:00
const [transactionsErr, transactions = []] = await eres(
rpc.listtransactions('', count, offset),
);
2018-12-15 14:36:50 -08:00
if (transactionsErr) {
return dispatch(loadTransactionsError({ error: transactionsErr.message }));
2018-12-15 14:36:50 -08:00
}
2019-02-12 08:50:24 -08:00
const formattedTransactions = sortByDescend('date')(
[
...transactions,
...listShieldedTransactions({ count, offset: shieldedTransactionsCount }),
].map(transaction => ({
transactionId: transaction.txid ? transaction.txid : uuidv4(),
2019-01-08 08:01:20 -08:00
type: transaction.category,
date: new Date(transaction.time * 1000).toISOString(),
address: transaction.address,
2019-01-09 05:14:02 -08:00
amount: new BigNumber(transaction.amount).absoluteValue().toNumber(),
fees: transaction.fee ? new BigNumber(transaction.fee).abs().toFormat(4) : 'N/A',
2019-01-08 08:01:20 -08:00
})),
2019-02-12 08:50:24 -08:00
);
2019-01-08 08:01:20 -08:00
2018-12-15 14:36:50 -08:00
dispatch(
loadTransactionsSuccess({
2019-01-08 08:01:20 -08:00
list: formattedTransactions,
2019-01-29 07:02:34 -08:00
zecPrice: new BigNumber(store.get('ZEC_DOLLAR_PRICE')).toNumber(),
2019-02-12 08:50:24 -08:00
hasNextPage: Boolean(formattedTransactions.length),
2018-12-15 14:36:50 -08:00
}),
);
},
});
// $FlowFixMe
2018-12-15 14:36:50 -08:00
export const TransactionsContainer = connect(
mapStateToProps,
mapDispatchToProps,
)(TransactionsView);