import { ObjectMap } from '@0x/types'; import { Web3Wrapper } from '@0x/web3-wrapper'; import * as _ from 'lodash'; import { Middleware } from 'redux'; import { ETH_DECIMALS } from '../constants'; import { AccountState } from '../types'; import { analytics } from '../util/analytics'; import { Action, ActionTypes } from './actions'; import { State } from './reducer'; export const analyticsMiddleware: Middleware = store => next => middlewareAction => { const prevState = store.getState() as State; const nextAction = next(middlewareAction) as Action; const nextState = store.getState() as State; const curAccount = nextState.providerState.account; const prevAccount = prevState.providerState.account; switch (nextAction.type) { case ActionTypes.SET_ACCOUNT_STATE_READY: if (curAccount.state === AccountState.Ready && !_.isEqual(curAccount, prevAccount)) { const ethAddress = curAccount.address; analytics.addUserProperties({ ethAddress }); analytics.track('Wallet - Ready'); } break; case ActionTypes.UPDATE_ACCOUNT_ETH_BALANCE: if ( curAccount.state === AccountState.Ready && curAccount.ethBalanceInWei && !_.isEqual(curAccount, prevAccount) ) { const ethBalanceInUnitAmount = Web3Wrapper.toUnitAmount( curAccount.ethBalanceInWei, ETH_DECIMALS, ).toString(); analytics.addUserProperties({ ethBalanceInUnitAmount }); } } return nextAction; };