Skip to content

Commit 4e6af85

Browse files
committed
ref: Use ui.multiClick instead
1 parent 285d82b commit 4e6af85

File tree

8 files changed

+48
-16
lines changed

8 files changed

+48
-16
lines changed

packages/browser-integration-tests/suites/replay/slowClick/clickTargets/test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ import { getCustomRecordingEvents, shouldSkipReplayTest, waitForReplayRequest }
6565
expect(slowClickBreadcrumbs).toEqual([
6666
{
6767
category: 'ui.slowClickDetected',
68+
type: 'default',
6869
data: {
6970
endReason: 'timeout',
7071
clickCount: 1,

packages/browser-integration-tests/suites/replay/slowClick/mutation/test.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ sentryTest('mutation after threshold results in slow click', async ({ getLocalTe
3838
expect(slowClickBreadcrumbs).toEqual([
3939
{
4040
category: 'ui.slowClickDetected',
41+
type: 'default',
4142
data: {
4243
endReason: 'mutation',
4344
clickCount: 1,
@@ -96,11 +97,12 @@ sentryTest('multiple clicks are counted', async ({ getLocalTestUrl, page }) => {
9697
const { breadcrumbs } = getCustomRecordingEvents(await reqPromise1);
9798

9899
const slowClickBreadcrumbs = breadcrumbs.filter(breadcrumb => breadcrumb.category === 'ui.slowClickDetected');
99-
const rageClickBreadcrumbs = breadcrumbs.filter(breadcrumb => breadcrumb.category === 'ui.rageClickDetected');
100+
const multiClickBreadcrumbs = breadcrumbs.filter(breadcrumb => breadcrumb.category === 'ui.multiClick');
100101

101102
expect(slowClickBreadcrumbs).toEqual([
102103
{
103104
category: 'ui.slowClickDetected',
105+
type: 'default',
104106
data: {
105107
endReason: 'mutation',
106108
clickCount: 4,
@@ -120,7 +122,7 @@ sentryTest('multiple clicks are counted', async ({ getLocalTestUrl, page }) => {
120122
timestamp: expect.any(Number),
121123
},
122124
]);
123-
expect(rageClickBreadcrumbs.length).toEqual(0);
125+
expect(multiClickBreadcrumbs.length).toEqual(0);
124126

125127
expect(slowClickBreadcrumbs[0]?.data?.timeAfterClickMs).toBeGreaterThan(3000);
126128
expect(slowClickBreadcrumbs[0]?.data?.timeAfterClickMs).toBeLessThan(3100);

packages/browser-integration-tests/suites/replay/slowClick/rageClick/test.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ sentryTest('captures rage click when not detecting slow click', async ({ getLoca
2626
const reqPromise1 = waitForReplayRequest(page, (event, res) => {
2727
const { breadcrumbs } = getCustomRecordingEvents(res);
2828

29-
return breadcrumbs.some(breadcrumb => breadcrumb.category === 'ui.rageClickDetected');
29+
return breadcrumbs.some(breadcrumb => breadcrumb.category === 'ui.multiClick');
3030
});
3131

3232
await page.click('#mutationButtonImmediately');
@@ -36,11 +36,12 @@ sentryTest('captures rage click when not detecting slow click', async ({ getLoca
3636

3737
const { breadcrumbs } = getCustomRecordingEvents(await reqPromise1);
3838

39-
const slowClickBreadcrumbs = breadcrumbs.filter(breadcrumb => breadcrumb.category === 'ui.rageClickDetected');
39+
const slowClickBreadcrumbs = breadcrumbs.filter(breadcrumb => breadcrumb.category === 'ui.multiClick');
4040

4141
expect(slowClickBreadcrumbs).toEqual([
4242
{
43-
category: 'ui.rageClickDetected',
43+
category: 'ui.multiClick',
44+
type: 'default',
4445
data: {
4546
clickCount: 4,
4647
metric: true,

packages/browser-integration-tests/suites/replay/slowClick/scroll/test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ sentryTest('late scroll triggers slow click', async ({ getLocalTestUrl, page })
8989
expect(slowClickBreadcrumbs).toEqual([
9090
{
9191
category: 'ui.slowClickDetected',
92+
type: 'default',
9293
data: {
9394
endReason: 'timeout',
9495
clickCount: 1,

packages/browser-integration-tests/suites/replay/slowClick/timeout/test.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ sentryTest('mutation after timeout results in slow click', async ({ getLocalTest
3838
expect(slowClickBreadcrumbs).toEqual([
3939
{
4040
category: 'ui.slowClickDetected',
41+
type: 'default',
4142
data: {
4243
endReason: 'timeout',
4344
clickCount: 1,
@@ -94,6 +95,7 @@ sentryTest('console.log results in slow click', async ({ getLocalTestUrl, page }
9495
expect(slowClickBreadcrumbs).toEqual([
9596
{
9697
category: 'ui.slowClickDetected',
98+
type: 'default',
9799
data: {
98100
endReason: 'timeout',
99101
clickCount: 1,

packages/replay/src/coreHandlers/handleClick.ts

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import type { Breadcrumb } from '@sentry/types';
22

33
import { WINDOW } from '../constants';
4-
import type { ReplayClickDetector, ReplayContainer, SlowClickConfig } from '../types';
4+
import type { MultiClickFrame, ReplayClickDetector, ReplayContainer, SlowClickConfig, SlowClickFrame } from '../types';
55
import { addBreadcrumbEvent } from './util/addBreadcrumbEvent';
66
import { getClickTargetNode } from './util/domUtils';
77

@@ -219,7 +219,8 @@ export class ClickDetector implements ReplayClickDetector {
219219
const timeAfterClickMs = Math.min(click.mutationAfter || this._timeout, this._timeout) * 1000;
220220
const endReason = timeAfterClickMs < this._timeout * 1000 ? 'mutation' : 'timeout';
221221

222-
const breadcrumb = {
222+
const breadcrumb: SlowClickFrame = {
223+
type: 'default',
223224
message: clickBreadcrumb.message,
224225
timestamp: clickBreadcrumb.timestamp,
225226
category: 'ui.slowClickDetected',
@@ -237,12 +238,13 @@ export class ClickDetector implements ReplayClickDetector {
237238
return;
238239
}
239240

240-
// Rage click
241-
if (clickCount > 3) {
242-
const breadcrumb = {
241+
// Multi click
242+
if (clickCount > 1) {
243+
const breadcrumb: MultiClickFrame = {
244+
type: 'default',
243245
message: clickBreadcrumb.message,
244246
timestamp: clickBreadcrumb.timestamp,
245-
category: 'ui.rageClickDetected',
247+
category: 'ui.multiClick',
246248
data: {
247249
...clickBreadcrumb.data,
248250
url: WINDOW.location.href,

packages/replay/src/types/replayFrame.ts

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,14 +88,28 @@ interface FocusFrame extends BaseBreadcrumbFrame {
8888

8989
interface SlowClickFrameData extends ClickFrameData {
9090
url: string;
91-
timeAfterClickFs: number;
91+
route?: string;
92+
timeAfterClickMs: number;
9293
endReason: string;
94+
clickCount: number;
9395
}
94-
interface SlowClickFrame extends BaseBreadcrumbFrame {
96+
export interface SlowClickFrame extends BaseBreadcrumbFrame {
9597
category: 'ui.slowClickDetected';
9698
data: SlowClickFrameData;
9799
}
98100

101+
interface MultiClickFrameData extends ClickFrameData {
102+
url: string;
103+
route?: string;
104+
clickCount: number;
105+
metric: true;
106+
}
107+
108+
export interface MultiClickFrame extends BaseBreadcrumbFrame {
109+
category: 'ui.multiClick';
110+
data: MultiClickFrameData;
111+
}
112+
99113
interface OptionFrame {
100114
blockAllMedia: boolean;
101115
errorSampleRate: number;
@@ -118,6 +132,7 @@ export type BreadcrumbFrame =
118132
| BlurFrame
119133
| FocusFrame
120134
| SlowClickFrame
135+
| MultiClickFrame
121136
| MutationFrame
122137
| BaseBreadcrumbFrame;
123138

packages/replay/test/unit/coreHandlers/handleClick.test.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ describe('Unit | coreHandlers | handleClick', () => {
5555
expect(mockAddBreadcrumbEvent).toHaveBeenCalledTimes(1);
5656
expect(mockAddBreadcrumbEvent).toHaveBeenCalledWith(replay, {
5757
category: 'ui.slowClickDetected',
58+
type: 'default',
5859
data: {
5960
clickCount: 1,
6061
endReason: 'timeout',
@@ -141,8 +142,10 @@ describe('Unit | coreHandlers | handleClick', () => {
141142
expect(mockAddBreadcrumbEvent).toHaveBeenCalledTimes(1);
142143
expect(mockAddBreadcrumbEvent).toHaveBeenCalledWith(replay, {
143144
category: 'ui.slowClickDetected',
145+
type: 'default',
144146
data: {
145-
clickCount: 3,
147+
// count is not actually correct, because this is identified by a different click handler
148+
clickCount: 1,
146149
endReason: 'timeout',
147150
nodeId: 1,
148151
route: 'test-route',
@@ -158,8 +161,10 @@ describe('Unit | coreHandlers | handleClick', () => {
158161
expect(mockAddBreadcrumbEvent).toHaveBeenCalledTimes(2);
159162
expect(mockAddBreadcrumbEvent).toHaveBeenCalledWith(replay, {
160163
category: 'ui.slowClickDetected',
164+
type: 'default',
161165
data: {
162-
clickCount: 2,
166+
// count is not actually correct, because this is identified by a different click handler
167+
clickCount: 1,
163168
endReason: 'timeout',
164169
nodeId: 1,
165170
route: 'test-route',
@@ -349,6 +354,7 @@ describe('Unit | coreHandlers | handleClick', () => {
349354
expect(mockAddBreadcrumbEvent).toHaveBeenCalledTimes(1);
350355
expect(mockAddBreadcrumbEvent).toHaveBeenCalledWith(replay, {
351356
category: 'ui.slowClickDetected',
357+
type: 'default',
352358
data: {
353359
clickCount: 1,
354360
endReason: 'mutation',
@@ -389,9 +395,10 @@ describe('Unit | coreHandlers | handleClick', () => {
389395
expect(mockAddBreadcrumbEvent).toHaveBeenCalledTimes(1);
390396
expect(mockAddBreadcrumbEvent).toHaveBeenCalledWith(replay, {
391397
category: 'ui.slowClickDetected',
398+
type: 'default',
392399
data: {
393400
clickCount: 1,
394-
endReason: 'mutation',
401+
endReason: 'timeout',
395402
nodeId: 1,
396403
route: 'test-route',
397404
timeAfterClickMs: 3000,
@@ -480,6 +487,7 @@ describe('Unit | coreHandlers | handleClick', () => {
480487
expect(mockAddBreadcrumbEvent).toHaveBeenCalledTimes(1);
481488
expect(mockAddBreadcrumbEvent).toHaveBeenCalledWith(replay, {
482489
category: 'ui.slowClickDetected',
490+
type: 'default',
483491
data: {
484492
clickCount: 1,
485493
endReason: 'timeout',

0 commit comments

Comments
 (0)