Skip to content

Commit

Permalink
chore: handling logic on the selector
Browse files Browse the repository at this point in the history
  • Loading branch information
aganglada committed Feb 24, 2025
1 parent 44be69d commit 79feb37
Show file tree
Hide file tree
Showing 4 changed files with 54 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down Expand Up @@ -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,
);
Expand Down Expand Up @@ -475,7 +475,7 @@ export const AccountListMenu = ({
}
{
///: BEGIN:ONLY_INCLUDE_IF(solana)
addSolanaAccount && (
solanaSupportEnabled && (
<Box marginTop={4}>
<ButtonLink
size={ButtonLinkSize.Sm}
Expand Down
29 changes: 28 additions & 1 deletion ui/selectors/multichain/networks.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import {
MOCK_ACCOUNT_BIP122_P2WPKH,
MOCK_ACCOUNT_SOLANA_MAINNET,
} from '../../../test/data/mock-accounts';
import { RemoteFeatureFlagsState } from '../remote-feature-flags';
import {
type MultichainNetworkControllerState,
getNonEvmMultichainNetworkConfigurationsByChainId,
Expand All @@ -25,7 +26,8 @@ import {

type TestState = AccountsState &
MultichainNetworkControllerState &
NetworkState & {
NetworkState &
RemoteFeatureFlagsState & {
metamask: { bitcoinSupportEnabled: boolean };
};

Expand Down Expand Up @@ -103,6 +105,9 @@ const mockEvmNetworksWithOldConfig: Record<Hex, NetworkConfiguration> = {

const mockState: TestState = {
metamask: {
remoteFeatureFlags: {
addSolanaAccount: true,
},
bitcoinSupportEnabled: true,
multichainNetworkConfigurationsByChainId: {
...mockNonEvmNetworks,
Expand Down Expand Up @@ -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,
Expand Down
17 changes: 11 additions & 6 deletions ui/selectors/multichain/networks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)) {
Expand Down
12 changes: 12 additions & 0 deletions ui/selectors/selectors.js
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,7 @@ import {
getMultichainBalances,
getMultichainNetworkProviders,
} from './multichain';
import { getRemoteFeatureFlags } from './remote-feature-flags';

/** `appState` slice selectors */

Expand Down Expand Up @@ -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);

Expand Down

0 comments on commit 79feb37

Please sign in to comment.