From e36b12ea1be8dac39037d7daae51e51314090e56 Mon Sep 17 00:00:00 2001 From: Antoine Clausse Date: Fri, 16 Jan 2026 11:57:51 +0100 Subject: [PATCH] Merge pull request #30641 from overleaf/ac-uniaccessphase1-teardown [web] Tear down split-test `uniaccessphase1` GitOrigin-RevId: ef1726034362c7a0e95fb881d398fe39156713a5 --- .../web/.storybook/utils/with-split-tests.tsx | 5 - .../PasswordReset/PasswordResetController.mjs | 24 +--- .../web/frontend/extracted-translations.json | 2 - .../components/layouts/content-layout.tsx | 16 --- .../frontend/js/shared/components/stepper.tsx | 27 ---- .../frontend/js/shared/hooks/use-is-ciam.ts | 6 - .../frontend/stylesheets/components/all.scss | 1 - .../stylesheets/components/stepper.scss | 20 --- .../web/frontend/stylesheets/pages/all.scss | 3 - .../web/frontend/stylesheets/pages/auth.scss | 31 ----- .../web/frontend/stylesheets/pages/login.scss | 48 ------- .../pages/onboarding-confirm-email.scss | 27 ---- .../stylesheets/pages/onboarding.scss | 124 ------------------ .../frontend/stylesheets/pages/register.scss | 46 ------- .../stylesheets/pages/try-premium.scss | 42 ------ services/web/locales/en.json | 5 - 16 files changed, 3 insertions(+), 424 deletions(-) delete mode 100644 services/web/frontend/js/shared/components/layouts/content-layout.tsx delete mode 100644 services/web/frontend/js/shared/components/stepper.tsx delete mode 100644 services/web/frontend/js/shared/hooks/use-is-ciam.ts delete mode 100644 services/web/frontend/stylesheets/components/stepper.scss delete mode 100644 services/web/frontend/stylesheets/pages/login.scss delete mode 100644 services/web/frontend/stylesheets/pages/onboarding-confirm-email.scss delete mode 100644 services/web/frontend/stylesheets/pages/try-premium.scss diff --git a/services/web/.storybook/utils/with-split-tests.tsx b/services/web/.storybook/utils/with-split-tests.tsx index 4704f8e2dc..64773533d8 100644 --- a/services/web/.storybook/utils/with-split-tests.tsx +++ b/services/web/.storybook/utils/with-split-tests.tsx @@ -5,11 +5,6 @@ import { SplitTestContext } from '@/shared/context/split-test-context' export const defaultSplitTestsArgTypes = { // to be able to use this utility, you need to add the argTypes for each split test in this object // Check the original implementation for an example: https://github.com/overleaf/internal/pull/17809 - uniaccessphase1: { - description: 'Enable CIAM designs', - control: { type: 'select' as const }, - options: ['default', 'enabled'], - }, } export const withSplitTests = ( diff --git a/services/web/app/src/Features/PasswordReset/PasswordResetController.mjs b/services/web/app/src/Features/PasswordReset/PasswordResetController.mjs index 24d00c78a3..8079e54187 100644 --- a/services/web/app/src/Features/PasswordReset/PasswordResetController.mjs +++ b/services/web/app/src/Features/PasswordReset/PasswordResetController.mjs @@ -9,7 +9,7 @@ import OError from '@overleaf/o-error' import EmailsHelper from '../Helpers/EmailHelper.mjs' import { expressify } from '@overleaf/promise-utils' import { z, parseReq } from '../../infrastructure/Validation.mjs' -import SplitTestHandler from '../SplitTests/SplitTestHandler.mjs' +import Features from '../../infrastructure/Features.mjs' const setNewUserPasswordSchema = z.object({ body: z.object({ @@ -195,10 +195,6 @@ async function renderSetPasswordForm(req, res, next) { params.append('email', email) } } - if (req.query.uniaccessphase1) { - // Preserve uniaccessphase1 flag in the redirect so it can be tested - params.append('uniaccessphase1', req.query.uniaccessphase1) - } const queryString = params.toString() ? `?${params.toString()}` : '' return res.redirect('/user/password/set' + queryString) } catch (err) { @@ -219,16 +215,8 @@ async function renderSetPasswordForm(req, res, next) { const passwordResetToken = req.session.resetToken delete req.session.resetToken - const ciamAssignment = await SplitTestHandler.promises.getAssignment( - req, - res, - 'uniaccessphase1' - ) - res.render( - ciamAssignment.variant === 'enabled' - ? 'user/setPasswordCiam' - : 'user/setPassword', + Features.hasFeature('saas') ? 'user/setPasswordCiam' : 'user/setPassword', { title: 'set_password', email, @@ -251,14 +239,8 @@ async function renderRequestResetForm(req, res) { error = 'password_reset_token_expired' } - const ciamAssignment = await SplitTestHandler.promises.getAssignment( - req, - res, - 'uniaccessphase1' - ) - res.render( - ciamAssignment.variant === 'enabled' + Features.hasFeature('saas') ? 'user/passwordResetCiam' : 'user/passwordReset', { diff --git a/services/web/frontend/extracted-translations.json b/services/web/frontend/extracted-translations.json index 9e286c5900..9d25321a10 100644 --- a/services/web/frontend/extracted-translations.json +++ b/services/web/frontend/extracted-translations.json @@ -545,8 +545,6 @@ "email_address_is_invalid": "", "email_already_registered": "", "email_attribute": "", - "email_confirmed_onboarding": "", - "email_confirmed_onboarding_message": "", "email_does_not_belong_to_university": "", "email_limit_reached": "", "email_link_expired": "", diff --git a/services/web/frontend/js/shared/components/layouts/content-layout.tsx b/services/web/frontend/js/shared/components/layouts/content-layout.tsx deleted file mode 100644 index b77ce98585..0000000000 --- a/services/web/frontend/js/shared/components/layouts/content-layout.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import React, { FC, ReactNode } from 'react' - -type Props = { children: ReactNode; isMain?: boolean; alt?: boolean } - -const ContentLayout: FC = ({ children, isMain, alt }: Props) => { - const className = alt ? 'content content-alt' : 'content' - return isMain ? ( -
- {children} -
- ) : ( -
{children}
- ) -} - -export default ContentLayout diff --git a/services/web/frontend/js/shared/components/stepper.tsx b/services/web/frontend/js/shared/components/stepper.tsx deleted file mode 100644 index 1c4311c1b7..0000000000 --- a/services/web/frontend/js/shared/components/stepper.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import classNames from 'classnames' -import { useTranslation } from 'react-i18next' - -export function Stepper({ steps, active }: { steps: number; active: number }) { - const { t } = useTranslation() - return ( -
- {Array.from({ length: steps }).map((_, i) => ( -
- ))} -
- ) -} diff --git a/services/web/frontend/js/shared/hooks/use-is-ciam.ts b/services/web/frontend/js/shared/hooks/use-is-ciam.ts deleted file mode 100644 index 1220675f10..0000000000 --- a/services/web/frontend/js/shared/hooks/use-is-ciam.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { useSplitTestContext } from '@/shared/context/split-test-context' - -export default function useIsCiam() { - const { splitTestVariants } = useSplitTestContext() - return splitTestVariants.uniaccessphase1 === 'enabled' -} diff --git a/services/web/frontend/stylesheets/components/all.scss b/services/web/frontend/stylesheets/components/all.scss index b7ddbe6290..55371d978d 100644 --- a/services/web/frontend/stylesheets/components/all.scss +++ b/services/web/frontend/stylesheets/components/all.scss @@ -39,7 +39,6 @@ @import 'dev-toolbar'; @import 'tos'; @import 'collapsible-file-header'; -@import 'stepper'; @import 'radio-chip'; @import 'panel-heading'; @import 'menu-bar'; diff --git a/services/web/frontend/stylesheets/components/stepper.scss b/services/web/frontend/stylesheets/components/stepper.scss deleted file mode 100644 index d1134fe485..0000000000 --- a/services/web/frontend/stylesheets/components/stepper.scss +++ /dev/null @@ -1,20 +0,0 @@ -.stepper { - display: flex; - gap: var(--spacing-05); - width: 100%; - height: 6px; - - .step { - width: 100%; - border-radius: 6px; - background: var(--neutral-20); - } - - .step.completed { - background: var(--green-50); - } - - .step.active { - background: var(--green-20); - } -} diff --git a/services/web/frontend/stylesheets/pages/all.scss b/services/web/frontend/stylesheets/pages/all.scss index 3e6c9adcbe..71f4d5ff13 100644 --- a/services/web/frontend/stylesheets/pages/all.scss +++ b/services/web/frontend/stylesheets/pages/all.scss @@ -46,17 +46,14 @@ @import 'homepage'; @import 'auth'; @import 'login-register'; -@import 'login'; @import 'register'; @import 'plans'; -@import 'onboarding-confirm-email'; @import 'onboarding-confirm-email-ciam'; @import 'secondary-confirm-email'; @import 'onboarding'; @import 'admin/admin'; @import 'admin/project-url-lookup'; @import 'add-secondary-email-prompt'; -@import 'try-premium'; @import 'bonus'; @import 'portals'; @import 'wiki'; diff --git a/services/web/frontend/stylesheets/pages/auth.scss b/services/web/frontend/stylesheets/pages/auth.scss index 9432892c1b..034ef7e502 100644 --- a/services/web/frontend/stylesheets/pages/auth.scss +++ b/services/web/frontend/stylesheets/pages/auth.scss @@ -27,14 +27,6 @@ margin-top: var(--spacing-04); } -.login-overleaf-logo-container { - display: block; - padding: var(--spacing-06); - text-align: center; - padding-top: var(--spacing-13); - padding-bottom: var(--spacing-09); -} - .login-register-container { max-width: 400px; margin: 0 auto; @@ -97,26 +89,3 @@ padding-bottom: 0; } } - -.sso-auth-login-container { - max-width: 400px; - margin: 0 auto; - padding: 0 var(--spacing-06); - - h1 { - font-size: var(--font-size-07); - line-height: var(--line-height-06); - } - - .login-register-text { - font-size: var(--font-size-02); - } - - .email-label { - padding-top: var(--spacing-06); - } - - .login-register-other-links { - padding-top: var(--spacing-09); - } -} diff --git a/services/web/frontend/stylesheets/pages/login.scss b/services/web/frontend/stylesheets/pages/login.scss deleted file mode 100644 index c671794daf..0000000000 --- a/services/web/frontend/stylesheets/pages/login.scss +++ /dev/null @@ -1,48 +0,0 @@ -.login-container { - max-width: 320px; - margin: 0 auto; - padding-top: var(--spacing-11); - text-align: center; - padding-bottom: 125px; // to prevent cookie banner from covering the bottom text of the page on mobile - - h1 { - margin-bottom: 0; - - @include heading-sm; - } - - .explanatory-ciam-notification .notification-content { - text-align: left; - } - - form { - padding-top: var(--spacing-08); - - input { - height: 35px; - } - } - - .login-other-link { - padding: var(--spacing-08) 0; - - p { - margin-bottom: 0; - } - - .login-text { - padding-bottom: 0; - } - } - - .login-text { - padding-bottom: var(--spacing-08); - margin-bottom: 0; - - @include body-sm; - } - - .recaptcha-branding { - @include body-xs; - } -} diff --git a/services/web/frontend/stylesheets/pages/onboarding-confirm-email.scss b/services/web/frontend/stylesheets/pages/onboarding-confirm-email.scss deleted file mode 100644 index 723b2a62c8..0000000000 --- a/services/web/frontend/stylesheets/pages/onboarding-confirm-email.scss +++ /dev/null @@ -1,27 +0,0 @@ -#onboarding-confirm-email { - .confirm-email-form .confirm-email-form-inner { - margin: auto; - max-width: 480px; - - .notification { - margin-bottom: var(--spacing-05); - } - - .text-danger { - display: flex; - gap: var(--spacing-03); - padding: var(--spacing-02); - } - - .form-label { - font-weight: normal; - } - - .form-actions { - margin-top: var(--spacing-07); - display: flex; - flex-direction: column; - gap: var(--spacing-05); - } - } -} diff --git a/services/web/frontend/stylesheets/pages/onboarding.scss b/services/web/frontend/stylesheets/pages/onboarding.scss index b2841d29a4..6c46579579 100644 --- a/services/web/frontend/stylesheets/pages/onboarding.scss +++ b/services/web/frontend/stylesheets/pages/onboarding.scss @@ -1,127 +1,3 @@ -.onboarding-data-collection-wrapper { - max-width: 730px; - margin: 0 auto; - display: flex; - flex-direction: column; - gap: 10px; - - .d-block, - .select-wrapper { - label { - font-size: 14px; // override DownshiftInput and Select component label size - } - - .select-items { - max-height: 150px; - } - - .select-trigger { - border: 1px solid var(--neutral-60); - color: var(--neutral-60); - } - } - - p { - font-size: 16px; - margin-bottom: var(--spacing-06); - } - - .logo { - width: 130px; - margin: 0 auto; - } - - form { - display: flex; - flex-direction: column; - gap: var(--spacing-08); - - .group-horizontal { - display: flex; - justify-content: stretch; - gap: var(--spacing-08); - - @include media-breakpoint-down(md) { - flex-direction: column; - gap: 0; - } - - .form-group { - flex-grow: 1; - } - } - - .form-actions { - display: flex; - justify-content: space-between; - - > div { - display: flex; - align-items: center; - gap: var(--spacing-04); - } - } - } -} - -.onboarding-data-collection-form { - background: var(--bg-light-primary); - padding: var(--spacing-08); - display: flex; - flex-direction: column; - gap: var(--spacing-08); -} - -.onboarding-question-title { - font-size: 20px; - border-bottom: none; - margin-bottom: var(--spacing-08); -} - -.onboarding-step-2 { - .radio-group { - height: 240px; - } - - .form-check { - margin: 0; - - p { - margin-bottom: 0; - } - - label { - display: flex; - align-items: center; - gap: var(--spacing-04); - - input { - margin-right: var(--spacing-02); - } - } - } -} - -.onboarding-collapse-button { - display: flex; - align-items: center; - cursor: pointer; - color: var(--blue-50); - user-select: none; -} - -.onboarding-privacy-extended { - @include media-breakpoint-down(md) { - padding: 0 var(--spacing-08); - } -} - -.onboarding-data-collection-form-margin { - @include media-breakpoint-down(md) { - margin-bottom: 100px; - } -} - .compromised-password-content { display: flex; flex-direction: column; diff --git a/services/web/frontend/stylesheets/pages/register.scss b/services/web/frontend/stylesheets/pages/register.scss index 90a90f32ce..94c0219e3a 100644 --- a/services/web/frontend/stylesheets/pages/register.scss +++ b/services/web/frontend/stylesheets/pages/register.scss @@ -11,52 +11,6 @@ margin-bottom: 0; } - .register-content-container { - padding: 0; // override bootstrap padding - display: flex; - background-color: #f2f4f7; - min-height: 100vh; - } - - .register-form-container { - display: flex; - justify-content: center; - padding-top: var(--spacing-11); - background-color: var(--white); - - @include media-breakpoint-down(lg) { - height: 100%; - } - - .register-form { - text-align: center; - max-width: 320px; - padding-bottom: 120px; - - .notification-content p { - text-align: left; - } - - .registration-message { - .registration-message-heading { - color: var(--neutral-70); - font-size: var(--font-size-05); - line-height: var(--line-height-04); - margin-top: var(--spacing-08); - margin-bottom: var(--spacing-05); - } - - .registration-message-details { - font-size: var(--font-size-02); - } - } - - .tos-agreement-notice { - text-align: left; - } - } - } - .register-illustration-container { height: 100%; display: flex; diff --git a/services/web/frontend/stylesheets/pages/try-premium.scss b/services/web/frontend/stylesheets/pages/try-premium.scss deleted file mode 100644 index 406b7830d0..0000000000 --- a/services/web/frontend/stylesheets/pages/try-premium.scss +++ /dev/null @@ -1,42 +0,0 @@ -.try-premium-page { - .try-premium-logo-container { - padding: 0 var(--spacing-08); - display: flex; - justify-content: space-evenly; - } - - .try-premium-third-party-logo { - width: 36px; - height: 36px; - } - - .try-premium-page-list-wrapper { - display: flex; - justify-content: center; - align-items: center; - padding-bottom: var(--spacing-06); - } - - .try-premium-page-list { - padding-inline-start: 0; - display: flex; - align-items: center; - flex-direction: column; - - @media (min-width: var(--bs-breakpoint-sm)) { - flex-direction: row; - justify-content: space-between; - width: 100%; - max-width: 500px; - } - - ul { - margin-bottom: 0; - width: 300px; - - @media (min-width: var(--bs-breakpoint-sm)) { - width: unset; - } - } - } -} diff --git a/services/web/locales/en.json b/services/web/locales/en.json index d61f4633b6..5a25e773ba 100644 --- a/services/web/locales/en.json +++ b/services/web/locales/en.json @@ -471,7 +471,6 @@ "create_a_new_password_for_your_account": "Create a new password for your account", "create_a_new_project": "Create a new project", "create_account": "Create account", - "create_an_account": "Create an account", "create_first_admin_account": "Create the first Admin account", "create_new_account": "Create new account", "create_new_subscription": "Create new subscription", @@ -691,8 +690,6 @@ "email_already_registered_secondary": "This email is already registered as a secondary email", "email_already_registered_sso": "This email is already registered. Please log in to your account another way and link your account to the new provider via your account settings.", "email_attribute": "Email attribute", - "email_confirmed_onboarding": "Great! Let’s get you set up", - "email_confirmed_onboarding_message": "Your email address is confirmed. Click <0>Continue to finish your setup.", "email_does_not_belong_to_university": "We don’t recognize that domain as being affiliated with your university. Please contact us to add the affiliation.", "email_limit_reached": "You can have a maximum of <0>__emailAddressLimit__ email addresses on this account. To add another email address, please delete an existing one.", "email_link_expired": "Email link expired, please request a new one.", @@ -897,7 +894,6 @@ "get_most_subscription_by_checking_overleaf_ai_writefull": "Get the most out of your subscription by checking out <0>Overleaf’s features, <1>Overleaf’s AI features and <2>Writefull’s features.", "get_real_time_track_changes": "Get real-time track changes", "get_the_best_overleaf_experience": "Get the best Overleaf experience", - "get_the_most_out_headline": "Get the most out of __appName__ with features such as:", "git": "Git", "git_authentication_token": "Git authentication token", "git_authentication_token_create_modal_info_1": "This is your Git authentication token. You should enter this when prompted for a password.", @@ -1350,7 +1346,6 @@ "login_to_accept_invitation": "Log in to accept invitation", "login_to_overleaf": "Log in to Overleaf", "login_with_service": "Log in with __service__", - "login_with_sso": "Log in to Overleaf with SSO", "logs": "Logs", "logs_and_output_files": "Logs and output files", "longer_compile_timeout": "Longer <0>compile timeout",