@amplitude/plugin-autocapture-browser 1.17.1 → 1.18.0-zen-observable-migration.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/autocapture/track-action-click.d.ts +1 -1
- package/lib/cjs/autocapture/track-action-click.d.ts.map +1 -1
- package/lib/cjs/autocapture/track-action-click.js +51 -22
- package/lib/cjs/autocapture/track-action-click.js.map +1 -1
- package/lib/cjs/autocapture/track-change.d.ts +1 -1
- package/lib/cjs/autocapture/track-change.d.ts.map +1 -1
- package/lib/cjs/autocapture/track-change.js +5 -3
- package/lib/cjs/autocapture/track-change.js.map +1 -1
- package/lib/cjs/autocapture/track-click.d.ts +2 -3
- package/lib/cjs/autocapture/track-click.d.ts.map +1 -1
- package/lib/cjs/autocapture/track-click.js +6 -37
- package/lib/cjs/autocapture/track-click.js.map +1 -1
- package/lib/cjs/autocapture/track-dead-click.d.ts +2 -3
- package/lib/cjs/autocapture/track-dead-click.d.ts.map +1 -1
- package/lib/cjs/autocapture/track-dead-click.js +40 -35
- package/lib/cjs/autocapture/track-dead-click.js.map +1 -1
- package/lib/cjs/autocapture/track-rage-click.d.ts +3 -3
- package/lib/cjs/autocapture/track-rage-click.d.ts.map +1 -1
- package/lib/cjs/autocapture/track-rage-click.js +61 -48
- package/lib/cjs/autocapture/track-rage-click.js.map +1 -1
- package/lib/cjs/autocapture-plugin.d.ts +9 -3
- package/lib/cjs/autocapture-plugin.d.ts.map +1 -1
- package/lib/cjs/autocapture-plugin.js +40 -11
- package/lib/cjs/autocapture-plugin.js.map +1 -1
- package/lib/cjs/frustration-plugin.d.ts +8 -1
- package/lib/cjs/frustration-plugin.d.ts.map +1 -1
- package/lib/cjs/frustration-plugin.js +21 -16
- package/lib/cjs/frustration-plugin.js.map +1 -1
- package/lib/cjs/observables.d.ts +7 -3
- package/lib/cjs/observables.d.ts.map +1 -1
- package/lib/cjs/observables.js +37 -13
- package/lib/cjs/observables.js.map +1 -1
- package/lib/cjs/version.d.ts +1 -1
- package/lib/cjs/version.d.ts.map +1 -1
- package/lib/cjs/version.js +1 -1
- package/lib/cjs/version.js.map +1 -1
- package/lib/esm/autocapture/track-action-click.d.ts +1 -1
- package/lib/esm/autocapture/track-action-click.d.ts.map +1 -1
- package/lib/esm/autocapture/track-action-click.js +51 -22
- package/lib/esm/autocapture/track-action-click.js.map +1 -1
- package/lib/esm/autocapture/track-change.d.ts +1 -1
- package/lib/esm/autocapture/track-change.d.ts.map +1 -1
- package/lib/esm/autocapture/track-change.js +5 -3
- package/lib/esm/autocapture/track-change.js.map +1 -1
- package/lib/esm/autocapture/track-click.d.ts +2 -3
- package/lib/esm/autocapture/track-click.d.ts.map +1 -1
- package/lib/esm/autocapture/track-click.js +7 -38
- package/lib/esm/autocapture/track-click.js.map +1 -1
- package/lib/esm/autocapture/track-dead-click.d.ts +2 -3
- package/lib/esm/autocapture/track-dead-click.d.ts.map +1 -1
- package/lib/esm/autocapture/track-dead-click.js +40 -34
- package/lib/esm/autocapture/track-dead-click.js.map +1 -1
- package/lib/esm/autocapture/track-rage-click.d.ts +3 -3
- package/lib/esm/autocapture/track-rage-click.d.ts.map +1 -1
- package/lib/esm/autocapture/track-rage-click.js +62 -49
- package/lib/esm/autocapture/track-rage-click.js.map +1 -1
- package/lib/esm/autocapture-plugin.d.ts +9 -3
- package/lib/esm/autocapture-plugin.d.ts.map +1 -1
- package/lib/esm/autocapture-plugin.js +42 -13
- package/lib/esm/autocapture-plugin.js.map +1 -1
- package/lib/esm/frustration-plugin.d.ts +8 -1
- package/lib/esm/frustration-plugin.d.ts.map +1 -1
- package/lib/esm/frustration-plugin.js +24 -19
- package/lib/esm/frustration-plugin.js.map +1 -1
- package/lib/esm/observables.d.ts +7 -3
- package/lib/esm/observables.d.ts.map +1 -1
- package/lib/esm/observables.js +35 -12
- package/lib/esm/observables.js.map +1 -1
- package/lib/esm/version.d.ts +1 -1
- package/lib/esm/version.d.ts.map +1 -1
- package/lib/esm/version.js +1 -1
- package/lib/esm/version.js.map +1 -1
- package/lib/scripts/amplitude-min.js +1 -1
- package/lib/scripts/amplitude-min.js.gz +0 -0
- package/lib/scripts/amplitude-min.js.map +1 -1
- package/lib/scripts/amplitude-min.umd.js +1 -1
- package/lib/scripts/amplitude-min.umd.js.gz +0 -0
- package/lib/scripts/autocapture/track-action-click.d.ts +1 -1
- package/lib/scripts/autocapture/track-action-click.d.ts.map +1 -1
- package/lib/scripts/autocapture/track-change.d.ts +1 -1
- package/lib/scripts/autocapture/track-change.d.ts.map +1 -1
- package/lib/scripts/autocapture/track-click.d.ts +2 -3
- package/lib/scripts/autocapture/track-click.d.ts.map +1 -1
- package/lib/scripts/autocapture/track-dead-click.d.ts +2 -3
- package/lib/scripts/autocapture/track-dead-click.d.ts.map +1 -1
- package/lib/scripts/autocapture/track-rage-click.d.ts +3 -3
- package/lib/scripts/autocapture/track-rage-click.d.ts.map +1 -1
- package/lib/scripts/autocapture-plugin.d.ts +9 -3
- package/lib/scripts/autocapture-plugin.d.ts.map +1 -1
- package/lib/scripts/frustration-plugin.d.ts +8 -1
- package/lib/scripts/frustration-plugin.d.ts.map +1 -1
- package/lib/scripts/observables.d.ts +7 -3
- package/lib/scripts/observables.d.ts.map +1 -1
- package/lib/scripts/version.d.ts +1 -1
- package/lib/scripts/version.d.ts.map +1 -1
- package/package.json +3 -3
|
@@ -8,5 +8,5 @@ export declare function trackActionClick({ amplitude, allObservables, options, g
|
|
|
8
8
|
getEventProperties: (actionType: ActionType, element: Element) => Record<string, any>;
|
|
9
9
|
shouldTrackActionClick: shouldTrackEvent;
|
|
10
10
|
shouldTrackEvent: shouldTrackEvent;
|
|
11
|
-
}):
|
|
11
|
+
}): ZenObservable.Subscription | undefined;
|
|
12
12
|
//# sourceMappingURL=track-action-click.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"track-action-click.d.ts","sourceRoot":"","sources":["../../../src/autocapture/track-action-click.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,8BAA8B,
|
|
1
|
+
{"version":3,"file":"track-action-click.d.ts","sourceRoot":"","sources":["../../../src/autocapture/track-action-click.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AAC9F,OAAO,EAAE,aAAa,EAAE,UAAU,EAAmB,MAAM,2BAA2B,CAAC;AACvF,OAAO,EAIL,gBAAgB,EAEjB,MAAM,YAAY,CAAC;AAGpB,wBAAgB,gBAAgB,CAAC,EAC/B,SAAS,EACT,cAAc,EACd,OAAO,EACP,kBAAkB,EAClB,gBAAgB,EAChB,sBAAsB,GACvB,EAAE;IACD,SAAS,EAAE,aAAa,CAAC;IACzB,cAAc,EAAE,oBAAoB,CAAC;IACrC,OAAO,EAAE,8BAA8B,CAAC;IACxC,kBAAkB,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACtF,sBAAsB,EAAE,gBAAgB,CAAC;IACzC,gBAAgB,EAAE,gBAAgB,CAAC;CACpC,0CA2EA"}
|
|
@@ -1,17 +1,22 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.trackActionClick = void 0;
|
|
4
|
-
var
|
|
5
|
-
var rxjs_1 = require("rxjs");
|
|
4
|
+
var analytics_core_1 = require("@amplitude/analytics-core");
|
|
6
5
|
var helpers_1 = require("../helpers");
|
|
7
6
|
var constants_1 = require("../constants");
|
|
8
7
|
function trackActionClick(_a) {
|
|
9
8
|
var amplitude = _a.amplitude, allObservables = _a.allObservables, options = _a.options, getEventProperties = _a.getEventProperties, shouldTrackEvent = _a.shouldTrackEvent, shouldTrackActionClick = _a.shouldTrackActionClick;
|
|
10
|
-
var
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
var clickObservableZen = allObservables.clickObservableZen, mutationObservableZen = allObservables.mutationObservableZen, navigateObservableZen = allObservables.navigateObservableZen;
|
|
10
|
+
// TODO: remove this once we're ready for ZenObservable and they become not optional
|
|
11
|
+
/* istanbul ignore if */
|
|
12
|
+
if (!clickObservableZen || !mutationObservableZen) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
var filteredClickObservable = clickObservableZen
|
|
16
|
+
.filter(function (click) {
|
|
13
17
|
return !shouldTrackEvent('click', click.closestTrackedAncestor);
|
|
14
|
-
})
|
|
18
|
+
})
|
|
19
|
+
.map(function (click) {
|
|
15
20
|
// overwrite the closestTrackedAncestor with the closest element that is on the actionClickAllowlist
|
|
16
21
|
var closestActionClickEl = (0, helpers_1.getClosestElement)(click.event.target, options.actionClickAllowlist);
|
|
17
22
|
click.closestTrackedAncestor = closestActionClickEl;
|
|
@@ -20,24 +25,48 @@ function trackActionClick(_a) {
|
|
|
20
25
|
click.targetElementProperties = getEventProperties(click.type, click.closestTrackedAncestor);
|
|
21
26
|
}
|
|
22
27
|
return click;
|
|
23
|
-
})
|
|
28
|
+
})
|
|
29
|
+
.filter(helpers_1.filterOutNonTrackableEvents)
|
|
30
|
+
.filter(function (clickEvent) {
|
|
24
31
|
// Only track change on elements that should be tracked
|
|
25
32
|
return shouldTrackActionClick('click', clickEvent.closestTrackedAncestor);
|
|
26
|
-
})
|
|
27
|
-
var
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
var
|
|
33
|
-
var
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
33
|
+
});
|
|
34
|
+
var mutationOrNavigate = navigateObservableZen
|
|
35
|
+
? (0, analytics_core_1.merge)(mutationObservableZen, navigateObservableZen)
|
|
36
|
+
: mutationObservableZen;
|
|
37
|
+
var clickMutationNavigateObservable = (0, analytics_core_1.merge)(filteredClickObservable, mutationOrNavigate);
|
|
38
|
+
var actionClickTimer = null;
|
|
39
|
+
var lastClickEvent = null;
|
|
40
|
+
var actionClickObservable = (0, analytics_core_1.asyncMap)(clickMutationNavigateObservable, function (event) {
|
|
41
|
+
// clear any previous timer
|
|
42
|
+
if (actionClickTimer) {
|
|
43
|
+
clearTimeout(actionClickTimer);
|
|
44
|
+
actionClickTimer = null;
|
|
45
|
+
}
|
|
46
|
+
if (event.type === 'click') {
|
|
47
|
+
// mark the 'last click event'
|
|
48
|
+
lastClickEvent = event;
|
|
49
|
+
// set a timer to clear last click event if no mutation event between now and 500ms
|
|
50
|
+
actionClickTimer = setTimeout(function () {
|
|
51
|
+
actionClickTimer = null;
|
|
52
|
+
lastClickEvent = null;
|
|
53
|
+
return null;
|
|
54
|
+
}, 500);
|
|
55
|
+
return Promise.resolve(null);
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
// if mutation/navigation + last click event, then it's an action click
|
|
59
|
+
if (lastClickEvent) {
|
|
60
|
+
var event_1 = lastClickEvent;
|
|
61
|
+
lastClickEvent = null;
|
|
62
|
+
return Promise.resolve(event_1);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return Promise.resolve(null);
|
|
66
|
+
});
|
|
67
|
+
return actionClickObservable.subscribe(function (actionClick) {
|
|
68
|
+
if (!actionClick)
|
|
69
|
+
return;
|
|
41
70
|
/* istanbul ignore next */
|
|
42
71
|
amplitude === null || amplitude === void 0 ? void 0 : amplitude.track(constants_1.AMPLITUDE_ELEMENT_CLICKED_EVENT, getEventProperties('click', actionClick.closestTrackedAncestor));
|
|
43
72
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"track-action-click.js","sourceRoot":"","sources":["../../../src/autocapture/track-action-click.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"track-action-click.js","sourceRoot":"","sources":["../../../src/autocapture/track-action-click.ts"],"names":[],"mappings":"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","sourcesContent":["import { AllWindowObservables, AutoCaptureOptionsWithDefaults } from 'src/autocapture-plugin';\nimport { BrowserClient, ActionType, merge, asyncMap } from '@amplitude/analytics-core';\nimport {\n ElementBasedTimestampedEvent,\n filterOutNonTrackableEvents,\n getClosestElement,\n shouldTrackEvent,\n TimestampedEvent,\n} from '../helpers';\nimport { AMPLITUDE_ELEMENT_CLICKED_EVENT } from '../constants';\n\nexport function trackActionClick({\n amplitude,\n allObservables,\n options,\n getEventProperties,\n shouldTrackEvent,\n shouldTrackActionClick,\n}: {\n amplitude: BrowserClient;\n allObservables: AllWindowObservables;\n options: AutoCaptureOptionsWithDefaults;\n getEventProperties: (actionType: ActionType, element: Element) => Record<string, any>;\n shouldTrackActionClick: shouldTrackEvent;\n shouldTrackEvent: shouldTrackEvent;\n}) {\n const { clickObservableZen, mutationObservableZen, navigateObservableZen } = allObservables;\n\n // TODO: remove this once we're ready for ZenObservable and they become not optional\n /* istanbul ignore if */\n if (!clickObservableZen || !mutationObservableZen) {\n return;\n }\n\n const filteredClickObservable = clickObservableZen\n .filter((click) => {\n return !shouldTrackEvent('click', click.closestTrackedAncestor);\n })\n .map((click) => {\n // overwrite the closestTrackedAncestor with the closest element that is on the actionClickAllowlist\n const closestActionClickEl = getClosestElement(click.event.target as Element, options.actionClickAllowlist);\n click.closestTrackedAncestor = closestActionClickEl as Element;\n\n // overwrite the targetElementProperties with the properties of the closestActionClickEl\n if (click.closestTrackedAncestor !== null) {\n click.targetElementProperties = getEventProperties(click.type, click.closestTrackedAncestor);\n }\n return click;\n })\n .filter(filterOutNonTrackableEvents)\n .filter((clickEvent) => {\n // Only track change on elements that should be tracked\n return shouldTrackActionClick('click', clickEvent.closestTrackedAncestor);\n });\n\n const mutationOrNavigate = navigateObservableZen\n ? merge(mutationObservableZen, navigateObservableZen)\n : mutationObservableZen;\n\n const clickMutationNavigateObservable = merge(filteredClickObservable, mutationOrNavigate);\n\n let actionClickTimer: ReturnType<typeof setTimeout> | null = null;\n let lastClickEvent: TimestampedEvent<any> | null = null;\n\n const actionClickObservable = asyncMap(clickMutationNavigateObservable, (event) => {\n // clear any previous timer\n if (actionClickTimer) {\n clearTimeout(actionClickTimer);\n actionClickTimer = null;\n }\n if (event.type === 'click') {\n // mark the 'last click event'\n lastClickEvent = event;\n\n // set a timer to clear last click event if no mutation event between now and 500ms\n actionClickTimer = setTimeout(() => {\n actionClickTimer = null;\n lastClickEvent = null;\n return null;\n }, 500);\n return Promise.resolve(null);\n } else {\n // if mutation/navigation + last click event, then it's an action click\n if (lastClickEvent) {\n const event = lastClickEvent;\n lastClickEvent = null;\n return Promise.resolve(event);\n }\n }\n return Promise.resolve(null);\n });\n\n return actionClickObservable.subscribe((actionClick) => {\n if (!actionClick) return;\n /* istanbul ignore next */\n amplitude?.track(\n AMPLITUDE_ELEMENT_CLICKED_EVENT,\n getEventProperties('click', (actionClick as ElementBasedTimestampedEvent<MouseEvent>).closestTrackedAncestor),\n );\n });\n}\n"]}
|
|
@@ -8,5 +8,5 @@ export declare function trackChange({ amplitude, allObservables, getEventPropert
|
|
|
8
8
|
getEventProperties: (actionType: ActionType, element: Element) => Record<string, any>;
|
|
9
9
|
shouldTrackEvent: shouldTrackEvent;
|
|
10
10
|
evaluateTriggers: evaluateTriggersFn;
|
|
11
|
-
}):
|
|
11
|
+
}): ZenObservable.Subscription;
|
|
12
12
|
//# sourceMappingURL=track-change.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"track-change.d.ts","sourceRoot":"","sources":["../../../src/autocapture/track-change.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,
|
|
1
|
+
{"version":3,"file":"track-change.d.ts","sourceRoot":"","sources":["../../../src/autocapture/track-change.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAgC,KAAK,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAA+B,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAG3E,wBAAgB,WAAW,CAAC,EAC1B,SAAS,EACT,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,GACjB,EAAE;IACD,SAAS,EAAE,aAAa,CAAC;IACzB,cAAc,EAAE,oBAAoB,CAAC;IACrC,kBAAkB,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACtF,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,gBAAgB,EAAE,kBAAkB,CAAC;CACtC,8BAeA"}
|
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.trackChange = void 0;
|
|
4
|
-
var rxjs_1 = require("rxjs");
|
|
5
4
|
var helpers_1 = require("../helpers");
|
|
6
5
|
var constants_1 = require("../constants");
|
|
7
6
|
function trackChange(_a) {
|
|
8
7
|
var amplitude = _a.amplitude, allObservables = _a.allObservables, getEventProperties = _a.getEventProperties, shouldTrackEvent = _a.shouldTrackEvent, evaluateTriggers = _a.evaluateTriggers;
|
|
9
8
|
var changeObservable = allObservables.changeObservable;
|
|
10
|
-
var filteredChangeObservable = changeObservable
|
|
9
|
+
var filteredChangeObservable = changeObservable
|
|
10
|
+
.filter(helpers_1.filterOutNonTrackableEvents)
|
|
11
|
+
.filter(function (changeEvent) {
|
|
11
12
|
// Only track change on elements that should be tracked,
|
|
12
13
|
return shouldTrackEvent('change', changeEvent.closestTrackedAncestor);
|
|
13
|
-
})
|
|
14
|
+
})
|
|
15
|
+
.map(function (changeEvent) { return evaluateTriggers(changeEvent); });
|
|
14
16
|
return filteredChangeObservable.subscribe(function (changeEvent) {
|
|
15
17
|
/* istanbul ignore next */
|
|
16
18
|
amplitude === null || amplitude === void 0 ? void 0 : amplitude.track(constants_1.AMPLITUDE_ELEMENT_CHANGED_EVENT, getEventProperties('change', changeEvent.closestTrackedAncestor));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"track-change.js","sourceRoot":"","sources":["../../../src/autocapture/track-change.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"track-change.js","sourceRoot":"","sources":["../../../src/autocapture/track-change.ts"],"names":[],"mappings":";;;AAGA,sCAA2E;AAC3E,0CAA+D;AAE/D,SAAgB,WAAW,CAAC,EAY3B;QAXC,SAAS,eAAA,EACT,cAAc,oBAAA,EACd,kBAAkB,wBAAA,EAClB,gBAAgB,sBAAA,EAChB,gBAAgB,sBAAA;IAQR,IAAA,gBAAgB,GAAK,cAAc,iBAAnB,CAAoB;IAE5C,IAAM,wBAAwB,GAAG,gBAAgB;SAC9C,MAAM,CAAC,qCAA2B,CAAC;SACnC,MAAM,CAAC,UAAC,WAAgD;QACvD,wDAAwD;QACxD,OAAO,gBAAgB,CAAC,QAAQ,EAAE,WAAW,CAAC,sBAAsB,CAAC,CAAC;IACxE,CAAC,CAAC;SACD,GAAG,CAAC,UAAC,WAAW,IAAK,OAAA,gBAAgB,CAAC,WAAW,CAAC,EAA7B,CAA6B,CAAC,CAAC;IAEvD,OAAO,wBAAwB,CAAC,SAAS,CAAC,UAAC,WAAW;QACpD,0BAA0B;QAC1B,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,KAAK,CAAC,2CAA+B,EAAE,kBAAkB,CAAC,QAAQ,EAAE,WAAW,CAAC,sBAAsB,CAAC,CAAC,CAAC;IACtH,CAAC,CAAC,CAAC;AACL,CAAC;AA3BD,kCA2BC","sourcesContent":["import { AllWindowObservables } from 'src/autocapture-plugin';\nimport { ElementBasedTimestampedEvent, type evaluateTriggersFn } from 'src/helpers';\nimport { BrowserClient, ActionType } from '@amplitude/analytics-core';\nimport { filterOutNonTrackableEvents, shouldTrackEvent } from '../helpers';\nimport { AMPLITUDE_ELEMENT_CHANGED_EVENT } from '../constants';\n\nexport function trackChange({\n amplitude,\n allObservables,\n getEventProperties,\n shouldTrackEvent,\n evaluateTriggers,\n}: {\n amplitude: BrowserClient;\n allObservables: AllWindowObservables;\n getEventProperties: (actionType: ActionType, element: Element) => Record<string, any>;\n shouldTrackEvent: shouldTrackEvent;\n evaluateTriggers: evaluateTriggersFn;\n}) {\n const { changeObservable } = allObservables;\n\n const filteredChangeObservable = changeObservable\n .filter(filterOutNonTrackableEvents)\n .filter((changeEvent: ElementBasedTimestampedEvent<Event>) => {\n // Only track change on elements that should be tracked,\n return shouldTrackEvent('change', changeEvent.closestTrackedAncestor);\n })\n .map((changeEvent) => evaluateTriggers(changeEvent));\n\n return filteredChangeObservable.subscribe((changeEvent) => {\n /* istanbul ignore next */\n amplitude?.track(AMPLITUDE_ELEMENT_CHANGED_EVENT, getEventProperties('change', changeEvent.closestTrackedAncestor));\n });\n}\n"]}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import { AllWindowObservables
|
|
1
|
+
import { AllWindowObservables } from 'src/autocapture-plugin';
|
|
2
2
|
import { type evaluateTriggersFn } from 'src/helpers';
|
|
3
3
|
import { BrowserClient } from '@amplitude/analytics-core';
|
|
4
4
|
import { shouldTrackEvent } from '../helpers';
|
|
5
|
-
export declare function trackClicks({ amplitude, allObservables,
|
|
5
|
+
export declare function trackClicks({ amplitude, allObservables, shouldTrackEvent, evaluateTriggers, }: {
|
|
6
6
|
amplitude: BrowserClient;
|
|
7
7
|
allObservables: AllWindowObservables;
|
|
8
|
-
options: AutoCaptureOptionsWithDefaults;
|
|
9
8
|
shouldTrackEvent: shouldTrackEvent;
|
|
10
9
|
evaluateTriggers: evaluateTriggersFn;
|
|
11
10
|
}): import("rxjs").Subscription;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"track-click.d.ts","sourceRoot":"","sources":["../../../src/autocapture/track-click.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,
|
|
1
|
+
{"version":3,"file":"track-click.d.ts","sourceRoot":"","sources":["../../../src/autocapture/track-click.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAA+B,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAG3E,wBAAgB,WAAW,CAAC,EAC1B,SAAS,EACT,cAAc,EACd,gBAAgB,EAChB,gBAAgB,GACjB,EAAE;IACD,SAAS,EAAE,aAAa,CAAC;IACzB,cAAc,EAAE,oBAAoB,CAAC;IACrC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,gBAAgB,EAAE,kBAAkB,CAAC;CACtC,+BAiBA"}
|
|
@@ -1,51 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.trackClicks = void 0;
|
|
4
|
-
var tslib_1 = require("tslib");
|
|
5
4
|
var rxjs_1 = require("rxjs");
|
|
6
5
|
var helpers_1 = require("../helpers");
|
|
7
6
|
var constants_1 = require("../constants");
|
|
8
|
-
var RAGE_CLICK_THRESHOLD = 5;
|
|
9
7
|
function trackClicks(_a) {
|
|
10
|
-
var amplitude = _a.amplitude, allObservables = _a.allObservables,
|
|
8
|
+
var amplitude = _a.amplitude, allObservables = _a.allObservables, shouldTrackEvent = _a.shouldTrackEvent, evaluateTriggers = _a.evaluateTriggers;
|
|
11
9
|
var clickObservable = allObservables.clickObservable;
|
|
12
|
-
// Trigger if the target of the click event has changed and position is different
|
|
13
|
-
// Keeping track of position is important to avoid false positives when the user clicks on the same
|
|
14
|
-
// element where certain frameworks could replace the element instance between rerenders
|
|
15
|
-
var comparisonTrigger = clickObservable.pipe((0, rxjs_1.pairwise)(), (0, rxjs_1.filter)(function (_a) {
|
|
16
|
-
var _b = tslib_1.__read(_a, 2), prev = _b[0], current = _b[1];
|
|
17
|
-
var targetChanged = prev.event.target !== current.event.target;
|
|
18
|
-
/* istanbul ignore next */
|
|
19
|
-
var samePos = Math.abs(current.event.screenX - prev.event.screenX) <= 20 &&
|
|
20
|
-
Math.abs(current.event.screenY - prev.event.screenY) <= 20;
|
|
21
|
-
return targetChanged && !samePos;
|
|
22
|
-
}));
|
|
23
|
-
// Trigger if there is no click event within 1 second
|
|
24
|
-
var timeoutTrigger = clickObservable.pipe((0, rxjs_1.debounceTime)(options.debounceTime), (0, rxjs_1.map)(function () { return 'timeout'; }));
|
|
25
|
-
var triggers = (0, rxjs_1.merge)(comparisonTrigger, timeoutTrigger);
|
|
26
10
|
// Get buffers of clicks, if the buffer length is over 5, it is rage click
|
|
27
|
-
var
|
|
11
|
+
var clicks = clickObservable.pipe((0, rxjs_1.filter)(helpers_1.filterOutNonTrackableEvents), (0, rxjs_1.filter)(function (click) {
|
|
28
12
|
// Only track clicks on elements that should be tracked,
|
|
29
13
|
return shouldTrackEvent('click', click.closestTrackedAncestor);
|
|
30
|
-
}), (0, rxjs_1.map)(function (click) { return evaluateTriggers(click); })
|
|
31
|
-
return
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
var clickType = clicks.length >= RAGE_CLICK_THRESHOLD ? constants_1.AMPLITUDE_ELEMENT_CLICKED_EVENT : constants_1.AMPLITUDE_ELEMENT_CLICKED_EVENT;
|
|
35
|
-
try {
|
|
36
|
-
for (var clicks_1 = tslib_1.__values(clicks), clicks_1_1 = clicks_1.next(); !clicks_1_1.done; clicks_1_1 = clicks_1.next()) {
|
|
37
|
-
var click = clicks_1_1.value;
|
|
38
|
-
/* istanbul ignore next */
|
|
39
|
-
amplitude === null || amplitude === void 0 ? void 0 : amplitude.track(clickType, click.targetElementProperties);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
43
|
-
finally {
|
|
44
|
-
try {
|
|
45
|
-
if (clicks_1_1 && !clicks_1_1.done && (_a = clicks_1.return)) _a.call(clicks_1);
|
|
46
|
-
}
|
|
47
|
-
finally { if (e_1) throw e_1.error; }
|
|
48
|
-
}
|
|
14
|
+
}), (0, rxjs_1.map)(function (click) { return evaluateTriggers(click); }));
|
|
15
|
+
return clicks.subscribe(function (click) {
|
|
16
|
+
/* istanbul ignore next */
|
|
17
|
+
amplitude === null || amplitude === void 0 ? void 0 : amplitude.track(constants_1.AMPLITUDE_ELEMENT_CLICKED_EVENT, click.targetElementProperties);
|
|
49
18
|
});
|
|
50
19
|
}
|
|
51
20
|
exports.trackClicks = trackClicks;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"track-click.js","sourceRoot":"","sources":["../../../src/autocapture/track-click.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"track-click.js","sourceRoot":"","sources":["../../../src/autocapture/track-click.ts"],"names":[],"mappings":";;;AAEA,6BAAmC;AAEnC,sCAA2E;AAC3E,0CAA+D;AAE/D,SAAgB,WAAW,CAAC,EAU3B;QATC,SAAS,eAAA,EACT,cAAc,oBAAA,EACd,gBAAgB,sBAAA,EAChB,gBAAgB,sBAAA;IAOR,IAAA,eAAe,GAAK,cAAc,gBAAnB,CAAoB;IAE3C,0EAA0E;IAC1E,IAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CACjC,IAAA,aAAM,EAAC,qCAA2B,CAAC,EACnC,IAAA,aAAM,EAAC,UAAC,KAAK;QACX,wDAAwD;QACxD,OAAO,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACjE,CAAC,CAAC,EACF,IAAA,UAAG,EAAC,UAAC,KAAK,IAAK,OAAA,gBAAgB,CAAC,KAAK,CAAC,EAAvB,CAAuB,CAAC,CACxC,CAAC;IAEF,OAAO,MAAM,CAAC,SAAS,CAAC,UAAC,KAAK;QAC5B,0BAA0B;QAC1B,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,KAAK,CAAC,2CAA+B,EAAE,KAAK,CAAC,uBAAuB,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;AACL,CAAC;AA3BD,kCA2BC","sourcesContent":["import { AllWindowObservables } from 'src/autocapture-plugin';\nimport { type evaluateTriggersFn } from 'src/helpers';\nimport { filter, map } from 'rxjs';\nimport { BrowserClient } from '@amplitude/analytics-core';\nimport { filterOutNonTrackableEvents, shouldTrackEvent } from '../helpers';\nimport { AMPLITUDE_ELEMENT_CLICKED_EVENT } from '../constants';\n\nexport function trackClicks({\n amplitude,\n allObservables,\n shouldTrackEvent,\n evaluateTriggers,\n}: {\n amplitude: BrowserClient;\n allObservables: AllWindowObservables;\n shouldTrackEvent: shouldTrackEvent;\n evaluateTriggers: evaluateTriggersFn;\n}) {\n const { clickObservable } = allObservables;\n\n // Get buffers of clicks, if the buffer length is over 5, it is rage click\n const clicks = clickObservable.pipe(\n filter(filterOutNonTrackableEvents),\n filter((click) => {\n // Only track clicks on elements that should be tracked,\n return shouldTrackEvent('click', click.closestTrackedAncestor);\n }),\n map((click) => evaluateTriggers(click)),\n );\n\n return clicks.subscribe((click) => {\n /* istanbul ignore next */\n amplitude?.track(AMPLITUDE_ELEMENT_CLICKED_EVENT, click.targetElementProperties);\n });\n}\n"]}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import { AllWindowObservables } from 'src/
|
|
1
|
+
import { AllWindowObservables } from 'src/frustration-plugin';
|
|
2
2
|
import { BrowserClient, ActionType } from '@amplitude/analytics-core';
|
|
3
3
|
import { shouldTrackEvent } from '../helpers';
|
|
4
|
-
export declare function _overrideDeadClickConfig(deadClickTimeout: number): void;
|
|
5
4
|
export declare function trackDeadClick({ amplitude, allObservables, getEventProperties, shouldTrackDeadClick, }: {
|
|
6
5
|
amplitude: BrowserClient;
|
|
7
6
|
allObservables: AllWindowObservables;
|
|
8
7
|
getEventProperties: (actionType: ActionType, element: Element) => Record<string, any>;
|
|
9
8
|
shouldTrackDeadClick: shouldTrackEvent;
|
|
10
|
-
}):
|
|
9
|
+
}): ZenObservable.Subscription;
|
|
11
10
|
//# sourceMappingURL=track-dead-click.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"track-dead-click.d.ts","sourceRoot":"","sources":["../../../src/autocapture/track-dead-click.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,
|
|
1
|
+
{"version":3,"file":"track-dead-click.d.ts","sourceRoot":"","sources":["../../../src/autocapture/track-dead-click.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,UAAU,EAAmB,MAAM,2BAA2B,CAAC;AACvF,OAAO,EAA6D,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAWzG,wBAAgB,cAAc,CAAC,EAC7B,SAAS,EACT,cAAc,EACd,kBAAkB,EAClB,oBAAoB,GACrB,EAAE;IACD,SAAS,EAAE,aAAa,CAAC;IACzB,cAAc,EAAE,oBAAoB,CAAC;IACrC,kBAAkB,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACtF,oBAAoB,EAAE,gBAAgB,CAAC;CACxC,8BA6DA"}
|
|
@@ -1,47 +1,52 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.trackDeadClick =
|
|
3
|
+
exports.trackDeadClick = void 0;
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
|
-
var
|
|
5
|
+
var analytics_core_1 = require("@amplitude/analytics-core");
|
|
6
6
|
var helpers_1 = require("../helpers");
|
|
7
7
|
var constants_1 = require("../constants");
|
|
8
8
|
var DEAD_CLICK_TIMEOUT = 3000; // 3 seconds to wait for an activity to happen
|
|
9
|
-
|
|
10
|
-
function _overrideDeadClickConfig(deadClickTimeout) {
|
|
11
|
-
DEAD_CLICK_TIMEOUT = deadClickTimeout;
|
|
12
|
-
}
|
|
13
|
-
exports._overrideDeadClickConfig = _overrideDeadClickConfig;
|
|
9
|
+
var CHANGE_EVENTS = ['mutation', 'navigate'];
|
|
14
10
|
function trackDeadClick(_a) {
|
|
15
11
|
var amplitude = _a.amplitude, allObservables = _a.allObservables, getEventProperties = _a.getEventProperties, shouldTrackDeadClick = _a.shouldTrackDeadClick;
|
|
16
12
|
var clickObservable = allObservables.clickObservable, mutationObservable = allObservables.mutationObservable, navigateObservable = allObservables.navigateObservable;
|
|
17
|
-
var filteredClickObservable = clickObservable.
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
var changeObservables =
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
13
|
+
var filteredClickObservable = clickObservable.filter(function (click) {
|
|
14
|
+
return ((0, helpers_1.filterOutNonTrackableEvents)(click) &&
|
|
15
|
+
shouldTrackDeadClick('click', click.closestTrackedAncestor) &&
|
|
16
|
+
click.event.target instanceof Element &&
|
|
17
|
+
click.event.target.closest('a[target="_blank"]') === null);
|
|
18
|
+
});
|
|
19
|
+
/* istanbul ignore next */
|
|
20
|
+
var changeObservables = navigateObservable ? (0, analytics_core_1.merge)(mutationObservable, navigateObservable) : mutationObservable;
|
|
21
|
+
var clicksAndChangeObservable = (0, analytics_core_1.merge)(filteredClickObservable, changeObservables);
|
|
22
|
+
var deadClickTimer = null;
|
|
23
|
+
var deadClickObservable = (0, analytics_core_1.asyncMap)(clicksAndChangeObservable, function (event) {
|
|
24
|
+
if (deadClickTimer && CHANGE_EVENTS.includes(event.type)) {
|
|
25
|
+
// a mutation or navigation means it's not a dead click, so clear the timer
|
|
26
|
+
clearTimeout(deadClickTimer);
|
|
27
|
+
deadClickTimer = null;
|
|
28
|
+
return Promise.resolve(null);
|
|
29
|
+
}
|
|
30
|
+
else if (event.type === 'click') {
|
|
31
|
+
// if a dead click is already on-deck, return null.
|
|
32
|
+
// this throttles dead clicks events so no more than one dead click event
|
|
33
|
+
// is tracked per every DEAD_CLICK_TIMEOUT ms.
|
|
34
|
+
if (deadClickTimer) {
|
|
35
|
+
return Promise.resolve(null);
|
|
36
|
+
}
|
|
37
|
+
return new Promise(function (resolve) {
|
|
38
|
+
deadClickTimer = setTimeout(function () {
|
|
39
|
+
resolve(event);
|
|
40
|
+
deadClickTimer = null;
|
|
41
|
+
}, DEAD_CLICK_TIMEOUT);
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
// unreachable code, but needed to satisfy the type checker
|
|
45
|
+
return Promise.resolve(null);
|
|
46
|
+
});
|
|
47
|
+
return deadClickObservable.subscribe(function (actionClick) {
|
|
48
|
+
if (!actionClick)
|
|
49
|
+
return;
|
|
45
50
|
var deadClickEvent = {
|
|
46
51
|
'[Amplitude] X': actionClick.event.clientX,
|
|
47
52
|
'[Amplitude] Y': actionClick.event.clientY,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"track-dead-click.js","sourceRoot":"","sources":["../../../src/autocapture/track-dead-click.ts"],"names":[],"mappings":";;;;AACA,
|
|
1
|
+
{"version":3,"file":"track-dead-click.js","sourceRoot":"","sources":["../../../src/autocapture/track-dead-click.ts"],"names":[],"mappings":";;;;AACA,4DAAuF;AACvF,sCAAyG;AACzG,0CAAoE;AACpE,IAAM,kBAAkB,GAAG,IAAI,CAAC,CAAC,8CAA8C;AAO/E,IAAM,aAAa,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;AAE/C,SAAgB,cAAc,CAAC,EAU9B;QATC,SAAS,eAAA,EACT,cAAc,oBAAA,EACd,kBAAkB,wBAAA,EAClB,oBAAoB,0BAAA;IAOZ,IAAA,eAAe,GAAmE,cAAc,gBAAjF,EAAE,kBAAkB,GAA+C,cAAc,mBAA7D,EAAE,kBAAkB,GAA2B,cAAc,mBAAzC,CAA0C;IAEzG,IAAM,uBAAuB,GAAG,eAAe,CAAC,MAAM,CAAC,UAAC,KAAK;QAC3D,OAAO,CACL,IAAA,qCAA2B,EAAC,KAAK,CAAC;YAClC,oBAAoB,CAAC,OAAO,EAAE,KAAK,CAAC,sBAAsB,CAAC;YAC3D,KAAK,CAAC,KAAK,CAAC,MAAM,YAAY,OAAO;YACrC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,KAAK,IAAI,CAC1D,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,0BAA0B;IAC1B,IAAM,iBAAiB,GAAG,kBAAkB,CAAC,CAAC,CAAC,IAAA,sBAAK,EAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC;IAElH,IAAM,yBAAyB,GAAG,IAAA,sBAAK,EAAC,uBAAuB,EAAE,iBAAiB,CAAC,CAAC;IAEpF,IAAI,cAAc,GAAyC,IAAI,CAAC;IAEhE,IAAM,mBAAmB,GAAG,IAAA,yBAAQ,EAClC,yBAAyB,EACzB,UAAC,KAAK;QACJ,IAAI,cAAc,IAAI,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;YACxD,2EAA2E;YAC3E,YAAY,CAAC,cAAc,CAAC,CAAC;YAC7B,cAAc,GAAG,IAAI,CAAC;YACtB,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SAC9B;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE;YACjC,mDAAmD;YACnD,yEAAyE;YACzE,8CAA8C;YAC9C,IAAI,cAAc,EAAE;gBAClB,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;aAC9B;YACD,OAAO,IAAI,OAAO,CAAC,UAAC,OAAO;gBACzB,cAAc,GAAG,UAAU,CAAC;oBAC1B,OAAO,CAAC,KAAiD,CAAC,CAAC;oBAC3D,cAAc,GAAG,IAAI,CAAC;gBACxB,CAAC,EAAE,kBAAkB,CAAC,CAAC;YACzB,CAAC,CAAC,CAAC;SACJ;QACD,2DAA2D;QAC3D,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC,CACF,CAAC;IAEF,OAAO,mBAAmB,CAAC,SAAS,CAAC,UAAC,WAAW;QAC/C,IAAI,CAAC,WAAW;YAAE,OAAO;QACzB,IAAM,cAAc,GAAmB;YACrC,eAAe,EAAG,WAAW,CAAC,KAAoB,CAAC,OAAO;YAC1D,eAAe,EAAG,WAAW,CAAC,KAAoB,CAAC,OAAO;SAC3D,CAAC;QACF,SAAS,CAAC,KAAK,CACb,gDAAoC,wCAE/B,kBAAkB,CAAC,OAAO,EAAE,WAAW,CAAC,sBAAsB,CAAC,GAC/D,cAAc,GAEnB,EAAE,IAAI,EAAE,WAAW,CAAC,SAAS,EAAE,CAChC,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAvED,wCAuEC","sourcesContent":["import { AllWindowObservables } from 'src/frustration-plugin';\nimport { BrowserClient, ActionType, merge, asyncMap } from '@amplitude/analytics-core';\nimport { ElementBasedTimestampedEvent, filterOutNonTrackableEvents, shouldTrackEvent } from '../helpers';\nimport { AMPLITUDE_ELEMENT_DEAD_CLICKED_EVENT } from '../constants';\nconst DEAD_CLICK_TIMEOUT = 3000; // 3 seconds to wait for an activity to happen\n\ntype EventDeadClick = {\n '[Amplitude] X': number;\n '[Amplitude] Y': number;\n};\n\nconst CHANGE_EVENTS = ['mutation', 'navigate'];\n\nexport function trackDeadClick({\n amplitude,\n allObservables,\n getEventProperties,\n shouldTrackDeadClick,\n}: {\n amplitude: BrowserClient;\n allObservables: AllWindowObservables;\n getEventProperties: (actionType: ActionType, element: Element) => Record<string, any>;\n shouldTrackDeadClick: shouldTrackEvent;\n}) {\n const { clickObservable, mutationObservable, navigateObservable }: AllWindowObservables = allObservables;\n\n const filteredClickObservable = clickObservable.filter((click) => {\n return (\n filterOutNonTrackableEvents(click) &&\n shouldTrackDeadClick('click', click.closestTrackedAncestor) &&\n click.event.target instanceof Element &&\n click.event.target.closest('a[target=\"_blank\"]') === null\n );\n });\n\n /* istanbul ignore next */\n const changeObservables = navigateObservable ? merge(mutationObservable, navigateObservable) : mutationObservable;\n\n const clicksAndChangeObservable = merge(filteredClickObservable, changeObservables);\n\n let deadClickTimer: ReturnType<typeof setTimeout> | null = null;\n\n const deadClickObservable = asyncMap(\n clicksAndChangeObservable,\n (event): Promise<ElementBasedTimestampedEvent<MouseEvent> | null> => {\n if (deadClickTimer && CHANGE_EVENTS.includes(event.type)) {\n // a mutation or navigation means it's not a dead click, so clear the timer\n clearTimeout(deadClickTimer);\n deadClickTimer = null;\n return Promise.resolve(null);\n } else if (event.type === 'click') {\n // if a dead click is already on-deck, return null.\n // this throttles dead clicks events so no more than one dead click event\n // is tracked per every DEAD_CLICK_TIMEOUT ms.\n if (deadClickTimer) {\n return Promise.resolve(null);\n }\n return new Promise((resolve) => {\n deadClickTimer = setTimeout(() => {\n resolve(event as ElementBasedTimestampedEvent<MouseEvent>);\n deadClickTimer = null;\n }, DEAD_CLICK_TIMEOUT);\n });\n }\n // unreachable code, but needed to satisfy the type checker\n return Promise.resolve(null);\n },\n );\n\n return deadClickObservable.subscribe((actionClick) => {\n if (!actionClick) return;\n const deadClickEvent: EventDeadClick = {\n '[Amplitude] X': (actionClick.event as MouseEvent).clientX,\n '[Amplitude] Y': (actionClick.event as MouseEvent).clientY,\n };\n amplitude.track(\n AMPLITUDE_ELEMENT_DEAD_CLICKED_EVENT,\n {\n ...getEventProperties('click', actionClick.closestTrackedAncestor),\n ...deadClickEvent,\n },\n { time: actionClick.timestamp },\n );\n });\n}\n"]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { AllWindowObservables } from 'src/
|
|
2
|
-
import { shouldTrackEvent } from '../helpers';
|
|
1
|
+
import { AllWindowObservables } from 'src/frustration-plugin';
|
|
3
2
|
import { BrowserClient } from '@amplitude/analytics-core';
|
|
3
|
+
import { shouldTrackEvent } from '../helpers';
|
|
4
4
|
export declare function trackRageClicks({ amplitude, allObservables, shouldTrackRageClick, }: {
|
|
5
5
|
amplitude: BrowserClient;
|
|
6
6
|
allObservables: AllWindowObservables;
|
|
7
7
|
shouldTrackRageClick: shouldTrackEvent;
|
|
8
|
-
}):
|
|
8
|
+
}): ZenObservable.Subscription | undefined;
|
|
9
9
|
//# sourceMappingURL=track-rage-click.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"track-rage-click.d.ts","sourceRoot":"","sources":["../../../src/autocapture/track-rage-click.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"track-rage-click.d.ts","sourceRoot":"","sources":["../../../src/autocapture/track-rage-click.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EACL,aAAa,EAKd,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAyF9C,wBAAgB,eAAe,CAAC,EAC9B,SAAS,EACT,cAAc,EACd,oBAAoB,GACrB,EAAE;IACD,SAAS,EAAE,aAAa,CAAC;IACzB,cAAc,EAAE,oBAAoB,CAAC;IACrC,oBAAoB,EAAE,gBAAgB,CAAC;CACxC,0CA8FA"}
|