1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-10-23 11:46:13 +02:00
metamask-extension/ui/app/helpers/higher-order-components/metametrics/metametrics.provider.js
Chi Kei Chan 31175625b4 Folder restructure (#6304)
* Remove ui/app/keychains/

* Remove ui/app/img/ (unused images)

* Move conversion-util to helpers/utils/

* Move token-util to helpers/utils/

* Move /helpers/*.js inside /helpers/utils/

* Move util tests inside /helpers/utils/

* Renameand move confirm-transaction/util.js to helpers/utils/

* Move higher-order-components to helpers/higher-order-components/

* Move infura-conversion.json to helpers/constants/

* Move all utility functions to helpers/utils/

* Move pages directory to top-level

* Move all constants to helpers/constants/

* Move metametrics inside helpers/

* Move app and root inside pages/

* Move routes inside helpers/

* Re-organize ducks/

* Move reducers to ducks/

* Move selectors inside selectors/

* Move test out of test folder

* Move action, reducer, store inside store/

* Move ui components inside ui/

* Move UI components inside ui/

* Move connected components inside components/app/

* Move i18n-helper inside helpers/

* Fix unit tests

* Fix unit test

* Move pages components

* Rename routes component

* Move reducers to ducks/index

* Fix bad path in unit test
2019-03-21 20:33:30 -02:30

107 lines
2.9 KiB
JavaScript

import { Component } from 'react'
import { connect } from 'react-redux'
import PropTypes from 'prop-types'
import { withRouter } from 'react-router-dom'
import { compose } from 'recompose'
import {
getCurrentNetworkId,
getSelectedAsset,
getAccountType,
getNumberOfAccounts,
getNumberOfTokens,
} from '../../../selectors/selectors'
import {
txDataSelector,
} from '../../../selectors/confirm-transaction'
import { getEnvironmentType } from '../../../../../app/scripts/lib/util'
import {
sendMetaMetricsEvent,
sendCountIsTrackable,
} from '../../utils/metametrics.util'
class MetaMetricsProvider extends Component {
static propTypes = {
network: PropTypes.string.isRequired,
environmentType: PropTypes.string.isRequired,
activeCurrency: PropTypes.string.isRequired,
accountType: PropTypes.string.isRequired,
metaMetricsSendCount: PropTypes.number.isRequired,
children: PropTypes.object.isRequired,
history: PropTypes.object.isRequired,
}
static childContextTypes = {
metricsEvent: PropTypes.func,
}
constructor (props) {
super(props)
this.state = {
previousPath: '',
currentPath: window.location.href,
}
props.history.listen(locationObj => {
this.setState({
previousPath: this.state.currentPath,
currentPath: window.location.href,
})
})
}
getChildContext () {
const props = this.props
const { pathname } = location
const { previousPath, currentPath } = this.state
return {
metricsEvent: (config = {}, overrides = {}) => {
const { eventOpts = {} } = config
const { name = '' } = eventOpts
const { pathname: overRidePathName = '' } = overrides
const isSendFlow = Boolean(name.match(/^send|^confirm/) || overRidePathName.match(/send|confirm/))
if (props.participateInMetaMetrics || config.isOptIn) {
return sendMetaMetricsEvent({
...props,
...config,
previousPath,
currentPath,
pathname,
excludeMetaMetricsId: isSendFlow && !sendCountIsTrackable(props.metaMetricsSendCount + 1),
...overrides,
})
}
},
}
}
render () {
return this.props.children
}
}
const mapStateToProps = state => {
const txData = txDataSelector(state) || {}
return {
network: getCurrentNetworkId(state),
environmentType: getEnvironmentType(),
activeCurrency: getSelectedAsset(state),
accountType: getAccountType(state),
confirmTransactionOrigin: txData.origin,
metaMetricsId: state.metamask.metaMetricsId,
participateInMetaMetrics: state.metamask.participateInMetaMetrics,
metaMetricsSendCount: state.metamask.metaMetricsSendCount,
numberOfTokens: getNumberOfTokens(state),
numberOfAccounts: getNumberOfAccounts(state),
}
}
module.exports = compose(
withRouter,
connect(mapStateToProps)
)(MetaMetricsProvider)