From 210578635f96eb6479099a3010eeddee1619a176 Mon Sep 17 00:00:00 2001 From: MetaMask Bot Date: Tue, 19 Apr 2022 20:55:01 +0000 Subject: [PATCH 01/10] Version v10.14.0 --- CHANGELOG.md | 104 ++++++++++++++++++++++++++++++++++++++++++++++++++- package.json | 2 +- 2 files changed, 104 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b0dbe5484..c58e7087a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,107 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [10.14.0] +### Uncategorized +- Sync `develop` with `master` ([#14477](https://github.com/MetaMask/metamask-extension/pull/14477)) +- Merge remote-tracking branch 'origin/develop' into master-sync +- Docs - segment metrics ([#14435](https://github.com/MetaMask/metamask-extension/pull/14435)) +- Add snaps view search ([#14419](https://github.com/MetaMask/metamask-extension/pull/14419)) +- Run main, flask and beta in sequence in generate-lavamoat-policies.sh ([#14470](https://github.com/MetaMask/metamask-extension/pull/14470)) +- Modify import SRP page ([#14425](https://github.com/MetaMask/metamask-extension/pull/14425)) +- Dark Mode: Implement Metrics ([#14455](https://github.com/MetaMask/metamask-extension/pull/14455)) +- HoldToRevealButton component ([#13785](https://github.com/MetaMask/metamask-extension/pull/13785)) +- e2e test import json file as import account strategy ([#14449](https://github.com/MetaMask/metamask-extension/pull/14449)) +- MetaMetrics: Identify 'number_of_tokens' user trait ([#14427](https://github.com/MetaMask/metamask-extension/pull/14427)) +- MetaMetrics: Identify 'nft_autodetection_enabled' & 'opensea_api_enabled' ([#14367](https://github.com/MetaMask/metamask-extension/pull/14367)) +- Swaps: Sort "token_from" dropdown tokens by their fiat value first and "token_to" by top tokens ([#14436](https://github.com/MetaMask/metamask-extension/pull/14436)) +- Update segment instantiation check. Only check if SEGMENT_WRITE_KEY exists ([#14407](https://github.com/MetaMask/metamask-extension/pull/14407)) +- Enhanced Gas Fee UI : Fix gas values overlaping with labels ([#14392](https://github.com/MetaMask/metamask-extension/pull/14392)) +- Fix speed-up/cancel: don't update existing transaction data ([#14355](https://github.com/MetaMask/metamask-extension/pull/14355)) +- Disable Swaps on Rinkeby for production ([#14372](https://github.com/MetaMask/metamask-extension/pull/14372)) +- enable skipped test ([#14378](https://github.com/MetaMask/metamask-extension/pull/14378)) +- unblock ci: update vuln deps + fix npm registry for snaps firefox ([#14437](https://github.com/MetaMask/metamask-extension/pull/14437)) +- track address book usage ([#14382](https://github.com/MetaMask/metamask-extension/pull/14382)) +- Update DetectTokenController for token detection V2 ([#14216](https://github.com/MetaMask/metamask-extension/pull/14216)) +- E2e settings search msgs ([#14386](https://github.com/MetaMask/metamask-extension/pull/14386)) +- Remove duplicate gas simulation error messages ([#14409](https://github.com/MetaMask/metamask-extension/pull/14409)) +- Swap : Fix undefined icon url ([#14411](https://github.com/MetaMask/metamask-extension/pull/14411)) +- Remove unused function ([#14423](https://github.com/MetaMask/metamask-extension/pull/14423)) +- e2e test for swaps ([#14393](https://github.com/MetaMask/metamask-extension/pull/14393)) +- User trait - number of nft collections ([#14377](https://github.com/MetaMask/metamask-extension/pull/14377)) +- Use correct casing for "learn more" ([#14412](https://github.com/MetaMask/metamask-extension/pull/14412)) +- E2e infura requests ([#14394](https://github.com/MetaMask/metamask-extension/pull/14394)) +- Dark Mode : Fix connected account permission icon color ([#14406](https://github.com/MetaMask/metamask-extension/pull/14406)) +- Update `crowdin/github-action` ([#14381](https://github.com/MetaMask/metamask-extension/pull/14381)) +- Updating info ActionableMessage type to default ([#14385](https://github.com/MetaMask/metamask-extension/pull/14385)) +- Update ganache ([#14375](https://github.com/MetaMask/metamask-extension/pull/14375)) +- Storybook housekeeping 🧹 ([#14331](https://github.com/MetaMask/metamask-extension/pull/14331)) +- Settings search refactor ([#14350](https://github.com/MetaMask/metamask-extension/pull/14350)) +- Update token detection logic to only control auto-detection ([#14251](https://github.com/MetaMask/metamask-extension/pull/14251)) +- Remove `base_url` from crowdin.yml ([#14364](https://github.com/MetaMask/metamask-extension/pull/14364)) +- Master sync following v10.12.4 ([#14373](https://github.com/MetaMask/metamask-extension/pull/14373)) +- TabBar: prevent text from wrapping early ([#14368](https://github.com/MetaMask/metamask-extension/pull/14368)) +- Merge remote-tracking branch 'origin/develop' into master-sync +- Feature Flag Swap API mock ([#14353](https://github.com/MetaMask/metamask-extension/pull/14353)) +- Settings:TabBar: Fix text wrap style ([#14348](https://github.com/MetaMask/metamask-extension/pull/14348)) +- Dark Mode: What's New Announcement ([#14346](https://github.com/MetaMask/metamask-extension/pull/14346)) +- Dark Mode: Fix Actionable Messages ([#14361](https://github.com/MetaMask/metamask-extension/pull/14361)) +- Fix imported component name and change size proptype type to string ([#14237](https://github.com/MetaMask/metamask-extension/pull/14237)) +- stx-controller-v1.10.0 ([#14352](https://github.com/MetaMask/metamask-extension/pull/14352)) +- Fix the close button in the speed up and cancel popovers ([#14356](https://github.com/MetaMask/metamask-extension/pull/14356)) +- track rpc method usage ([#14269](https://github.com/MetaMask/metamask-extension/pull/14269)) +- Restore `version` missing from certain build steps ([#14344](https://github.com/MetaMask/metamask-extension/pull/14344)) +- Add snap version to details page ([#14110](https://github.com/MetaMask/metamask-extension/pull/14110)) +- Improving identicon settings accessibility ([#13760](https://github.com/MetaMask/metamask-extension/pull/13760)) +- Add e2e testcase for Settings Search functionality ([#14259](https://github.com/MetaMask/metamask-extension/pull/14259)) +- Replace `ReadOnlyInput` ([#14330](https://github.com/MetaMask/metamask-extension/pull/14330)) +- update chromedriver and chrome binary to v100 ([#14337](https://github.com/MetaMask/metamask-extension/pull/14337)) +- Mock token list ([#14338](https://github.com/MetaMask/metamask-extension/pull/14338)) +- Fix a few Snap state issues ([#14339](https://github.com/MetaMask/metamask-extension/pull/14339)) +- Updatin contract deployment text label to be darker ([#14333](https://github.com/MetaMask/metamask-extension/pull/14333)) +- Update eth-ledger-bridge-keyring to 0.11.0 ([#14317](https://github.com/MetaMask/metamask-extension/pull/14317)) +- Swaps timer improvements, optional refresh rates and fix for a notification UI ([#14300](https://github.com/MetaMask/metamask-extension/pull/14300)) +- Token Details component for Tokens Detected page ([#14169](https://github.com/MetaMask/metamask-extension/pull/14169)) +- color fix for hover on swaps quote ([#14334](https://github.com/MetaMask/metamask-extension/pull/14334)) +- Dark Mode: Fix QR display ([#14312](https://github.com/MetaMask/metamask-extension/pull/14312)) +- Renamed metametrics.new.js to metametrics.js ([#14327](https://github.com/MetaMask/metamask-extension/pull/14327)) +- snaps-skunkworks@0.10.7 ([#14323](https://github.com/MetaMask/metamask-extension/pull/14323)) +- Token Value component for Tokens Detected page ([#14274](https://github.com/MetaMask/metamask-extension/pull/14274)) +- Fix Buy Ether via Moonpay and Wyre actions ([#14322](https://github.com/MetaMask/metamask-extension/pull/14322)) +- Fix/14302 about fox logo ([#14308](https://github.com/MetaMask/metamask-extension/pull/14308)) +- Fix/14303 show private keys ([#14314](https://github.com/MetaMask/metamask-extension/pull/14314)) +- Fixing account details label colors ([#14315](https://github.com/MetaMask/metamask-extension/pull/14315)) +- Update metamaskbot-build-announce.js ([#14320](https://github.com/MetaMask/metamask-extension/pull/14320)) +- Fix/14230 dark mode fixes ([#14305](https://github.com/MetaMask/metamask-extension/pull/14305)) +- MetaMetrics: add segment.identify ([#14195](https://github.com/MetaMask/metamask-extension/pull/14195)) +- add/switch chain e2e tests ([#14275](https://github.com/MetaMask/metamask-extension/pull/14275)) +- Convert knobs and actions to controls/args for CountdownTimer ([#14222](https://github.com/MetaMask/metamask-extension/pull/14222)) +- Convert UrlIcon knobs and actions to controls / args ([#13981](https://github.com/MetaMask/metamask-extension/pull/13981)) +- Deleted the old metametrics.js ([#14292](https://github.com/MetaMask/metamask-extension/pull/14292)) +- Mįgrated list item stories from addon knobs to use controls. ([#13627](https://github.com/MetaMask/metamask-extension/pull/13627)) +- Updating design-tokens to 1.5.1 ([#14286](https://github.com/MetaMask/metamask-extension/pull/14286)) +- Redesign screen/page "List of networks" ([#13560](https://github.com/MetaMask/metamask-extension/pull/13560)) +- Adjusting the padding in Alert / error state ([#13819](https://github.com/MetaMask/metamask-extension/pull/13819)) +- Swaps select quote highlight fix ([#14270](https://github.com/MetaMask/metamask-extension/pull/14270)) +- Enable Token search functionality on supported networks ([#14034](https://github.com/MetaMask/metamask-extension/pull/14034)) +- Enable Token Detection by default on supported networks ([#14002](https://github.com/MetaMask/metamask-extension/pull/14002)) +- Sync `develop` with `master` ([#14289](https://github.com/MetaMask/metamask-extension/pull/14289)) +- Add asset_type to 'Tokens Added' event. ([#14252](https://github.com/MetaMask/metamask-extension/pull/14252)) +- Merge remote-tracking branch 'origin/develop' into master-sync +- Dark Mode: Remove unwanted background for price quote ([#14278](https://github.com/MetaMask/metamask-extension/pull/14278)) +- Dark Mode: Fix colors in toggle button ([#14280](https://github.com/MetaMask/metamask-extension/pull/14280)) +- Ensure proper color for swaps edit link ([#14273](https://github.com/MetaMask/metamask-extension/pull/14273)) +- Dark Mode: Ensure actionable message button colors are the same color as previously ([#14271](https://github.com/MetaMask/metamask-extension/pull/14271)) +- Add token standard to Token Added event. ([#14253](https://github.com/MetaMask/metamask-extension/pull/14253)) +- Token Aggregators component for Tokens Detected page ([#14157](https://github.com/MetaMask/metamask-extension/pull/14157)) +- Ensure Metafox follows cursor on Fetching quotes screen ([#14261](https://github.com/MetaMask/metamask-extension/pull/14261)) +- TransactionsControllerTest: catch uncaught errors ([#14196](https://github.com/MetaMask/metamask-extension/pull/14196)) +- GasModalPageContainer story: convert knobs and actions to controls / args ([#13516](https://github.com/MetaMask/metamask-extension/pull/13516)) +- Show STX switch for wrapping / unwrapping ([#14225](https://github.com/MetaMask/metamask-extension/pull/14225)) +- Change over ImportToken stories to use controls instead of knobs, update props in stories ([#14246](https://github.com/MetaMask/metamask-extension/pull/14246)) +- Change over FeeCard stories to use controls instead of knobs, update props in stories ([#13766](https://github.com/MetaMask/metamask-extension/pull/13766)) +- Update What's new screen with Token Detection information ([#14124](https://github.com/MetaMask/metamask-extension/pull/14124)) + ## [10.13.0] ### Added - Add a new fiat onboarding option via MoonPay ([#13934](https://github.com/MetaMask/metamask-extension/pull/13934)) @@ -2885,7 +2986,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Uncategorized - Added the ability to restore accounts from seed words. -[Unreleased]: https://github.com/MetaMask/metamask-extension/compare/v10.13.0...HEAD +[Unreleased]: https://github.com/MetaMask/metamask-extension/compare/v10.14.0...HEAD +[10.14.0]: https://github.com/MetaMask/metamask-extension/compare/v10.13.0...v10.14.0 [10.13.0]: https://github.com/MetaMask/metamask-extension/compare/v10.12.4...v10.13.0 [10.12.4]: https://github.com/MetaMask/metamask-extension/compare/v10.12.3...v10.12.4 [10.12.3]: https://github.com/MetaMask/metamask-extension/compare/v10.12.2...v10.12.3 diff --git a/package.json b/package.json index 62d0b37e2..63f811e33 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "metamask-crx", - "version": "10.13.0", + "version": "10.14.0", "private": true, "repository": { "type": "git", From ce77be6402675886f8a8655a94f1822570a4072a Mon Sep 17 00:00:00 2001 From: ryanml Date: Wed, 20 Apr 2022 15:36:42 -0700 Subject: [PATCH 02/10] [skip e2e] Updating changelog for v10.14.0 (#14487) --- CHANGELOG.md | 119 +++++++++------------------------------------------ 1 file changed, 21 insertions(+), 98 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c58e7087a..7d4bcd869 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,105 +7,28 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] ## [10.14.0] -### Uncategorized -- Sync `develop` with `master` ([#14477](https://github.com/MetaMask/metamask-extension/pull/14477)) -- Merge remote-tracking branch 'origin/develop' into master-sync -- Docs - segment metrics ([#14435](https://github.com/MetaMask/metamask-extension/pull/14435)) -- Add snaps view search ([#14419](https://github.com/MetaMask/metamask-extension/pull/14419)) -- Run main, flask and beta in sequence in generate-lavamoat-policies.sh ([#14470](https://github.com/MetaMask/metamask-extension/pull/14470)) -- Modify import SRP page ([#14425](https://github.com/MetaMask/metamask-extension/pull/14425)) -- Dark Mode: Implement Metrics ([#14455](https://github.com/MetaMask/metamask-extension/pull/14455)) -- HoldToRevealButton component ([#13785](https://github.com/MetaMask/metamask-extension/pull/13785)) -- e2e test import json file as import account strategy ([#14449](https://github.com/MetaMask/metamask-extension/pull/14449)) -- MetaMetrics: Identify 'number_of_tokens' user trait ([#14427](https://github.com/MetaMask/metamask-extension/pull/14427)) -- MetaMetrics: Identify 'nft_autodetection_enabled' & 'opensea_api_enabled' ([#14367](https://github.com/MetaMask/metamask-extension/pull/14367)) -- Swaps: Sort "token_from" dropdown tokens by their fiat value first and "token_to" by top tokens ([#14436](https://github.com/MetaMask/metamask-extension/pull/14436)) -- Update segment instantiation check. Only check if SEGMENT_WRITE_KEY exists ([#14407](https://github.com/MetaMask/metamask-extension/pull/14407)) -- Enhanced Gas Fee UI : Fix gas values overlaping with labels ([#14392](https://github.com/MetaMask/metamask-extension/pull/14392)) -- Fix speed-up/cancel: don't update existing transaction data ([#14355](https://github.com/MetaMask/metamask-extension/pull/14355)) -- Disable Swaps on Rinkeby for production ([#14372](https://github.com/MetaMask/metamask-extension/pull/14372)) -- enable skipped test ([#14378](https://github.com/MetaMask/metamask-extension/pull/14378)) -- unblock ci: update vuln deps + fix npm registry for snaps firefox ([#14437](https://github.com/MetaMask/metamask-extension/pull/14437)) -- track address book usage ([#14382](https://github.com/MetaMask/metamask-extension/pull/14382)) -- Update DetectTokenController for token detection V2 ([#14216](https://github.com/MetaMask/metamask-extension/pull/14216)) -- E2e settings search msgs ([#14386](https://github.com/MetaMask/metamask-extension/pull/14386)) -- Remove duplicate gas simulation error messages ([#14409](https://github.com/MetaMask/metamask-extension/pull/14409)) -- Swap : Fix undefined icon url ([#14411](https://github.com/MetaMask/metamask-extension/pull/14411)) -- Remove unused function ([#14423](https://github.com/MetaMask/metamask-extension/pull/14423)) -- e2e test for swaps ([#14393](https://github.com/MetaMask/metamask-extension/pull/14393)) -- User trait - number of nft collections ([#14377](https://github.com/MetaMask/metamask-extension/pull/14377)) -- Use correct casing for "learn more" ([#14412](https://github.com/MetaMask/metamask-extension/pull/14412)) -- E2e infura requests ([#14394](https://github.com/MetaMask/metamask-extension/pull/14394)) -- Dark Mode : Fix connected account permission icon color ([#14406](https://github.com/MetaMask/metamask-extension/pull/14406)) -- Update `crowdin/github-action` ([#14381](https://github.com/MetaMask/metamask-extension/pull/14381)) -- Updating info ActionableMessage type to default ([#14385](https://github.com/MetaMask/metamask-extension/pull/14385)) -- Update ganache ([#14375](https://github.com/MetaMask/metamask-extension/pull/14375)) -- Storybook housekeeping 🧹 ([#14331](https://github.com/MetaMask/metamask-extension/pull/14331)) -- Settings search refactor ([#14350](https://github.com/MetaMask/metamask-extension/pull/14350)) -- Update token detection logic to only control auto-detection ([#14251](https://github.com/MetaMask/metamask-extension/pull/14251)) -- Remove `base_url` from crowdin.yml ([#14364](https://github.com/MetaMask/metamask-extension/pull/14364)) -- Master sync following v10.12.4 ([#14373](https://github.com/MetaMask/metamask-extension/pull/14373)) -- TabBar: prevent text from wrapping early ([#14368](https://github.com/MetaMask/metamask-extension/pull/14368)) -- Merge remote-tracking branch 'origin/develop' into master-sync -- Feature Flag Swap API mock ([#14353](https://github.com/MetaMask/metamask-extension/pull/14353)) -- Settings:TabBar: Fix text wrap style ([#14348](https://github.com/MetaMask/metamask-extension/pull/14348)) -- Dark Mode: What's New Announcement ([#14346](https://github.com/MetaMask/metamask-extension/pull/14346)) -- Dark Mode: Fix Actionable Messages ([#14361](https://github.com/MetaMask/metamask-extension/pull/14361)) -- Fix imported component name and change size proptype type to string ([#14237](https://github.com/MetaMask/metamask-extension/pull/14237)) -- stx-controller-v1.10.0 ([#14352](https://github.com/MetaMask/metamask-extension/pull/14352)) -- Fix the close button in the speed up and cancel popovers ([#14356](https://github.com/MetaMask/metamask-extension/pull/14356)) -- track rpc method usage ([#14269](https://github.com/MetaMask/metamask-extension/pull/14269)) -- Restore `version` missing from certain build steps ([#14344](https://github.com/MetaMask/metamask-extension/pull/14344)) -- Add snap version to details page ([#14110](https://github.com/MetaMask/metamask-extension/pull/14110)) +### Added +- Dark Mode: Add What's New Announcement ([#14346](https://github.com/MetaMask/metamask-extension/pull/14346)) +- **[FLASK]** Add snap version to details page ([#14110](https://github.com/MetaMask/metamask-extension/pull/14110)) +- **[FLASK]** Add support for searching installed snaps in Settings ([#14419](https://github.com/MetaMask/metamask-extension/pull/14419)) + +### Changed +- Disable Swaps on Rinkeby ([#14372](https://github.com/MetaMask/metamask-extension/pull/14372)) +- Swaps: Asset sorting improvements ([#14436](https://github.com/MetaMask/metamask-extension/pull/14436)) + - In 'Swap from' field: tokens are sorted by user ownership and fiat value + - In 'Swap to' field: tokens are sorted by top assets +- Redesign Networks view in Settings ([#13560](https://github.com/MetaMask/metamask-extension/pull/13560)) + - Adding network search functionality +- Show Smart Transaction switch when wrapping/unwrapping ([#14225](https://github.com/MetaMask/metamask-extension/pull/14225)) + +### Fixed - Improving identicon settings accessibility ([#13760](https://github.com/MetaMask/metamask-extension/pull/13760)) -- Add e2e testcase for Settings Search functionality ([#14259](https://github.com/MetaMask/metamask-extension/pull/14259)) -- Replace `ReadOnlyInput` ([#14330](https://github.com/MetaMask/metamask-extension/pull/14330)) -- update chromedriver and chrome binary to v100 ([#14337](https://github.com/MetaMask/metamask-extension/pull/14337)) -- Mock token list ([#14338](https://github.com/MetaMask/metamask-extension/pull/14338)) -- Fix a few Snap state issues ([#14339](https://github.com/MetaMask/metamask-extension/pull/14339)) -- Updatin contract deployment text label to be darker ([#14333](https://github.com/MetaMask/metamask-extension/pull/14333)) -- Update eth-ledger-bridge-keyring to 0.11.0 ([#14317](https://github.com/MetaMask/metamask-extension/pull/14317)) -- Swaps timer improvements, optional refresh rates and fix for a notification UI ([#14300](https://github.com/MetaMask/metamask-extension/pull/14300)) -- Token Details component for Tokens Detected page ([#14169](https://github.com/MetaMask/metamask-extension/pull/14169)) -- color fix for hover on swaps quote ([#14334](https://github.com/MetaMask/metamask-extension/pull/14334)) -- Dark Mode: Fix QR display ([#14312](https://github.com/MetaMask/metamask-extension/pull/14312)) -- Renamed metametrics.new.js to metametrics.js ([#14327](https://github.com/MetaMask/metamask-extension/pull/14327)) -- snaps-skunkworks@0.10.7 ([#14323](https://github.com/MetaMask/metamask-extension/pull/14323)) -- Token Value component for Tokens Detected page ([#14274](https://github.com/MetaMask/metamask-extension/pull/14274)) -- Fix Buy Ether via Moonpay and Wyre actions ([#14322](https://github.com/MetaMask/metamask-extension/pull/14322)) -- Fix/14302 about fox logo ([#14308](https://github.com/MetaMask/metamask-extension/pull/14308)) -- Fix/14303 show private keys ([#14314](https://github.com/MetaMask/metamask-extension/pull/14314)) -- Fixing account details label colors ([#14315](https://github.com/MetaMask/metamask-extension/pull/14315)) -- Update metamaskbot-build-announce.js ([#14320](https://github.com/MetaMask/metamask-extension/pull/14320)) -- Fix/14230 dark mode fixes ([#14305](https://github.com/MetaMask/metamask-extension/pull/14305)) -- MetaMetrics: add segment.identify ([#14195](https://github.com/MetaMask/metamask-extension/pull/14195)) -- add/switch chain e2e tests ([#14275](https://github.com/MetaMask/metamask-extension/pull/14275)) -- Convert knobs and actions to controls/args for CountdownTimer ([#14222](https://github.com/MetaMask/metamask-extension/pull/14222)) -- Convert UrlIcon knobs and actions to controls / args ([#13981](https://github.com/MetaMask/metamask-extension/pull/13981)) -- Deleted the old metametrics.js ([#14292](https://github.com/MetaMask/metamask-extension/pull/14292)) -- Mįgrated list item stories from addon knobs to use controls. ([#13627](https://github.com/MetaMask/metamask-extension/pull/13627)) -- Updating design-tokens to 1.5.1 ([#14286](https://github.com/MetaMask/metamask-extension/pull/14286)) -- Redesign screen/page "List of networks" ([#13560](https://github.com/MetaMask/metamask-extension/pull/13560)) -- Adjusting the padding in Alert / error state ([#13819](https://github.com/MetaMask/metamask-extension/pull/13819)) -- Swaps select quote highlight fix ([#14270](https://github.com/MetaMask/metamask-extension/pull/14270)) -- Enable Token search functionality on supported networks ([#14034](https://github.com/MetaMask/metamask-extension/pull/14034)) -- Enable Token Detection by default on supported networks ([#14002](https://github.com/MetaMask/metamask-extension/pull/14002)) -- Sync `develop` with `master` ([#14289](https://github.com/MetaMask/metamask-extension/pull/14289)) -- Add asset_type to 'Tokens Added' event. ([#14252](https://github.com/MetaMask/metamask-extension/pull/14252)) -- Merge remote-tracking branch 'origin/develop' into master-sync -- Dark Mode: Remove unwanted background for price quote ([#14278](https://github.com/MetaMask/metamask-extension/pull/14278)) -- Dark Mode: Fix colors in toggle button ([#14280](https://github.com/MetaMask/metamask-extension/pull/14280)) -- Ensure proper color for swaps edit link ([#14273](https://github.com/MetaMask/metamask-extension/pull/14273)) -- Dark Mode: Ensure actionable message button colors are the same color as previously ([#14271](https://github.com/MetaMask/metamask-extension/pull/14271)) -- Add token standard to Token Added event. ([#14253](https://github.com/MetaMask/metamask-extension/pull/14253)) -- Token Aggregators component for Tokens Detected page ([#14157](https://github.com/MetaMask/metamask-extension/pull/14157)) -- Ensure Metafox follows cursor on Fetching quotes screen ([#14261](https://github.com/MetaMask/metamask-extension/pull/14261)) -- TransactionsControllerTest: catch uncaught errors ([#14196](https://github.com/MetaMask/metamask-extension/pull/14196)) -- GasModalPageContainer story: convert knobs and actions to controls / args ([#13516](https://github.com/MetaMask/metamask-extension/pull/13516)) -- Show STX switch for wrapping / unwrapping ([#14225](https://github.com/MetaMask/metamask-extension/pull/14225)) -- Change over ImportToken stories to use controls instead of knobs, update props in stories ([#14246](https://github.com/MetaMask/metamask-extension/pull/14246)) -- Change over FeeCard stories to use controls instead of knobs, update props in stories ([#13766](https://github.com/MetaMask/metamask-extension/pull/13766)) -- Update What's new screen with Token Detection information ([#14124](https://github.com/MetaMask/metamask-extension/pull/14124)) +- Enhanced Gas Fee UI: Fix gas values overlapping with labels ([#14392](https://github.com/MetaMask/metamask-extension/pull/14392)) +- Settings search improvements ([#14350](https://github.com/MetaMask/metamask-extension/pull/14350)) + - Allow ampersands in search input + - Fix duplicate entry issue in results +- Fix text wrapping issue in Settings search tabs ([#14368](https://github.com/MetaMask/metamask-extension/pull/14368)) +- Dark Mode: Fix button styles in dialog actions ([#14361](https://github.com/MetaMask/metamask-extension/pull/14361)) ## [10.13.0] ### Added From 617b7828a57342553b73f9701a52837e7d014039 Mon Sep 17 00:00:00 2001 From: Dan J Miller Date: Thu, 21 Apr 2022 13:49:34 -0230 Subject: [PATCH 03/10] Disable swaps whenever the environment is not development or testing, so that behaviour follows production for QA purposes (#14499) --- ui/selectors/selectors.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ui/selectors/selectors.js b/ui/selectors/selectors.js index c7bfe7f10..49dc9cccc 100644 --- a/ui/selectors/selectors.js +++ b/ui/selectors/selectors.js @@ -670,8 +670,10 @@ export function getSwapsDefaultToken(state) { export function getIsSwapsChain(state) { const chainId = getCurrentChainId(state); - const isProduction = process.env.METAMASK_ENVIRONMENT === 'production'; - return isProduction + const isNotDevelopment = + process.env.METAMASK_ENVIRONMENT !== 'development' || + process.env.METAMASK_ENVIRONMENT !== 'testing'; + return isNotDevelopment ? ALLOWED_PROD_SWAPS_CHAIN_IDS.includes(chainId) : ALLOWED_DEV_SWAPS_CHAIN_IDS.includes(chainId); } From 5b0d465d30e48955fbb8e833e0fff5ef6b9ecb3f Mon Sep 17 00:00:00 2001 From: Dan J Miller Date: Thu, 21 Apr 2022 14:18:03 -0230 Subject: [PATCH 04/10] Fix the alerts toggles in settings (#14498) --- ui/pages/settings/alerts-tab/alerts-tab.js | 1 + .../settings/alerts-tab/alerts-tab.test.js | 42 +++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 ui/pages/settings/alerts-tab/alerts-tab.test.js diff --git a/ui/pages/settings/alerts-tab/alerts-tab.js b/ui/pages/settings/alerts-tab/alerts-tab.js index 465f43a49..9eecef497 100644 --- a/ui/pages/settings/alerts-tab/alerts-tab.js +++ b/ui/pages/settings/alerts-tab/alerts-tab.js @@ -69,6 +69,7 @@ const AlertsTab = () => { {Object.entries(alertConfig).map( ([alertId, { title, description }], _) => ( ({ + setAlertEnabledness: (...args) => mockSetAlertEnabledness(...args), +})); + +describe('Alerts Tab', () => { + const store = configureMockStore([])({ + metamask: { + alertEnabledness: { + unconnectedAccount: false, + web3ShimUsage: false, + }, + }, + }); + + it('calls setAlertEnabledness with the correct params method when the toggles are clicked', () => { + renderWithProvider(, store); + + expect(mockSetAlertEnabledness.mock.calls).toHaveLength(0); + fireEvent.click(screen.getAllByRole('checkbox')[0]); + expect(mockSetAlertEnabledness.mock.calls).toHaveLength(1); + expect(mockSetAlertEnabledness.mock.calls[0][0]).toBe( + ALERT_TYPES.unconnectedAccount, + ); + expect(mockSetAlertEnabledness.mock.calls[0][1]).toBe(true); + + fireEvent.click(screen.getAllByRole('checkbox')[1]); + expect(mockSetAlertEnabledness.mock.calls).toHaveLength(2); + expect(mockSetAlertEnabledness.mock.calls[1][0]).toBe( + ALERT_TYPES.web3ShimUsage, + ); + expect(mockSetAlertEnabledness.mock.calls[1][1]).toBe(true); + }); +}); From c9b00541cd8d3d2406a34cc0ba6635f2edf89d7f Mon Sep 17 00:00:00 2001 From: ryanml Date: Thu, 21 Apr 2022 13:33:50 -0700 Subject: [PATCH 05/10] Updating lavamoat policies --- lavamoat/browserify/beta/policy.json | 3 +-- lavamoat/browserify/flask/policy.json | 3 +-- lavamoat/browserify/main/policy.json | 3 +-- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/lavamoat/browserify/beta/policy.json b/lavamoat/browserify/beta/policy.json index 7b93e1ecd..c343f5241 100644 --- a/lavamoat/browserify/beta/policy.json +++ b/lavamoat/browserify/beta/policy.json @@ -585,8 +585,7 @@ "console.log": true, "document.createElement": true, "document.head.appendChild": true, - "fetch": true, - "removeEventListener": true + "fetch": true }, "packages": { "@ethereumjs/tx": true, diff --git a/lavamoat/browserify/flask/policy.json b/lavamoat/browserify/flask/policy.json index de99bb329..5346933d0 100644 --- a/lavamoat/browserify/flask/policy.json +++ b/lavamoat/browserify/flask/policy.json @@ -585,8 +585,7 @@ "console.log": true, "document.createElement": true, "document.head.appendChild": true, - "fetch": true, - "removeEventListener": true + "fetch": true }, "packages": { "@ethereumjs/tx": true, diff --git a/lavamoat/browserify/main/policy.json b/lavamoat/browserify/main/policy.json index 7b93e1ecd..c343f5241 100644 --- a/lavamoat/browserify/main/policy.json +++ b/lavamoat/browserify/main/policy.json @@ -585,8 +585,7 @@ "console.log": true, "document.createElement": true, "document.head.appendChild": true, - "fetch": true, - "removeEventListener": true + "fetch": true }, "packages": { "@ethereumjs/tx": true, From 16fe8744a611160f0ef43c5d0850570141c40d6a Mon Sep 17 00:00:00 2001 From: Dan J Miller Date: Mon, 25 Apr 2022 15:04:44 -0230 Subject: [PATCH 06/10] Ensure network name in confirm page container is defined (#14520) --- .../confirm-page-container.component.js | 5 ++++- .../confirm-page-container.container.js | 3 +++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/ui/components/app/confirm-page-container/confirm-page-container.component.js b/ui/components/app/confirm-page-container/confirm-page-container.component.js index f011405b9..82d6d2c41 100644 --- a/ui/components/app/confirm-page-container/confirm-page-container.component.js +++ b/ui/components/app/confirm-page-container/confirm-page-container.component.js @@ -70,6 +70,7 @@ export default class ConfirmPageContainer extends Component { unapprovedTxCount: PropTypes.number, origin: PropTypes.string.isRequired, ethGasPriceWarning: PropTypes.string, + networkIdentifier: PropTypes.string, // Navigation totalTx: PropTypes.number, positionOfCurrentTx: PropTypes.number, @@ -151,6 +152,7 @@ export default class ConfirmPageContainer extends Component { nativeCurrency, showBuyModal, isBuyableChain, + networkIdentifier, } = this.props; const showAddToAddressDialog = @@ -164,7 +166,8 @@ export default class ConfirmPageContainer extends Component { currentTransaction.type === TRANSACTION_TYPES.DEPLOY_CONTRACT) && currentTransaction.txParams?.value === '0x0'; - const networkName = NETWORK_TO_NAME_MAP[currentTransaction.chainId]; + const networkName = + NETWORK_TO_NAME_MAP[currentTransaction.chainId] || networkIdentifier; const { t } = this.context; diff --git a/ui/components/app/confirm-page-container/confirm-page-container.container.js b/ui/components/app/confirm-page-container/confirm-page-container.container.js index 2ad758908..31b7d5cd9 100644 --- a/ui/components/app/confirm-page-container/confirm-page-container.container.js +++ b/ui/components/app/confirm-page-container/confirm-page-container.container.js @@ -3,6 +3,7 @@ import { getAccountsWithLabels, getAddressBookEntry, getIsBuyableChain, + getNetworkIdentifier, } from '../../../selectors'; import { showModal } from '../../../store/actions'; import ConfirmPageContainer from './confirm-page-container.component'; @@ -11,6 +12,7 @@ function mapStateToProps(state, ownProps) { const to = ownProps.toAddress; const isBuyableChain = getIsBuyableChain(state); const contact = getAddressBookEntry(state, to); + const networkIdentifier = getNetworkIdentifier(state); return { isBuyableChain, contact, @@ -19,6 +21,7 @@ function mapStateToProps(state, ownProps) { .map((accountWithLabel) => accountWithLabel.address) .includes(to), to, + networkIdentifier, }; } From 9cea6f57ef619aaedfb6f8b6d2f556c15eb5bce9 Mon Sep 17 00:00:00 2001 From: ryanml Date: Tue, 26 Apr 2022 09:24:22 -0700 Subject: [PATCH 07/10] Revert "Dark Mode: What's New Announcement (#14346)" This reverts commit af963d7f7b127923661ff100536c5032c0579ba0. --- app/_locales/en/messages.json | 9 --------- app/images/darkmode-banner.png | Bin 22646 -> 0 bytes shared/notifications/index.js | 17 ----------------- test/e2e/fixtures/address-entry/state.json | 3 --- test/e2e/fixtures/connected-state/state.json | 3 --- test/e2e/fixtures/custom-rpc/state.json | 3 --- test/e2e/fixtures/custom-token/state.json | 3 --- test/e2e/fixtures/eip-1559-v2-dapp/state.json | 3 --- test/e2e/fixtures/eip-1559-v2/state.json | 3 --- test/e2e/fixtures/import-ui/state.json | 3 --- test/e2e/fixtures/imported-account/state.json | 3 --- test/e2e/fixtures/localization/state.json | 3 --- test/e2e/fixtures/metrics-enabled/state.json | 3 --- .../fixtures/navigate-transactions/state.json | 3 --- test/e2e/fixtures/onboarding/state.json | 7 ------- test/e2e/fixtures/send-edit-v2/state.json | 3 --- test/e2e/fixtures/send-edit/state.json | 3 --- test/e2e/fixtures/threebox-enabled/state.json | 3 --- .../app/whats-new-popup/whats-new-popup.js | 5 ----- ui/selectors/selectors.js | 1 - 20 files changed, 81 deletions(-) delete mode 100644 app/images/darkmode-banner.png diff --git a/app/_locales/en/messages.json b/app/_locales/en/messages.json index 7a7334181..27b711cd9 100644 --- a/app/_locales/en/messages.json +++ b/app/_locales/en/messages.json @@ -2131,15 +2131,6 @@ "notifications11Title": { "message": "Scam and security risks" }, - "notifications12ActionText": { - "message": "Enable dark mode" - }, - "notifications12Description": { - "message": "Dark Mode will be enabled for new users depending on their system preferences. For existing users, enable Dark Mode manually under Settings -> Experimental." - }, - "notifications12Title": { - "message": "Wen dark mode? Now dark mode! 🕶️🦊" - }, "notifications1Description": { "message": "MetaMask Mobile users can now swap tokens inside their mobile wallet. Scan the QR code to get the mobile app and start swapping.", "description": "Description of a notification in the 'See What's New' popup. Describes the swapping on mobile feature." diff --git a/app/images/darkmode-banner.png b/app/images/darkmode-banner.png deleted file mode 100644 index 7f72b312828ad37092980bc88b64e4e1d4398707..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22646 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 { @@ -173,14 +165,5 @@ export const getTranslatedUINoficiations = (t, locale) => { new Date(UI_NOTIFICATIONS[11].date), ), }, - 12: { - ...UI_NOTIFICATIONS[12], - title: t('notifications12Title'), - description: t('notifications12Description'), - actionText: t('notifications12ActionText'), - date: new Intl.DateTimeFormat(formattedLocale).format( - new Date(UI_NOTIFICATIONS[12].date), - ), - }, }; }; diff --git a/test/e2e/fixtures/address-entry/state.json b/test/e2e/fixtures/address-entry/state.json index 96b17cdb1..59da933e5 100644 --- a/test/e2e/fixtures/address-entry/state.json +++ b/test/e2e/fixtures/address-entry/state.json @@ -66,9 +66,6 @@ }, "8": { "isShown": true - }, - "12": { - "isShown": true } } }, diff --git a/test/e2e/fixtures/connected-state/state.json b/test/e2e/fixtures/connected-state/state.json index 4d48df472..ccc9ab82d 100644 --- a/test/e2e/fixtures/connected-state/state.json +++ b/test/e2e/fixtures/connected-state/state.json @@ -56,9 +56,6 @@ }, "8": { "isShown": true - }, - "12": { - "isShown": true } } }, diff --git a/test/e2e/fixtures/custom-rpc/state.json b/test/e2e/fixtures/custom-rpc/state.json index 222eb0159..43319cd60 100644 --- a/test/e2e/fixtures/custom-rpc/state.json +++ b/test/e2e/fixtures/custom-rpc/state.json @@ -52,9 +52,6 @@ }, "8": { "isShown": true - }, - "12": { - "isShown": true } } }, diff --git a/test/e2e/fixtures/custom-token/state.json b/test/e2e/fixtures/custom-token/state.json index ae1fcd1b4..da6098fcf 100644 --- a/test/e2e/fixtures/custom-token/state.json +++ b/test/e2e/fixtures/custom-token/state.json @@ -70,9 +70,6 @@ "notifications": { "8": { "isShown": true - }, - "12": { - "isShown": true } } }, diff --git a/test/e2e/fixtures/eip-1559-v2-dapp/state.json b/test/e2e/fixtures/eip-1559-v2-dapp/state.json index 839484240..3e29d737e 100644 --- a/test/e2e/fixtures/eip-1559-v2-dapp/state.json +++ b/test/e2e/fixtures/eip-1559-v2-dapp/state.json @@ -53,9 +53,6 @@ }, "8": { "isShown": true - }, - "12": { - "isShown": true } } }, diff --git a/test/e2e/fixtures/eip-1559-v2/state.json b/test/e2e/fixtures/eip-1559-v2/state.json index 0c79d8c61..452c896c3 100644 --- a/test/e2e/fixtures/eip-1559-v2/state.json +++ b/test/e2e/fixtures/eip-1559-v2/state.json @@ -53,9 +53,6 @@ }, "8": { "isShown": true - }, - "12": { - "isShown": true } } }, diff --git a/test/e2e/fixtures/import-ui/state.json b/test/e2e/fixtures/import-ui/state.json index 20c6bf87c..75aa4e7da 100644 --- a/test/e2e/fixtures/import-ui/state.json +++ b/test/e2e/fixtures/import-ui/state.json @@ -107,9 +107,6 @@ }, "8": { "isShown": true - }, - "12": { - "isShown": true } } }, diff --git a/test/e2e/fixtures/imported-account/state.json b/test/e2e/fixtures/imported-account/state.json index cb5c96950..c6e2f4a8e 100644 --- a/test/e2e/fixtures/imported-account/state.json +++ b/test/e2e/fixtures/imported-account/state.json @@ -52,9 +52,6 @@ }, "8": { "isShown": true - }, - "12": { - "isShown": true } } }, diff --git a/test/e2e/fixtures/localization/state.json b/test/e2e/fixtures/localization/state.json index 4b32460b5..952a3a502 100644 --- a/test/e2e/fixtures/localization/state.json +++ b/test/e2e/fixtures/localization/state.json @@ -52,9 +52,6 @@ }, "8": { "isShown": true - }, - "12": { - "isShown": true } } }, diff --git a/test/e2e/fixtures/metrics-enabled/state.json b/test/e2e/fixtures/metrics-enabled/state.json index 43b345204..3b272611e 100644 --- a/test/e2e/fixtures/metrics-enabled/state.json +++ b/test/e2e/fixtures/metrics-enabled/state.json @@ -56,9 +56,6 @@ }, "8": { "isShown": true - }, - "12": { - "isShown": true } } }, diff --git a/test/e2e/fixtures/navigate-transactions/state.json b/test/e2e/fixtures/navigate-transactions/state.json index 963a846b4..6760e0d4f 100644 --- a/test/e2e/fixtures/navigate-transactions/state.json +++ b/test/e2e/fixtures/navigate-transactions/state.json @@ -52,9 +52,6 @@ }, "8": { "isShown": true - }, - "12": { - "isShown": true } } }, diff --git a/test/e2e/fixtures/onboarding/state.json b/test/e2e/fixtures/onboarding/state.json index 6a4c94b96..b0fbccd9a 100644 --- a/test/e2e/fixtures/onboarding/state.json +++ b/test/e2e/fixtures/onboarding/state.json @@ -26,13 +26,6 @@ }, "network": "1337" }, - "NotificationController": { - "notifications": { - "12": { - "isShown": true - } - } - }, "CurrencyController": { "conversionDate": 1617927806.941, "conversionRate": 2084.64, diff --git a/test/e2e/fixtures/send-edit-v2/state.json b/test/e2e/fixtures/send-edit-v2/state.json index 9de073c00..fe1a4390c 100644 --- a/test/e2e/fixtures/send-edit-v2/state.json +++ b/test/e2e/fixtures/send-edit-v2/state.json @@ -53,9 +53,6 @@ }, "8": { "isShown": true - }, - "12": { - "isShown": true } } }, diff --git a/test/e2e/fixtures/send-edit/state.json b/test/e2e/fixtures/send-edit/state.json index 1272fbd04..f538e00bf 100644 --- a/test/e2e/fixtures/send-edit/state.json +++ b/test/e2e/fixtures/send-edit/state.json @@ -53,9 +53,6 @@ }, "8": { "isShown": true - }, - "12": { - "isShown": true } } }, diff --git a/test/e2e/fixtures/threebox-enabled/state.json b/test/e2e/fixtures/threebox-enabled/state.json index 78b6f1226..565e8a122 100644 --- a/test/e2e/fixtures/threebox-enabled/state.json +++ b/test/e2e/fixtures/threebox-enabled/state.json @@ -63,9 +63,6 @@ }, "8": { "isShown": true - }, - "12": { - "isShown": true } } }, diff --git a/ui/components/app/whats-new-popup/whats-new-popup.js b/ui/components/app/whats-new-popup/whats-new-popup.js index 4d47ee262..bba492040 100644 --- a/ui/components/app/whats-new-popup/whats-new-popup.js +++ b/ui/components/app/whats-new-popup/whats-new-popup.js @@ -15,7 +15,6 @@ import { getSortedNotificationsToShow } from '../../../selectors'; import { BUILD_QUOTE_ROUTE, ADVANCED_ROUTE, - EXPERIMENTAL_ROUTE, } from '../../../helpers/constants/routes'; import { TYPOGRAPHY } from '../../../helpers/constants/design-system'; @@ -50,10 +49,6 @@ function getActionFunctionById(id, history) { updateViewedNotifications({ 10: true }); history.push(`${ADVANCED_ROUTE}#token-description`); }, - 12: () => { - updateViewedNotifications({ 12: true }); - history.push(EXPERIMENTAL_ROUTE); - }, }; return actionFunctions[id]; diff --git a/ui/selectors/selectors.js b/ui/selectors/selectors.js index 49dc9cccc..537ac5e31 100644 --- a/ui/selectors/selectors.js +++ b/ui/selectors/selectors.js @@ -751,7 +751,6 @@ function getAllowedNotificationIds(state) { 9: getIsMainnet(state), 10: Boolean(process.env.TOKEN_DETECTION_V2), 11: Boolean(process.env.TOKEN_DETECTION_V2), - 12: true, }; } From 71d0873dedd760010f25281047578bb7efb684c9 Mon Sep 17 00:00:00 2001 From: Guillaume Roux Date: Tue, 26 Apr 2022 21:08:14 +0200 Subject: [PATCH 08/10] Add token standard to custom token details (#14506) * use getTokenStandardAndDetails to get token standard * remove console.log and fix test * remove console.log --- ui/pages/confirm-import-token/confirm-import-token.js | 3 +-- ui/pages/import-token/import-token.component.js | 9 ++++++++- ui/pages/import-token/import-token.test.js | 1 + 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/ui/pages/confirm-import-token/confirm-import-token.js b/ui/pages/confirm-import-token/confirm-import-token.js index 54b3efb82..40f00b6ef 100644 --- a/ui/pages/confirm-import-token/confirm-import-token.js +++ b/ui/pages/confirm-import-token/confirm-import-token.js @@ -13,7 +13,6 @@ import { MetaMetricsContext } from '../../contexts/metametrics'; import { getMostRecentOverviewPage } from '../../ducks/history/history'; import { getPendingTokens } from '../../ducks/metamask/metamask'; import { addTokens, clearPendingTokens } from '../../store/actions'; -import { TOKEN_STANDARDS } from '../../helpers/constants/common'; import { ASSET_TYPES } from '../../../shared/constants/transaction'; const getTokenName = (name, symbol) => { @@ -45,7 +44,7 @@ const ConfirmImportToken = () => { token_decimal_precision: pendingToken.decimals, unlisted: pendingToken.unlisted, source: pendingToken.isCustom ? 'custom' : 'list', - token_standard: TOKEN_STANDARDS.ERC20, + token_standard: pendingToken.standard, asset_type: ASSET_TYPES.TOKEN, }, }); diff --git a/ui/pages/import-token/import-token.component.js b/ui/pages/import-token/import-token.component.js index 4dcd97a67..443988a27 100644 --- a/ui/pages/import-token/import-token.component.js +++ b/ui/pages/import-token/import-token.component.js @@ -23,6 +23,7 @@ import ActionableMessage from '../../components/ui/actionable-message/actionable import Typography from '../../components/ui/typography'; import { TYPOGRAPHY, FONT_WEIGHT } from '../../helpers/constants/design-system'; import Button from '../../components/ui/button'; +import { TOKEN_STANDARDS } from '../../helpers/constants/common'; import TokenSearch from './token-search'; import TokenList from './token-list'; @@ -126,6 +127,7 @@ class ImportToken extends Component { customDecimals: 0, searchResults: [], selectedTokens: {}, + standard: TOKEN_STANDARDS.NONE, tokenSelectorError: null, customAddressError: null, customSymbolError: null, @@ -231,12 +233,14 @@ class ImportToken extends Component { customSymbol: symbol, customDecimals: decimals, selectedTokens, + standard, } = this.state; const customToken = { address, symbol, decimals, + standard, }; setPendingTokens({ customToken, selectedTokens, tokenAddressList }); @@ -281,7 +285,7 @@ class ImportToken extends Component { const isMainnetNetwork = this.props.chainId === '0x1'; let standard; - if (addressIsValid && process.env.COLLECTIBLES_V1) { + if (addressIsValid) { try { ({ standard } = await this.props.getTokenStandardAndDetails( standardAddress, @@ -353,6 +357,9 @@ class ImportToken extends Component { default: if (!addressIsEmpty) { this.attemptToAutoFillTokenParams(customAddress); + if (standard) { + this.setState({ standard }); + } } } } diff --git a/ui/pages/import-token/import-token.test.js b/ui/pages/import-token/import-token.test.js index c03a9c486..8de7e1283 100644 --- a/ui/pages/import-token/import-token.test.js +++ b/ui/pages/import-token/import-token.test.js @@ -132,6 +132,7 @@ describe('Import Token', () => { customToken: { address: tokenAddress, decimals: Number(tokenPrecision), + standard: 'ERC20', symbol: tokenSymbol, }, selectedTokens: {}, From 22df2afcb292140b9ea6b71a24fbe1f7e02aab18 Mon Sep 17 00:00:00 2001 From: ryanml Date: Tue, 26 Apr 2022 16:29:00 -0700 Subject: [PATCH 09/10] Updating changelog --- CHANGELOG.md | 1 - 1 file changed, 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7d4bcd869..d271b47a3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [10.14.0] ### Added -- Dark Mode: Add What's New Announcement ([#14346](https://github.com/MetaMask/metamask-extension/pull/14346)) - **[FLASK]** Add snap version to details page ([#14110](https://github.com/MetaMask/metamask-extension/pull/14110)) - **[FLASK]** Add support for searching installed snaps in Settings ([#14419](https://github.com/MetaMask/metamask-extension/pull/14419)) From fd3eabf327153f68a59837423c2a3b9e5bad42f9 Mon Sep 17 00:00:00 2001 From: ryanml Date: Thu, 28 Apr 2022 12:05:00 -0700 Subject: [PATCH 10/10] Revert "Revert "Dark Mode: What's New Announcement (#14346)"" This reverts commit 9cea6f57ef619aaedfb6f8b6d2f556c15eb5bce9. --- app/_locales/en/messages.json | 9 +++++++++ app/images/darkmode-banner.png | Bin 0 -> 22646 bytes shared/notifications/index.js | 17 +++++++++++++++++ test/e2e/fixtures/address-entry/state.json | 3 +++ test/e2e/fixtures/connected-state/state.json | 3 +++ test/e2e/fixtures/custom-rpc/state.json | 3 +++ test/e2e/fixtures/custom-token/state.json | 3 +++ test/e2e/fixtures/eip-1559-v2-dapp/state.json | 3 +++ test/e2e/fixtures/eip-1559-v2/state.json | 3 +++ test/e2e/fixtures/import-ui/state.json | 3 +++ test/e2e/fixtures/imported-account/state.json | 3 +++ test/e2e/fixtures/localization/state.json | 3 +++ test/e2e/fixtures/metrics-enabled/state.json | 3 +++ .../fixtures/navigate-transactions/state.json | 3 +++ test/e2e/fixtures/onboarding/state.json | 7 +++++++ test/e2e/fixtures/send-edit-v2/state.json | 3 +++ test/e2e/fixtures/send-edit/state.json | 3 +++ test/e2e/fixtures/threebox-enabled/state.json | 3 +++ .../app/whats-new-popup/whats-new-popup.js | 5 +++++ ui/selectors/selectors.js | 1 + 20 files changed, 81 insertions(+) create mode 100644 app/images/darkmode-banner.png diff --git a/app/_locales/en/messages.json b/app/_locales/en/messages.json index 8d7ee14f2..9f64308c1 100644 --- a/app/_locales/en/messages.json +++ b/app/_locales/en/messages.json @@ -2139,6 +2139,15 @@ "notifications11Title": { "message": "Scam and security risks" }, + "notifications12ActionText": { + "message": "Enable dark mode" + }, + "notifications12Description": { + "message": "Dark mode on Extension is finally here! To turn it on, go to Settings -> Experimental and select one of the display options: Light, Dark, System." + }, + "notifications12Title": { + "message": "Wen dark mode? Now dark mode! 🕶️🦊" + }, "notifications1Description": { "message": "MetaMask Mobile users can now swap tokens inside their mobile wallet. Scan the QR code to get the mobile app and start swapping.", "description": "Description of a notification in the 'See What's New' popup. Describes the swapping on mobile feature." diff --git a/app/images/darkmode-banner.png b/app/images/darkmode-banner.png new file mode 100644 index 0000000000000000000000000000000000000000..7f72b312828ad37092980bc88b64e4e1d4398707 GIT binary patch literal 22646 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 { @@ -165,5 +173,14 @@ export const getTranslatedUINoficiations = (t, locale) => { new Date(UI_NOTIFICATIONS[11].date), ), }, + 12: { + ...UI_NOTIFICATIONS[12], + title: t('notifications12Title'), + description: t('notifications12Description'), + actionText: t('notifications12ActionText'), + date: new Intl.DateTimeFormat(formattedLocale).format( + new Date(UI_NOTIFICATIONS[12].date), + ), + }, }; }; diff --git a/test/e2e/fixtures/address-entry/state.json b/test/e2e/fixtures/address-entry/state.json index 59da933e5..96b17cdb1 100644 --- a/test/e2e/fixtures/address-entry/state.json +++ b/test/e2e/fixtures/address-entry/state.json @@ -66,6 +66,9 @@ }, "8": { "isShown": true + }, + "12": { + "isShown": true } } }, diff --git a/test/e2e/fixtures/connected-state/state.json b/test/e2e/fixtures/connected-state/state.json index ccc9ab82d..4d48df472 100644 --- a/test/e2e/fixtures/connected-state/state.json +++ b/test/e2e/fixtures/connected-state/state.json @@ -56,6 +56,9 @@ }, "8": { "isShown": true + }, + "12": { + "isShown": true } } }, diff --git a/test/e2e/fixtures/custom-rpc/state.json b/test/e2e/fixtures/custom-rpc/state.json index 43319cd60..222eb0159 100644 --- a/test/e2e/fixtures/custom-rpc/state.json +++ b/test/e2e/fixtures/custom-rpc/state.json @@ -52,6 +52,9 @@ }, "8": { "isShown": true + }, + "12": { + "isShown": true } } }, diff --git a/test/e2e/fixtures/custom-token/state.json b/test/e2e/fixtures/custom-token/state.json index da6098fcf..ae1fcd1b4 100644 --- a/test/e2e/fixtures/custom-token/state.json +++ b/test/e2e/fixtures/custom-token/state.json @@ -70,6 +70,9 @@ "notifications": { "8": { "isShown": true + }, + "12": { + "isShown": true } } }, diff --git a/test/e2e/fixtures/eip-1559-v2-dapp/state.json b/test/e2e/fixtures/eip-1559-v2-dapp/state.json index 3e29d737e..839484240 100644 --- a/test/e2e/fixtures/eip-1559-v2-dapp/state.json +++ b/test/e2e/fixtures/eip-1559-v2-dapp/state.json @@ -53,6 +53,9 @@ }, "8": { "isShown": true + }, + "12": { + "isShown": true } } }, diff --git a/test/e2e/fixtures/eip-1559-v2/state.json b/test/e2e/fixtures/eip-1559-v2/state.json index 452c896c3..0c79d8c61 100644 --- a/test/e2e/fixtures/eip-1559-v2/state.json +++ b/test/e2e/fixtures/eip-1559-v2/state.json @@ -53,6 +53,9 @@ }, "8": { "isShown": true + }, + "12": { + "isShown": true } } }, diff --git a/test/e2e/fixtures/import-ui/state.json b/test/e2e/fixtures/import-ui/state.json index 75aa4e7da..20c6bf87c 100644 --- a/test/e2e/fixtures/import-ui/state.json +++ b/test/e2e/fixtures/import-ui/state.json @@ -107,6 +107,9 @@ }, "8": { "isShown": true + }, + "12": { + "isShown": true } } }, diff --git a/test/e2e/fixtures/imported-account/state.json b/test/e2e/fixtures/imported-account/state.json index c6e2f4a8e..cb5c96950 100644 --- a/test/e2e/fixtures/imported-account/state.json +++ b/test/e2e/fixtures/imported-account/state.json @@ -52,6 +52,9 @@ }, "8": { "isShown": true + }, + "12": { + "isShown": true } } }, diff --git a/test/e2e/fixtures/localization/state.json b/test/e2e/fixtures/localization/state.json index 952a3a502..4b32460b5 100644 --- a/test/e2e/fixtures/localization/state.json +++ b/test/e2e/fixtures/localization/state.json @@ -52,6 +52,9 @@ }, "8": { "isShown": true + }, + "12": { + "isShown": true } } }, diff --git a/test/e2e/fixtures/metrics-enabled/state.json b/test/e2e/fixtures/metrics-enabled/state.json index 3b272611e..43b345204 100644 --- a/test/e2e/fixtures/metrics-enabled/state.json +++ b/test/e2e/fixtures/metrics-enabled/state.json @@ -56,6 +56,9 @@ }, "8": { "isShown": true + }, + "12": { + "isShown": true } } }, diff --git a/test/e2e/fixtures/navigate-transactions/state.json b/test/e2e/fixtures/navigate-transactions/state.json index 356a67ce7..1613c7f58 100644 --- a/test/e2e/fixtures/navigate-transactions/state.json +++ b/test/e2e/fixtures/navigate-transactions/state.json @@ -52,6 +52,9 @@ }, "8": { "isShown": true + }, + "12": { + "isShown": true } } }, diff --git a/test/e2e/fixtures/onboarding/state.json b/test/e2e/fixtures/onboarding/state.json index b0fbccd9a..6a4c94b96 100644 --- a/test/e2e/fixtures/onboarding/state.json +++ b/test/e2e/fixtures/onboarding/state.json @@ -26,6 +26,13 @@ }, "network": "1337" }, + "NotificationController": { + "notifications": { + "12": { + "isShown": true + } + } + }, "CurrencyController": { "conversionDate": 1617927806.941, "conversionRate": 2084.64, diff --git a/test/e2e/fixtures/send-edit-v2/state.json b/test/e2e/fixtures/send-edit-v2/state.json index fe1a4390c..9de073c00 100644 --- a/test/e2e/fixtures/send-edit-v2/state.json +++ b/test/e2e/fixtures/send-edit-v2/state.json @@ -53,6 +53,9 @@ }, "8": { "isShown": true + }, + "12": { + "isShown": true } } }, diff --git a/test/e2e/fixtures/send-edit/state.json b/test/e2e/fixtures/send-edit/state.json index f538e00bf..1272fbd04 100644 --- a/test/e2e/fixtures/send-edit/state.json +++ b/test/e2e/fixtures/send-edit/state.json @@ -53,6 +53,9 @@ }, "8": { "isShown": true + }, + "12": { + "isShown": true } } }, diff --git a/test/e2e/fixtures/threebox-enabled/state.json b/test/e2e/fixtures/threebox-enabled/state.json index 565e8a122..78b6f1226 100644 --- a/test/e2e/fixtures/threebox-enabled/state.json +++ b/test/e2e/fixtures/threebox-enabled/state.json @@ -63,6 +63,9 @@ }, "8": { "isShown": true + }, + "12": { + "isShown": true } } }, diff --git a/ui/components/app/whats-new-popup/whats-new-popup.js b/ui/components/app/whats-new-popup/whats-new-popup.js index 17f164bd5..59b171102 100644 --- a/ui/components/app/whats-new-popup/whats-new-popup.js +++ b/ui/components/app/whats-new-popup/whats-new-popup.js @@ -15,6 +15,7 @@ import { getSortedAnnouncementsToShow } from '../../../selectors'; import { BUILD_QUOTE_ROUTE, ADVANCED_ROUTE, + EXPERIMENTAL_ROUTE, } from '../../../helpers/constants/routes'; import { TYPOGRAPHY } from '../../../helpers/constants/design-system'; @@ -49,6 +50,10 @@ function getActionFunctionById(id, history) { updateViewedNotifications({ 10: true }); history.push(`${ADVANCED_ROUTE}#token-description`); }, + 12: () => { + updateViewedNotifications({ 12: true }); + history.push(EXPERIMENTAL_ROUTE); + }, }; return actionFunctions[id]; diff --git a/ui/selectors/selectors.js b/ui/selectors/selectors.js index 286b54c2e..244545d0e 100644 --- a/ui/selectors/selectors.js +++ b/ui/selectors/selectors.js @@ -751,6 +751,7 @@ function getAllowedAnnouncementIds(state) { 9: getIsMainnet(state), 10: Boolean(process.env.TOKEN_DETECTION_V2), 11: Boolean(process.env.TOKEN_DETECTION_V2), + 12: true, }; }