diff --git a/ui/components/multichain/account-list-menu/account-list-menu.tsx b/ui/components/multichain/account-list-menu/account-list-menu.tsx index 9d6ebf60ff02..e34e10266c5b 100644 --- a/ui/components/multichain/account-list-menu/account-list-menu.tsx +++ b/ui/components/multichain/account-list-menu/account-list-menu.tsx @@ -72,7 +72,7 @@ import { getUpdatedAndSortedAccounts, getDefaultHomeActiveTabName, ///: BEGIN:ONLY_INCLUDE_IF(solana) - getRemoteFeatureFlags, + getIsSolanaSupportEnabled, ///: END:ONLY_INCLUDE_IF } from '../../../selectors'; import { setSelectedAccount } from '../../../store/actions'; @@ -287,7 +287,7 @@ export const AccountListMenu = ({ ///: END:ONLY_INCLUDE_IF ///: BEGIN:ONLY_INCLUDE_IF(solana) - const { addSolanaAccount } = useSelector(getRemoteFeatureFlags); + const solanaSupportEnabled = useSelector(getIsSolanaSupportEnabled); const solanaWalletSnapClient = useMultichainWalletSnapClient( WalletClientType.Solana, ); @@ -475,7 +475,7 @@ export const AccountListMenu = ({ } { ///: BEGIN:ONLY_INCLUDE_IF(solana) - addSolanaAccount && ( + solanaSupportEnabled && ( = { const mockState: TestState = { metamask: { + remoteFeatureFlags: { + addSolanaAccount: true, + }, bitcoinSupportEnabled: true, multichainNetworkConfigurationsByChainId: { ...mockNonEvmNetworks, @@ -153,6 +158,28 @@ describe('Multichain network selectors', () => { }); }); + it('returns all multichain network configurations by chain ID excluding Solana when support is disabled and there is no Solana account', () => { + const mockMultichainNetworkStateWithSolanaSupportDisabled = { + ...mockState, + metamask: { + ...mockState.metamask, + remoteFeatureFlags: { + ...mockState.metamask.remoteFeatureFlags, + addSolanaAccount: false, + }, + }, + }; + + expect( + getMultichainNetworkConfigurationsByChainId( + mockMultichainNetworkStateWithSolanaSupportDisabled, + ), + ).toStrictEqual({ + [BtcScope.Mainnet]: mockNonEvmNetworks[BtcScope.Mainnet], + ...mockEvmNetworksWithNewConfig, + }); + }); + it('returns all multichain network configurations by chain ID excluding Bitcoin when support is disabled and there no Bitcoin account', () => { const mockMultichainNetworkStateWithBitcoinSupportDisabled = { ...mockState, diff --git a/ui/selectors/multichain/networks.ts b/ui/selectors/multichain/networks.ts index e731fc884038..d64e0ee12470 100644 --- a/ui/selectors/multichain/networks.ts +++ b/ui/selectors/multichain/networks.ts @@ -14,7 +14,10 @@ import { getNetworkConfigurationsByChainId, } from '../../../shared/modules/selectors/networks'; import { createDeepEqualSelector } from '../../../shared/modules/selectors/util'; -import { getIsBitcoinSupportEnabled } from '../selectors'; +import { + getIsBitcoinSupportEnabled, + getIsSolanaSupportEnabled, +} from '../selectors'; import { getInternalAccounts } from '../accounts'; // Selector types @@ -67,13 +70,15 @@ export const getNonEvmMultichainNetworkConfigurationsByChainId = ( export const getIsNonEvmNetworksEnabled = createDeepEqualSelector( getIsBitcoinSupportEnabled, + getIsSolanaSupportEnabled, getInternalAccounts, - (isBitcoinEnabled, internalAccounts) => { + (isBitcoinEnabled, isSolanaEnabled, internalAccounts) => { + if (isBitcoinEnabled && isSolanaEnabled) { + return { bitcoinEnabled: true, solanaEnabled: true }; + } + let bitcoinEnabled = isBitcoinEnabled; - let solanaEnabled = false; - ///: BEGIN:ONLY_INCLUDE_IF(solana) - solanaEnabled = true; - ///: END:ONLY_INCLUDE_IF + let solanaEnabled = isSolanaEnabled; for (const { scopes } of internalAccounts) { if (scopes.includes(BtcScope.Mainnet)) { diff --git a/ui/selectors/selectors.js b/ui/selectors/selectors.js index 835a93129af5..714553b0f248 100644 --- a/ui/selectors/selectors.js +++ b/ui/selectors/selectors.js @@ -129,6 +129,7 @@ import { getMultichainBalances, getMultichainNetworkProviders, } from './multichain'; +import { getRemoteFeatureFlags } from './remote-feature-flags'; /** `appState` slice selectors */ @@ -2701,6 +2702,17 @@ export function getIsBitcoinTestnetSupportEnabled(state) { return Boolean(bitcoinTestnetSupportEnabled); } +/** + * Get the state of the `solanaSupportEnabled` remote feature flag. + * + * @param {*} state + * @returns The state of the `solanaSupportEnabled` remote feature flag. + */ +export function getIsSolanaSupportEnabled(state) { + const { addSolanaAccount } = getRemoteFeatureFlags(state); + return Boolean(addSolanaAccount); +} + export function getIsCustomNetwork(state) { const chainId = getCurrentChainId(state);