[pull] main from MetaMask:main#330
Merged
Merged
Conversation
<!-- 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** <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> After recent changes on keypad component keypad component was overflowing and not letting users to click "0" button. This PR aims to fix layout in send flow amount page. ## **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: null ## **Related issues** Fixes: #22702 ## **Manual testing steps** ```gherkin Feature: my feature name Scenario: user [verb for user action] Given [describe expected initial app state] When user [verb for user action] Then [describe expected outcome] ``` ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** https://github.com/user-attachments/assets/3396b9d5-1dab-45d5-aa77-489c4cef4e65 ### **After** Small devices: <img width="517" height="1019" alt="after 6" src="https://github.com/user-attachments/assets/f84a6a1d-3962-4e9b-8663-2c1b03d556fb" /> <img width="517" height="1019" alt="after2" src="https://github.com/user-attachments/assets/973a1ac6-2ae1-4404-8ccb-e35e46b23451" /> <img width="561" height="1063" alt="after 3" src="https://github.com/user-attachments/assets/86a8bd4c-6bce-4f84-9e62-a543cecaac71" /> Larger devices: <img width="559" height="1062" alt="after 5" src="https://github.com/user-attachments/assets/56c42edd-f46e-43c0-bb11-950f000312d0" /> <img width="559" height="1062" alt="after1" src="https://github.com/user-attachments/assets/7e682ab4-bd70-40a8-87ed-8f662816f8b4" /> <img width="515" height="1018" alt="after 4" src="https://github.com/user-attachments/assets/d3cb8197-b576-43d5-9c62-48ef1ccdbc1e" /> ## **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] > Refactors the send amount screen layout to center content, move balance display and keyboard, and remove NFT-specific spacing in styles. > > - **Send Amount UI** (`amount.tsx`): > - Reorganize layout: wrap header content in `topSection` and move `AmountKeyboard` outside it. > - Display `balanceDisplayValue` using new `styles.balanceText` within the top section. > - Stop passing `isNFT` to styles. > - **Styles** (`amount.styles.ts`): > - Replace `balanceSection` with `balanceText`; remove NFT-dependent margins and input offsets. > - Make `topSection` flexible (`flex: 1`) and center content; remove vertical padding. > - Keep input sizing via `getFontSizeForInputLength` but simplify layout by removing unused spacing. > - Remove `marginTop` from `nftImageWrapper`; drop conditional `inputSection` margin. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit c2ea882. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
…22724) <!-- 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** This PR focuses on restructuring the whole trending feature so that developers can add sections dynamically just by modifying a single file. This PR is a continuation of [this](#22700) one. Here is a summary of the components that get dynamically created based on a centralized configuration: Quick Action Buttons - 🟢 Search Sections - 🟢 Actual sections - 🟢 Now the developer will have a section created just by modifying [this](https://github.com/MetaMask/metamask-mobile/blob/23f99a5d7ac7f02f8aa48174560a3e94b122725e/app/components/Views/TrendingView/config/sections.config.tsx) file <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> ## **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: dynamically create sections for trending ## **Related issues** Fixes: ## **Manual testing steps** ```gherkin Feature: my feature name Scenario: user [verb for user action] Given [describe expected initial app state] When user [verb for user action] Then [describe expected outcome] ``` ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <img width="516" height="626" alt="image" src="https://github.com/user-attachments/assets/ca06ccec-f12b-4c7d-9d8e-8c6a215b0a0b" /> <img width="441" height="510" alt="image" src="https://github.com/user-attachments/assets/a6131d5f-8221-4d5a-8496-167e79e7cd50" /> <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [ ] 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). - [ ] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] 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] > Replaces hardcoded Trending sections with a centralized config-driven system powering feed, quick actions, search, and navigation. > > - **Architecture**: > - Introduces centralized `SECTIONS_CONFIG` with `renderRowItem`, `viewAllAction`, `renderSection`, and `useSectionData` plus `HOME_SECTIONS_ARRAY`/`SECTIONS_ARRAY`. > - Adds `useSectionsData` to fetch all section data generically. > - **Search**: > - `ExploreSearchResults` now renders items via `section.renderRowItem` and keys via `section.keyExtractor`. > - `useExploreSearch` debounces and filters using `SECTIONS_ARRAY` + `useSectionsData`. > - **UI Components**: > - New `SectionCard` (list-style sections) and `SectionCarrousel` (carousel-style, with dots) used by sections. > - `QuickActions` and `SectionHeader` use `section.viewAllAction`. > - **Trending Feed**: > - `TrendingView` renders sections from `HOME_SECTIONS_ARRAY` and adds Predict routes (`PredictScreenStack`, details, buy/sell previews). > - **Removed Legacy**: > - Deletes `PerpsSection` and `PredictionSection` (and related styles/tests) in favor of config-driven rendering. > - **Tests**: > - Adds `SectionCarrousel` tests; minor test cleanup in `TrendingTokenRowItem.test`. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 23f99a5. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- 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** Rerouting to webView is crashing the app. It is root caused due to infinity useEffect loop Jira Link : https://consensyssoftware.atlassian.net/browse/SL-298 <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> ## **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: null ## **Related issues** Fixes: #22548 ## **Manual testing steps** ```gherkin Feature: fix useEffect infinity loop Scenario: user check term of use Given installed the app When user click on create new wallet Then user click on the terms of use link ``` ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> https://github.com/user-attachments/assets/f81b1e83-699b-401c-b01d-6ee63178ec00 ### **After** <!-- [screenshots/recordings] --> https://github.com/user-attachments/assets/89512f44-33f8-4736-8be0-0e20fc347650 ## **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] > Separates navbar options and param dispatch updates into two effects to prevent an update loop in `SimpleWebView`. > > - **SimpleWebView (`app/components/Views/SimpleWebview/index.tsx`)**: > - Decouples navbar options from param dispatch updates by splitting into two `useEffect` hooks. > - `navigation.setOptions(getWebviewNavbar(...))` now depends on `navigation`, `route`, `colors`. > - `navigation.setParams({ dispatch: share })` now depends on `navigation`, `share`. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 019a4ae. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
## **Description** Remove rewards feature flag, this is now always enabled. ## **Changelog** CHANGELOG entry: null ## **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** - [x] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [x] 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] > Removes the rewards feature flag across app, always enables Rewards UI/flows, updates navigation, hooks, controller logic, selectors, and tests/e2e accordingly. > > - **Navigation/UI**: > - Always render and navigate to `Routes.REWARDS_VIEW`; remove `selectRewardsEnabledFlag` checks in `TabBar`, `MainNavigator`, and tests/snapshots. > - Navbar: always show hamburger menu button; `getSettingsNavigationOptions` always renders a close button and no longer accepts rewards flag; update Wallet/Settings to stop passing it. > - **Perps**: > - Replace `navigateToRewardsOrSettings` with `navigateToRewards`; remove rewards flag usage in `usePerpsNavigation`, `usePerpsOrderFees`, and `usePerpsRewards`, enabling rewards-related calls unconditionally; update related tests. > - **Rewards onboarding**: > - `useRewardsIntroModal` no longer depends on rewards-enabled flag; continues to use announcement flag and subscription checks. > - **Controller**: > - `RewardsController` no longer reads Redux feature flag; `isRewardsFeatureEnabled` now only respects `isDisabled` callback; update tests to reflect new gating. > - **Selectors**: > - Remove `selectRewardsEnabledFlag` and related tests; keep other rewards selectors (e.g., announcement modal) with defaults. > - **E2E**: > - Settings access updated to use wallet hamburger menu and new close button; adjust tests to close drawer before proceeding. > - **Tests/Snapshots**: > - Widespread updates to unit tests and snapshots to remove rewards flag conditions and assert Rewards tab/button presence. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 43da35a. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> --------- Co-authored-by: Priya Narayanaswamy <priya.narayanaswamy@consensys.net>
<!-- 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** This PR fixes amount truncating for swaps withing the Activity tab. It also fixes incorrect title for "Received Tokens" transaction type (previously it was incorrectly set to "Sent Tokens). <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> ## **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: Fixes amount truncating for swaps withing the Activity tab. It also fixes incorrect icon for "Received Tokens" transaction type (previously it was incorrectly set to "Sent Tokens"). ## **Related issues** Fixes: #20358 https://consensyssoftware.atlassian.net/browse/TMCU-89 ## **Manual testing steps** ```gherkin Feature: List EVM swap transactions Scenario: user lists swap transactions Given user have swap transaction on EVM in their activity with amount lower than 0.00001 of selected token When user navigates to Activity tab Then they should see "< 0.00001" in the amount row ``` ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <img width="394" height="839" alt="Screenshot 2025-11-14 at 12 21 17" src="https://github.com/user-attachments/assets/9e76ef99-25e8-44ce-964e-df5b00be87cf" /> <img width="388" height="327" alt="Screenshot 2025-11-14 at 13 45 23" src="https://github.com/user-attachments/assets/3de177a0-587b-432c-a4c2-e6f3bcd65abb" /> <!-- [screenshots/recordings] --> ### **After** <img width="393" height="837" alt="Screenshot 2025-11-14 at 14 48 11" src="https://github.com/user-attachments/assets/ff4d91dd-e3e3-4f77-b50e-c2be58be036b" /> <img width="382" height="268" alt="Screenshot 2025-11-14 at 13 44 53" src="https://github.com/user-attachments/assets/77245d12-80cf-4ffc-ab14-cf64003ee6f1" /> <!-- [screenshots/recordings] --> ## **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] > Formats swap/bridge amounts with a display threshold and fixes token transfer direction/action keys; updates UI/tests and i18n accordingly. > > - **Number formatting**: > - Add `formatAmountWithThreshold` and `MINIMUM_DISPLAY_THRESHOLD` in `app/util/number`, capping to 5 decimals and showing `< 0.00001` for tiny values. > - Use in `app/components/UI/Bridge/utils/transaction-history.ts` and `app/components/UI/MultichainBridgeTransactionListItem/MultichainBridgeTransactionListItem.tsx` to render amounts. > - **Swaps/Bridge display**: > - `decodeSwapsTx` and UI now show source amounts without trailing zeros (e.g., `5 USDC`) and use raw amounts for summaries. > - `decodeBridgeTx` applies threshold formatting (e.g., `-0.00099 ETH`) and sets `notificationKey` to `undefined`. > - **Transaction direction logic**: > - In `app/components/UI/TransactionElement/utils.js`, compute `isSent` via lowercase `from` vs `selectedAddress` and set `transactionType` using `isIncoming`. > - In `app/util/transactions/index.js`, update `getActionKey` for `SEND_TOKEN_ACTION_KEY` to return `sent_tokens`/`received_tokens`/`self_sent_tokens`; leave ETH logic consistent. > - Add i18n key `transactions.received_tokens` in `locales/languages/en.json`. > - **Tests**: > - Update tests in `transaction-history.test.ts` and `MultichainBridgeTransactionListItem.test.tsx` to expect new amount formats and threshold behaviors. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit e50052d. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- 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** Reenable the autocreate release PR after automating getting build number in create-release-pr workflow in previous [PR](#21687) Testing: https://github.com/consensys-test/metamask-mobile-test-workflow/actions/runs/19174950933/job/54817224179 ## **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: None ## **Related issues** Fixes: ## **Manual testing steps** ```gherkin Feature: my feature name Scenario: user [verb for user action] Given [describe expected initial app state] When user [verb for user action] Then [describe expected outcome] ``` ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [ ] 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). - [ ] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] 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] > Adds a workflow to auto-create release PRs by extracting semver from `release/*` branches and invoking the reusable release PR workflow. > > - **CI**: > - **New workflow** `/.github/workflows/auto-create-release-pr.yml`: > - Triggers on repo `create` events for `release/*` branches. > - Extracts `semver` via `.github/scripts/extract-semver.sh`. > - Invokes reusable `create-release-pr.yml` with `semver-version` and required secrets (`PR_TOKEN`, `GCP_RLS_SHEET_ACCOUNT_BASE64`). > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 690dcc6. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!--
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**
<!--
Write a short description of the changes included in this pull request,
also include relevant motivation and context. Have in mind the following
questions:
1. What is the reason for the change?
2. What is the improvement/solution?
-->
## **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:
## **Related issues**
Fixes:
## **Manual testing steps**
```gherkin
Feature: my feature name
Scenario: user [verb for user action]
Given [describe expected initial app state]
When user [verb for user action]
Then [describe expected outcome]
```
## **Screenshots/Recordings**
<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->
### **Before**
<!-- [screenshots/recordings] -->
### **After**
<!-- [screenshots/recordings] -->
## **Pre-merge author checklist**
- [ ] 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).
- [ ] I've completed the PR template to the best of my ability
- [ ] I’ve included tests if applicable
- [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [ ] 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]
> Rename prediction market smoke test suite names in Android/iOS E2E
workflows from underscore to hyphen format.
>
> - **CI / Workflows**:
> - Rename `test-suite-name` for prediction market smoke tests to
hyphenated form:
> - Android (`.github/workflows/run-e2e-smoke-tests-android.yml`):
`prediction_market_android_smoke-*` →
`prediction-market-android-smoke-*`.
> - iOS (`.github/workflows/run-e2e-smoke-tests-ios.yml`):
`prediction_market_ios_smoke-*` → `prediction-market-ios-smoke-*`.
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
dc56721. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
….0 (#22791) <!-- 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** This PR refactors the Return on Equity (ROE) calculation logic in the usePerpsLivePositions hook to use the centralized calculateRoEForPrice utility function instead of the previous manual calculation. ## **Changelog** CHANGELOG entry: Fixed a bug where the PnL was showing incorrect values in the position card ## **Related issues** Fixes: https://consensyssoftware.atlassian.net/browse/TAT-2080 Fixes #22790 ## **Manual testing steps** ```gherkin Feature: Live ROE calculation for Perps positions Scenario: user views live positions with updated ROE Given user has open perpetual positions And the positions are being streamed with live price updates When the market price changes Then the ROE percentage should update in real-time And the ROE should be calculated consistently with TP/SL ROE calculations And the ROE should properly reflect the position direction (long/short) And the ROE should account for the position's leverage ``` ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** PnL on the list is not matching the PnL on the position card https://github.com/user-attachments/assets/72729f8d-080f-45a5-bcd0-ce3776f2efde ### **After** PnL in the position card is matching the PnL from the list <img width="1170" height="2532" alt="Simulator Screenshot - iPhone 16e - 2025-11-17 at 13 14 10" src="https://github.com/user-attachments/assets/bc82bdff-3579-4bc0-91f4-a6ceb8518b5e" /> <img width="1170" height="2532" alt="Simulator Screenshot - iPhone 16e - 2025-11-17 at 13 14 02" src="https://github.com/user-attachments/assets/4dd7c44b-8b58-4389-b083-0110e2af6007" /> ## **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] > Reworks live PnL/ROE to use centralized ROE utility, prefer `price` over `markPrice`, and handle leverage when margin is invalid, with corresponding test updates. > > - **Perps Live Positions Hook (`usePerpsLivePositions.ts`)**: > - Use centralized `calculateRoEForPrice` for `returnOnEquity`. > - Prefer `price` over `markPrice` for live calculations; validate positive numeric `currentPrice`. > - Compute PnL as `(currentPrice - entryPrice) * size`; infer direction from `size` (supports shorts). > - Derive ROE from leverage (fallback when `marginUsed` invalid); ignore invalid `entryPrice`/`size`/price. > - **Tests (`useLivePositions.test.ts`)**: > - Update expectations to reflect `price` precedence and centralized ROE calc. > - Add coverage for short positions and leverage-based ROE when `marginUsed` is NaN. > - Maintain behavior when price data missing/empty and multiple position scenarios. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 75a749f. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
## **Description** Minor design fixes for Predict deposit confirmation. - Increase height of confirm button. - Update keyboard done label. - Hide alert banner. ## **Changelog** CHANGELOG entry: null ## **Related issues** Fixes: #22726 #22731 #22761 ## **Manual testing steps** ## **Screenshots/Recordings** ### **Before** ### **After** ## **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] > Hides the alert banner for predict/perps flows, enlarges the confirm button, renames the keyboard “Done” action to “Continue,” and updates tests/i18n accordingly. > > - **Confirmations UI**: > - Extend `AlertBanner` ignore list to `perpsDeposit`, `predictDeposit`, `predictWithdraw`. > - Centralize scroll disabling via `TRANSACTION_TYPES_DISABLE_SCROLL`; apply to `ScrollView`. > - **Custom Amount / Keyboard**: > - Keyboard done label now uses `strings('confirm.edit_amount_done')` (text changed to “Continue”). > - Confirm button set to `ButtonSize.Lg`. > - **Tests & i18n**: > - Update tests to reference `strings('confirm.edit_amount_done')`. > - Update `locales/languages/en.json`: `confirm.edit_amount_done` → "Continue". > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit dd2677c. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- 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** Upgrade Tron to `1.8.0` https://github.com/MetaMask/snap-tron-wallet/releases/tag/v1.8.0 * Confirmation UI (MetaMask/snap-tron-wallet#86) (MetaMask/snap-tron-wallet#86) * Transactions analytics (MetaMask/snap-tron-wallet#90) * Add `from` and `to` to confirmation (MetaMask/snap-tron-wallet#88) <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> ## **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: feat: Tron send confirmation UI ## **Related issues** Fixes: ## **Manual testing steps** ```gherkin Feature: my feature name Scenario: user [verb for user action] Given [describe expected initial app state] When user [verb for user action] Then [describe expected outcome] ``` ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [ ] 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). - [ ] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] 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] > Upgrade dependency `@metamask/tron-wallet-snap` from `^1.7.2` to `^1.8.0` and update lockfile. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 4dae798. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- 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** <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> Updates bitcoin to 1.6.0, which updates from and to fields in the confirmation modal. ## **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: Adds `from` and `to` to Bitcoin confirmation UI ## **Related issues** Fixes: MetaMask/metamask-extension#37845 ## **Manual testing steps** ```gherkin Feature: my feature name Scenario: user [verb for user action] Given [describe expected initial app state] When user [verb for user action] Then [describe expected outcome] ``` ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [ ] 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). - [ ] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] 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] > Updates dependency `@metamask/bitcoin-wallet-snap` from `^1.5.0` to `^1.6.0`. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 9010905. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
## **Description** This PR allows users to add an account to their rewards program, logic is like this: - GIVEN I have an active subscription but the current address is not opted in - AND the current address is eligible to be added (not a Bitcoin / Tron / hardware wallet / Snap account) - I can add the current address in one click / tap and then see the estimated points then users will see the rewards row but with a cta that allows them to add the active account address to the active subscription. ## **Changelog** CHANGELOG entry: allow add account in swap flow ## **Related issues** Fixes: https://consensyssoftware.atlassian.net/browse/RWDS-799 ## **Screenshots/Recordings** ### **After** <img width="461" height="45" alt="Screenshot-79" src="https://github.com/user-attachments/assets/973c8bb9-e2da-4aca-a880-405a04fed5d1" /> --- <img width="476" height="100" alt="Screenshot-82" src="https://github.com/user-attachments/assets/413aa101-6514-4d5e-b2fb-348dfcf7afd6" /> ## **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** - [x] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [x] 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] > Adds a Rewards “Add account” CTA to the Bridge quote details, introduces a linking hook/component, updates rewards logic, and adds comprehensive tests, assets, and strings. > > - **Bridge | UI**: > - `QuoteDetailsCard`: Shows Rewards row; when not opted-in displays `AddRewardsAccount` CTA, otherwise renders `RewardPointsAnimation`. Adds `bridge-rewards-row` test ID and uses fade-in image mock. > - **Rewards**: > - New `useLinkAccountAddress` hook (metrics, toasts) and `AddRewardsAccount` component to link current account to Rewards. > - `useRewards`: gates by `getFirstSubscriptionId`, exposes `accountOptedIn`, shows row if opt-in is supported, subscribes to `RewardsController:accountLinked`, refines deps. > - **Tests**: > - New/expanded tests for `QuoteDetailsCard`, `useRewards`, `AddRewardsAccount`, and `useLinkAccountAddress`; updates BridgeView tests/mocks (adds `controllerMessenger.subscribe/unsubscribe`, image mocks). > - **Assets/Locales**: > - Adds rewards points SVG icon and `rewards.link_account_group.link_account_address_error` string. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit bfa1421. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
See Commits and Changes for more details.
Created by
pull[bot] (v2.0.0-alpha.4)
Can you help keep this open source service alive? 💖 Please sponsor : )