Skip to content

Commit 323f277

Browse files
feat(perps): add event tracking for cancel trade with token flow
1 parent d8379d5 commit 323f277

3 files changed

Lines changed: 63 additions & 2 deletions

File tree

app/components/UI/Perps/hooks/usePerpsOrderDepositTracking.test.ts

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { usePerpsOrderDepositTracking } from './usePerpsOrderDepositTracking';
88

99
const mockShowToast = jest.fn();
1010
const mockSubscribe = jest.fn();
11+
const mockTrack = jest.fn();
1112

1213
jest.mock('./usePerpsToasts', () => ({
1314
__esModule: true,
@@ -48,6 +49,24 @@ jest.mock('@metamask/perps-controller', () => ({
4849
PERPS_CONSTANTS: {
4950
DepositTakingLongerToastDelayMs: 100,
5051
},
52+
PERPS_EVENT_PROPERTY: {
53+
SCREEN_TYPE: 'screen_type',
54+
INTERACTION_TYPE: 'interaction_type',
55+
},
56+
PERPS_EVENT_VALUE: {
57+
SCREEN_TYPE: {
58+
CANCEL_TRADE_WITH_TOKEN_TOAST: 'cancel_trade_with_token_toast',
59+
},
60+
INTERACTION_TYPE: {
61+
CANCEL_TRADE_WITH_TOKEN: 'cancel_trade_with_token',
62+
},
63+
},
64+
}));
65+
66+
jest.mock('./usePerpsEventTracking', () => ({
67+
usePerpsEventTracking: () => ({
68+
track: mockTrack,
69+
}),
5170
}));
5271

5372
describe('usePerpsOrderDepositTracking', () => {
@@ -188,6 +207,13 @@ describe('usePerpsOrderDepositTracking', () => {
188207
closeButtonOptions?.closeButtonOptions?.onPress?.();
189208
});
190209

210+
expect(mockTrack).toHaveBeenCalledWith(
211+
expect.objectContaining({ category: 'Perp UI Interaction' }),
212+
expect.objectContaining({
213+
interaction_type: 'cancel_trade_with_token',
214+
}),
215+
);
216+
191217
const statusUpdatedHandler = handlers.statusUpdated;
192218
expect(statusUpdatedHandler).toBeDefined();
193219
act(() => {
@@ -260,6 +286,13 @@ describe('usePerpsOrderDepositTracking', () => {
260286
jest.advanceTimersByTime(100);
261287
});
262288

289+
expect(mockTrack).toHaveBeenCalledWith(
290+
expect.objectContaining({ category: 'Perp Screen Viewed' }),
291+
expect.objectContaining({
292+
screen_type: 'cancel_trade_with_token_toast',
293+
}),
294+
);
295+
263296
expect(mockShowToast).toHaveBeenCalled();
264297
expect(mockShowToast.mock.calls[0][0]).toMatchObject({
265298
closeButtonOptions: expect.any(Object),

app/components/UI/Perps/hooks/usePerpsOrderDepositTracking.ts

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,14 @@ import {
66
import { useCallback } from 'react';
77
import Engine from '../../../../core/Engine';
88
import { strings } from '../../../../../locales/i18n';
9-
import { PERPS_CONSTANTS } from '@metamask/perps-controller';
9+
import {
10+
PERPS_CONSTANTS,
11+
PERPS_EVENT_PROPERTY,
12+
PERPS_EVENT_VALUE,
13+
} from '@metamask/perps-controller';
1014
import usePerpsToasts from './usePerpsToasts';
15+
import { MetaMetricsEvents } from '../../../../core/Analytics';
16+
import { usePerpsEventTracking } from './usePerpsEventTracking';
1117

1218
/**
1319
* Hook to track deposit status for Perps order view
@@ -23,6 +29,7 @@ import usePerpsToasts from './usePerpsToasts';
2329
*/
2430
export const usePerpsOrderDepositTracking = () => {
2531
const { showToast, PerpsToastOptions } = usePerpsToasts();
32+
const { track } = usePerpsEventTracking();
2633

2734
const showProgressToast = useCallback(
2835
(transactionId: string) => {
@@ -57,11 +64,23 @@ export const usePerpsOrderDepositTracking = () => {
5764
PerpsToastOptions.accountManagement.deposit.takingLonger;
5865
const cancelTradeOnPress = () => {
5966
cancelTradeRequested = true;
67+
68+
track(MetaMetricsEvents.PERPS_UI_INTERACTION, {
69+
[PERPS_EVENT_PROPERTY.INTERACTION_TYPE]:
70+
PERPS_EVENT_VALUE.INTERACTION_TYPE.CANCEL_TRADE_WITH_TOKEN,
71+
});
72+
6073
// Replace current toast with "Trade canceled" (don't close first to avoid race)
6174
showToast(PerpsToastOptions.accountManagement.deposit.tradeCanceled);
6275
};
6376
const depositLongerTimeoutId = setTimeout(() => {
6477
const baseClose = takingLongerToastOptions.closeButtonOptions;
78+
79+
track(MetaMetricsEvents.PERPS_SCREEN_VIEWED, {
80+
[PERPS_EVENT_PROPERTY.SCREEN_TYPE]:
81+
PERPS_EVENT_VALUE.SCREEN_TYPE.CANCEL_TRADE_WITH_TOKEN_TOAST,
82+
});
83+
6584
showToast({
6685
...takingLongerToastOptions,
6786
closeButtonOptions: baseClose
@@ -111,7 +130,12 @@ export const usePerpsOrderDepositTracking = () => {
111130
handleTransactionStatusUpdated,
112131
);
113132
},
114-
[showToast, showProgressToast, PerpsToastOptions.accountManagement.deposit],
133+
[
134+
showToast,
135+
showProgressToast,
136+
PerpsToastOptions.accountManagement.deposit,
137+
track,
138+
],
115139
);
116140

117141
return {

app/controllers/perps/constants/eventNames.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,8 @@ export const PERPS_EVENT_VALUE = {
305305
// Pay-with interactions
306306
PAYMENT_TOKEN_SELECTOR: 'payment_token_selector',
307307
PAYMENT_METHOD_CHANGED: 'payment_method_changed',
308+
// Deposit + order (pay-with token) cancel
309+
CANCEL_TRADE_WITH_TOKEN: 'cancel_trade_with_token',
308310
},
309311
ACTION_TYPE: {
310312
START_TRADING: 'start_trading',
@@ -376,6 +378,8 @@ export const PERPS_EVENT_VALUE = {
376378
ADD_MARGIN: 'add_margin',
377379
REMOVE_MARGIN: 'remove_margin',
378380
GEO_BLOCK_NOTIF: 'geo_block_notif',
381+
// Deposit + order (pay-with token) cancel toast
382+
CANCEL_TRADE_WITH_TOKEN_TOAST: 'cancel_trade_with_token_toast',
379383
},
380384
SETTING_TYPE: {
381385
LEVERAGE: 'leverage',

0 commit comments

Comments
 (0)