Browse Source

feature(filter selectors): add selectors for each filter

renovate/lint-staged-8.x
Jack Mallers 7 years ago
parent
commit
ba7071d8dc
  1. 69
      app/reducers/activity.js
  2. 6
      app/routes/activity/components/Activity.js
  3. 5
      app/routes/activity/containers/ActivityContainer.js
  4. 22
      app/selectors/activity.js
  5. 5
      app/selectors/index.js

69
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
// ------------------------------------

6
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 <div>Loading...</div> }
@ -94,7 +94,7 @@ class Activity extends Component {
</header>
<ul className={styles.activityContainer}>
{
sortedActivity.map((activity, index) => {
currentActivity.map((activity, index) => {
return (
<li className={styles.activity} key={index}>
{this.renderActivity(activity)}

5
app/routes/activity/containers/ActivityContainer.js

@ -12,8 +12,7 @@ import {
paymentSelectors
} from '../../../reducers/payment'
import { fetchTransactions } from '../../../reducers/transaction'
import { showActivityModal, hideActivityModal } from '../../../reducers/activity'
import { activitySelectors } from '../../../selectors'
import { showActivityModal, hideActivityModal, activitySelectors } from '../../../reducers/activity'
import Activity from '../components/Activity'
const mapDispatchToProps = {
@ -42,7 +41,7 @@ const mapStateToProps = state => ({
currentTicker: tickerSelectors.currentTicker(state),
sortedActivity: activitySelectors.sortedActivity(state)
currentActivity: activitySelectors.currentActivity(state)(state)
})
export default connect(mapStateToProps, mapDispatchToProps)(Activity)

22
app/selectors/activity.js

@ -1,22 +0,0 @@
import { createSelector } from 'reselect'
const activitySelectors = {}
const paymentsSelector = state => state.payment.payments
const invoicesSelector = state => state.invoice.invoices
const transactionsSelector = state => state.transaction.transactions
activitySelectors.sortedActivity = 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
})
}
)
export default activitySelectors

5
app/selectors/index.js

@ -1,5 +0,0 @@
import activitySelectors from './activity'
export default {
activitySelectors
}
Loading…
Cancel
Save