Merge pull request #22024 from overleaf/em-standalone-ai-add-on-is-not-premium

Do not hide upgrade buttons when on standalone AI add-on

GitOrigin-RevId: ec5cf42c051745d5ca1dff57f7cd27a89c21a6a9
This commit is contained in:
Eric Mc Sween 2024-11-25 07:49:07 -05:00 committed by Copybot
parent 0bd8729cc1
commit 0769998dd7
11 changed files with 46 additions and 19 deletions

View file

@ -45,6 +45,9 @@ const OnboardingDataCollectionManager = require('../OnboardingDataCollection/Onb
const UserUpdater = require('../User/UserUpdater')
const Modules = require('../../infrastructure/Modules')
const UserGetter = require('../User/UserGetter')
const {
isStandaloneAiAddOnPlanCode,
} = require('../Subscription/RecurlyEntities')
/**
* @import { GetProjectsRequest, GetProjectsResponse, Project } from "./types"
@ -612,12 +615,15 @@ const _ProjectController = {
const userInNonIndividualSub =
userIsMemberOfGroupSubscription || userHasInstitutionLicence
const userHasPremiumSub =
subscription && !isStandaloneAiAddOnPlanCode(subscription.planCode)
// Persistent upgrade prompts
// in header & in share project modal
const showUpgradePrompt =
Features.hasFeature('saas') &&
userId &&
!subscription &&
!userHasPremiumSub &&
!userInNonIndividualSub
let aiFeaturesAllowed = false

View file

@ -392,7 +392,10 @@ async function projectListPage(req, res, next) {
let showLATAMBanner = false
let recommendedCurrency
if (usersBestSubscription?.type === 'free') {
if (
usersBestSubscription?.type === 'free' ||
usersBestSubscription?.type === 'standalone-ai-add-on'
) {
const latamGeoPricingAssignment =
await SplitTestHandler.promises.getAssignment(
req,

View file

@ -2,6 +2,7 @@
const Settings = require('@overleaf/settings')
const RecurlyWrapper = require('./RecurlyWrapper')
const PlansLocator = require('./PlansLocator')
const { isStandaloneAiAddOnPlanCode } = require('./RecurlyEntities')
const SubscriptionFormatters = require('./SubscriptionFormatters')
const SubscriptionLocator = require('./SubscriptionLocator')
const SubscriptionUpdater = require('./SubscriptionUpdater')
@ -419,16 +420,22 @@ async function getBestSubscription(user) {
}
}
if (individualSubscription && !individualSubscription.groupPlan) {
const plan = PlansLocator.findLocalPlanInSettings(
individualSubscription.planCode
)
if (_isPlanEqualOrBetter(plan, bestSubscription.plan)) {
const remainingTrialDays = _getRemainingTrialDays(individualSubscription)
bestSubscription = {
type: 'individual',
subscription: individualSubscription,
plan,
remainingTrialDays,
if (isStandaloneAiAddOnPlanCode(individualSubscription.planCode)) {
bestSubscription = { type: 'standalone-ai-add-on' }
} else {
const plan = PlansLocator.findLocalPlanInSettings(
individualSubscription.planCode
)
if (_isPlanEqualOrBetter(plan, bestSubscription.plan)) {
const remainingTrialDays = _getRemainingTrialDays(
individualSubscription
)
bestSubscription = {
type: 'individual',
subscription: individualSubscription,
plan,
remainingTrialDays,
}
}
}
}

View file

@ -19,7 +19,7 @@ block append meta
- const staffAccess = sessionUser?.staffAccess
- const canDisplaySplitTestMenu = hasFeature('saas') && (canDisplayAdminMenu || staffAccess?.splitTestMetrics || staffAccess?.splitTestManagement)
- const canDisplaySurveyMenu = hasFeature('saas') && canDisplayAdminMenu
- const enableUpgradeButton = projectDashboardReact && usersBestSubscription && usersBestSubscription.type === 'free'
- const enableUpgradeButton = projectDashboardReact && usersBestSubscription && (usersBestSubscription.type === 'free' || usersBestSubscription.type === 'standalone-ai-add-on')
- const showSignUpLink = hasFeature('registration-page')
meta(name="ol-navbar" data-type="json" content={

View file

@ -12,7 +12,7 @@ nav.navbar.navbar-default.navbar-main.navbar-expand-lg(class={
else
a(href='/', aria-label=settings.appName).navbar-brand
- var enableUpgradeButton = projectDashboardReact && usersBestSubscription && usersBestSubscription.type === 'free'
- var enableUpgradeButton = projectDashboardReact && usersBestSubscription && (usersBestSubscription.type === 'free' || usersBestSubscription.type === 'standalone-ai-add-on')
if (enableUpgradeButton)
a.btn.btn-primary.me-2.d-md-none(
href="/user/subscription/plans"

View file

@ -9,7 +9,7 @@ nav.navbar.navbar-default.navbar-main
aria-label="Toggle " + translate('navigation')
)
i.fa.fa-bars(aria-hidden="true")
- var enableUpgradeButton = projectDashboardReact && usersBestSubscription && usersBestSubscription.type === 'free'
- var enableUpgradeButton = projectDashboardReact && usersBestSubscription && (usersBestSubscription.type === 'free' || usersBestSubscription.type === 'standalone-ai-add-on')
if (enableUpgradeButton)
a.btn.btn-primary.pull-right.me-2.visible-xs(
href="/user/subscription/plans"

View file

@ -9,7 +9,7 @@ nav.navbar.navbar-default.navbar-main.website-redesign-navbar
aria-label="Toggle " + translate('navigation')
)
i.fa.fa-bars(aria-hidden="true")
- var enableUpgradeButton = projectDashboardReact && usersBestSubscription && usersBestSubscription.type === 'free'
- var enableUpgradeButton = projectDashboardReact && usersBestSubscription && (usersBestSubscription.type === 'free' || usersBestSubscription.type === 'standalone-ai-add-on')
if (enableUpgradeButton)
a.btn.btn-primary.pull-right.me-2.visible-xs(
href="/user/subscription/plans"

View file

@ -12,7 +12,7 @@ function CurrentPlanWidget() {
}
const { type } = usersBestSubscription
const isFreePlan = type === 'free'
const isFreePlan = type === 'free' || type === 'standalone-ai-add-on'
const isIndividualPlan = type === 'individual'
const isGroupPlan = type === 'group'
const isCommonsPlan = type === 'commons'

View file

@ -61,7 +61,9 @@ function isOnFreeOrIndividualPlan() {
return false
}
const { type } = subscription
return type === 'free' || type === 'individual'
return (
type === 'free' || type === 'individual' || type === 'standalone-ai-add-on'
)
}
const showConfirmEmail = (userEmail: UserEmailData) => {

View file

@ -28,6 +28,8 @@ describe('ProjectController', function () {
},
siteUrl: 'https://overleaf.com',
algolia: {},
plans: [],
features: {},
}
this.brandVariationDetails = {
id: '12',

View file

@ -37,4 +37,11 @@ type PaidSubscription =
| GroupPlanSubscription
| CommonsPlanSubscription
export type Subscription = FreeSubscription | PaidSubscription
export type StandaloneAiAddOnSubscription = {
type: 'standalone-ai-add-on'
}
export type Subscription =
| FreeSubscription
| PaidSubscription
| StandaloneAiAddOnSubscription