diff --git a/app/component-library/components-temp/ListItemMultiSelectButton/ListItemMultiSelectButton.constants.ts b/app/component-library/components-temp/ListItemMultiSelectButton/ListItemMultiSelectButton.constants.ts index fa1de756de16..06fa3a2118c9 100644 --- a/app/component-library/components-temp/ListItemMultiSelectButton/ListItemMultiSelectButton.constants.ts +++ b/app/component-library/components-temp/ListItemMultiSelectButton/ListItemMultiSelectButton.constants.ts @@ -8,6 +8,7 @@ import { ListItemMultiSelectButtonProps } from './ListItemMultiSelectButton.type // Defaults export const DEFAULT_LISTITEMMULTISELECT_GAP = 16; export const BUTTON_TEST_ID = 'button-menu-select-test-id'; +export const BUTTON_TEXT_TEST_ID = 'button-text-select-test-id'; // Sample consts export const SAMPLE_LISTITEMMULTISELECT_PROPS: ListItemMultiSelectButtonProps = diff --git a/app/components/Nav/App/index.js b/app/components/Nav/App/index.js index a042de232c30..51c57c7af913 100644 --- a/app/components/Nav/App/index.js +++ b/app/components/Nav/App/index.js @@ -693,7 +693,10 @@ const App = (props) => { component={MultiRpcModal} /> ) : null} - + { networkImageSource: networkImage, }); } - previousNetworkConfigurations.current = networkConfigurations; }, [networkConfigurations, networkName, networkImage, toastRef]); diff --git a/app/components/UI/NetworkModal/NetworkAdded/index.tsx b/app/components/UI/NetworkModal/NetworkAdded/index.tsx index 17a9e360336b..d4dc06b8dc68 100644 --- a/app/components/UI/NetworkModal/NetworkAdded/index.tsx +++ b/app/components/UI/NetworkModal/NetworkAdded/index.tsx @@ -14,6 +14,9 @@ const createStyles = (colors: any) => flexDirection: 'row', paddingVertical: 16, }, + base: { + padding: 16, + }, button: { flex: 1, }, @@ -41,7 +44,7 @@ const NetworkAdded = (props: NetworkAddedProps) => { const styles = createStyles(colors); return ( - + {strings('networks.new_network')} diff --git a/app/components/UI/Ramp/Views/NetworkSwitcher/__snapshots__/NetworkSwitcher.test.tsx.snap b/app/components/UI/Ramp/Views/NetworkSwitcher/__snapshots__/NetworkSwitcher.test.tsx.snap index 7f21f4f59075..92cb998fc5d8 100644 --- a/app/components/UI/Ramp/Views/NetworkSwitcher/__snapshots__/NetworkSwitcher.test.tsx.snap +++ b/app/components/UI/Ramp/Views/NetworkSwitcher/__snapshots__/NetworkSwitcher.test.tsx.snap @@ -549,7 +549,7 @@ exports[`NetworkSwitcher View renders and dismisses network modal when pressing { "borderRadius": 10, "height": 20, - "marginRight": 10, + "marginRight": 20, "width": 20, } } @@ -703,7 +703,7 @@ exports[`NetworkSwitcher View renders and dismisses network modal when pressing { "borderRadius": 10, "height": 20, - "marginRight": 10, + "marginRight": 20, "width": 20, } } @@ -1444,7 +1444,7 @@ exports[`NetworkSwitcher View renders and dismisses network modal when pressing { "borderRadius": 10, "height": 20, - "marginRight": 10, + "marginRight": 20, "width": 20, } } @@ -1492,10 +1492,7 @@ exports[`NetworkSwitcher View renders and dismisses network modal when pressing }, undefined, undefined, - { - "fontFamily": "EuclidCircularB-Bold", - "fontWeight": "600", - }, + false, undefined, undefined, undefined, @@ -1598,7 +1595,7 @@ exports[`NetworkSwitcher View renders and dismisses network modal when pressing { "borderRadius": 10, "height": 20, - "marginRight": 10, + "marginRight": 20, "width": 20, } } @@ -1648,10 +1645,7 @@ exports[`NetworkSwitcher View renders and dismisses network modal when pressing }, undefined, undefined, - { - "fontFamily": "EuclidCircularB-Bold", - "fontWeight": "600", - }, + false, undefined, undefined, undefined, @@ -2297,7 +2291,7 @@ exports[`NetworkSwitcher View renders and dismisses network modal when pressing { "borderRadius": 10, "height": 20, - "marginRight": 10, + "marginRight": 20, "width": 20, } } @@ -2451,7 +2445,7 @@ exports[`NetworkSwitcher View renders and dismisses network modal when pressing { "borderRadius": 10, "height": 20, - "marginRight": 10, + "marginRight": 20, "width": 20, } } @@ -2605,7 +2599,7 @@ exports[`NetworkSwitcher View renders and dismisses network modal when pressing { "borderRadius": 10, "height": 20, - "marginRight": 10, + "marginRight": 20, "width": 20, } } @@ -2653,10 +2647,7 @@ exports[`NetworkSwitcher View renders and dismisses network modal when pressing }, undefined, undefined, - { - "fontFamily": "EuclidCircularB-Bold", - "fontWeight": "600", - }, + false, undefined, undefined, undefined, @@ -2759,7 +2750,7 @@ exports[`NetworkSwitcher View renders and dismisses network modal when pressing { "borderRadius": 10, "height": 20, - "marginRight": 10, + "marginRight": 20, "width": 20, } } @@ -2809,10 +2800,7 @@ exports[`NetworkSwitcher View renders and dismisses network modal when pressing }, undefined, undefined, - { - "fontFamily": "EuclidCircularB-Bold", - "fontWeight": "600", - }, + false, undefined, undefined, undefined, @@ -3458,7 +3446,7 @@ exports[`NetworkSwitcher View renders correctly 1`] = ` { "borderRadius": 10, "height": 20, - "marginRight": 10, + "marginRight": 20, "width": 20, } } @@ -3612,7 +3600,7 @@ exports[`NetworkSwitcher View renders correctly 1`] = ` { "borderRadius": 10, "height": 20, - "marginRight": 10, + "marginRight": 20, "width": 20, } } @@ -3766,7 +3754,7 @@ exports[`NetworkSwitcher View renders correctly 1`] = ` { "borderRadius": 10, "height": 20, - "marginRight": 10, + "marginRight": 20, "width": 20, } } @@ -3814,10 +3802,7 @@ exports[`NetworkSwitcher View renders correctly 1`] = ` }, undefined, undefined, - { - "fontFamily": "EuclidCircularB-Bold", - "fontWeight": "600", - }, + false, undefined, undefined, undefined, @@ -3920,7 +3905,7 @@ exports[`NetworkSwitcher View renders correctly 1`] = ` { "borderRadius": 10, "height": 20, - "marginRight": 10, + "marginRight": 20, "width": 20, } } @@ -3970,10 +3955,7 @@ exports[`NetworkSwitcher View renders correctly 1`] = ` }, undefined, undefined, - { - "fontFamily": "EuclidCircularB-Bold", - "fontWeight": "600", - }, + false, undefined, undefined, undefined, @@ -4619,7 +4601,7 @@ exports[`NetworkSwitcher View renders correctly 2`] = ` { "borderRadius": 10, "height": 20, - "marginRight": 10, + "marginRight": 20, "width": 20, } } @@ -4773,7 +4755,7 @@ exports[`NetworkSwitcher View renders correctly 2`] = ` { "borderRadius": 10, "height": 20, - "marginRight": 10, + "marginRight": 20, "width": 20, } } @@ -4927,7 +4909,7 @@ exports[`NetworkSwitcher View renders correctly 2`] = ` { "borderRadius": 10, "height": 20, - "marginRight": 10, + "marginRight": 20, "width": 20, } } @@ -4975,10 +4957,7 @@ exports[`NetworkSwitcher View renders correctly 2`] = ` }, undefined, undefined, - { - "fontFamily": "EuclidCircularB-Bold", - "fontWeight": "600", - }, + false, undefined, undefined, undefined, @@ -5081,7 +5060,7 @@ exports[`NetworkSwitcher View renders correctly 2`] = ` { "borderRadius": 10, "height": 20, - "marginRight": 10, + "marginRight": 20, "width": 20, } } @@ -5131,10 +5110,7 @@ exports[`NetworkSwitcher View renders correctly 2`] = ` }, undefined, undefined, - { - "fontFamily": "EuclidCircularB-Bold", - "fontWeight": "600", - }, + false, undefined, undefined, undefined, diff --git a/app/components/Views/NetworkSelector/NetworkSelector.tsx b/app/components/Views/NetworkSelector/NetworkSelector.tsx index 112884966e7c..b585ec084e24 100644 --- a/app/components/Views/NetworkSelector/NetworkSelector.tsx +++ b/app/components/Views/NetworkSelector/NetworkSelector.tsx @@ -451,6 +451,9 @@ const NetworkSelector = () => { networkName: mainnetName, }) } + onLongPress={() => { + openModal(chainId, false, MAINNET, true); + }} /> ); } @@ -458,7 +461,7 @@ const NetworkSelector = () => { return ( { const renderLineaMainnet = () => { const { name: lineaMainnetName, chainId } = Networks['linea-mainnet']; + const name = networkConfigurations?.[chainId]?.name ?? lineaMainnetName; if (isNetworkUiRedesignEnabled() && isNoSearchResults('linea-mainnet')) return null; @@ -483,7 +487,7 @@ const NetworkSelector = () => { { networkName: lineaMainnetName, }) } + onLongPress={() => { + openModal(chainId, false, LINEA_MAINNET, true); + }} /> ); } @@ -513,7 +520,7 @@ const NetworkSelector = () => { return ( { > { sheetRef.current?.onCloseBottomSheet(() => { @@ -1011,6 +1014,7 @@ const NetworkSelector = () => { actionTitle={strings('app_settings.delete')} iconName={IconName.Trash} onPress={() => removeRpcUrl(showNetworkMenuModal.chainId)} + testID={`delete-network-button-${showNetworkMenuModal.chainId}`} /> ) : null} diff --git a/app/components/Views/Settings/NetworksSettings/NetworkSettings/index.js b/app/components/Views/Settings/NetworksSettings/NetworkSettings/index.js index 23c03f664c30..1cbb5b513f1d 100644 --- a/app/components/Views/Settings/NetworksSettings/NetworkSettings/index.js +++ b/app/components/Views/Settings/NetworksSettings/NetworkSettings/index.js @@ -135,7 +135,7 @@ const createStyles = (colors) => padding: 10, color: colors.text.default, }, - rpcUrlInput: { + dropDownInput: { borderColor: colors.border.default, borderRadius: 5, borderWidth: 2, @@ -354,7 +354,7 @@ export class NetworkSettings extends PureComponent { rpcUrl: undefined, rpcName: undefined, rpcUrlFrom: undefined, - rpcNameForm: undefined, + rpcNameForm: '', rpcUrls: [], blockExplorerUrls: [], selectedRpcEndpointIndex: 0, @@ -497,7 +497,10 @@ export class NetworkSettings extends PureComponent { rpcName = networkConfiguration?.rpcEndpoints[ networkConfiguration?.defaultRpcEndpointIndex - ]?.name; + ]?.name ?? + networkConfiguration?.rpcEndpoints[ + networkConfiguration?.defaultRpcEndpointIndex + ]?.type; selectedRpcEndpointIndex = networkConfiguration?.defaultRpcEndpointIndex; @@ -708,10 +711,6 @@ export class NetworkSettings extends PureComponent { isCustomMainnet, shouldNetworkSwitchPopToWallet, navigation, - nativeToken, - networkType, - networkUrl, - showNetworkOnboarding, }) => { const { NetworkController, CurrencyRateController } = Engine.context; @@ -755,7 +754,7 @@ export class NetworkSettings extends PureComponent { (url) => url === blockExplorerUrl, ); - const addedNetwork = await NetworkController.addNetwork({ + await NetworkController.addNetwork({ chainId, blockExplorerUrls, defaultRpcEndpointIndex: 0, @@ -770,18 +769,6 @@ export class NetworkSettings extends PureComponent { }, ], }); - - const { networkClientId } = - addedNetwork?.rpcEndpoints?.[addedNetwork.defaultRpcEndpointIndex] ?? - {}; - - await NetworkController.setActiveNetwork(networkClientId); - this.props.showNetworkOnboardingAction({ - networkUrl, - networkType, - nativeToken, - showNetworkOnboarding, - }); } isCustomMainnet @@ -801,10 +788,10 @@ export class NetworkSettings extends PureComponent { nickname, blockExplorerUrls, blockExplorerUrl, - editable, enableAction, rpcUrls, addMode, + editable, } = this.state; const ticker = this.state.ticker && this.state.ticker.toUpperCase(); @@ -1161,12 +1148,17 @@ export class NetworkSettings extends PureComponent { }; onRpcItemAdd = async (url, name) => { - if (!url || !name) { + if (!url) { return; } + const rpcName = name ?? ''; + await this.setState((prevState) => ({ - rpcUrls: [...prevState.rpcUrls, { url, name }], + rpcUrls: [ + ...prevState.rpcUrls, + { url, name: rpcName, type: RpcEndpointType.Custom }, + ], })); await this.setState({ @@ -1279,7 +1271,6 @@ export class NetworkSettings extends PureComponent { if (addMode) { this.validateChainId(); } - this.validateRpcUrl(); this.validateSymbol(); this.getCurrentState(); }; @@ -1791,7 +1782,6 @@ export class NetworkSettings extends PureComponent { autoCapitalize={'none'} autoCorrect={false} value={nickname} - editable={editable} onChangeText={this.onNicknameChange} placeholder={strings('app_settings.network_name_placeholder')} placeholderTextColor={colors.text.muted} @@ -1826,24 +1816,27 @@ export class NetworkSettings extends PureComponent { {strings('app_settings.network_rpc_url_label')} {isNetworkUiRedesignEnabled() ? ( - + this.openRpcModal()} @@ -1895,7 +1888,6 @@ export class NetworkSettings extends PureComponent { autoCapitalize={'none'} autoCorrect={false} value={chainId} - editable={editable} onChangeText={this.onChainIDChange} onBlur={() => { this.validateChainId(); @@ -1920,7 +1912,6 @@ export class NetworkSettings extends PureComponent { autoCapitalize={'none'} autoCorrect={false} value={ticker} - editable={editable} onChangeText={this.onTickerChange} onBlur={() => { this.validateSymbol(); @@ -1940,12 +1931,13 @@ export class NetworkSettings extends PureComponent { {isNetworkUiRedesignEnabled() ? ( - + this.openBlockExplorerModal()} @@ -1961,7 +1953,6 @@ export class NetworkSettings extends PureComponent { autoCapitalize={'none'} autoCorrect={false} value={blockExplorerUrl} - editable={editable} onChangeText={this.onBlockExplorerUrlChange} placeholder={strings( 'app_settings.network_block_explorer_placeholder', @@ -2050,12 +2041,12 @@ export class NetworkSettings extends PureComponent { placeholder={strings('app_settings.network_rpc_placeholder')} placeholderTextColor={colors.text.muted} onSubmitEditing={this.jumpToChainId} - testID={NetworksViewSelectorsIDs.RPC_URL_INPUT} + testID={NetworksViewSelectorsIDs.RPC_NAME_INPUT} keyboardAppearance={themeAppearance} /> { this.onRpcItemAdd(rpcUrlForm, rpcNameForm); @@ -2063,6 +2054,7 @@ export class NetworkSettings extends PureComponent { width={ButtonWidthTypes.Full} labelTextVariant={TextVariant.DisplayMD} isDisabled={!!warningRpcUrl} + testID={NetworksViewSelectorsIDs.ADD_RPC_BUTTON} /> @@ -2139,6 +2131,11 @@ export class NetworkSettings extends PureComponent { style={styles.rpcMenu} shouldNavigateBack={false} > + + + {strings('app_settings.add_block_explorer_url')} + + {blockExplorerUrls.map((url) => ( { await this.onBlockExplorerUrlChange(url); }} + showButtonIcon={blockExplorerUrl !== url} buttonIcon={IconName.Trash} onButtonClick={async () => { await this.onBlockExplorerUrlDelete(url); @@ -2181,6 +2180,11 @@ export class NetworkSettings extends PureComponent { style={styles.rpcMenu} shouldNavigateBack={false} > + + + {strings('app_settings.add_rpc_url')} + + {rpcUrls.map(({ url, name, type }) => ( { await this.onRpcUrlChangeWithName(url, name, type); this.closeRpcModal(); }} + showButtonIcon={ + rpcUrl !== url && type !== RpcEndpointType.Infura + } buttonIcon={IconName.Trash} onButtonClick={async () => { await this.onRpcUrlDelete(url); @@ -2217,6 +2225,7 @@ export class NetworkSettings extends PureComponent { }} width={ButtonWidthTypes.Auto} labelTextVariant={TextVariant.DisplayMD} + testID={NetworksViewSelectorsIDs.ADD_RPC_BUTTON} /> diff --git a/app/components/Views/Settings/NetworksSettings/__snapshots__/index.test.tsx.snap b/app/components/Views/Settings/NetworksSettings/__snapshots__/index.test.tsx.snap index 54836fa01520..57a1202d53ad 100644 --- a/app/components/Views/Settings/NetworksSettings/__snapshots__/index.test.tsx.snap +++ b/app/components/Views/Settings/NetworksSettings/__snapshots__/index.test.tsx.snap @@ -413,11 +413,14 @@ exports[`NetworksSettings should render correctly 1`] = `  { expect(sanitizedUrl).toEqual(undefined); }); - it('should not hide key from url', () => { + it('should return URL without change if there is no path', () => { const urlString = 'https://www.example.com'; const sanitizedUrl = hideKeyFromUrl(urlString); expect(sanitizedUrl).toEqual('https://www.example.com'); }); - it('should hide key from url if protocol is not defined', () => { + it('should handle URLs with query parameters', () => { + const urlString = 'https://www.example.com/v1/1234556?param=value'; + const sanitizedUrl = hideKeyFromUrl(urlString); + expect(sanitizedUrl).toEqual('https://www.example.com/v1'); + }); + + it('should handle URLs with fragments', () => { + const urlString = 'https://www.example.com/v1/1234556#section'; + const sanitizedUrl = hideKeyFromUrl(urlString); + expect(sanitizedUrl).toEqual('https://www.example.com/v1'); + }); + + it('should return the same URL when there is a trailing slash', () => { + const urlString = 'https://www.example.com/v1/'; + const sanitizedUrl = hideKeyFromUrl(urlString); + expect(sanitizedUrl).toEqual('https://www.example.com/v1'); + }); + + it('should handle a URL without a protocol', () => { const urlString = 'www.example.com/v1/1234'; const sanitizedUrl = hideKeyFromUrl(urlString); expect(sanitizedUrl).toEqual('www.example.com/v1'); }); + + it('should handle URLs with multiple segments', () => { + const urlString = 'https://www.example.com/v1/1234/5678'; + const sanitizedUrl = hideKeyFromUrl(urlString); + expect(sanitizedUrl).toEqual('https://www.example.com/v1/1234'); + }); + + it('should handle an empty string as the URL', () => { + const urlString = ''; + const sanitizedUrl = hideKeyFromUrl(urlString); + expect(sanitizedUrl).toEqual(''); + }); + + it('should return the hostname if no path exists', () => { + const urlString = 'https://www.example.com'; + const sanitizedUrl = hideKeyFromUrl(urlString); + expect(sanitizedUrl).toEqual('https://www.example.com'); + }); + + it('should handle URLs with only a single slash (root URL)', () => { + const urlString = 'https://www.example.com/'; + const sanitizedUrl = hideKeyFromUrl(urlString); + expect(sanitizedUrl).toEqual('https://www.example.com'); + }); + + it('should not strip anything if the URL has only a single path segment', () => { + const urlString = 'https://www.example.com/v1'; + const sanitizedUrl = hideKeyFromUrl(urlString); + expect(sanitizedUrl).toEqual('https://www.example.com'); + }); + + it('should strip the key when there are special characters in the URL', () => { + const urlString = 'https://www.example.com/v1/123$%56'; + const sanitizedUrl = hideKeyFromUrl(urlString); + expect(sanitizedUrl).toEqual('https://www.example.com/v1'); + }); + + it('should handle localhost URLs', () => { + const urlString = 'http://localhost:3000/v1/1234556'; + const sanitizedUrl = hideKeyFromUrl(urlString); + expect(sanitizedUrl).toEqual('http://localhost:3000/v1'); + }); + + it('should handle URLs with ports', () => { + const urlString = 'https://www.example.com:8080/v1/1234556'; + const sanitizedUrl = hideKeyFromUrl(urlString); + expect(sanitizedUrl).toEqual('https://www.example.com:8080/v1'); + }); }); diff --git a/app/util/hideKeyFromUrl.ts b/app/util/hideKeyFromUrl.ts index 29a4c915d683..639a8f274d3f 100644 --- a/app/util/hideKeyFromUrl.ts +++ b/app/util/hideKeyFromUrl.ts @@ -1,6 +1,9 @@ const hideKeyFromUrl = (url: string | undefined) => { if (!url) return url; + // If the URL is just a hostname without a path, return it as is + if (!url.includes('/')) return url; + const regex = /^(https?:\/\/)(.*)$/; const match = url.match(regex); @@ -8,6 +11,11 @@ const hideKeyFromUrl = (url: string | undefined) => { const protocol = match[1]; let restOfUrl = match[2]; + // Special case: handle URLs like 'test.test.com' + if (!restOfUrl.includes('/')) { + return protocol + restOfUrl; + } + // eslint-disable-next-line no-useless-escape restOfUrl = restOfUrl.replace(/\/[^\/]*$/, ''); return protocol + restOfUrl; diff --git a/app/util/networks/isNetworkUiRedesignEnabled.ts b/app/util/networks/isNetworkUiRedesignEnabled.ts index e6d1667314d9..f8ba3b9aaec5 100644 --- a/app/util/networks/isNetworkUiRedesignEnabled.ts +++ b/app/util/networks/isNetworkUiRedesignEnabled.ts @@ -1,4 +1,3 @@ -export const isNetworkUiRedesignEnabled = () => - process.env.MM_NETWORK_UI_REDESIGN_ENABLED === '1'; +export const isNetworkUiRedesignEnabled = () => true; export default isNetworkUiRedesignEnabled; diff --git a/e2e/pages/Settings/NetworksView.js b/e2e/pages/Settings/NetworksView.js index c73524d1b5a1..3a06040f7fd7 100644 --- a/e2e/pages/Settings/NetworksView.js +++ b/e2e/pages/Settings/NetworksView.js @@ -4,16 +4,39 @@ import { } from '../../selectors/Settings/NetworksView.selectors'; import Matchers from '../../utils/Matchers'; import Gestures from '../../utils/Gestures'; +import { NetworkListModalSelectorsIDs } from '../../selectors/Modals/NetworkListModal.selectors'; class NetworkView { get networkContainer() { return Matchers.getElementByID(NetworksViewSelectorsIDs.NETWORK_CONTAINER); } + get networkFormContainer() { + return Matchers.getElementByID(NetworksViewSelectorsIDs.CONTAINER); + } + get rpcContainer() { return Matchers.getElementByID(NetworksViewSelectorsIDs.RPC_CONTAINER); } + get addNetworkButtonForm() { + return device.getPlatform() === 'ios' + ? Matchers.getElementByID(NetworkListModalSelectorsIDs.ADD_BUTTON) + : Matchers.getElementByLabel(NetworkListModalSelectorsIDs.ADD_BUTTON); + } + + get addRpcDropDownButton() { + return device.getPlatform() === 'ios' + ? Matchers.getElementByID(NetworksViewSelectorsIDs.ICON_BUTTON_RPC) + : Matchers.getElementByLabel(NetworksViewSelectorsIDs.ICON_BUTTON_RPC); + } + + get addRpcButton() { + return device.getPlatform() === 'ios' + ? Matchers.getElementByID(NetworksViewSelectorsIDs.ADD_RPC_BUTTON) + : Matchers.getElementByLabel(NetworksViewSelectorsIDs.ADD_RPC_BUTTON); + } + get noMatchingText() { return Matchers.getElementByText( NetworkViewSelectorsText.NO_MATCHING_SEARCH_RESULTS, @@ -117,6 +140,18 @@ class NetworkView { await Gestures.waitAndTap(this.addNetworkButton); } + async tapAddNetworkFormButton() { + await Gestures.waitAndTap(this.addNetworkButtonForm); + } + + async tapRpcDropDownButton() { + await Gestures.waitAndTap(this.addRpcDropDownButton); + } + + async tapAddRpcButton() { + await Gestures.waitAndTap(this.addRpcButton); + } + async switchToCustomNetworks() { await Gestures.waitAndTap(this.customNetworkTab); } diff --git a/e2e/pages/modals/NetworkListModal.js b/e2e/pages/modals/NetworkListModal.js index ed2e12df6baf..2865844a3919 100644 --- a/e2e/pages/modals/NetworkListModal.js +++ b/e2e/pages/modals/NetworkListModal.js @@ -5,12 +5,35 @@ import { import Matchers from '../../utils/Matchers'; import Gestures from '../../utils/Gestures'; import { CellModalSelectorsIDs } from '../../selectors/Modals/CellModal.selectors'; +import { NetworksViewSelectorsIDs } from '../../selectors/Settings/NetworksView.selectors'; class NetworkListModal { get networkScroll() { return Matchers.getElementByID(NetworkListModalSelectorsIDs.SCROLL); } + get closeIcon() { + return Matchers.getElementByID(NetworksViewSelectorsIDs.CLOSE_ICON); + } + + get deleteNetworkButton() { + return Matchers.getElementByText( + NetworkListModalSelectorsText.DELETE_NETWORK, + ); + } + + get addPopularNetworkButton() { + return Matchers.getElementByText( + NetworkListModalSelectorsText.ADD_POPULAR_NETWORK_BUTTON, + ); + } + + get networkSearchInput() { + return Matchers.getElementByID( + NetworksViewSelectorsIDs.SEARCH_NETWORK_INPUT_BOX_ID, + ); + } + get selectNetwork() { return Matchers.getElementByText( NetworkListModalSelectorsText.SELECT_NETWORK, @@ -31,6 +54,14 @@ class NetworkListModal { return Matchers.getElementByID(NetworkListModalSelectorsIDs.CUSTOM_NETWORK_CELL(network)); } + async tapDeleteButton() { + await Gestures.waitAndTap(this.deleteNetworkButton); + } + + async scrollToTopOfNetworkList() { + await Gestures.swipe(this.networkScroll, 'down', 'fast'); + } + async changeNetworkTo(networkName, custom) { const elem = this.getCustomNetwork(networkName, custom); await Gestures.waitAndTap(elem); @@ -47,6 +78,26 @@ class NetworkListModal { async tapTestNetworkSwitch() { await Gestures.waitAndTap(this.testNetToggle); } + + async longPressOnNetwork(networkName) { + const network = Matchers.getElementByText(networkName); + await Gestures.tapAndLongPress(network); + } + + async SearchNetworkName(networkName) { + await Gestures.typeTextAndHideKeyboard( + this.networkSearchInput, + networkName, + ); + } + + async tapClearSearch() { + await Gestures.waitAndTap(this.closeIcon); + } + + async tapAddNetworkButton() { + await Gestures.waitAndTap(this.addPopularNetworkButton); + } } export default new NetworkListModal(); diff --git a/e2e/selectors/Modals/NetworkListModal.selectors.js b/e2e/selectors/Modals/NetworkListModal.selectors.js index 4db2fbe7c864..a476f4b3a071 100644 --- a/e2e/selectors/Modals/NetworkListModal.selectors.js +++ b/e2e/selectors/Modals/NetworkListModal.selectors.js @@ -2,6 +2,8 @@ import enContent from '../../../locales/languages/en.json'; export const NetworkListModalSelectorsText = { SELECT_NETWORK: enContent.networks.select_network, + DELETE_NETWORK: enContent.app_settings.delete, + ADD_POPULAR_NETWORK_BUTTON: enContent.networks.add, }; export const NetworkListModalSelectorsIDs = { diff --git a/e2e/selectors/Settings/NetworksView.selectors.js b/e2e/selectors/Settings/NetworksView.selectors.js index af1bf8d095cd..85926b42264f 100644 --- a/e2e/selectors/Settings/NetworksView.selectors.js +++ b/e2e/selectors/Settings/NetworksView.selectors.js @@ -18,6 +18,10 @@ export const NetworksViewSelectorsIDs = { CLOSE_ICON: 'close-network-icon', BACK_ARROW_BUTTON: 'back-arrow-button', SEARCH_NETWORK_INPUT_BOX_ID: 'network-search-input', + CONTAINER: 'network-form-container', + ICON_BUTTON_RPC: 'drop-down-rpc-menu', + ADD_RPC_BUTTON: 'add-rpc-button', + RPC_NAME_INPUT: 'input-rpc-name', }; export const NetworksSelectorSelectorsIDs = { diff --git a/e2e/specs/assets/nft-detection-modal.spec.js b/e2e/specs/assets/nft-detection-modal.spec.js index b0b4b4e41ce8..fd37045ee508 100644 --- a/e2e/specs/assets/nft-detection-modal.spec.js +++ b/e2e/specs/assets/nft-detection-modal.spec.js @@ -15,7 +15,7 @@ import NetworkEducationModal from '../../pages/modals/NetworkEducationModal'; import { NftDetectionModalSelectorsText } from '../../selectors/Modals/NftDetectionModal.selectors'; describe(SmokeAssets('NFT Detection Modal'), () => { - const ETHEREUM = 'Ethereum Main Network'; + const ETHEREUM = 'Ethereum Network Mainnet'; beforeAll(async () => { jest.setTimeout(170000); await TestHelpers.reverseServerPort(); diff --git a/e2e/specs/networks/add-custom-rpc.spec.js b/e2e/specs/networks/add-custom-rpc.spec.js index db554b19e60c..ddff33e3c6c5 100644 --- a/e2e/specs/networks/add-custom-rpc.spec.js +++ b/e2e/specs/networks/add-custom-rpc.spec.js @@ -4,13 +4,9 @@ import { Regression } from '../../tags'; import NetworkView from '../../pages/Settings/NetworksView'; import WalletView from '../../pages/wallet/WalletView'; import ToastModal from '../../pages/modals/ToastModal'; -import SettingsView from '../../pages/Settings/SettingsView'; import NetworkListModal from '../../pages/modals/NetworkListModal'; import NetworkEducationModal from '../../pages/modals/NetworkEducationModal'; -import NetworkAddedModal from '../../pages/modals/NetworkAddedModal'; -import NetworkApprovalModal from '../../pages/modals/NetworkApprovalModal'; import { loginToApp } from '../../viewHelper'; -import TabBarComponent from '../../pages/TabBarComponent'; import FixtureBuilder from '../../fixtures/fixture-builder'; import { loadFixture, @@ -21,9 +17,10 @@ import { getFixturesServerPort } from '../../fixtures/utils'; import FixtureServer from '../../fixtures/fixture-server'; import Assertions from '../../utils/Assertions'; import { CustomNetworks } from '../../resources/networks.e2e'; +import Gestures from '../../utils/Gestures'; +import Matchers from '../../utils/Matchers'; const fixtureServer = new FixtureServer(); -const MAINNET = 'Ethereum Main Network'; describe(Regression('Custom RPC Tests'), () => { beforeAll(async () => { @@ -45,40 +42,49 @@ describe(Regression('Custom RPC Tests'), () => { await stopFixtureServer(fixtureServer); }); - it('should go to settings then networks', async () => { - await TabBarComponent.tapSettings(); - await SettingsView.tapNetworks(); - await Assertions.checkIfVisible(NetworkView.networkContainer); + it('should go to network', async () => { + await WalletView.tapNetworksButtonOnNavBar(); }); it('should add Gnosis network', async () => { // Tap on Add Network button - await NetworkView.tapAddNetworkButton(); - await NetworkView.switchToCustomNetworks(); + await NetworkView.tapAddNetworkFormButton(); + await NetworkView.typeInNetworkName( CustomNetworks.Gnosis.providerConfig.nickname, ); + + await NetworkView.tapRpcDropDownButton(); + await NetworkView.tapAddRpcButton(); + + await TestHelpers.delay(2000); await NetworkView.typeInRpcUrl('abc'); // Input incorrect RPC URL await Assertions.checkIfVisible(NetworkView.rpcWarningBanner); await NetworkView.clearRpcInputBox(); await NetworkView.typeInRpcUrl(CustomNetworks.Gnosis.providerConfig.rpcUrl); + + await NetworkView.tapAddRpcButton(); + await NetworkView.typeInChainId( CustomNetworks.Gnosis.providerConfig.chainId, ); await NetworkView.tapChainIDLabel(); // Focus outside of text input field - await NetworkView.typeInNetworkSymbol( `${CustomNetworks.Gnosis.providerConfig.ticker}\n`, ); + if (device.getPlatform() === 'ios') { await NetworkView.tapChainIDLabel(); // Focus outside of text input field await NetworkView.tapChainIDLabel(); // Focus outside of text input field await NetworkView.tapRpcNetworkAddButton(); } - await Assertions.checkIfVisible(NetworkApprovalModal.container); - await NetworkApprovalModal.tapApproveButton(); - await Assertions.checkIfVisible(NetworkAddedModal.switchNetwork); - await NetworkAddedModal.tapSwitchToNetwork(); + }); + + it('should switch to Gnosis network', async () => { + await WalletView.tapNetworksButtonOnNavBar(); + await NetworkListModal.changeNetworkTo( + CustomNetworks.Gnosis.providerConfig.nickname, + ); }); it('should dismiss network education modal', async () => { @@ -100,15 +106,15 @@ describe(Regression('Custom RPC Tests'), () => { // Tap to prompt network list await WalletView.tapNetworksButtonOnNavBar(); await Assertions.checkIfVisible(NetworkListModal.networkScroll); - await Assertions.checkIfVisible( - NetworkListModal.getCustomNetwork( - CustomNetworks.Gnosis.providerConfig.nickname, - true, - ), + + await Assertions.checkIfElementToHaveText( + WalletView.navbarNetworkText, + CustomNetworks.Gnosis.providerConfig.nickname, ); }); it('should switch to Sepolia then dismiss the network education modal', async () => { + await NetworkListModal.scrollToBottomOfNetworkList(); await Assertions.checkIfToggleIsOn(NetworkListModal.testNetToggle); await NetworkListModal.changeNetworkTo( CustomNetworks.Sepolia.providerConfig.nickname, @@ -124,17 +130,17 @@ describe(Regression('Custom RPC Tests'), () => { }); it('should switch back to Gnosis', async () => { + await WalletView.tapNetworksButtonOnNavBar(); + await NetworkListModal.scrollToBottomOfNetworkList(); await Assertions.checkIfElementToHaveText( WalletView.navbarNetworkText, CustomNetworks.Sepolia.providerConfig.nickname, ); - await WalletView.tapNetworksButtonOnNavBar(); await Assertions.checkIfVisible(NetworkListModal.networkScroll); - await NetworkListModal.scrollToBottomOfNetworkList(); + await NetworkListModal.scrollToTopOfNetworkList(); // Change to back to Gnosis Network await NetworkListModal.changeNetworkTo( CustomNetworks.Gnosis.providerConfig.nickname, - true, ); await Assertions.checkIfVisible(WalletView.container); await Assertions.checkIfElementToHaveText( @@ -142,7 +148,6 @@ describe(Regression('Custom RPC Tests'), () => { CustomNetworks.Gnosis.providerConfig.nickname, ); await Assertions.checkIfNotVisible(NetworkEducationModal.container); - try { await Assertions.checkIfVisible(ToastModal.container); await Assertions.checkIfNotVisible(ToastModal.container); @@ -153,17 +158,38 @@ describe(Regression('Custom RPC Tests'), () => { }); it('should go to settings networks and remove xDai network', async () => { - await TabBarComponent.tapSettings(); - await SettingsView.tapNetworks(); - await Assertions.checkIfVisible(NetworkView.networkContainer); + await WalletView.tapNetworksButtonOnNavBar(); + await NetworkListModal.scrollToBottomOfNetworkList(); + await Assertions.checkIfToggleIsOn(NetworkListModal.testNetToggle); + await NetworkListModal.changeNetworkTo( + CustomNetworks.Sepolia.providerConfig.nickname, + ); + + await WalletView.tapNetworksButtonOnNavBar(); - await NetworkView.longPressToRemoveNetwork( + await NetworkListModal.longPressOnNetwork( CustomNetworks.Gnosis.providerConfig.nickname, ); + if (device.getPlatform() === 'android') { await device.disableSynchronization(); } - await NetworkEducationModal.tapGotItButton(); + + // delete Gnosis network + const deleteButton = Matchers.getElementByID('delete-network-button-0x64'); + await Gestures.waitAndTap(deleteButton); + + await TestHelpers.delay(2000); + + await NetworkListModal.tapDeleteButton(); + + try { + await Assertions.checkIfVisible(ToastModal.container); + await Assertions.checkIfNotVisible(ToastModal.container); + } catch { + // eslint-disable-next-line no-console + console.log('Toast is not visible'); + } try { await Assertions.checkIfVisible(ToastModal.container); @@ -172,11 +198,5 @@ describe(Regression('Custom RPC Tests'), () => { // eslint-disable-next-line no-console console.log('Toast is not visible'); } - await TabBarComponent.tapWallet(); - await Assertions.checkIfVisible(WalletView.container); - await Assertions.checkIfElementToHaveText( - WalletView.navbarNetworkText, - MAINNET, - ); }); }); diff --git a/e2e/specs/networks/add-popular-networks.spec.js b/e2e/specs/networks/add-popular-networks.spec.js index 377f9e0ce43c..05fbfa36a4b9 100644 --- a/e2e/specs/networks/add-popular-networks.spec.js +++ b/e2e/specs/networks/add-popular-networks.spec.js @@ -1,14 +1,13 @@ 'use strict'; import TestHelpers from '../../helpers'; import { Regression } from '../../tags'; -import NetworkView from '../../pages/Settings/NetworksView'; -import SettingsView from '../../pages/Settings/SettingsView'; import NetworkAddedModal from '../../pages/modals/NetworkAddedModal'; import NetworkApprovalModal from '../../pages/modals/NetworkApprovalModal'; import { loginToApp } from '../../viewHelper'; -import TabBarComponent from '../../pages/TabBarComponent'; import FixtureBuilder from '../../fixtures/fixture-builder'; import { withFixtures } from '../../fixtures/fixture-helper'; +import WalletView from '../../pages/wallet/WalletView'; +import NetworkListModal from '../../pages/modals/NetworkListModal'; import Assertions from '../../utils/Assertions'; const Arbitrum = 'Arbitrum One'; @@ -28,11 +27,13 @@ describe(Regression('Add all popular networks'), () => { async () => { await loginToApp(); - await TabBarComponent.tapSettings(); - await SettingsView.tapNetworks(); - await NetworkView.tapAddNetworkButton(); - await NetworkView.tapNetworkByName(Arbitrum); - await Assertions.checkIfVisible(NetworkApprovalModal.container); + await WalletView.tapNetworksButtonOnNavBar(); + await NetworkListModal.scrollToBottomOfNetworkList(); + + await Assertions.checkIfVisible( + NetworkListModal.addPopularNetworkButton, + ); + await NetworkListModal.tapAddNetworkButton(); await NetworkApprovalModal.tapApproveButton(); await NetworkAddedModal.tapCloseButton(); }, diff --git a/e2e/specs/networks/connect-test-network.spec.js b/e2e/specs/networks/connect-test-network.spec.js index b5711acfa9ed..963a84fc82f4 100644 --- a/e2e/specs/networks/connect-test-network.spec.js +++ b/e2e/specs/networks/connect-test-network.spec.js @@ -41,6 +41,7 @@ describe(Regression('Connect to a Test Network'), () => { it('should switch to test Network then dismiss the network education modal', async () => { // Tap to prompt network list await WalletView.tapNetworksButtonOnNavBar(); + await NetworkListModal.scrollToBottomOfNetworkList(); await Assertions.checkIfVisible(NetworkListModal.networkScroll); await Assertions.checkIfToggleIsOn(NetworkListModal.testNetToggle); await NetworkListModal.changeNetworkTo( @@ -62,12 +63,14 @@ describe(Regression('Connect to a Test Network'), () => { it('should not toggle off the Test Network switch while connected to test network', async () => { await WalletView.tapNetworksButtonOnNavBar(); + await NetworkListModal.scrollToBottomOfNetworkList(); await Assertions.checkIfVisible(NetworkListModal.networkScroll); await NetworkListModal.tapTestNetworkSwitch(); await Assertions.checkIfToggleIsOn(NetworkListModal.testNetToggle); }); it('should disconnect to Test Network', async () => { + await NetworkListModal.scrollToTopOfNetworkList(); await NetworkListModal.changeNetworkTo(ETHEREUM); await Assertions.checkIfVisible(NetworkEducationModal.container); await Assertions.checkIfElementToHaveText( @@ -85,6 +88,7 @@ describe(Regression('Connect to a Test Network'), () => { it('should toggle off the Test Network switch', async () => { await WalletView.tapNetworksButtonOnNavBar(); + await NetworkListModal.scrollToBottomOfNetworkList(); await Assertions.checkIfVisible(NetworkListModal.networkScroll); await Assertions.checkIfTextIsDisplayed( CustomNetworks.Sepolia.providerConfig.nickname, diff --git a/e2e/specs/networks/networks-search.spec.js b/e2e/specs/networks/networks-search.spec.js index 86c0b459e32b..42b0ea475b7d 100644 --- a/e2e/specs/networks/networks-search.spec.js +++ b/e2e/specs/networks/networks-search.spec.js @@ -10,8 +10,12 @@ import FixtureBuilder from '../../fixtures/fixture-builder'; import { withFixtures } from '../../fixtures/fixture-helper'; import Assertions from '../../utils/Assertions'; import { PopularNetworksList } from '../../resources/networks.e2e'; +import WalletView from '../../pages/wallet/WalletView'; +import NetworkListModal from '../../pages/modals/NetworkListModal'; +import Matchers from '../../utils/Matchers'; +import Gestures from '../../utils/Gestures'; -const SHORT_HAND_NETWORK_TEXT = 'ava'; +const SHORT_HAND_NETWORK_TEXT = 'Ava'; const INVALID_NETWORK_TEXT = 'cccM'; describe(Regression('Networks Search'), () => { beforeAll(async () => { @@ -28,28 +32,28 @@ describe(Regression('Networks Search'), () => { async () => { await loginToApp(); - await TabBarComponent.tapSettings(); - await SettingsView.tapNetworks(); - await NetworkView.SearchNetworkName(INVALID_NETWORK_TEXT); - await Assertions.checkIfVisible(NetworkView.noMatchingText); - await NetworkView.tapClearSearch(); - await NetworkView.SearchNetworkName(SHORT_HAND_NETWORK_TEXT); - await NetworkView.tapNetworkByName( + await WalletView.tapNetworksButtonOnNavBar(); + await NetworkListModal.SearchNetworkName(INVALID_NETWORK_TEXT); + await NetworkListModal.tapClearSearch(); + await NetworkListModal.SearchNetworkName(SHORT_HAND_NETWORK_TEXT); + await NetworkListModal.longPressOnNetwork( PopularNetworksList.Avalanche.providerConfig.nickname, ); - await NetworkView.tapDeleteButton(); - await Assertions.checkIfVisible(NetworkView.noMatchingText); - await NetworkView.tapClearSearch(); - await Assertions.checkIfNotVisible( - NetworkView.getnetworkName( - PopularNetworksList.Avalanche.providerConfig.nickname, - ), + if (device.getPlatform() === 'android') { + await device.disableSynchronization(); + } + + // delete avalanche network + const deleteButton = Matchers.getElementByID( + 'delete-network-button-0xa86a', ); - await NetworkView.tapAddNetworkButton(); + await Gestures.waitAndTap(deleteButton); + + await TestHelpers.delay(2000); + await NetworkListModal.tapDeleteButton(); + await Assertions.checkIfVisible( - NetworkView.getnetworkName( - PopularNetworksList.Avalanche.providerConfig.nickname, - ), + NetworkListModal.addPopularNetworkButton, ); }, ); diff --git a/e2e/specs/wallet/send-ERC-token.spec.js b/e2e/specs/wallet/send-ERC-token.spec.js index 86d3a494ab3d..97e6662d5eb9 100644 --- a/e2e/specs/wallet/send-ERC-token.spec.js +++ b/e2e/specs/wallet/send-ERC-token.spec.js @@ -30,7 +30,9 @@ describe(SmokeCore('Send ERC Token'), () => { it('should add Sepolia testnet to my networks list', async () => { await WalletView.tapNetworksButtonOnNavBar(); await TestHelpers.delay(2000); + await NetworkListModal.scrollToBottomOfNetworkList(); await NetworkListModal.tapTestNetworkSwitch(); + await NetworkListModal.scrollToBottomOfNetworkList(); await Assertions.checkIfToggleIsOn(NetworkListModal.testNetToggle); await NetworkListModal.changeNetworkTo( CustomNetworks.Sepolia.providerConfig.nickname, diff --git a/e2e/viewHelper.js b/e2e/viewHelper.js index ad7438dadc97..c444366f9777 100644 --- a/e2e/viewHelper.js +++ b/e2e/viewHelper.js @@ -70,13 +70,16 @@ have to have all these workarounds in the tests }; export const skipNotificationsDeviceSettings = async () => { - await TestHelpers.delay(1000); try { - await Assertions.checkIfVisible(EnableDeviceNotificationsAlert.stepOneContainer); + await Assertions.checkIfVisible( + EnableDeviceNotificationsAlert.stepOneContainer, + ); await EnableDeviceNotificationsAlert.tapOnNotEnableDeviceNotificationsButton(); - await Assertions.checkIfNotVisible(EnableDeviceNotificationsAlert.stepOneContainer); + await Assertions.checkIfNotVisible( + EnableDeviceNotificationsAlert.stepOneContainer, + ); } catch { /* eslint-disable no-console */ @@ -99,6 +102,7 @@ export const importWalletWithRecoveryPhrase = async () => { await ImportWalletView.enterPassword(validAccount.password); await ImportWalletView.reEnterPassword(validAccount.password); + //'Should dismiss Enable device Notifications checks alert' await TestHelpers.delay(3500); await OnboardingSuccessView.tapDone(); //'Should dismiss Enable device Notifications checks alert' @@ -187,7 +191,9 @@ export const addLocalhostNetwork = async () => { export const switchToSepoliaNetwork = async () => { await WalletView.tapNetworksButtonOnNavBar(); + await NetworkListModal.scrollToBottomOfNetworkList(); await NetworkListModal.tapTestNetworkSwitch(); + await NetworkListModal.scrollToBottomOfNetworkList(); await Assertions.checkIfToggleIsOn(NetworkListModal.testNetToggle); await NetworkListModal.changeNetworkTo( CustomNetworks.Sepolia.providerConfig.nickname, diff --git a/patches/@metamask+preferences-controller+11.0.0.patch b/patches/@metamask+preferences-controller+11.0.0.patch index bc5402698b7b..712fc6cf2ef0 100644 --- a/patches/@metamask+preferences-controller+11.0.0.patch +++ b/patches/@metamask+preferences-controller+11.0.0.patch @@ -1,3 +1,105 @@ +diff --git a/node_modules/@metamask/preferences-controller/.idea/.gitignore b/node_modules/@metamask/preferences-controller/.idea/.gitignore +new file mode 100644 +index 0000000..b58b603 +--- /dev/null ++++ b/node_modules/@metamask/preferences-controller/.idea/.gitignore +@@ -0,0 +1,5 @@ ++# Default ignored files ++/shelf/ ++/workspace.xml ++# Editor-based HTTP Client requests ++/httpRequests/ +diff --git a/node_modules/@metamask/preferences-controller/.idea/modules.xml b/node_modules/@metamask/preferences-controller/.idea/modules.xml +new file mode 100644 +index 0000000..ecac035 +--- /dev/null ++++ b/node_modules/@metamask/preferences-controller/.idea/modules.xml +@@ -0,0 +1,8 @@ ++ ++ ++ ++ ++ ++ ++ ++ +\ No newline at end of file +diff --git a/node_modules/@metamask/preferences-controller/.idea/preferences-controller.iml b/node_modules/@metamask/preferences-controller/.idea/preferences-controller.iml +new file mode 100644 +index 0000000..24643cc +--- /dev/null ++++ b/node_modules/@metamask/preferences-controller/.idea/preferences-controller.iml +@@ -0,0 +1,12 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +\ No newline at end of file +diff --git a/node_modules/@metamask/preferences-controller/.idea/workspace.xml b/node_modules/@metamask/preferences-controller/.idea/workspace.xml +new file mode 100644 +index 0000000..dbf94fd +--- /dev/null ++++ b/node_modules/@metamask/preferences-controller/.idea/workspace.xml +@@ -0,0 +1,50 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ 1727275325414 ++ ++ ++ ++ ++ ++ +\ No newline at end of file diff --git a/node_modules/@metamask/preferences-controller/dist/chunk-FSWGV6H6.js b/node_modules/@metamask/preferences-controller/dist/chunk-FSWGV6H6.js index 30e985c..d03fa2f 100644 --- a/node_modules/@metamask/preferences-controller/dist/chunk-FSWGV6H6.js @@ -20,7 +122,8 @@ index 30e985c..d03fa2f 100644 + useTransactionSimulations: { persist: true, anonymous: true }, + showMultiRpcModal: { persist: false, anonymous: false }, }; - var name = "PreferencesController"; +-var name = "PreferencesController"; ++var name = 'PreferencesController'; function getDefaultPreferencesState() { @@ -37,7 +41,7 @@ function getDefaultPreferencesState() { isIpfsGatewayEnabled: true, @@ -29,7 +132,8 @@ index 30e985c..d03fa2f 100644 - openSeaEnabled: false, + displayNftMedia: false, securityAlertsEnabled: false, - selectedAddress: "", +- selectedAddress: "", ++ selectedAddress: '', showIncomingTransactions: { @@ -64,7 +68,11 @@ function getDefaultPreferencesState() { }, @@ -52,7 +156,7 @@ index 30e985c..d03fa2f 100644 + if (useNftDetection && !this.state.displayNftMedia) { throw new Error( - "useNftDetection cannot be enabled if openSeaEnabled is false" -+ "useNftDetection cannot be enabled if displayNftMedia is false" ++ 'useNftDetection cannot be enabled if displayNftMedia is false', ); } this.update((state) => { @@ -120,25 +224,82 @@ index 30e985c..d03fa2f 100644 + * @param smartTransactionsOptInStatus - true to opt into smart transactions + */ + setSmartTransactionsOptInStatus(smartTransactionsOptInStatus) { -+ this.update((state) => { -+ state.smartTransactionsOptInStatus = smartTransactionsOptInStatus; -+ }); ++ this.update((state) => { ++ state.smartTransactionsOptInStatus = smartTransactionsOptInStatus; ++ }); + } + + /** -+ * A setter for the user to opt into transaction simulations -+ * -+ * @param useTransactionSimulations - true to opt into transaction simulations -+ */ ++ * A setter for the user to opt into transaction simulations ++ * ++ * @param useTransactionSimulations - true to opt into transaction simulations ++ */ + setUseTransactionSimulations(useTransactionSimulations) { -+ this.update((state) => { -+ state.useTransactionSimulations = useTransactionSimulations; -+ }); ++ this.update((state) => { ++ state.useTransactionSimulations = useTransactionSimulations; ++ }); + } + /** * A setter for the user preferences to enable/disable rpc methods. * +@@ -255,7 +312,7 @@ var PreferencesController = class extends _basecontroller.BaseController { + const { disabledRpcMethodPreferences } = this.state; + const newDisabledRpcMethods = { + ...disabledRpcMethodPreferences, +- [methodName]: isEnabled ++ [methodName]: isEnabled, + }; + this.update((state) => { + state.disabledRpcMethodPreferences = newDisabledRpcMethods; +@@ -297,21 +354,28 @@ var PreferencesController = class extends _basecontroller.BaseController { + * @param chainId - On hexadecimal format to enable the incoming transaction network + * @param isIncomingTransactionNetworkEnable - true to enable incoming transactions + */ +- setEnableNetworkIncomingTransactions(chainId, isIncomingTransactionNetworkEnable) { +- if (Object.values(_chunkPOA2PUW4js.ETHERSCAN_SUPPORTED_CHAIN_IDS).includes(chainId)) { ++ setEnableNetworkIncomingTransactions( ++ chainId, ++ isIncomingTransactionNetworkEnable, ++ ) { ++ if ( ++ Object.values(_chunkPOA2PUW4js.ETHERSCAN_SUPPORTED_CHAIN_IDS).includes( ++ chainId, ++ ) ++ ) { + this.update((state) => { + state.showIncomingTransactions = { + ...this.state.showIncomingTransactions, +- [chainId]: isIncomingTransactionNetworkEnable ++ [chainId]: isIncomingTransactionNetworkEnable, + }; + }); + } + } + }; + _syncIdentities = new WeakSet(); +-syncIdentities_fn = function(addresses) { +- addresses = addresses.map( +- (address) => _controllerutils.toChecksumHexAddress.call(void 0, address) ++syncIdentities_fn = function (addresses) { ++ addresses = addresses.map((address) => ++ _controllerutils.toChecksumHexAddress.call(void 0, address), + ); + this.update((state) => { + const { identities } = state; +@@ -335,9 +399,7 @@ syncIdentities_fn = function(addresses) { + }; + var PreferencesController_default = PreferencesController; + +- +- +- +- +-exports.getDefaultPreferencesState = getDefaultPreferencesState; exports.PreferencesController = PreferencesController; exports.PreferencesController_default = PreferencesController_default; ++exports.getDefaultPreferencesState = getDefaultPreferencesState; ++exports.PreferencesController = PreferencesController; ++exports.PreferencesController_default = PreferencesController_default; + //# sourceMappingURL=chunk-FSWGV6H6.js.map diff --git a/node_modules/@metamask/preferences-controller/dist/types/PreferencesController.d.ts b/node_modules/@metamask/preferences-controller/dist/types/PreferencesController.d.ts index 7e3ba15..c3c7ec6 100644 --- a/node_modules/@metamask/preferences-controller/dist/types/PreferencesController.d.ts @@ -199,11 +360,9 @@ index 7e3ba15..c3c7ec6 100644 setUseNftDetection(useNftDetection: boolean): void; /** - * Toggle the opensea enabled setting. -+ * Toggle the display nft media enabled setting. - * +- * - * @param openSeaEnabled - Boolean indicating user preference on using OpenSea's API. -+ * @param displayNftMedia - Boolean indicating user preference on using web2 third parties. - */ +- */ - setOpenSeaEnabled(openSeaEnabled: boolean): void; + setDisplayNftMedia(displayNftMedia: boolean): void; + /**