Skip to content

Conversation

@runway-github
Copy link
Contributor

@runway-github runway-github bot commented Nov 20, 2025

Description

The underlying sendflow uses selectChainId which should be marked as
deprecated.

  • This selected does not return the correct chain ID when you are using
    "Popular Networks" view as you can have multiple chainIDs selected now!!

This has unearthed a very large scope at this selector underpins many
areas in mobile and extension 💀
Ideally all flows and features should move away from this selector and
handle multiple selected chainIDs.

Changelog

CHANGELOG entry: fix: correct nft images available during send flow

Related issues

Fixes: #20982

Manual testing steps

  1. Select Popular Networks Tab
  2. Go through NFT send flow - Select NFT from (e.g.) Linea (not
    ethereum)
  3. Expected: On review page, should see NFT and can select NFT image
    without crashing app

Screenshots/Recordings

Before

After

https://www.loom.com/share/683675a4c01b47b0a99f6ff5e9dfa30a

Pre-merge author checklist

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

Switches NFT lookup to a chain-scoped selector to fix multi-network send flow, updates HeroNft placeholder behavior, adds selector tests, and deprecates legacy selectors.

  • State/Selectors:
    • Add selectAllCollectiblesByChain in reducers/collectibles/collectibles.ts with unit tests, enabling per-chain NFT selection.
    • Mark collectiblesSelector and selectChainId as deprecated with notes about multi-network selection.
  • Hooks:
    • Update useNft to:
      • Derive hexChainId and select NFTs via selectAllCollectiblesByChain.
      • Return chainId as hex and resolve contract/name accordingly.
  • UI:
    • HeroNft placeholder: make non-interactive when no NFT; only show #tokenId if present; remove "Show" text.
  • Tests:
    • Adjust hero-nft.test.tsx to reflect placeholder behavior and collection image fallback.
    • Add collectibles.test.ts covering selectAllCollectiblesByChain edge cases.

Written by Cursor Bugbot for commit 4c30784. This will update automatically on new commits. Configure here.

e5692de

…ibles for nft send flow (#22966)

<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **Description**

The underlying sendflow uses `selectChainId` which should be marked as
deprecated.
- This selected does not return the correct chain ID when you are using
"Popular Networks" view as you can have multiple chainIDs selected now!!

This has unearthed a very large scope at this selector underpins many
areas in mobile and extension 💀
Ideally all flows and features should move away from this selector and
handle multiple selected chainIDs.


## **Changelog**

<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`

If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`

(This helps the Release Engineer do their job more quickly and
accurately)
-->

CHANGELOG entry: fix: correct nft images available during send flow

## **Related issues**

Fixes: #20982

## **Manual testing steps**

1. Select Popular Networks Tab
2. Go through NFT send flow - Select NFT from (e.g.) Linea (not
ethereum)
3. Expected: On review page, should see NFT and can select NFT image
without crashing app

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

https://www.loom.com/share/683675a4c01b47b0a99f6ff5e9dfa30a

## **Pre-merge author checklist**

- [x] I’ve followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **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.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Fetch NFTs by the correct hex chainId via a new selector in the send
flow, refine HeroNft placeholder/interaction, and add selector tests
with deprecation notes for legacy selectors.
> 
> - **State/Selectors**:
> - **New** `reducers/collectibles/selectAllCollectiblesByChain`:
returns collectibles for selected address and given `Hex` chainId;
includes unit tests.
> - **Deprecate** `collectiblesSelector` and `selectChainId` (comments
only).
> - **Hooks**:
> - Update `useNft` to use `selectAllCollectiblesByChain` and hexified
`chainId`; derive NFT by `tokenId`.
> - **UI**:
> - `HeroNft` placeholder: remove "Show" text, only show `#tokenId` when
available; block navigation when no NFT.
> - Tests updated and expanded (placeholder interaction, image from
`collection.imageUrl`, assertions).
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
0247941. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
@runway-github runway-github bot requested review from a team as code owners November 20, 2025 19:52
@github-actions
Copy link
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.

@metamaskbot metamaskbot added the team-bots Bot team (for MetaMask Bot, Runway Bot, etc.) label Nov 20, 2025
@github-actions
Copy link
Contributor

🔍 Smart E2E Test Selection

  • Selected E2E tags: SmokeAccounts, SmokeCore, SmokeConfirmationsRedesigned, SmokeIdentity, SmokeNetworkAbstractions, SmokeNetworkExpansion, SmokeTrade, SmokeWalletPlatform, SmokeWalletUX, SmokeAssets, SmokeSwaps, SmokeStake, SmokeCard, SmokeNotifications, SmokeRewards, SmokePerps, SmokeRamps, SmokeMultiChainPermissions, SmokeAnalytics, SmokeMultiChainAPI, SmokePredictions
  • Risk Level: high
  • AI Confidence: %
click to see 🤖 AI reasoning details

Fallback: AI analysis did not complete successfully. Running all tests.

View GitHub Actions results

expect(getByText('#12345')).toBeDefined();

fireEvent.press(getByTestId('nft-image'));

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: Test uses weak assertion instead of strong matcher (Bugbot Rules)

Tests use .toBeDefined() matcher instead of the recommended strong assertion .toBeOnTheScreen() for verifying element presence. Per testing guidelines, weak matchers like toBeDefined() should be replaced with specific assertions that clearly verify the element is rendered and visible to users.

Fix in Cursor Fix in Web

@sonarqubecloud
Copy link

@joaoloureirop joaoloureirop merged commit c2cea4a into release/7.60.0 Nov 21, 2025
122 of 142 checks passed
@joaoloureirop joaoloureirop deleted the runway-cherry-pick-7.60.0-1763668325 branch November 21, 2025 11:56
@github-actions github-actions bot locked and limited conversation to collaborators Nov 21, 2025
@metamaskbot metamaskbot added the release-7.60.0 Issue or pull request that will be included in release 7.60.0 label Nov 21, 2025
@metamaskbot
Copy link
Collaborator

No release label on PR. Adding release label release-7.60.0 on PR, as PR was cherry-picked in branch 7.60.0.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

release-7.60.0 Issue or pull request that will be included in release 7.60.0 size-M team-bots Bot team (for MetaMask Bot, Runway Bot, etc.)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants