mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-02-17 23:44:39 -05:00
Added flag for allowing comp member upgrade
refs https://github.com/TryGhost/Team/issues/1728
This commit is contained in:
parent
12bec6011b
commit
aa1c90f60b
4 changed files with 22 additions and 9 deletions
|
@ -10,7 +10,7 @@ import {getActivePage, isAccountPage, isOfferPage} from './pages';
|
||||||
import ActionHandler from './actions';
|
import ActionHandler from './actions';
|
||||||
import './App.css';
|
import './App.css';
|
||||||
import NotificationParser from './utils/notifications';
|
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 {handleDataAttributes} = require('./data-attributes');
|
||||||
const React = require('react');
|
const React = require('react');
|
||||||
|
@ -752,6 +752,10 @@ export default class App extends React.Component {
|
||||||
page = member ? 'accountHome' : loggedOutPage;
|
page = member ? 'accountHome' : loggedOutPage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (page === 'accountPlan' && isComplimentaryMember({member}) && !allowCompMemberUpgrade({member})) {
|
||||||
|
page = 'accountHome';
|
||||||
|
}
|
||||||
|
|
||||||
return getActivePage({page});
|
return getActivePage({page});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@ import MemberAvatar from '../common/MemberGravatar';
|
||||||
import ActionButton from '../common/ActionButton';
|
import ActionButton from '../common/ActionButton';
|
||||||
import CloseButton from '../common/CloseButton';
|
import CloseButton from '../common/CloseButton';
|
||||||
import Switch from '../common/Switch';
|
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 {getDateString} from '../../utils/date-time';
|
||||||
import {ReactComponent as LoaderIcon} from '../../images/icons/loader.svg';
|
import {ReactComponent as LoaderIcon} from '../../images/icons/loader.svg';
|
||||||
import {ReactComponent as OfferTagIcon} from '../../images/icons/offer-tag.svg';
|
import {ReactComponent as OfferTagIcon} from '../../images/icons/offer-tag.svg';
|
||||||
|
@ -274,8 +274,9 @@ const PaidAccountActions = () => {
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
const PlanUpdateButton = () => {
|
const PlanUpdateButton = ({isComplimentary}) => {
|
||||||
if (hasOnlyFreePlan({site})) {
|
const hideUpgrade = allowCompMemberUpgrade({member}) ? false : isComplimentary;
|
||||||
|
if (hideUpgrade || hasOnlyFreePlan({site})) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return (
|
return (
|
||||||
|
|
|
@ -5,7 +5,7 @@ import CloseButton from '../common/CloseButton';
|
||||||
import BackButton from '../common/BackButton';
|
import BackButton from '../common/BackButton';
|
||||||
import {MultipleProductsPlansSection} from '../common/PlansSection';
|
import {MultipleProductsPlansSection} from '../common/PlansSection';
|
||||||
import {getDateString} from '../../utils/date-time';
|
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 = `
|
export const AccountPlanPageStyles = `
|
||||||
.account-plan.full-size .gh-portal-main-title {
|
.account-plan.full-size .gh-portal-main-title {
|
||||||
|
@ -262,7 +262,8 @@ const PlansContainer = ({
|
||||||
}) => {
|
}) => {
|
||||||
const {member} = useContext(AppContext);
|
const {member} = useContext(AppContext);
|
||||||
// Plan upgrade flow for free member
|
// Plan upgrade flow for free member
|
||||||
if (!isPaidMember({member}) || isComplimentaryMember({member})) {
|
const allowUpgrade = allowCompMemberUpgrade({member}) && isComplimentaryMember({member});
|
||||||
|
if (!isPaidMember({member}) || allowUpgrade) {
|
||||||
return (
|
return (
|
||||||
<UpgradePlanSection
|
<UpgradePlanSection
|
||||||
{...{plans, selectedPlan, onPlanSelect, onPlanCheckout}}
|
{...{plans, selectedPlan, onPlanSelect, onPlanCheckout}}
|
||||||
|
@ -360,7 +361,9 @@ export default class AccountPlanPage extends React.Component {
|
||||||
if (priceId) {
|
if (priceId) {
|
||||||
selectedPlan = priceId;
|
selectedPlan = priceId;
|
||||||
}
|
}
|
||||||
if (isPaidMember({member}) && !isComplimentaryMember({member})) {
|
|
||||||
|
const restrictCheckout = allowCompMemberUpgrade({member}) ? !isComplimentaryMember({member}) : true;
|
||||||
|
if (isPaidMember({member}) && restrictCheckout) {
|
||||||
const subscription = getMemberSubscription({member});
|
const subscription = getMemberSubscription({member});
|
||||||
const subscriptionId = subscription ? subscription.id : '';
|
const subscriptionId = subscription ? subscription.id : '';
|
||||||
if (subscriptionId) {
|
if (subscriptionId) {
|
||||||
|
@ -376,8 +379,9 @@ export default class AccountPlanPage extends React.Component {
|
||||||
|
|
||||||
const {member} = this.context;
|
const {member} = this.context;
|
||||||
|
|
||||||
|
const allowCompMember = allowCompMemberUpgrade({member}) ? isComplimentaryMember({member}) : false;
|
||||||
// Work as checkboxes for free member plan selection and button for paid members
|
// 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
|
// Hack: React checkbox gets out of sync with dom state with instant update
|
||||||
this.timeoutId = setTimeout(() => {
|
this.timeoutId = setTimeout(() => {
|
||||||
this.setState(() => {
|
this.setState(() => {
|
||||||
|
|
|
@ -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}) {
|
export function getUpgradeProducts({site, member}) {
|
||||||
const activePrice = getMemberActivePrice({member});
|
const activePrice = getMemberActivePrice({member});
|
||||||
const activePriceCurrency = activePrice?.currency;
|
const activePriceCurrency = activePrice?.currency;
|
||||||
|
|
Loading…
Add table
Reference in a new issue