Skip to content

Commit 2286344

Browse files
Merge branch 'main' into fix/TRAM-3579
2 parents 47aaf65 + 2ef73f3 commit 2286344

21 files changed

Lines changed: 1366 additions & 257 deletions

File tree

app/components/Views/SocialLeaderboard/FeedView/FeedView.test.tsx

Lines changed: 25 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,7 @@ describe('FeedView', () => {
165165
jest.clearAllMocks();
166166
mockFeedResult = buildResult();
167167
mockQuickBuyAnalyticsContext = undefined;
168+
handleTypeFilterChange = undefined;
168169
});
169170

170171
it('renders the type selector, audience toggle, and feed list when items exist', () => {
@@ -269,50 +270,52 @@ describe('FeedView', () => {
269270
);
270271
});
271272

272-
it('navigates to the trader profile when the trader identity is pressed', () => {
273-
renderWithProvider(<FeedView />);
274-
275-
fireEvent.press(screen.getByTestId(getFeedTraderTestId('feed-1')));
276-
277-
expect(mockNavigate).toHaveBeenCalledWith(
278-
Routes.SOCIAL_LEADERBOARD.PROFILE,
279-
expect.objectContaining({
280-
traderId: 'trader-1',
281-
traderName: 'dutchiono',
282-
traderAddress: '0x1111111111111111111111111111111111111111',
283-
source: 'trader_feed',
284-
}),
285-
);
286-
});
287-
288-
it('tracks audience filter changes', () => {
273+
it('tracks audience filter changes via Trader Feed Interaction', () => {
289274
renderWithProvider(<FeedView />);
290275

291276
fireEvent.press(screen.getByTestId(getFeedAudienceOptionTestId('all')));
292277

293278
expect(mockTrack).toHaveBeenCalledWith(
294-
MetaMetricsEvents.SOCIAL_TRADER_FEED_AUDIENCE_FILTER_CHANGED,
279+
MetaMetricsEvents.SOCIAL_TRADER_FEED_INTERACTION,
295280
{
281+
interaction_type: 'audience_filter_changed',
296282
feed_audience: 'all',
297283
},
298284
);
299285
});
300286

301-
it('tracks type filter changes', () => {
287+
it('tracks type filter changes via Trader Feed Interaction', () => {
302288
renderWithProvider(<FeedView />);
303289

304290
fireEvent.press(screen.getByTestId(FeedViewSelectorsIDs.TYPE_SELECTOR));
305291
fireEvent.press(screen.getByTestId(getFeedTypeOptionTestId('tokens')));
306292

307293
expect(mockTrack).toHaveBeenCalledWith(
308-
MetaMetricsEvents.SOCIAL_TRADER_FEED_TYPE_FILTER_CHANGED,
294+
MetaMetricsEvents.SOCIAL_TRADER_FEED_INTERACTION,
309295
{
296+
interaction_type: 'type_filter_changed',
310297
feed_type_filter: 'tokens',
311298
previous_feed_type_filter: 'all',
312299
},
313300
);
314301
});
315302

303+
it('navigates to the trader profile when the trader identity is pressed', () => {
304+
renderWithProvider(<FeedView />);
305+
306+
fireEvent.press(screen.getByTestId(getFeedTraderTestId('feed-1')));
307+
308+
expect(mockNavigate).toHaveBeenCalledWith(
309+
Routes.SOCIAL_LEADERBOARD.PROFILE,
310+
expect.objectContaining({
311+
traderId: 'trader-1',
312+
traderName: 'dutchiono',
313+
traderAddress: '0x1111111111111111111111111111111111111111',
314+
source: 'trader_feed',
315+
}),
316+
);
317+
});
318+
316319
it('tracks chained type filter changes with the correct previous value', () => {
317320
renderWithProvider(<FeedView />);
318321

@@ -324,8 +327,9 @@ describe('FeedView', () => {
324327
expect(mockTrack).toHaveBeenCalledTimes(2);
325328
expect(mockTrack).toHaveBeenNthCalledWith(
326329
2,
327-
MetaMetricsEvents.SOCIAL_TRADER_FEED_TYPE_FILTER_CHANGED,
330+
MetaMetricsEvents.SOCIAL_TRADER_FEED_INTERACTION,
328331
{
332+
interaction_type: 'type_filter_changed',
329333
feed_type_filter: 'perps',
330334
previous_feed_type_filter: 'tokens',
331335
},

app/components/Views/SocialLeaderboard/FeedView/FeedView.tsx

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,10 @@ const FeedView: React.FC<FeedViewProps> = ({ isActive = true }) => {
153153
return;
154154
}
155155

156-
track(MetaMetricsEvents.SOCIAL_TRADER_FEED_AUDIENCE_FILTER_CHANGED, {
156+
track(MetaMetricsEvents.SOCIAL_TRADER_FEED_INTERACTION, {
157+
[SocialLeaderboardEventProperties.INTERACTION_TYPE]:
158+
SocialLeaderboardEventValues.TRADER_FEED_INTERACTION_TYPE
159+
.AUDIENCE_FILTER_CHANGED,
157160
[SocialLeaderboardEventProperties.FEED_AUDIENCE]: next,
158161
});
159162
audienceRef.current = next;
@@ -169,7 +172,10 @@ const FeedView: React.FC<FeedViewProps> = ({ isActive = true }) => {
169172
return;
170173
}
171174

172-
track(MetaMetricsEvents.SOCIAL_TRADER_FEED_TYPE_FILTER_CHANGED, {
175+
track(MetaMetricsEvents.SOCIAL_TRADER_FEED_INTERACTION, {
176+
[SocialLeaderboardEventProperties.INTERACTION_TYPE]:
177+
SocialLeaderboardEventValues.TRADER_FEED_INTERACTION_TYPE
178+
.TYPE_FILTER_CHANGED,
173179
[SocialLeaderboardEventProperties.FEED_TYPE_FILTER]: next,
174180
[SocialLeaderboardEventProperties.PREVIOUS_FEED_TYPE_FILTER]: previous,
175181
});

app/components/Views/SocialLeaderboard/SocialTradersTabsView/SocialTradersTabsView.test.tsx

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -145,23 +145,24 @@ describe('SocialTradersTabsView', () => {
145145
).toBe(true);
146146
});
147147

148-
it('tracks tab changes with tap interaction when a different tab is pressed', () => {
148+
it('tracks tab changes via Follow Trading Interaction when a different tab is pressed', () => {
149149
renderWithProvider(<SocialTradersTabsView />);
150150

151151
fireEvent.press(
152152
screen.getByTestId(`${SocialTradersTabsViewSelectorsIDs.TABS}-tab-1`),
153153
);
154154

155155
expect(mockTrack).toHaveBeenCalledWith(
156-
MetaMetricsEvents.SOCIAL_FOLLOW_TRADING_TAB_CHANGED,
156+
MetaMetricsEvents.SOCIAL_FOLLOW_TRADING_INTERACTION,
157157
{
158+
interaction_type: 'tab_changed',
158159
tab: 'tab_feed',
159-
interaction_type: 'tap',
160+
tab_change_method: 'tap',
160161
},
161162
);
162163
});
163164

164-
it('tracks tab changes with swipe interaction when the pager reports a page change', () => {
165+
it('tracks swipe tab changes via Follow Trading Interaction', () => {
165166
renderWithProvider(<SocialTradersTabsView />);
166167

167168
fireEvent.press(
@@ -175,10 +176,11 @@ describe('SocialTradersTabsView', () => {
175176
});
176177

177178
expect(mockTrack).toHaveBeenCalledWith(
178-
MetaMetricsEvents.SOCIAL_FOLLOW_TRADING_TAB_CHANGED,
179+
MetaMetricsEvents.SOCIAL_FOLLOW_TRADING_INTERACTION,
179180
{
181+
interaction_type: 'tab_changed',
180182
tab: 'tab_leaderboard',
181-
interaction_type: 'swipe',
183+
tab_change_method: 'swipe',
182184
},
183185
);
184186
});
@@ -198,10 +200,11 @@ describe('SocialTradersTabsView', () => {
198200
});
199201

200202
expect(mockTrack).toHaveBeenCalledWith(
201-
MetaMetricsEvents.SOCIAL_FOLLOW_TRADING_TAB_CHANGED,
203+
MetaMetricsEvents.SOCIAL_FOLLOW_TRADING_INTERACTION,
202204
{
205+
interaction_type: 'tab_changed',
203206
tab: 'tab_feed',
204-
interaction_type: 'swipe',
207+
tab_change_method: 'swipe',
205208
},
206209
);
207210
});

app/components/Views/SocialLeaderboard/SocialTradersTabsView/SocialTradersTabsView.tsx

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -79,18 +79,21 @@ const SocialTradersTabsView: React.FC = () => {
7979

8080
const changeTab = useCallback(
8181
(index: number) => {
82-
const interactionType = programmaticTabChangeRef.current
83-
? SocialLeaderboardEventValues.INTERACTION_TYPE.TAP
84-
: SocialLeaderboardEventValues.INTERACTION_TYPE.SWIPE;
82+
const tabChangeMethod = programmaticTabChangeRef.current
83+
? SocialLeaderboardEventValues.TAB_CHANGE_METHOD.TAP
84+
: SocialLeaderboardEventValues.TAB_CHANGE_METHOD.SWIPE;
8585
programmaticTabChangeRef.current = false;
8686

8787
if (activeIndex === index) {
8888
return;
8989
}
9090

91-
track(MetaMetricsEvents.SOCIAL_FOLLOW_TRADING_TAB_CHANGED, {
91+
track(MetaMetricsEvents.SOCIAL_FOLLOW_TRADING_INTERACTION, {
92+
[SocialLeaderboardEventProperties.INTERACTION_TYPE]:
93+
SocialLeaderboardEventValues.FOLLOW_TRADING_INTERACTION_TYPE
94+
.TAB_CHANGED,
9295
[SocialLeaderboardEventProperties.TAB]: getTabAnalyticsValue(index),
93-
[SocialLeaderboardEventProperties.INTERACTION_TYPE]: interactionType,
96+
[SocialLeaderboardEventProperties.TAB_CHANGE_METHOD]: tabChangeMethod,
9497
});
9598

9699
playSelection().catch(() => undefined);

app/components/Views/SocialLeaderboard/analytics/socialLeaderboardEvents.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ export const SocialLeaderboardEventProperties = {
2929
SCREEN: 'screen',
3030
SOURCE: 'source',
3131
TAB: 'tab',
32+
TAB_CHANGE_METHOD: 'tab_change_method',
3233
TRADER_ADDRESS: 'trader_address',
3334
TRADER_HAS_PROFILE_PICTURE_SET: 'trader_has_profile_picture_set',
3435
TRADER_RANK: 'trader_rank',
@@ -59,6 +60,13 @@ export const SocialLeaderboardEventValues = {
5960
TOKENS: 'tokens',
6061
PERPS: 'perps',
6162
},
63+
FOLLOW_TRADING_INTERACTION_TYPE: {
64+
TAB_CHANGED: 'tab_changed',
65+
},
66+
TRADER_FEED_INTERACTION_TYPE: {
67+
AUDIENCE_FILTER_CHANGED: 'audience_filter_changed',
68+
TYPE_FILTER_CHANGED: 'type_filter_changed',
69+
},
6270
INTERACTION_TYPE: {
6371
ALLOW_NOTIFICATIONS: 'allow_notifications',
6472
BACK: 'back',
@@ -67,8 +75,6 @@ export const SocialLeaderboardEventValues = {
6775
FOLLOW_TOP_THREE: 'follow_top_three',
6876
GOT_IT: 'got_it',
6977
MAYBE_LATER: 'maybe_later',
70-
SWIPE: 'swipe',
71-
TAP: 'tap',
7278
},
7379
NUX_STEP: {
7480
STEP_1: 'step_1',
@@ -81,6 +87,10 @@ export const SocialLeaderboardEventValues = {
8187
LEADERBOARD: 'tab_leaderboard',
8288
OPEN: 'open',
8389
},
90+
TAB_CHANGE_METHOD: {
91+
SWIPE: 'swipe',
92+
TAP: 'tap',
93+
},
8494
TRADE_TYPE: {
8595
PERPS: 'perps',
8696
SPOT: 'spot',

app/components/Views/confirmations/constants/confirmations.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,3 +143,17 @@ export const MM_PAY_TRANSACTION_TYPES = [
143143
export const QUOTE_REQUIRED_TRANSACTION_TYPES = [
144144
TransactionType.moneyAccountDeposit,
145145
] as const;
146+
147+
/**
148+
* MetaMask Pay transaction types that cannot work without a payment token
149+
* (unless paying with fiat). Confirmation is blocked and publish throws when
150+
* no payment token is set. Claims and withdraws are excluded because they can
151+
* legitimately submit without engaging MetaMask Pay.
152+
*/
153+
export const PAY_TOKEN_REQUIRED_TRANSACTION_TYPES = [
154+
TransactionType.musdConversion,
155+
TransactionType.perpsDeposit,
156+
TransactionType.perpsDepositAndOrder,
157+
TransactionType.predictDeposit,
158+
TransactionType.predictDepositAndOrder,
159+
] as const;

0 commit comments

Comments
 (0)