UNPKG

lin3s-react-analytics-enhanced-ecommerce

Version:

React components to help integrating Google Analytics and Google Tag Manager in a React application

50 lines (43 loc) 1.46 kB
import React, {PureComponent} from 'react'; import {queueDataLayer, pushDataLayer} from 'lin3s-react-analytics'; import isEqual from 'lodash.isequal'; import PropTypes from 'prop-types'; class ProductImpressions extends PureComponent { componentDidMount() { if (this.props.synchronous) { pushDataLayer(this.props.impressions); } else { queueDataLayer(this.props.impressions); } } componentWillReceiveProps(nextProps) { if (nextProps.synchronous && !isEqual(nextProps.impressions.ecommerce, this.props.impressions.ecommerce)) { pushDataLayer(nextProps.impressions); } } render() { return (<React.Fragment>{this.props.children}</React.Fragment>); } } ProductImpressions.propTypes = { children: PropTypes.element.isRequired, impressions: PropTypes.shape({ event: PropTypes.string.isRequired, ecommerce: PropTypes.shape({ currencyCode: PropTypes.string.isRequired, impressions: PropTypes.arrayOf(PropTypes.shape({ brand: PropTypes.string.isRequired, category: PropTypes.string.isRequired, id: PropTypes.string.isRequired, list: PropTypes.string.isRequired, name: PropTypes.string.isRequired, position: PropTypes.number.isRequired, }).isRequired).isRequired, }).isRequired, }).isRequired, synchronous: PropTypes.bool, }; ProductImpressions.defaultPros = { synchronous: false, }; export default ProductImpressions;