feature: add transactions list in redux
This commit is contained in:
parent
c2f7abb3a0
commit
7de3b6b0e9
|
@ -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),
|
||||
}),
|
||||
);
|
||||
},
|
||||
|
|
|
@ -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) => {
|
||||
|
|
|
@ -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>
|
||||
);
|
||||
|
|
Loading…
Reference in New Issue