From ba7071d8dcb0b2b76e023acf3be7f8bf1581ccbe Mon Sep 17 00:00:00 2001 From: Jack Mallers Date: Wed, 20 Sep 2017 20:30:51 -0500 Subject: [PATCH] feature(filter selectors): add selectors for each filter --- app/reducers/activity.js | 69 +++++++++++++++++++ app/routes/activity/components/Activity.js | 6 +- .../activity/containers/ActivityContainer.js | 5 +- app/selectors/activity.js | 22 ------ app/selectors/index.js | 5 -- 5 files changed, 74 insertions(+), 33 deletions(-) delete mode 100644 app/selectors/activity.js delete mode 100644 app/selectors/index.js diff --git a/app/reducers/activity.js b/app/reducers/activity.js index 209e7730..9c747bcf 100644 --- a/app/reducers/activity.js +++ b/app/reducers/activity.js @@ -1,3 +1,5 @@ +import { createSelector } from 'reselect' + // ------------------------------------ // Initial State // ------------------------------------ @@ -48,6 +50,73 @@ const ACTION_HANDLERS = { [CHANGE_FILTER]: (state, { filter }) => ({ ...state, filter }) } +// ------------------------------------ +// Selectors +// ------------------------------------ +const activitySelectors = {} +const filterSelector = state => state.activity.filter +const paymentsSelector = state => state.payment.payments +const invoicesSelector = state => state.invoice.invoices +const transactionsSelector = state => state.transaction.transactions + +const allActivity = createSelector( + paymentsSelector, + invoicesSelector, + transactionsSelector, + (payments, invoices, transactions) => { + return [...payments, ...invoices, ...transactions].sort((a, b) => { + let aTimestamp = a.hasOwnProperty('time_stamp') ? a.time_stamp : a.creation_date + let bTimestamp = b.hasOwnProperty('time_stamp') ? b.time_stamp : b.creation_date + + return bTimestamp - aTimestamp + }) + } +) + +const lnActivity = createSelector( + paymentsSelector, + invoicesSelector, + (payments, invoices) => { + return [...payments, ...invoices].sort((a, b) => { + let aTimestamp = a.hasOwnProperty('time_stamp') ? a.time_stamp : a.creation_date + let bTimestamp = b.hasOwnProperty('time_stamp') ? b.time_stamp : b.creation_date + + return bTimestamp - aTimestamp + }) + } +) + +const paymentActivity = createSelector( + paymentsSelector, + payments => payments +) + +const invoiceActivity = createSelector( + invoicesSelector, + invoices => invoices +) + +const transactionActivity = createSelector( + transactionsSelector, + transactions => transactions +) + +activitySelectors.currentActivity = createSelector( + filterSelector, + filter => FILTERS[filter] +) + +const FILTERS = { + ALL_ACTIVITY: allActivity, + LN_ACTIVITY: lnActivity, + PAYMENT_ACTIVITY: paymentActivity, + INVOICE_ACTIVITY: invoiceActivity, + TRANSACTION_ACTIVITY: transactionActivity +} + +export { activitySelectors } + + // ------------------------------------ // Reducer // ------------------------------------ diff --git a/app/routes/activity/components/Activity.js b/app/routes/activity/components/Activity.js index 6aa82ad2..5dbf1961 100644 --- a/app/routes/activity/components/Activity.js +++ b/app/routes/activity/components/Activity.js @@ -57,9 +57,9 @@ class Activity extends Component { paymentModalOpen, invoiceModalOpen, currentTicker, - sortedActivity, activity: { modal }, - hideActivityModal + hideActivityModal, + currentActivity } = this.props if (invoiceLoading || paymentLoading) { return
Loading...
} @@ -94,7 +94,7 @@ class Activity extends Component {