Skip to content

fix(activity-redesign): render non-EVM swap/bridge rows with the redesigned row style#33376

Open
vinnyhoward wants to merge 1 commit into
mainfrom
fix-tmcu-1067-non-evm-swap-rows-use-redesigned-activity-row
Open

fix(activity-redesign): render non-EVM swap/bridge rows with the redesigned row style#33376
vinnyhoward wants to merge 1 commit into
mainfrom
fix-tmcu-1067-non-evm-swap-rows-use-redesigned-activity-row

Conversation

@vinnyhoward

@vinnyhoward vinnyhoward commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

Description

Non-EVM (e.g. Solana) swaps and bridges submitted from the device carry a local BridgeStatusController history entry. The Activity list's renderItem used that entry to route those rows to the legacy MultichainBridgeTransactionListItem — larger BodyLGMedium title, circular swap icon, per-row "Confirmed" status line and timestamp — while identical transactions fetched from remote history rendered through the redesigned compact ActivityListItemRow. The result was a visibly inconsistent list mixing two row styles for the same kind of transaction (see screenshots).

This PR removes the legacy render branch so every row goes through the redesigned ActivityListItemRow (which already consumes bridgeHistoryItem for the title, avatars, and quote-token amounts), and ports the legacy row's tap behavior into the shared press handler: keyring transactions whose bridge-history entry is a cross-chain bridge keep their dedicated bridge-status screen (mirroring hasDedicatedDetailScreen for local EVM bridges), while same-chain swaps fall through to the shared detail flows. The now-dead location prop (only consumed by the legacy row's analytics) is removed; no caller passed it.

Notes for reviewers:

  • The legacy row fired LIST_ITEM_CLICKED (monetized_primitive: Swaps) on tap. No redesigned row fires that event today (EVM swap/bridge rows already dropped it), so this PR follows the redesign convention rather than special-casing non-EVM rows.
  • Rows with bridge history keep the derived present-tense title ("Swap SOL to PYUSD"), matching the existing deliberate behavior for EVM swap/bridge rows.
  • MultichainBridgeTransactionListItem itself is untouched — it is still used by the legacy MultichainTransactionsView/UnifiedTransactionsView.

Changelog

CHANGELOG entry: Fixed non-EVM swap and bridge rows in the Activity list rendering with a larger legacy row style instead of the redesigned compact style

Related issues

Fixes: https://consensyssoftware.atlassian.net/browse/TMCU-1067

Manual testing steps

Feature: Activity list row style for non-EVM swaps and bridges

  Scenario: user swaps SOL for an SPL token in-app
    Given the user has a Solana account with existing swap history in the Activity list

    When the user performs a SOL to SPL-token swap via the in-app Swap flow
    And opens the Activity tab after the swap confirms and syncs
    Then the new swap renders with the same compact redesigned row style as the surrounding rows
    And no row shows the larger legacy style with a per-row status line and timestamp

  Scenario: user taps an in-app non-EVM swap row
    Given the Activity list shows a Solana swap submitted from this device

    When the user taps the swap row
    Then the transaction details view opens

  Scenario: user taps a non-EVM cross-chain bridge row
    Given the Activity list shows a bridge from Solana to an EVM chain submitted from this device

    When the user taps the bridge row
    Then the dedicated bridge status/details screen opens

Screenshots/Recordings

Simulator.Screen.Recording.-.iPhone.17.Pro.-.2026-07-15.at.12.26.28.mov

Before

Simulator Screenshot - iPhone 17 Pro - 2026-07-15 at 12 03 44

After

Simulator Screenshot - iPhone 17 Pro - 2026-07-15 at 14 25 19

Pre-merge author checklist

Performance checks (if applicable)

  • I've tested on Android
    • Ideally on a mid-range device; emulator is acceptable
  • I've tested with a power user scenario
    • Use these power-user SRPs to import wallets with many accounts and tokens
  • I've instrumented key operations with Sentry traces for production performance metrics

For performance guidelines and tooling, see the Performance Guide.

Pre-merge reviewer checklist

  • I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed).
  • I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots.

Note

Low Risk
UI consistency and navigation branching in Activity list only; behavior is aligned with existing EVM bridge handling and covered by new unit tests.

Overview
Non-EVM swap and bridge rows in the Activity list no longer use the legacy MultichainBridgeTransactionListItem branch. Every row renders through the compact ActivityListItemRow, with swap/bridge titles still derived from bridge history via getSwapBridgeTxActivityTitle.

Tap routing for device-submitted non-EVM keyring transactions with bridge history is centralized in handleActivityItemPress: cross-chain entries (isBridgeTxHistoryItemBridge) open the unified bridge status flow via handleUnifiedSwapsTxHistoryItemClick; same-chain swaps continue into the existing multichain details sheet. The unused location prop (legacy analytics only) is removed from ActivityList.

Tests drop the legacy row mock and add coverage for redesigned row rendering, cross-chain bridge taps, and same-chain swap navigation.

Reviewed by Cursor Bugbot for commit bab7242. Bugbot is set up for automated code reviews on this repo. Configure here.

Non-EVM (e.g. Solana) swaps and bridges submitted from the device carry a
local bridge-history entry, which routed them to the legacy
MultichainBridgeTransactionListItem — larger typography, per-row status
and timestamp — while identical remote-history rows used the redesigned
compact ActivityListItemRow.

Remove the legacy branch so all rows render through ActivityListItemRow,
and move the tap routing into the shared press handler: cross-chain
bridges keep their dedicated bridge-status screen (mirroring local EVM
bridges), same-chain swaps fall through to the shared detail flows.
@vinnyhoward vinnyhoward added the team-mobile-ux Mobile UX team label Jul 15, 2026
@github-actions

Copy link
Copy Markdown
Contributor

CLA Signature Action: All authors have signed the CLA. You may need to manually re-run the blocking PR check if it doesn't pass in a few minutes.

@metamask-ci

metamask-ci Bot commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

PR template — items to address before "Ready for review"

Warnings — informational, address before merging:

  • Pre-merge author checklist has unchecked items (e.g. "I've tested on Android"). Every box must be consciously checked — see docs/readme/ready-for-review.md.

See docs/readme/ready-for-review.md for the full Definition of Ready for Review.

@github-actions

Copy link
Copy Markdown
Contributor

🔍 Smart E2E Test Selection

  • Selected E2E tags: SmokeWalletPlatform, SmokeSwap, SmokeConfirmations, SmokeNetworkExpansion
  • Selected Performance tags: None (no tests recommended)
  • Risk Level: medium
  • AI Confidence: 85%
click to see 🤖 AI reasoning details

E2E Test Selection:
The changes refactor ActivityList.tsx to:

  1. Remove the dedicated MultichainBridgeTransactionListItem component for non-EVM bridge transactions, replacing it with the shared ActivityListItem shape for all items.
  2. Add new routing logic: cross-chain non-EVM bridges (where srcChainId ≠ destChainId) now route to the unified swaps detail screen via handleUnifiedSwapsTxHistoryItemClick, while same-chain swaps fall through to the standard detail flow.
  3. Remove the location prop from ActivityListProps.

SmokeWalletPlatform: Directly covers transaction history display (incoming/outgoing transactions, token transfer details). The ActivityList is the core component for this feature area.

SmokeSwap: The changes affect how bridge/swap transactions are routed when tapped in the activity list. Cross-chain bridge history items now use handleUnifiedSwapsTxHistoryItemClick, which is the unified swaps/bridge detail flow. This directly impacts swap and bridge transaction history behavior.

SmokeConfirmations: Required as a dependent tag when selecting SmokeSwap per tag description.

SmokeNetworkExpansion: The changes specifically handle keyringTransaction type (non-EVM/Solana transactions) and their routing. Solana bridge/swap transactions are now routed differently. Per tag description, Solana transaction flows should select SmokeNetworkExpansion.

Performance Test Selection:
The changes are a refactoring of the ActivityList component's routing logic for non-EVM bridge/swap transactions. While this affects the activity list rendering, the changes are primarily about tap routing (which detail screen to navigate to) rather than rendering performance. The removal of MultichainBridgeTransactionListItem and replacement with the shared ActivityListItem shape could marginally affect list rendering, but there are no performance-sensitive changes like new data fetching, heavy computations, or rendering loops that would warrant performance test selection.

View GitHub Actions results

@sonarqubecloud

Copy link
Copy Markdown

@vinnyhoward vinnyhoward marked this pull request as ready for review July 15, 2026 20:26
@github-actions github-actions Bot added the risk:medium AI analysis: medium risk label Jul 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

risk:medium AI analysis: medium risk size-M team-mobile-ux Mobile UX team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant