0
Fork 0
mirror of https://github.com/TryGhost/Ghost.git synced 2025-02-10 23:36:14 -05:00

Added flag for allowing comp member upgrade

refs https://github.com/TryGhost/Team/issues/1728
This commit is contained in:
Rishabh 2022-08-19 19:21:23 +05:30 committed by Rishabh Garg
parent 12bec6011b
commit aa1c90f60b
4 changed files with 22 additions and 9 deletions

View file

@ -10,7 +10,7 @@ import {getActivePage, isAccountPage, isOfferPage} from './pages';
import ActionHandler from './actions';
import './App.css';
import NotificationParser from './utils/notifications';
import {createPopupNotification, getCurrencySymbol, getFirstpromoterId, getPriceIdFromPageQuery, getProductCadenceFromPrice, getProductFromId, getQueryPrice, getSiteDomain, isActiveOffer, isInviteOnlySite, isPaidMember, isSentryEventAllowed, removePortalLinkFromUrl} from './utils/helpers';
import {allowCompMemberUpgrade, createPopupNotification, getCurrencySymbol, getFirstpromoterId, getPriceIdFromPageQuery, getProductCadenceFromPrice, getProductFromId, getQueryPrice, getSiteDomain, isActiveOffer, isComplimentaryMember, isInviteOnlySite, isPaidMember, isSentryEventAllowed, removePortalLinkFromUrl} from './utils/helpers';
const {handleDataAttributes} = require('./data-attributes');
const React = require('react');
@ -752,6 +752,10 @@ export default class App extends React.Component {
page = member ? 'accountHome' : loggedOutPage;
}
if (page === 'accountPlan' && isComplimentaryMember({member}) && !allowCompMemberUpgrade({member})) {
page = 'accountHome';
}
return getActivePage({page});
}

View file

@ -3,7 +3,7 @@ import MemberAvatar from '../common/MemberGravatar';
import ActionButton from '../common/ActionButton';
import CloseButton from '../common/CloseButton';
import Switch from '../common/Switch';
import {getMemberSubscription, getMemberTierName, getSiteNewsletters, getSupportAddress, getUpdatedOfferPrice, hasCommentsEnabled, hasMultipleNewsletters, hasMultipleProductsFeature, hasOnlyFreePlan, isComplimentaryMember, subscriptionHasFreeTrial} from '../../utils/helpers';
import {allowCompMemberUpgrade, getMemberSubscription, getMemberTierName, getSiteNewsletters, getSupportAddress, getUpdatedOfferPrice, hasCommentsEnabled, hasMultipleNewsletters, hasMultipleProductsFeature, hasOnlyFreePlan, isComplimentaryMember, subscriptionHasFreeTrial} from '../../utils/helpers';
import {getDateString} from '../../utils/date-time';
import {ReactComponent as LoaderIcon} from '../../images/icons/loader.svg';
import {ReactComponent as OfferTagIcon} from '../../images/icons/offer-tag.svg';
@ -274,8 +274,9 @@ const PaidAccountActions = () => {
);
};
const PlanUpdateButton = () => {
if (hasOnlyFreePlan({site})) {
const PlanUpdateButton = ({isComplimentary}) => {
const hideUpgrade = allowCompMemberUpgrade({member}) ? false : isComplimentary;
if (hideUpgrade || hasOnlyFreePlan({site})) {
return null;
}
return (

View file

@ -5,7 +5,7 @@ import CloseButton from '../common/CloseButton';
import BackButton from '../common/BackButton';
import {MultipleProductsPlansSection} from '../common/PlansSection';
import {getDateString} from '../../utils/date-time';
import {formatNumber, getAvailablePrices, getFilteredPrices, getMemberActivePrice, getMemberSubscription, getPriceFromSubscription, getProductFromPrice, getSubscriptionFromId, getUpgradeProducts, hasMultipleProductsFeature, isComplimentaryMember, isPaidMember} from '../../utils/helpers';
import {allowCompMemberUpgrade, formatNumber, getAvailablePrices, getFilteredPrices, getMemberActivePrice, getMemberSubscription, getPriceFromSubscription, getProductFromPrice, getSubscriptionFromId, getUpgradeProducts, hasMultipleProductsFeature, isComplimentaryMember, isPaidMember} from '../../utils/helpers';
export const AccountPlanPageStyles = `
.account-plan.full-size .gh-portal-main-title {
@ -262,7 +262,8 @@ const PlansContainer = ({
}) => {
const {member} = useContext(AppContext);
// Plan upgrade flow for free member
if (!isPaidMember({member}) || isComplimentaryMember({member})) {
const allowUpgrade = allowCompMemberUpgrade({member}) && isComplimentaryMember({member});
if (!isPaidMember({member}) || allowUpgrade) {
return (
<UpgradePlanSection
{...{plans, selectedPlan, onPlanSelect, onPlanCheckout}}
@ -360,7 +361,9 @@ export default class AccountPlanPage extends React.Component {
if (priceId) {
selectedPlan = priceId;
}
if (isPaidMember({member}) && !isComplimentaryMember({member})) {
const restrictCheckout = allowCompMemberUpgrade({member}) ? !isComplimentaryMember({member}) : true;
if (isPaidMember({member}) && restrictCheckout) {
const subscription = getMemberSubscription({member});
const subscriptionId = subscription ? subscription.id : '';
if (subscriptionId) {
@ -376,8 +379,9 @@ export default class AccountPlanPage extends React.Component {
const {member} = this.context;
const allowCompMember = allowCompMemberUpgrade({member}) ? isComplimentaryMember({member}) : false;
// Work as checkboxes for free member plan selection and button for paid members
if (!isPaidMember({member}) || isComplimentaryMember({member})) {
if (!isPaidMember({member}) || allowCompMember) {
// Hack: React checkbox gets out of sync with dom state with instant update
this.timeoutId = setTimeout(() => {
this.setState(() => {

View file

@ -84,6 +84,10 @@ export function getNewsletterFromUuid({site, uuid}) {
});
}
export function allowCompMemberUpgrade({member}) {
return member?.subscriptions?.[0]?.tier?.expiry_at !== undefined;
}
export function getUpgradeProducts({site, member}) {
const activePrice = getMemberActivePrice({member});
const activePriceCurrency = activePrice?.currency;
@ -818,7 +822,7 @@ export function getUrlHistory() {
} catch (error) {
// Failed to access localStorage or something related to that.
// Log a warning, as this shouldn't happen on a modern browser.
/* eslint-disable no-console */
console.warn(`[Portal] Failed to load member URL history:`, error);
}