1 | "use strict";
|
2 |
|
3 | require("core-js/modules/es.array.iterator");
|
4 |
|
5 | require("core-js/modules/es.function.name");
|
6 |
|
7 | require("core-js/modules/es.object.assign");
|
8 |
|
9 | require("core-js/modules/es.object.define-property");
|
10 |
|
11 | require("core-js/modules/es.object.get-own-property-descriptor");
|
12 |
|
13 | require("core-js/modules/es.object.to-string");
|
14 |
|
15 | require("core-js/modules/es.string.iterator");
|
16 |
|
17 | require("core-js/modules/es.weak-map");
|
18 |
|
19 | require("core-js/modules/web.dom-collections.iterator");
|
20 |
|
21 | Object.defineProperty(exports, "__esModule", {
|
22 | value: true
|
23 | });
|
24 | exports["default"] = withTrackingComponentDecorator;
|
25 | exports.ReactTrackingContext = exports.TrackingContextType = void 0;
|
26 |
|
27 | var _react = _interopRequireWildcard(require("react"));
|
28 |
|
29 | var _propTypes = _interopRequireDefault(require("prop-types"));
|
30 |
|
31 | var _deepmerge = _interopRequireDefault(require("deepmerge"));
|
32 |
|
33 | var _hoistNonReactStatics = _interopRequireDefault(require("hoist-non-react-statics"));
|
34 |
|
35 | var _dispatchTrackingEvent = _interopRequireDefault(require("./dispatchTrackingEvent"));
|
36 |
|
37 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
38 |
|
39 | function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
|
40 |
|
41 | function _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 |
|
43 | function _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 |
|
45 | var TrackingContextType = _propTypes["default"].shape({
|
46 | data: _propTypes["default"].object,
|
47 | dispatch: _propTypes["default"].func,
|
48 | process: _propTypes["default"].func
|
49 | });
|
50 |
|
51 | exports.TrackingContextType = TrackingContextType;
|
52 |
|
53 | var ReactTrackingContext = _react["default"].createContext({});
|
54 |
|
55 | exports.ReactTrackingContext = ReactTrackingContext;
|
56 |
|
57 | function 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 |
|
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 |