feature: add transactions list in redux

This commit is contained in:
George Lima 2018-12-13 17:21:08 -03:00
parent c2f7abb3a0
commit 7de3b6b0e9
3 changed files with 41 additions and 8 deletions

View File

@ -2,6 +2,8 @@
import { connect } from 'react-redux';
import eres from 'eres';
import * as R from 'ramda';
import dateFns from 'date-fns';
import { DashboardView } from '../views/dashboard';
import rpc from '../../services/api';
import { loadWalletSummary, loadWalletSummarySuccess, loadWalletSummaryError } from '../redux/modules/wallet';
@ -17,6 +19,7 @@ const mapStateToProps = ({ walletSummary }: AppState) => ({
isLoading: walletSummary.isLoading,
dollarValue: walletSummary.dollarValue,
addresses: walletSummary.addresses,
transactions: walletSummary.transactions,
});
const mapDispatchToProps = (dispatch: Dispatch) => ({
@ -31,12 +34,25 @@ const mapDispatchToProps = (dispatch: Dispatch) => ({
if (addressesErr) return dispatch(loadWalletSummaryError({ error: addressesErr.message }));
const [transactionsErr, transactions = []] = await eres(rpc.listtransactions());
if (transactionsErr) return dispatch(loadWalletSummaryError({ error: transactionsErr.message }));
dispatch(
loadWalletSummarySuccess({
transparent: walletSummary.transparent,
total: walletSummary.total,
shielded: walletSummary.private,
addresses,
transactions: R.pipe(
R.map(transaction => ({
type: transaction.category,
date: new Date(transaction.time * 1000).toISOString(),
address: transaction.address,
amount: Math.abs(transaction.amount),
})),
R.groupBy(obj => dateFns.format(obj.date, 'MMM DD, YYYY')),
)(transactions),
}),
);
},

View File

@ -1,5 +1,6 @@
// @flow
import type { Action } from '../../types/redux';
import type { Transaction } from '../../components/transaction-item';
// Actions
export const LOAD_WALLET_SUMMARY = 'LOAD_WALLET_SUMMARY';
@ -17,11 +18,13 @@ export const loadWalletSummarySuccess = ({
shielded,
transparent,
addresses,
transactions,
}: {
total: number,
shielded: number,
transparent: number,
addresses: string[],
transactions: { [day: string]: Transaction[] },
}) => ({
type: LOAD_WALLET_SUMMARY_SUCCESS,
payload: {
@ -29,6 +32,7 @@ export const loadWalletSummarySuccess = ({
shielded,
transparent,
addresses,
transactions,
},
});
@ -45,6 +49,7 @@ export type State = {
isLoading: boolean,
dollarValue: number,
addresses: [],
transactions: { [day: string]: Transaction[] },
};
const initialState = {
@ -55,6 +60,7 @@ const initialState = {
isLoading: false,
dollarValue: 0,
addresses: [],
transactions: {},
};
export default (state: State = initialState, action: Action) => {

View File

@ -3,8 +3,11 @@
import React from 'react';
import { WalletSummaryComponent } from '../components/wallet-summary';
import { TransactionDailyComponent } from '../components/transaction-daily';
import { withDaemonStatusCheck } from '../components/with-daemon-status-check';
import type { Transaction } from '../components/transaction-item';
type Props = {
getSummary: () => void,
total: number,
@ -14,6 +17,7 @@ type Props = {
isLoading: boolean,
dollarValue: number,
addresses: string[],
transactions: { [day: string]: Transaction[] },
};
export class Dashboard extends React.Component<Props> {
@ -24,9 +28,11 @@ export class Dashboard extends React.Component<Props> {
render() {
const {
error, isLoading, total, shielded, transparent, dollarValue, addresses,
error, isLoading, total, shielded, transparent, dollarValue, addresses, transactions,
} = this.props;
const days = Object.keys(transactions);
if (error) {
return error;
}
@ -36,13 +42,18 @@ export class Dashboard extends React.Component<Props> {
{isLoading ? (
'Loading'
) : (
<WalletSummaryComponent
total={total}
shielded={shielded}
transparent={transparent}
dollarValue={dollarValue}
addresses={addresses}
/>
<div>
<WalletSummaryComponent
total={total}
shielded={shielded}
transparent={transparent}
dollarValue={dollarValue}
addresses={addresses}
/>
{days.map(day => (
<TransactionDailyComponent transactionsDate={day} transactions={transactions[day]} />
))}
</div>
)}
</div>
);