UNPKG

6.9 kBJavaScriptView Raw
1"use strict";
2
3require("core-js/modules/es.array.iterator");
4
5require("core-js/modules/es.function.name");
6
7require("core-js/modules/es.object.assign");
8
9require("core-js/modules/es.object.define-property");
10
11require("core-js/modules/es.object.get-own-property-descriptor");
12
13require("core-js/modules/es.object.to-string");
14
15require("core-js/modules/es.string.iterator");
16
17require("core-js/modules/es.weak-map");
18
19require("core-js/modules/web.dom-collections.iterator");
20
21Object.defineProperty(exports, "__esModule", {
22 value: true
23});
24exports["default"] = withTrackingComponentDecorator;
25exports.ReactTrackingContext = exports.TrackingContextType = void 0;
26
27var _react = _interopRequireWildcard(require("react"));
28
29var _propTypes = _interopRequireDefault(require("prop-types"));
30
31var _deepmerge = _interopRequireDefault(require("deepmerge"));
32
33var _hoistNonReactStatics = _interopRequireDefault(require("hoist-non-react-statics"));
34
35var _dispatchTrackingEvent = _interopRequireDefault(require("./dispatchTrackingEvent"));
36
37function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
38
39function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
40
41function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; if (obj != null) { var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
42
43function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
44
45var TrackingContextType = _propTypes["default"].shape({
46 data: _propTypes["default"].object,
47 dispatch: _propTypes["default"].func,
48 process: _propTypes["default"].func
49});
50
51exports.TrackingContextType = TrackingContextType;
52
53var ReactTrackingContext = _react["default"].createContext({});
54
55exports.ReactTrackingContext = ReactTrackingContext;
56
57function withTrackingComponentDecorator() {
58 var trackingData = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
59
60 var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
61 _ref$dispatch = _ref.dispatch,
62 dispatch = _ref$dispatch === void 0 ? _dispatchTrackingEvent["default"] : _ref$dispatch,
63 _ref$dispatchOnMount = _ref.dispatchOnMount,
64 dispatchOnMount = _ref$dispatchOnMount === void 0 ? false : _ref$dispatchOnMount,
65 process = _ref.process;
66
67 return function (DecoratedComponent) {
68 var decoratedComponentName = DecoratedComponent.displayName || DecoratedComponent.name || 'Component';
69
70 function WithTracking(props) {
71 var _useContext = (0, _react.useContext)(ReactTrackingContext),
72 tracking = _useContext.tracking;
73
74 var getProcessFn = (0, _react.useCallback)(function () {
75 return tracking && tracking.process;
76 }, []);
77 var getOwnTrackingData = (0, _react.useCallback)(function () {
78 var ownTrackingData = typeof trackingData === 'function' ? trackingData(props) : trackingData;
79 return ownTrackingData || {};
80 }, [trackingData, props]);
81 var getTrackingDataFn = (0, _react.useCallback)(function () {
82 var contextGetTrackingData = tracking && tracking.getTrackingData || getOwnTrackingData;
83 return function () {
84 return contextGetTrackingData === getOwnTrackingData ? getOwnTrackingData() : (0, _deepmerge["default"])(contextGetTrackingData(), getOwnTrackingData());
85 };
86 }, [getOwnTrackingData]);
87 var getTrackingDispatcher = (0, _react.useCallback)(function () {
88 var contextDispatch = tracking && tracking.dispatch || dispatch;
89 return function (data) {
90 return contextDispatch((0, _deepmerge["default"])(getOwnTrackingData(), data || {}));
91 };
92 }, [dispatch, getOwnTrackingData]);
93 var trackEvent = (0, _react.useCallback)(function () {
94 var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
95 getTrackingDispatcher()(data);
96 }, [getTrackingDispatcher]);
97 (0, _react.useEffect)(function () {
98 var contextProcess = getProcessFn();
99 var getTrackingData = getTrackingDataFn();
100
101 if (getProcessFn() && process) {
102 // eslint-disable-next-line
103 console.error('[react-tracking] options.process should be defined once on a top-level component');
104 }
105
106 if (typeof contextProcess === 'function' && typeof dispatchOnMount === 'function') {
107 trackEvent((0, _deepmerge["default"])(contextProcess(getOwnTrackingData()) || {}, dispatchOnMount(getTrackingData()) || {}));
108 } else if (typeof contextProcess === 'function') {
109 var processed = contextProcess(getOwnTrackingData());
110
111 if (processed || dispatchOnMount === true) {
112 trackEvent(processed);
113 }
114 } else if (typeof dispatchOnMount === 'function') {
115 trackEvent(dispatchOnMount(getTrackingData()));
116 } else if (dispatchOnMount === true) {
117 trackEvent();
118 }
119 }, []);
120 var trackingProp = (0, _react.useMemo)(function () {
121 return {
122 trackEvent: trackEvent,
123 getTrackingData: getTrackingDataFn()
124 };
125 }, [trackEvent, getTrackingDataFn]);
126 var contextValue = (0, _react.useMemo)(function () {
127 return {
128 tracking: {
129 dispatch: getTrackingDispatcher(),
130 getTrackingData: getTrackingDataFn(),
131 process: getProcessFn() || process
132 }
133 };
134 }, [getTrackingDispatcher, getTrackingDataFn, getProcessFn, process]);
135 return (0, _react.useMemo)(function () {
136 return _react["default"].createElement(ReactTrackingContext.Provider, {
137 value: contextValue
138 }, _react["default"].createElement(DecoratedComponent, _extends({}, props, {
139 tracking: trackingProp
140 })));
141 }, [contextValue, trackingProp]);
142 }
143
144 WithTracking.displayName = "WithTracking(".concat(decoratedComponentName, ")");
145 (0, _hoistNonReactStatics["default"])(WithTracking, DecoratedComponent);
146 return WithTracking;
147 };
148}
\No newline at end of file