From e33f1bf108149c7189ea330cefd8454f197921ad Mon Sep 17 00:00:00 2001 From: roo hutton Date: Mon, 3 Feb 2025 15:07:16 +0000 Subject: [PATCH] Merge pull request #23319 from overleaf/rh-compile-timeout-students Expose ODC role to compile timeout paywall GitOrigin-RevId: eca3983019200349e90b4681b59720c0028fb3b6 --- .../src/Features/Project/ProjectController.js | 14 +++++++++++++ .../web/app/views/project/editor/_meta.pug | 1 + .../timeout-upgrade-paywall-prompt.tsx | 20 ++++++++++++++++++- services/web/frontend/js/utils/meta.ts | 1 + 4 files changed, 35 insertions(+), 1 deletion(-) diff --git a/services/web/app/src/Features/Project/ProjectController.js b/services/web/app/src/Features/Project/ProjectController.js index 16d5a88873..644ab7047d 100644 --- a/services/web/app/src/Features/Project/ProjectController.js +++ b/services/web/app/src/Features/Project/ProjectController.js @@ -411,6 +411,13 @@ const _ProjectController = { logger.error({ err, userId }) return null }), + odcRole: OnboardingDataCollectionManager.getOnboardingDataValue( + userId, + 'role' + ).catch(err => { + logger.error({ err, userId }) + return null + }), }) ) const splitTestAssignments = {} @@ -464,6 +471,7 @@ const _ProjectController = { isTokenMember, isInvitedMember, usedLatex, + odcRole, } = userValues const brandVariation = project?.brandVariationId @@ -816,6 +824,12 @@ const _ProjectController = { 'enabled' ? usedLatex : null, + odcRole: + // only use the ODC role value if the split test is enabled + splitTestAssignments['paywall-change-compile-timeout']?.variant === + 'enabled' + ? odcRole + : null, isSaas: Features.hasFeature('saas'), shouldLoadHotjar: splitTestAssignments.hotjar?.variant === 'enabled', isReviewerRoleEnabled: diff --git a/services/web/app/views/project/editor/_meta.pug b/services/web/app/views/project/editor/_meta.pug index 9572c3ea91..ba25e75637 100644 --- a/services/web/app/views/project/editor/_meta.pug +++ b/services/web/app/views/project/editor/_meta.pug @@ -40,6 +40,7 @@ meta(name="ol-ro-mirror-on-client-no-local-storage" data-type="boolean" content= meta(name="ol-isSaas" data-type="boolean" content=isSaas) meta(name="ol-shouldLoadHotjar" data-type="boolean" content=shouldLoadHotjar) meta(name="ol-isReviewerRoleEnabled" data-type="boolean" content=isReviewerRoleEnabled) +meta(name="ol-odcRole" data-type="string" content=odcRole) meta(name="ol-isPaywallChangeCompileTimeoutEnabled" data-type="boolean" content=isPaywallChangeCompileTimeoutEnabled) // translations for the loading page, before i18n has loaded in the client 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 648e31da2c..f2825494f5 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,5 +1,23 @@ +import getMeta from '@/utils/meta' +import { + studentRoles, + StudentRole, +} from '../../../../../modules/onboarding/frontend/js/components/data/roles' +import { useMemo } from 'react' + function TimeoutUpgradePaywallPrompt() { - return
Hello world from new paywall component
+ const odcRole = getMeta('ol-odcRole') + const isStudent = useMemo( + () => studentRoles.includes(odcRole as StudentRole), + [odcRole] + ) + + return ( +
+

Hello world from new paywall component

+

Current user is {!isStudent && 'not'} a student.

+
+ ) } export default TimeoutUpgradePaywallPrompt diff --git a/services/web/frontend/js/utils/meta.ts b/services/web/frontend/js/utils/meta.ts index b8c00d4adc..e02f3c09a7 100644 --- a/services/web/frontend/js/utils/meta.ts +++ b/services/web/frontend/js/utils/meta.ts @@ -153,6 +153,7 @@ export interface Meta { 'ol-notifications': NotificationType[] 'ol-notificationsInstitution': InstitutionType[] 'ol-oauthProviders': OAuthProviders + 'ol-odcRole': string 'ol-overallThemes': OverallThemeMeta[] 'ol-passwordStrengthOptions': PasswordStrengthOptions 'ol-personalAccessTokens': AccessToken[] | undefined