Skip to content

Commit d21a543

Browse files
authored
Merge branch 'main' into fix/added-support-link-unlock-ui
2 parents 0d9fed0 + 4b7936e commit d21a543

File tree

2 files changed

+47
-67
lines changed

2 files changed

+47
-67
lines changed

ui/contexts/shield/shield-subscription.tsx

Lines changed: 4 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,14 @@ import {
1414
setShowShieldEntryModalOnce,
1515
subscriptionsStartPolling,
1616
} from '../../store/actions';
17-
import {
18-
getSelectedInternalAccount,
19-
getUseExternalServices,
20-
} from '../../selectors';
21-
import { useAccountTotalFiatBalance } from '../../hooks/useAccountTotalFiatBalance';
17+
import { getUseExternalServices } from '../../selectors';
2218
import { selectIsSignedIn } from '../../selectors/identity/authentication';
2319
import { getIsMetaMaskShieldFeatureEnabled } from '../../../shared/modules/environment';
2420
import {
2521
getHasShieldEntryModalShownOnce,
2622
getIsActiveShieldSubscription,
2723
} from '../../selectors/subscription';
2824
import { getIsUnlocked } from '../../ducks/metamask/metamask';
29-
import { getUserBalanceCategory } from '../../../shared/modules/shield';
3025
import { useSubscriptionMetrics } from '../../hooks/shield/metrics/useSubscriptionMetrics';
3126
import { MetaMetricsEventName } from '../../../shared/constants/metametrics';
3227

@@ -60,14 +55,8 @@ export const ShieldSubscriptionProvider: React.FC = ({ children }) => {
6055
const hasShieldEntryModalShownOnce = useSelector(
6156
getHasShieldEntryModalShownOnce,
6257
);
63-
const selectedAccount = useSelector(getSelectedInternalAccount);
6458
const { getSubscriptionEligibility: getShieldSubscriptionEligibility } =
6559
useSubscriptionEligibility(PRODUCT_TYPES.SHIELD);
66-
const { totalFiatBalance } = useAccountTotalFiatBalance(
67-
selectedAccount,
68-
false,
69-
true, // use USD conversion rate instead of the current currency
70-
);
7160
const { captureShieldEligibilityCohortEvent } = useSubscriptionMetrics();
7261

7362
/**
@@ -158,29 +147,15 @@ export const ShieldSubscriptionProvider: React.FC = ({ children }) => {
158147
return;
159148
}
160149

161-
if (
162-
!selectedAccount ||
163-
!isSignedIn ||
164-
!isUnlocked ||
165-
hasShieldEntryModalShownOnce
166-
) {
150+
if (!isSignedIn || !isUnlocked || hasShieldEntryModalShownOnce) {
167151
return;
168152
}
169153

170-
const balanceCategory = totalFiatBalance
171-
? getUserBalanceCategory(Number(totalFiatBalance))
172-
: undefined;
173-
174-
const shieldEligibility = await getShieldSubscriptionEligibility({
175-
balanceCategory,
176-
});
154+
const shieldEligibility = await getShieldSubscriptionEligibility();
177155

178156
if (
179157
!shieldEligibility?.canSubscribe ||
180-
!shieldEligibility.canViewEntryModal ||
181-
!shieldEligibility.minBalanceUSD ||
182-
!totalFiatBalance ||
183-
Number(totalFiatBalance) < shieldEligibility.minBalanceUSD
158+
!shieldEligibility.canViewEntryModal
184159
) {
185160
return;
186161
}
@@ -264,11 +239,9 @@ export const ShieldSubscriptionProvider: React.FC = ({ children }) => {
264239
isMetaMaskShieldFeatureEnabled,
265240
isBasicFunctionalityEnabled,
266241
isShieldSubscriptionActive,
267-
selectedAccount,
268242
isSignedIn,
269243
isUnlocked,
270244
hasShieldEntryModalShownOnce,
271-
totalFiatBalance,
272245
getShieldSubscriptionEligibility,
273246
assignToCohort,
274247
captureShieldEligibilityCohortEvent,
@@ -279,7 +252,6 @@ export const ShieldSubscriptionProvider: React.FC = ({ children }) => {
279252
if (
280253
isMetaMaskShieldFeatureEnabled &&
281254
isBasicFunctionalityEnabled &&
282-
selectedAccount &&
283255
isSignedIn &&
284256
isUnlocked
285257
) {
@@ -289,7 +261,6 @@ export const ShieldSubscriptionProvider: React.FC = ({ children }) => {
289261
}, [
290262
isMetaMaskShieldFeatureEnabled,
291263
isSignedIn,
292-
selectedAccount,
293264
dispatch,
294265
isUnlocked,
295266
isBasicFunctionalityEnabled,

ui/hooks/subscription/useSubscription.ts

Lines changed: 43 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import {
77
ProductType,
88
RecurringInterval,
99
Subscription,
10-
BalanceCategory,
1110
SubscriptionEligibility,
1211
SubscriptionStatus,
1312
ModalType,
@@ -52,17 +51,22 @@ import { getInternalAccountBySelectedAccountGroupAndCaip } from '../../selectors
5251
import {
5352
getMetaMetricsId,
5453
getModalTypeForShieldEntryModal,
54+
getSelectedInternalAccount,
5555
getUnapprovedConfirmations,
5656
selectNetworkConfigurationByChainId,
5757
} from '../../selectors';
5858
import { useSubscriptionMetrics } from '../shield/metrics/useSubscriptionMetrics';
5959
import { CaptureShieldSubscriptionRequestParams } from '../shield/metrics/types';
6060
import { EntryModalSourceEnum } from '../../../shared/constants/subscriptions';
6161
import { DefaultSubscriptionPaymentOptions } from '../../../shared/types';
62-
import { getLatestSubscriptionStatus } from '../../../shared/modules/shield';
62+
import {
63+
getLatestSubscriptionStatus,
64+
getUserBalanceCategory,
65+
} from '../../../shared/modules/shield';
6366
import { openWindow } from '../../helpers/utils/window';
6467
import { SUPPORT_LINK } from '../../../shared/lib/ui-utils';
6568
import { MetaMetricsEventName } from '../../../shared/constants/metametrics';
69+
import { useAccountTotalFiatBalance } from '../useAccountTotalFiatBalance';
6670
import {
6771
TokenWithApprovalAmount,
6872
useSubscriptionPricing,
@@ -396,41 +400,46 @@ export const useSubscriptionEligibility = (product: ProductType) => {
396400
const dispatch = useDispatch<MetaMaskReduxDispatch>();
397401
const isSignedIn = useSelector(selectIsSignedIn);
398402
const isUnlocked = useSelector(getIsUnlocked);
403+
const selectedAccount = useSelector(getSelectedInternalAccount);
404+
const { totalFiatBalance } = useAccountTotalFiatBalance(
405+
selectedAccount,
406+
false,
407+
true, // use USD conversion rate instead of the current currency
408+
);
399409

400-
const getSubscriptionEligibility = useCallback(
401-
async (params?: {
402-
balanceCategory?: BalanceCategory;
403-
}): Promise<SubscriptionEligibility | undefined> => {
404-
try {
405-
// if user is not signed in or unlocked, return undefined
406-
if (!isSignedIn || !isUnlocked) {
407-
return undefined;
408-
}
409-
410-
// get the subscriptions before making the eligibility request
411-
// here, we cannot `useUserSubscriptions` hook as the hook's initial state has empty subscriptions array and loading state is false
412-
// that mistakenly makes `user does not have a subscription` and triggers the eligibility request
413-
const subscriptions = await dispatch(getSubscriptions());
414-
const isShieldSubscriptionActive =
415-
getIsShieldSubscriptionActive(subscriptions);
416-
417-
if (!isShieldSubscriptionActive) {
418-
// only if shield subscription is not active, get the eligibility
419-
const eligibilities = await dispatch(
420-
getSubscriptionsEligibilities(params),
421-
);
422-
return eligibilities.find(
423-
(eligibility) => eligibility.product === product,
424-
);
425-
}
426-
return undefined;
427-
} catch (error) {
428-
log.warn('[useSubscriptionEligibility] error', error);
410+
const getSubscriptionEligibility = useCallback(async (): Promise<
411+
SubscriptionEligibility | undefined
412+
> => {
413+
try {
414+
// if user is not signed in or unlocked, return undefined
415+
if (!isSignedIn || !isUnlocked) {
429416
return undefined;
430417
}
431-
},
432-
[isSignedIn, isUnlocked, dispatch, product],
433-
);
418+
419+
const balanceCategory = getUserBalanceCategory(Number(totalFiatBalance));
420+
421+
// get the subscriptions before making the eligibility request
422+
// here, we cannot `useUserSubscriptions` hook as the hook's initial state has empty subscriptions array and loading state is false
423+
// that mistakenly makes `user does not have a subscription` and triggers the eligibility request
424+
const subscriptions = await dispatch(getSubscriptions());
425+
const isShieldSubscriptionActive =
426+
getIsShieldSubscriptionActive(subscriptions);
427+
428+
if (!isShieldSubscriptionActive) {
429+
// only if shield subscription is not active, get the eligibility
430+
const eligibilities = await dispatch(
431+
getSubscriptionsEligibilities({ balanceCategory }),
432+
);
433+
return eligibilities.find(
434+
(eligibility) => eligibility.product === product,
435+
);
436+
}
437+
return undefined;
438+
} catch (error) {
439+
log.warn('[useSubscriptionEligibility] error', error);
440+
return undefined;
441+
}
442+
}, [isSignedIn, isUnlocked, dispatch, product, totalFiatBalance]);
434443

435444
return {
436445
getSubscriptionEligibility,

0 commit comments

Comments
 (0)