UNPKG

@atlaskit/analytics-next

Version:

React components, HOCs and hooks to assist with tracking user activity with React components

79 lines (78 loc) 2.48 kB
import _defineProperty from "@babel/runtime/helpers/defineProperty"; import React, { Component } from 'react'; import PropTypes from 'prop-types'; import index from '../matchEvent'; export const ContextTypes = { onAnalyticsEvent: PropTypes.func, getParentAnalyticsData: PropTypes.func }; /** * The Decorator component extends analytics event data * for any events fired by its descendents, * then passes the event up the hierarchy */ // eslint-disable-next-line @repo/internal/react/no-class-components export class AnalyticsDecorator extends Component { constructor(...args) { super(...args); _defineProperty(this, "getDecoratedAnalyticsData", (name, srcData, isPrivate) => { const { data, getData, match, matchPrivate } = this.props; const decoratedData = { ...srcData }; if (matchPrivate === isPrivate && index(match, name)) { if (typeof data === 'object') { Object.assign(decoratedData, data); } if (typeof getData === 'function') { Object.assign(decoratedData, getData(name, decoratedData)); } } return decoratedData; }); _defineProperty(this, "onAnalyticsEvent", (name, srcData, isPrivate) => { const { onAnalyticsEvent } = this.context; if (typeof onAnalyticsEvent !== 'function') { return; } const decoratedData = this.getDecoratedAnalyticsData(name, srcData, isPrivate); onAnalyticsEvent(name, decoratedData, isPrivate); }); _defineProperty(this, "getParentAnalyticsData", (name, isPrivate) => { const parentData = this.getDecoratedAnalyticsData(name, {}, isPrivate); const { getParentAnalyticsData } = this.context; if (typeof getParentAnalyticsData === 'function') { Object.assign(parentData, getParentAnalyticsData(name, isPrivate)); } return parentData; }); } getChildContext() { return { onAnalyticsEvent: this.onAnalyticsEvent, getParentAnalyticsData: this.getParentAnalyticsData }; } render() { const { children } = this.props; return React.Children.only(children); } } _defineProperty(AnalyticsDecorator, "defaultProps", { match: '*', matchPrivate: false }); _defineProperty(AnalyticsDecorator, "contextTypes", ContextTypes); _defineProperty(AnalyticsDecorator, "childContextTypes", ContextTypes); export default AnalyticsDecorator;