diff --git a/services/web/app/src/Features/Project/ProjectListController.js b/services/web/app/src/Features/Project/ProjectListController.js index a9cea74876..89f334897c 100644 --- a/services/web/app/src/Features/Project/ProjectListController.js +++ b/services/web/app/src/Features/Project/ProjectListController.js @@ -469,7 +469,6 @@ async function projectListPage(req, res, next) { showInrGeoBanner, inrGeoBannerVariant, inrGeoBannerSplitTestName, - showBackToSchoolModal: Boolean(usersBestSubscription?.type === 'free'), projectDashboardReact: true, // used in navbar welcomePageRedesignVariant: welcomePageRedesignAssignment.variant, groupSubscriptionsPendingEnrollment: diff --git a/services/web/app/src/Features/Subscription/SubscriptionController.js b/services/web/app/src/Features/Subscription/SubscriptionController.js index fa18ac1743..d23728b8df 100644 --- a/services/web/app/src/Features/Subscription/SubscriptionController.js +++ b/services/web/app/src/Features/Subscription/SubscriptionController.js @@ -127,16 +127,6 @@ async function plansPage(req, res) { plansPageViewSegmentation[inrGeoBannerSplitTestName] = inrGeoBannerVariant } - let showBackToSchoolBanner = true - const userId = SessionManager.getLoggedInUserId(req.session) - if (userId) { - const usersBestSubscription = - await SubscriptionViewModelBuilder.promises.getBestSubscription({ - _id: userId, - }) - showBackToSchoolBanner = usersBestSubscription?.type === 'free' - } - AnalyticsManager.recordEventForSession( req.session, 'plans-page-view', @@ -177,7 +167,6 @@ async function plansPage(req, res) { initialLocalizedGroupPrice: SubscriptionHelper.generateInitialLocalizedGroupPrice(currency), showInrGeoBanner, - showBackToSchoolBanner, annualTrialsAssignment: annualTrialsAssignment?.variant, showNewCompileTimeoutVariant, }) diff --git a/services/web/app/views/project/list-react.pug b/services/web/app/views/project/list-react.pug index ab5c905597..44f1dec2ed 100644 --- a/services/web/app/views/project/list-react.pug +++ b/services/web/app/views/project/list-react.pug @@ -33,7 +33,6 @@ block append meta meta(name="ol-inrGeoBannerSplitTestName" data-type="string" content=inrGeoBannerSplitTestName) meta(name="ol-showLATAMBanner" data-type="boolean" content=showLATAMBanner) meta(name="ol-recommendedCurrency" data-type="string" content=recommendedCurrency) - meta(name="ol-showBackToSchoolModal" data-type="boolean" content=showBackToSchoolModal) meta(name="ol-welcomePageRedesignVariant" data-type="string" content=welcomePageRedesignVariant) meta(name="ol-groupSubscriptionsPendingEnrollment" data-type="json" content=groupSubscriptionsPendingEnrollment) meta(name="ol-hasIndividualRecurlySubscription" data-type="boolean" content=hasIndividualRecurlySubscription) diff --git a/services/web/app/views/subscriptions/interstitial-payment.pug b/services/web/app/views/subscriptions/interstitial-payment.pug index 7e473d3077..efecb58383 100644 --- a/services/web/app/views/subscriptions/interstitial-payment.pug +++ b/services/web/app/views/subscriptions/interstitial-payment.pug @@ -14,31 +14,6 @@ block append meta block content main.content.content-alt#main-content - .container - .user-notifications - ul.list-unstyled(ng-cloak) - li.notification-entry - div.alert.alert-back-to-school( - event-tracking-mb="true" - event-tracking="promo-prompt" - event-tracking-trigger="load" - event-segmentation='{"location": "interstitial-page-banner", "name": "bts2023", "content": "banner"}' - ) - .notification-body - | ๐ŸŽ‰   - p - strong #{translate("back_to_school_banner_bargain_with_x_percent_off_in_school_or_not", {x: '15'})} - br - | #{translate("back_to_school_banner_extended_offer_oct_15")} - .notification-action - a.btn.btn-sm.btn-default-outline( - href="/about/back-to-school-promo-2023" - event-tracking-mb="true" - event-tracking="promo-click" - event-tracking-trigger="click" - event-segmentation='{"location": "interstitial-page-banner", "name": "bts2023", "content": "banner", "type": "click"}' - ) #{translate('claim_discounts')} - .content-page .plans .container diff --git a/services/web/app/views/subscriptions/interstitial-payment_no_nudge_monthly.pug b/services/web/app/views/subscriptions/interstitial-payment_no_nudge_monthly.pug index 058dff9c25..a2e805bcc0 100644 --- a/services/web/app/views/subscriptions/interstitial-payment_no_nudge_monthly.pug +++ b/services/web/app/views/subscriptions/interstitial-payment_no_nudge_monthly.pug @@ -14,31 +14,6 @@ block append meta block content main.content.content-alt#main-content - .container - .user-notifications - ul.list-unstyled(ng-cloak) - li.notification-entry - div.alert.alert-back-to-school( - event-tracking-mb="true" - event-tracking="promo-prompt" - event-tracking-trigger="load" - event-segmentation='{"location": "interstitial-page-banner", "name": "bts2023", "content": "banner"}' - ) - .notification-body - | ๐ŸŽ‰   - p - strong #{translate("back_to_school_banner_bargain_with_x_percent_off_in_school_or_not", {x: '15'})} - br - | #{translate("back_to_school_banner_extended_offer_oct_15")} - .notification-action - a.btn.btn-sm.btn-default-outline( - href="/about/back-to-school-promo-2023" - event-tracking-mb="true" - event-tracking="promo-click" - event-tracking-trigger="click" - event-segmentation='{"location": "interstitial-page-banner", "name": "bts2023", "content": "banner", "type": "click"}' - ) #{translate('claim_discounts')} - .content-page .plans .container diff --git a/services/web/app/views/subscriptions/interstitial-payment_nudge_annual.pug b/services/web/app/views/subscriptions/interstitial-payment_nudge_annual.pug index 5b903848ac..082594e97a 100644 --- a/services/web/app/views/subscriptions/interstitial-payment_nudge_annual.pug +++ b/services/web/app/views/subscriptions/interstitial-payment_nudge_annual.pug @@ -14,31 +14,6 @@ block append meta block content main.content.content-alt#main-content - .container - .user-notifications - ul.list-unstyled(ng-cloak) - li.notification-entry - div.alert.alert-back-to-school( - event-tracking-mb="true" - event-tracking="promo-prompt" - event-tracking-trigger="load" - event-segmentation='{"location": "interstitial-page-banner", "name": "bts2023", "content": "banner"}' - ) - .notification-body - | ๐ŸŽ‰   - p - strong #{translate("back_to_school_banner_bargain_with_x_percent_off_in_school_or_not", {x: '15'})} - br - | #{translate("back_to_school_banner_extended_offer_oct_15")} - .notification-action - a.btn.btn-sm.btn-default-outline( - href="/about/back-to-school-promo-2023" - event-tracking-mb="true" - event-tracking="promo-click" - event-tracking-trigger="click" - event-segmentation='{"location": "interstitial-page-banner", "name": "bts2023", "content": "banner", "type": "click"}' - ) #{translate('claim_discounts')} - .content-page .plans .container diff --git a/services/web/app/views/subscriptions/plans.pug b/services/web/app/views/subscriptions/plans.pug index 1676c70c67..cfaa34d60e 100644 --- a/services/web/app/views/subscriptions/plans.pug +++ b/services/web/app/views/subscriptions/plans.pug @@ -12,40 +12,12 @@ block append meta block content main.content.content-alt#main-content - if showBackToSchoolBanner - .container( - ) - .user-notifications - ul.list-unstyled(ng-cloak) - li.notification-entry - div.alert.alert-back-to-school( - event-tracking-mb="true" - event-tracking="promo-prompt" - event-tracking-trigger="load" - event-segmentation='{"location": "plans-page-banner", "name": "bts2023", "content": "banner"}' - ) - .notification-body - | ๐ŸŽ‰   - p - strong #{translate("back_to_school_banner_bargain_with_x_percent_off_in_school_or_not", {x: '15'})} - br - | #{translate("back_to_school_banner_extended_offer_oct_15")} - .notification-action - a.btn.btn-sm.btn-default-outline( - href="/about/back-to-school-promo-2023" - event-tracking-mb="true" - event-tracking="promo-click" - event-tracking-trigger="click" - event-segmentation='{"location": "plans-page-banner", "name": "bts2023", "content": "banner", "type": "click"}' - ) #{translate('claim_discounts')} - .content-page .plans .container(ng-cloak) if showInrGeoBanner div.alert.alert-success.text-centered !{translate("inr_discount_offer_plans_page_banner", {flag: '๐Ÿ‡ฎ๐Ÿ‡ณ'})} - .row .col-md-12 .page-header.centered.plans-header.text-centered.top-page-header diff --git a/services/web/frontend/extracted-translations.json b/services/web/frontend/extracted-translations.json index f0d93682a5..37d1e635e4 100644 --- a/services/web/frontend/extracted-translations.json +++ b/services/web/frontend/extracted-translations.json @@ -90,10 +90,6 @@ "autocomplete": "", "autocomplete_references": "", "back": "", - "back_to_school_banner_extended_offer_oct_15": "", - "back_to_school_banner_x_percent_off": "", - "back_to_school_bargain_for_everyone": "", - "back_to_school_modal_offers_from_writefull_and_papers": "", "back_to_subscription": "", "back_to_your_projects": "", "beta_program_already_participating": "", @@ -154,7 +150,6 @@ "checking_project_github_status": "", "choose_a_custom_color": "", "choose_from_group_members": "", - "claim_discounts": "", "clear_cached_files": "", "clear_search": "", "click_here_to_view_sl_in_lng": "", diff --git a/services/web/frontend/js/features/project-list/components/notifications/ads/back-to-school-modal.tsx b/services/web/frontend/js/features/project-list/components/notifications/ads/back-to-school-modal.tsx deleted file mode 100644 index 5ec57eabb0..0000000000 --- a/services/web/frontend/js/features/project-list/components/notifications/ads/back-to-school-modal.tsx +++ /dev/null @@ -1,110 +0,0 @@ -import { useCallback, useEffect, useRef, useState } from 'react' -import { useTranslation } from 'react-i18next' -import usePersistedState from '../../../../../shared/hooks/use-persisted-state' -import * as eventTracking from '../../../../../infrastructure/event-tracking' -import { Modal, Button } from 'react-bootstrap' -import AccessibleModal from '../../../../../shared/components/accessible-modal' - -export default function BackToSchoolModal() { - const { t } = useTranslation() - const [dismissedUntil, setDismissedUntil] = usePersistedState< - Date | undefined - >(`has_dismissed_back_to_school_modal_until`) - const viewEventSent = useRef(false) - - const [showModal, setShowModal] = useState(true) - - useEffect(() => { - if (dismissedUntil && new Date(dismissedUntil) > new Date()) { - return - } - if (!viewEventSent.current) { - eventTracking.sendMB('promo-prompt', { - name: 'bts2023', - location: 'dashboard-modal', - content: 'modal', - }) - viewEventSent.current = true - } - }, [dismissedUntil]) - - const handleClick = useCallback(() => { - eventTracking.sendMB('promo-click', { - name: 'bts2023', - location: 'dashboard-modal', - content: 'modal', - type: 'click', - }) - - setShowModal(false) - - window.open('/about/back-to-school-promo-2023') - }, []) - - const bannerDismissed = useCallback(() => { - eventTracking.sendMB('promo-dismiss', { - name: 'bts2023', - location: 'dashboard-modal', - content: 'modal', - }) - const until = new Date() - until.setDate(until.getDate() + 14) // 14 days - setDismissedUntil(until) - }, [setDismissedUntil]) - - const handleHide = useCallback(() => { - setShowModal(false) - bannerDismissed() - }, [bannerDismissed]) - - const handleMaybeLater = useCallback(() => { - eventTracking.sendMB('promo-click', { - name: 'bts2023', - location: 'dashboard-modal', - content: 'modal', - type: 'pause', - }) - setShowModal(false) - const until = new Date() - until.setDate(until.getDate() + 1) // 1 day - setDismissedUntil(until) - }, [setDismissedUntil]) - - if (dismissedUntil && new Date(dismissedUntil) > new Date()) { - return null - } - - return ( - - - - {t('back_to_school_bargain_for_everyone')} - - - -

- -

- - {t('back_to_school_banner_x_percent_off', { x: '15' })} - -

{t('back_to_school_modal_offers_from_writefull_and_papers')}

-

{t('back_to_school_banner_extended_offer_oct_15')}

-
- - - - -
- ) -} diff --git a/services/web/frontend/js/features/project-list/components/notifications/user-notifications.tsx b/services/web/frontend/js/features/project-list/components/notifications/user-notifications.tsx index 3046435d3a..e647f97e44 100644 --- a/services/web/frontend/js/features/project-list/components/notifications/user-notifications.tsx +++ b/services/web/frontend/js/features/project-list/components/notifications/user-notifications.tsx @@ -9,7 +9,6 @@ import INRBanner from './ads/inr-banner' import LATAMBanner from './ads/latam-banner' import getMeta from '../../../../utils/meta' import importOverleafModules from '../../../../../macros/import-overleaf-module.macro' -import BackToSchoolModal from './ads/back-to-school-modal' import customLocalStorage from '../../../../infrastructure/local-storage' import { sendMB } from '../../../../infrastructure/event-tracking' @@ -36,12 +35,9 @@ function UserNotifications() { 'ol-groupSubscriptionsPendingEnrollment', [] ) - const showBackToSchoolModal = getMeta('ol-showBackToSchoolModal', false) const showInrGeoBanner = getMeta('ol-showInrGeoBanner', false) - const inrGeoBannerVariant = showBackToSchoolModal - ? 'default' // This test should be disabled to prevent double modals, but sanity check to be safe - : getMeta('ol-inrGeoBannerVariant', 'default') + const inrGeoBannerVariant = getMeta('ol-inrGeoBannerVariant', 'default') const inrGeoBannerSplitTestName = getMeta( 'ol-inrGeoBannerSplitTestName', 'unassigned' @@ -50,7 +46,7 @@ function UserNotifications() { // Temporary workaround to prevent also showing groups/enterprise banner const [showWritefull, setShowWritefull] = useState(() => { - if (isChromium() && !showBackToSchoolModal) { + if (isChromium()) { const show = getMeta('ol-showWritefullPromoBanner') && !customLocalStorage.getItem('has_dismissed_writefull_promo_banner') @@ -93,7 +89,6 @@ function UserNotifications() { splitTestName={inrGeoBannerSplitTestName} /> ) : null} - {showBackToSchoolModal && }