1 import { fromUnixTime, isBefore } from 'date-fns';
3 import { type Currency } from '@proton/payments';
4 import { getAppFromPathnameSafe } from '@proton/shared/lib/apps/slugHelper';
5 import { APPS } from '@proton/shared/lib/constants';
6 import { isManagedExternally } from '@proton/shared/lib/helpers/subscription';
7 import type { ProtonConfig, Subscription, UserModel } from '@proton/shared/lib/interfaces';
9 import hasEligibileCurrencyForBF from '../../helpers/hasEligibileCurrencyForBF';
10 import { FREE_DOWNGRADER_LIMIT } from '../../helpers/offerPeriods';
13 subscription?: Subscription;
14 protonConfig: ProtonConfig;
16 lastSubscriptionEnd?: number;
17 preferredCurrency: Currency;
20 const isEligible = ({ subscription, protonConfig, user, lastSubscriptionEnd = 0, preferredCurrency }: Props) => {
21 const parentApp = getAppFromPathnameSafe(window.location.pathname);
23 (protonConfig.APP_NAME === APPS.PROTONACCOUNT && parentApp === APPS.PROTONPASS) ||
24 protonConfig.APP_NAME === APPS.PROTONPASS;
25 const { canPay, isDelinquent, isFree, hasPassLifetime } = user;
26 const notDelinquent = !isDelinquent;
27 const isNotExternal = !isManagedExternally(subscription);
28 const notLifetime = !hasPassLifetime;
30 const isPreferredCurrencyEligible = hasEligibileCurrencyForBF(preferredCurrency);
39 isPreferredCurrencyEligible &&
40 isBefore(fromUnixTime(lastSubscriptionEnd), FREE_DOWNGRADER_LIMIT)
44 export default isEligible;