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';
|
2019-02-13 10:27:36 -08:00
|
|
|
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';
|
2019-02-11 05:50:10 -08:00
|
|
|
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) {
|
2019-01-28 05:03:11 -08:00
|
|
|
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 => ({
|
2019-02-13 10:27:36 -08:00
|
|
|
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(),
|
2019-02-19 08:06:34 -08:00
|
|
|
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
|
|
|
}),
|
|
|
|
);
|
|
|
|
},
|
|
|
|
});
|
|
|
|
|
2019-01-21 16:08:35 -08:00
|
|
|
// $FlowFixMe
|
2018-12-15 14:36:50 -08:00
|
|
|
export const TransactionsContainer = connect(
|
|
|
|
mapStateToProps,
|
|
|
|
mapDispatchToProps,
|
|
|
|
)(TransactionsView);
|