diff --git a/services/web/frontend/extracted-translations.json b/services/web/frontend/extracted-translations.json
index 8db302aedb..f5e777bb0d 100644
--- a/services/web/frontend/extracted-translations.json
+++ b/services/web/frontend/extracted-translations.json
@@ -1,5 +1,4 @@
{
- "10_editors_per_project": "",
"12x_more_compile_time": "",
"1_2_width": "",
"1_4_width": "",
@@ -1080,7 +1079,6 @@
"ok_join_project": "",
"on": "",
"on_free_plan_upgrade_to_access_features": "",
- "one_editor_per_project": "",
"one_step_away_from_professional_features": "",
"only_group_admin_or_managers_can_delete_your_account_1": "",
"only_group_admin_or_managers_can_delete_your_account_2": "",
diff --git a/services/web/frontend/js/features/pdf-preview/components/pdf-logs-viewer.tsx b/services/web/frontend/js/features/pdf-preview/components/pdf-logs-viewer.tsx
index f896f1d2ff..ec834432fe 100644
--- a/services/web/frontend/js/features/pdf-preview/components/pdf-logs-viewer.tsx
+++ b/services/web/frontend/js/features/pdf-preview/components/pdf-logs-viewer.tsx
@@ -1,5 +1,5 @@
import { useTranslation } from 'react-i18next'
-import { memo } from 'react'
+import { memo, useState } from 'react'
import classnames from 'classnames'
import PdfValidationIssue from './pdf-validation-issue'
import StopOnFirstErrorPrompt from './stop-on-first-error-prompt'
@@ -34,6 +34,10 @@ function PdfLogsViewer({ alwaysVisible = false }: { alwaysVisible?: boolean }) {
const { t } = useTranslation()
+ const [
+ isShowingPrimaryCompileTimeoutPaywall,
+ setIsShowingPrimaryCompileTimeoutPaywall,
+ ] = useState(false)
const isPaywallChangeCompileTimeoutEnabled = getMeta(
'ol-isPaywallChangeCompileTimeoutEnabled'
)
@@ -56,7 +60,9 @@ function PdfLogsViewer({ alwaysVisible = false }: { alwaysVisible?: boolean }) {
{hasShortCompileTimeout && error === 'timedout' ? (
isCompileTimeoutPaywallDisplay ? (
-
+
) : (
)
@@ -85,10 +91,12 @@ function PdfLogsViewer({ alwaysVisible = false }: { alwaysVisible?: boolean }) {
/>
)}
-
+ {!isShowingPrimaryCompileTimeoutPaywall && (
+
+ )}
)
diff --git a/services/web/frontend/js/features/pdf-preview/components/timeout-upgrade-paywall-prompt.tsx b/services/web/frontend/js/features/pdf-preview/components/timeout-upgrade-paywall-prompt.tsx
index 2104347144..b156890232 100644
--- a/services/web/frontend/js/features/pdf-preview/components/timeout-upgrade-paywall-prompt.tsx
+++ b/services/web/frontend/js/features/pdf-preview/components/timeout-upgrade-paywall-prompt.tsx
@@ -1,4 +1,4 @@
-import { useEffect, useMemo, useState } from 'react'
+import { Dispatch, SetStateAction, useEffect, useMemo, useState } from 'react'
import getMeta from '@/utils/meta'
import * as eventTracking from '@/infrastructure/event-tracking'
import TimeoutMessageAfterPaywallDismissal from './timeout-message-after-paywall-dismissal'
@@ -16,7 +16,13 @@ type Segmentation = Record<
string | number | boolean | undefined | unknown | any
>
-function TimeoutUpgradePaywallPrompt() {
+interface TimeoutUpgradePaywallPromptProps {
+ setIsShowingPrimary: Dispatch>
+}
+
+function TimeoutUpgradePaywallPrompt({
+ setIsShowingPrimary,
+}: TimeoutUpgradePaywallPromptProps) {
const odcRole = getMeta('ol-odcRole')
const planPrices = getMeta('ol-paywallPlans')
const isStudent = useMemo(() => studentRoles.includes(odcRole), [odcRole])
@@ -34,6 +40,7 @@ function TimeoutUpgradePaywallPrompt() {
function onClose() {
sendPaywallEvent('paywall-dismiss')
setIsPaywallDismissed(true)
+ setIsShowingPrimary(false)
}
function onClickInfoLink() {
@@ -50,7 +57,8 @@ function TimeoutUpgradePaywallPrompt() {
sendPaywallEvent('paywall-prompt', {
plan: isStudent ? 'student' : 'collaborator',
})
- }, [isStudent])
+ setIsShowingPrimary(true)
+ }, [isStudent, setIsShowingPrimary])
return (
diff --git a/services/web/frontend/js/shared/components/upgrade-prompt.tsx b/services/web/frontend/js/shared/components/upgrade-prompt.tsx
index 1d6bd1e447..336d9c4344 100644
--- a/services/web/frontend/js/shared/components/upgrade-prompt.tsx
+++ b/services/web/frontend/js/shared/components/upgrade-prompt.tsx
@@ -35,7 +35,7 @@ function PlansLink({
return (
- {t('10_editors_per_project')}
+ {t('collabs_per_proj', { collabcount: isStudent ? 6 : 10 })}
{t('unlimited_document_history')}
@@ -119,6 +119,8 @@ export function UpgradePrompt({
className="btn btn-premium"
href={`/user/subscription/new?planCode=${planCode}&itm-campaign=${itmCampaign}`}
onClick={onClickPaywall}
+ target="_blank"
+ rel="noreferrer"
>
{t('try_for_free')}
@@ -143,7 +145,7 @@ export function UpgradePrompt({
{t('basic_compile_time')}
- {t('one_editor_per_project')}
+ {t('collabs_per_proj_single', { collabcount: 1 })}
{t('limited_document_history')}
diff --git a/services/web/locales/en.json b/services/web/locales/en.json
index 38af911789..40ecc9804a 100644
--- a/services/web/locales/en.json
+++ b/services/web/locales/en.json
@@ -1,5 +1,4 @@
{
- "10_editors_per_project": "10 editors per project",
"12x_basic": "12x Basic",
"12x_more_compile_time": "12x more compile time on our fastest servers",
"1_2_width": "½ width",
@@ -1432,7 +1431,6 @@
"on": "On",
"on_free_plan_upgrade_to_access_features": "You are on the __appName__ Free plan. Upgrade to access these <0>Premium features0>",
"one_collaborator_per_project": "1 collaborator per project",
- "one_editor_per_project": "1 editor per project",
"one_free_collab": "One free collaborator",
"one_per_project": "1 per project",
"one_step_away_from_professional_features": "You are one step away from accessing <0>Overleaf Professional features0>!",