client/components/mma/cancel/cancellationSaves/saveEligibilityCheck.ts (34 lines of code) (raw):

import { getNewMembershipPrice } from '@/client/utilities/pricingConfig/membershipPriceRise'; import type { PaidSubscriptionPlan, ProductDetail, } from '@/shared/productResponse'; import { getMainPlan, getSpecificProductType } from '@/shared/productResponse'; export function ineligibleForSave( products: ProductDetail[], productToCancel: ProductDetail, ): boolean { const productType = getSpecificProductType(productToCancel.tier); if (productType.productType === 'membership') { return isMembershipIneligible(products, productToCancel); } return false; } function isMembershipIneligible( products: ProductDetail[], productToCancel: ProductDetail, ): boolean { const inPaymentFailure = !!products.find((product) => product.alertText); const hasOtherProduct = !!products.find((product) => { const productType = getSpecificProductType(product.tier); return ( productType.productType != 'membership' && !product.subscription.cancelledAt ); }); const membershipTierIsNotSupporter = productToCancel.tier !== 'Supporter'; const mainPlan = getMainPlan( productToCancel.subscription, ) as PaidSubscriptionPlan; const hasBeenPriceRisen = getNewMembershipPrice(mainPlan) === mainPlan.price / 100; return ( inPaymentFailure || hasOtherProduct || membershipTierIsNotSupporter || hasBeenPriceRisen ); }