diff --git a/server-ce/test/accounts.spec.ts b/server-ce/test/accounts.spec.ts
index eeeb104087..85d545535a 100644
--- a/server-ce/test/accounts.spec.ts
+++ b/server-ce/test/accounts.spec.ts
@@ -9,7 +9,7 @@ describe('Accounts', function () {
it('can log in and out', function () {
login('user@example.com')
cy.visit('/project')
- cy.findByText('Account').click()
+ cy.findByRole('menuitem', { name: 'Account' }).click()
cy.findByText('Log Out').click()
cy.url().should('include', '/login')
cy.visit('/project')
diff --git a/server-ce/test/admin.spec.ts b/server-ce/test/admin.spec.ts
index 18b33c6932..8020deeb4b 100644
--- a/server-ce/test/admin.spec.ts
+++ b/server-ce/test/admin.spec.ts
@@ -293,7 +293,7 @@ describe('admin panel', function () {
cy.findByText(deletedProjectName).should('not.exist')
cy.log('navigate to thrashed projects and delete the project')
- cy.get('.project-list-sidebar-react').within(() => {
+ cy.get('.project-list-sidebar-scroll').within(() => {
cy.findByText('Trashed Projects').click()
})
findProjectRow(deletedProjectName).within(() =>
@@ -318,7 +318,7 @@ describe('admin panel', function () {
cy.log('login as the user and verify the project is restored')
login(user1)
cy.visit('/project')
- cy.get('.project-list-sidebar-react').within(() => {
+ cy.get('.project-list-sidebar-scroll').within(() => {
cy.findByText('Trashed Projects').click()
})
cy.findByText(`${deletedProjectName} (Restored)`)
diff --git a/server-ce/test/create-and-compile-project.spec.ts b/server-ce/test/create-and-compile-project.spec.ts
index 20f8f0dd6d..2be4f208e2 100644
--- a/server-ce/test/create-and-compile-project.spec.ts
+++ b/server-ce/test/create-and-compile-project.spec.ts
@@ -102,10 +102,6 @@ describe('Project creation and compilation', function () {
cy.findByText('Invite not yet accepted.')
})
- cy.visit('/project')
- cy.findByText('Account').click()
- cy.findByText('Log Out').click()
-
login('collaborator@example.com')
openProjectViaInviteNotification(targetProjectName)
cy.get('@targetProjectId').then(targetProjectId => {
diff --git a/server-ce/test/templates.spec.ts b/server-ce/test/templates.spec.ts
index bb581650a2..e36e99315d 100644
--- a/server-ce/test/templates.spec.ts
+++ b/server-ce/test/templates.spec.ts
@@ -96,12 +96,12 @@ describe('Templates', () => {
.parent()
.parent()
.within(() => cy.get('input[type="checkbox"]').first().check())
- cy.get('.project-list-sidebar-react').within(() => {
+ cy.get('.project-list-sidebar-scroll').within(() => {
cy.findAllByText('New Tag').first().click()
})
cy.focused().type(tagName)
cy.findByText('Create').click()
- cy.get('.project-list-sidebar-react').within(() => {
+ cy.get('.project-list-sidebar-scroll').within(() => {
cy.findByText(tagName)
.parent()
.within(() => cy.get('.name').should('have.text', `${tagName} (1)`))
diff --git a/services/web/app/src/Features/Project/ProjectListController.mjs b/services/web/app/src/Features/Project/ProjectListController.mjs
index 88541ee826..61131ec617 100644
--- a/services/web/app/src/Features/Project/ProjectListController.mjs
+++ b/services/web/app/src/Features/Project/ProjectListController.mjs
@@ -411,15 +411,6 @@ async function projectListPage(req, res, next) {
logger.error({ err: error }, 'Failed to get individual subscription')
}
- // Get the user's assignment for the DS unified nav split test, which
- // populates splitTestVariants with a value for the split test name and allows
- // Pug to send it to the browser
- await SplitTestHandler.promises.getAssignment(
- req,
- res,
- 'sidebar-navigation-ui-update'
- )
-
// Get the user's assignment for the papers notification banner split test,
// which populates splitTestVariants with a value for the split test name and
// allows Pug to send it to the browser
diff --git a/services/web/frontend/extracted-translations.json b/services/web/frontend/extracted-translations.json
index d24c74f9ec..ddb622b097 100644
--- a/services/web/frontend/extracted-translations.json
+++ b/services/web/frontend/extracted-translations.json
@@ -1127,7 +1127,6 @@
"optional": "",
"or": "",
"organization_name": "",
- "organize_projects": "",
"organize_tags": "",
"other": "",
"other_causes_of_compile_timeouts": "",
diff --git a/services/web/frontend/js/features/project-list/components/project-list-default.tsx b/services/web/frontend/js/features/project-list/components/project-list-default.tsx
deleted file mode 100644
index 307e11e490..0000000000
--- a/services/web/frontend/js/features/project-list/components/project-list-default.tsx
+++ /dev/null
@@ -1,119 +0,0 @@
-import { useProjectListContext } from '../context/project-list-context'
-import { useTranslation } from 'react-i18next'
-import CurrentPlanWidget from './current-plan-widget/current-plan-widget'
-import NewProjectButton from './new-project-button'
-import ProjectListTable from './table/project-list-table'
-import SurveyWidget from './survey-widget'
-import UserNotifications from './notifications/user-notifications'
-import SearchForm from './search-form'
-import ProjectsDropdown from './dropdown/projects-dropdown'
-import SortByDropdown from './dropdown/sort-by-dropdown'
-import ProjectTools from './table/project-tools/project-tools'
-import ProjectListTitle from './title/project-list-title'
-import Sidebar from './sidebar/sidebar'
-import LoadMore from './load-more'
-import OLCol from '@/features/ui/components/ol/ol-col'
-import OLRow from '@/features/ui/components/ol/ol-row'
-import { TableContainer } from '@/features/ui/components/bootstrap-5/table'
-import DashApiError from '@/features/project-list/components/dash-api-error'
-
-export default function ProjectListDefault() {
- const { t } = useTranslation()
- const {
- error,
- searchText,
- setSearchText,
- selectedProjects,
- filter,
- tags,
- selectedTagId,
- } = useProjectListContext()
-
- const selectedTag = tags.find(tag => tag._id === selectedTagId)
-
- const tableTopArea = (
-
-
-
-
- )
-
- return (
- <>
-
-
- {error ?
: ''}
-
-
-
-
-
-
-
-
-
- {selectedProjects.length === 0 ? (
-
- ) : (
-
- )}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {tableTopArea}
-
-
-
-
-
-
-
-
-
-
- >
- )
-}
diff --git a/services/web/frontend/js/features/project-list/components/project-list-ds-nav.tsx b/services/web/frontend/js/features/project-list/components/project-list-ds-nav.tsx
index a9870f2a30..8f3b3a8e5d 100644
--- a/services/web/frontend/js/features/project-list/components/project-list-ds-nav.tsx
+++ b/services/web/frontend/js/features/project-list/components/project-list-ds-nav.tsx
@@ -16,13 +16,14 @@ import { TableContainer } from '@/features/ui/components/bootstrap-5/table'
import DashApiError from '@/features/project-list/components/dash-api-error'
import getMeta from '@/utils/meta'
import DefaultNavbar from '@/features/ui/components/bootstrap-5/navbar/default-navbar'
-import FatFooter from '@/features/ui/components/bootstrap-5/footer/fat-footer'
+import Footer from '@/features/ui/components/bootstrap-5/footer/footer'
import SidebarDsNav from '@/features/project-list/components/sidebar/sidebar-ds-nav'
import SystemMessages from '@/shared/components/system-messages'
import overleafLogo from '@/shared/svgs/overleaf-a-ds-solution-mallard.svg'
export function ProjectListDsNav() {
const navbarProps = getMeta('ol-navbar')
+ const footerProps = getMeta('ol-footer')
const { t } = useTranslation()
const {
error,
@@ -117,7 +118,7 @@ export function ProjectListDsNav() {
-
+
diff --git a/services/web/frontend/js/features/project-list/components/project-list-root.tsx b/services/web/frontend/js/features/project-list/components/project-list-root.tsx
index 5de7d9372e..fa8c07c905 100644
--- a/services/web/frontend/js/features/project-list/components/project-list-root.tsx
+++ b/services/web/frontend/js/features/project-list/components/project-list-root.tsx
@@ -16,12 +16,8 @@ import getMeta from '@/utils/meta'
import DefaultNavbar from '@/features/ui/components/bootstrap-5/navbar/default-navbar'
import Footer from '@/features/ui/components/bootstrap-5/footer/footer'
import WelcomePageContent from '@/features/project-list/components/welcome-page-content'
-import ProjectListDefault from '@/features/project-list/components/project-list-default'
import { ProjectListDsNav } from '@/features/project-list/components/project-list-ds-nav'
-import {
- DsNavStyleProvider,
- hasDsNav,
-} from '@/features/project-list/components/use-is-ds-nav'
+import { DsNavStyleProvider } from '@/features/project-list/components/use-is-ds-nav'
function ProjectListRoot() {
const { isReady } = useWaitForI18n()
@@ -87,15 +83,7 @@ function ProjectListPageContent() {
)
- if (hasDsNav()) {
- return loadingComponent
- } else {
- return (
-
- {loadingComponent}
-
- )
- }
+ return loadingComponent
}
if (totalProjectsCount === 0) {
@@ -104,19 +92,12 @@ function ProjectListPageContent() {
)
- } else if (hasDsNav()) {
- return (
-
-
-
- )
- } else {
- return (
-
-
-
- )
}
+ return (
+
+
+
+ )
}
export default withErrorBoundary(ProjectListRoot, GenericErrorBoundaryFallback)
diff --git a/services/web/frontend/js/features/project-list/components/sidebar/sidebar-filters.tsx b/services/web/frontend/js/features/project-list/components/sidebar/sidebar-filters.tsx
index ad908238ca..efcba056be 100644
--- a/services/web/frontend/js/features/project-list/components/sidebar/sidebar-filters.tsx
+++ b/services/web/frontend/js/features/project-list/components/sidebar/sidebar-filters.tsx
@@ -5,7 +5,6 @@ import {
} from '../../context/project-list-context'
import TagsList from './tags-list'
import ProjectsFilterMenu from '../projects-filter-menu'
-import { hasDsNav } from '@/features/project-list/components/use-is-ds-nav'
type SidebarFilterProps = {
filter: Filter
@@ -38,11 +37,9 @@ export default function SidebarFilters() {
- {hasDsNav() && (
-
-
-
- )}
+
+
+
)
diff --git a/services/web/frontend/js/features/project-list/components/sidebar/tags-list.tsx b/services/web/frontend/js/features/project-list/components/sidebar/tags-list.tsx
index 6b1c0db706..452b003b2b 100644
--- a/services/web/frontend/js/features/project-list/components/sidebar/tags-list.tsx
+++ b/services/web/frontend/js/features/project-list/components/sidebar/tags-list.tsx
@@ -1,7 +1,6 @@
import { sortBy } from 'lodash'
import { useTranslation } from 'react-i18next'
import { DotsThreeVertical, Plus, TagSimple } from '@phosphor-icons/react'
-import MaterialIcon from '../../../../shared/components/material-icon'
import {
UNCATEGORIZED_KEY,
useProjectListContext,
@@ -14,7 +13,6 @@ import {
DropdownMenu,
DropdownToggle,
} from '@/features/ui/components/bootstrap-5/dropdown-menu'
-import { hasDsNav } from '@/features/project-list/components/use-is-ds-nav'
export default function TagsList() {
const { t } = useTranslation()
@@ -42,16 +40,11 @@ export default function TagsList() {
aria-hidden="true"
data-testid="organize-projects"
>
- {hasDsNav() ? t('organize_tags') : t('organize_projects')}
+ {t('organize_tags')}
@@ -73,11 +66,7 @@ export default function TagsList() {
color: getTagColor(tag),
}}
>
- {hasDsNav() ? (
-
- ) : (
-
- )}
+
{tag.name}{' '}
@@ -93,7 +82,7 @@ export default function TagsList() {
id={`${tag._id}-dropdown-toggle`}
data-testid="tag-dropdown-toggle"
>
- {hasDsNav() && }
+
{
setDismissedSurvey(true)
@@ -24,14 +21,8 @@ export function SurveyWidgetDsNav() {
return null
}
- // Hide the survey for users who have sidebar-navigation-ui-update:
- // They've had it for months. We don't need their feedback anymore
- if (hideDsSurvey && survey?.name === 'ds-nav') {
- return null
- }
-
return (
-
+
diff --git a/services/web/frontend/js/features/project-list/components/survey-widget.tsx b/services/web/frontend/js/features/project-list/components/survey-widget.tsx
index a5604d6b01..ae0847ef92 100644
--- a/services/web/frontend/js/features/project-list/components/survey-widget.tsx
+++ b/services/web/frontend/js/features/project-list/components/survey-widget.tsx
@@ -18,12 +18,6 @@ export default function SurveyWidget() {
return null
}
- // Short-term hard-coded special case: hide the "DS nav" survey for users on
- // the default variant
- if (survey?.name === 'ds-nav') {
- return null
- }
-
return (
diff --git a/services/web/frontend/js/features/project-list/components/use-is-ds-nav.tsx b/services/web/frontend/js/features/project-list/components/use-is-ds-nav.tsx
index 91ba19ab22..e4f4f04ab3 100644
--- a/services/web/frontend/js/features/project-list/components/use-is-ds-nav.tsx
+++ b/services/web/frontend/js/features/project-list/components/use-is-ds-nav.tsx
@@ -1,16 +1,4 @@
import { createContext, type FC, type ReactNode, useContext } from 'react'
-import { useSplitTestContext } from '@/shared/context/split-test-context'
-import getMeta from '@/utils/meta'
-
-export const hasDsNav = () => getMeta('ol-ExposedSettings').isOverleaf
-
-/**
- * This hook returns whether the user has the split-test assignment 'sidebar-navigation-ui-update'
- */
-export const useHideDsSurvey = () => {
- const { splitTestVariants } = useSplitTestContext()
- return splitTestVariants['sidebar-navigation-ui-update'] === 'active'
-}
/**
* This context wraps elements that should be styled according to the sidebar-navigation-ui-update redesign
diff --git a/services/web/locales/en.json b/services/web/locales/en.json
index 32b47bdeeb..0ab4bfe27d 100644
--- a/services/web/locales/en.json
+++ b/services/web/locales/en.json
@@ -1490,7 +1490,6 @@
"organization_name": "Organization name",
"organization_or_company_name": "Organization or company name",
"organization_or_company_type": "Organization or company type",
- "organize_projects": "Organize Projects",
"organize_tags": "Organize Tags",
"original_price": "Original price",
"other": "Other",