aboutsummaryrefslogblamecommitdiffstats
path: root/ui/app/selectors/transactions.js
blob: 479002794ef7f39e0c411b779f516656b47c4660 (plain) (tree)
1
2
3
4
5
6
7
8
9
10







                                         

                                                       
                                                                                





























                                                                                            
                                                                                         


   






                                                                               





                                                                                  
import { createSelector } from 'reselect'
import { valuesFor } from '../util'
import {
  UNAPPROVED_STATUS,
  APPROVED_STATUS,
  SUBMITTED_STATUS,
} from '../constants/transactions'

import { selectedTokenAddressSelector } from './tokens'

export const shapeShiftTxListSelector = state => state.metamask.shapeShiftTxList
export const unapprovedMsgsSelector = state => state.metamask.unapprovedMsgs
export const selectedAddressTxListSelector = state => state.metamask.selectedAddressTxList

const pendingStatusHash = {
  [UNAPPROVED_STATUS]: true,
  [APPROVED_STATUS]: true,
  [SUBMITTED_STATUS]: true,
}

export const transactionsSelector = createSelector(
  selectedTokenAddressSelector,
  unapprovedMsgsSelector,
  shapeShiftTxListSelector,
  selectedAddressTxListSelector,
  (selectedTokenAddress, unapprovedMsgs = {}, shapeShiftTxList = [], transactions = []) => {
    const unapprovedMsgsList = valuesFor(unapprovedMsgs)
    const txsToRender = transactions.concat(unapprovedMsgsList, shapeShiftTxList)

    return selectedTokenAddress
      ? txsToRender
        .filter(({ txParams }) => txParams && txParams.to === selectedTokenAddress)
        .sort((a, b) => b.time - a.time)
      : txsToRender
        .sort((a, b) => b.time - a.time)
  }
)

export const pendingTransactionsSelector = createSelector(
  transactionsSelector,
  (transactions = []) => (
    transactions.filter(transaction => transaction.status in pendingStatusHash).reverse()
  )
)

export const submittedPendingTransactionsSelector = createSelector(
  transactionsSelector,
  (transactions = []) => (
    transactions.filter(transaction => transaction.status === SUBMITTED_STATUS)
  )
)

export const completedTransactionsSelector = createSelector(
  transactionsSelector,
  (transactions = []) => (
    transactions.filter(transaction => !(transaction.status in pendingStatusHash))
  )
)