diff --git a/services/web/app/src/infrastructure/ExpressLocals.js b/services/web/app/src/infrastructure/ExpressLocals.js index 5c96610f78..30527fe04c 100644 --- a/services/web/app/src/infrastructure/ExpressLocals.js +++ b/services/web/app/src/infrastructure/ExpressLocals.js @@ -413,6 +413,9 @@ module.exports = function (webRouter, privateApiRouter, publicApiRouter) { templateLinks: Settings.templateLinks, labsEnabled: Settings.labs && Settings.labs.enable, groupSSOEnabled: Settings.groupSSO?.enabled, + wikiEnabled: Settings.overleaf != null || Settings.proxyLearn, + templatesEnabled: + Settings.overleaf != null || Settings.templates?.user_id != null, } next() }) diff --git a/services/web/frontend/js/features/project-list/components/welcome-message-new/welcome-message-create-new-project-dropdown.tsx b/services/web/frontend/js/features/project-list/components/welcome-message-new/welcome-message-create-new-project-dropdown.tsx index 79c73dc15f..e9a16e7097 100644 --- a/services/web/frontend/js/features/project-list/components/welcome-message-new/welcome-message-create-new-project-dropdown.tsx +++ b/services/web/frontend/js/features/project-list/components/welcome-message-new/welcome-message-create-new-project-dropdown.tsx @@ -4,6 +4,7 @@ import type { PortalTemplate } from '../../../../../../types/portal-template' import { sendMB } from '../../../../infrastructure/event-tracking' import getMeta from '../../../../utils/meta' import { NewProjectButtonModalVariant } from '../new-project-button/new-project-button-modal' +import { ExposedSettings } from '../../../../../../types/exposed-settings' type WelcomeMessageCreateNewProjectDropdownProps = { setActiveModal: (modal: NewProjectButtonModalVariant) => void @@ -18,6 +19,8 @@ function WelcomeMessageCreateNewProjectDropdown({ | PortalTemplate[] | undefined + const { isOverleaf } = getMeta('ol-ExposedSettings') as ExposedSettings + const handleClick = useCallback(() => { sendMB('welcome-page-create-first-project-click', { dropdownMenu: 'main-button', @@ -119,17 +122,19 @@ function WelcomeMessageCreateNewProjectDropdown({ > {t('upload_project')} - + {isOverleaf && ( + + )} {(portalTemplates?.length ?? 0) > 0 ? ( <>
diff --git a/services/web/frontend/js/features/project-list/components/welcome-message.tsx b/services/web/frontend/js/features/project-list/components/welcome-message.tsx index 1971c635f4..da5de8335d 100644 --- a/services/web/frontend/js/features/project-list/components/welcome-message.tsx +++ b/services/web/frontend/js/features/project-list/components/welcome-message.tsx @@ -5,12 +5,18 @@ import type { NewProjectButtonModalVariant } from './new-project-button/new-proj import type { Nullable } from '../../../../../types/utils' import WelcomeMessageLink from './welcome-message-new/welcome-message-link' import WelcomeMessageCreateNewProjectDropdown from './welcome-message-new/welcome-message-create-new-project-dropdown' +import getMeta from '@/utils/meta' +import { ExposedSettings } from '../../../../../types/exposed-settings' export default function WelcomeMessage() { const { t } = useTranslation() const [activeModal, setActiveModal] = useState>(null) + const { wikiEnabled, templatesEnabled } = getMeta( + 'ol-ExposedSettings' + ) as ExposedSettings + return ( <>
@@ -20,17 +26,21 @@ export default function WelcomeMessage() { setActiveModal(modal)} /> - - + {wikiEnabled && ( + + )} + {templatesEnabled && ( + + )}
diff --git a/services/web/test/frontend/features/project-list/components/welcome-message.test.tsx b/services/web/test/frontend/features/project-list/components/welcome-message.test.tsx index 08968a06a7..138b61741e 100644 --- a/services/web/test/frontend/features/project-list/components/welcome-message.test.tsx +++ b/services/web/test/frontend/features/project-list/components/welcome-message.test.tsx @@ -1,8 +1,19 @@ import { fireEvent, render, screen } from '@testing-library/react' import WelcomeMessage from '../../../../../frontend/js/features/project-list/components/welcome-message' import { expect } from 'chai' +import { ExposedSettings } from '../../../../../types/exposed-settings' describe('', function () { + const exposedSettings: Partial = {} + + beforeEach(function () { + window.metaAttributesCache = new Map() + window.metaAttributesCache.set('ol-ExposedSettings', exposedSettings) + exposedSettings.isOverleaf = true + exposedSettings.wikiEnabled = true + exposedSettings.templatesEnabled = true + }) + afterEach(function () { window.metaAttributesCache = new Map() }) @@ -101,4 +112,48 @@ describe('', function () { expect(link.getAttribute('href')).to.equal('/templates') }) + + describe('when not in SaaS', function () { + beforeEach(function () { + exposedSettings.isOverleaf = false + }) + + it('renders welcome page correctly', function () { + render() + + screen.getByText('Welcome to Overleaf') + screen.getByText('Create a new project') + screen.getByText('Learn LaTeX with a tutorial') + screen.getByText('Browse templates') + }) + + it("doesn't display github in the dropdown when clicking create a new project", function () { + render() + + const button = screen.getByRole('button', { + name: 'Create a new project', + }) + + fireEvent.click(button) + + screen.getByText('Blank Project') + screen.getByText('Example Project') + screen.getByText('Upload Project') + expect(screen.queryByText('Import from GitHub')).to.not.exist + }) + + it('does not render the tutorial link when the learn wiki is not configured', function () { + exposedSettings.wikiEnabled = false + render() + + expect(screen.queryByText('Learn LaTeX with a tutorial')).to.not.exist + }) + + it('does not render the templates link when templates are not configured', function () { + exposedSettings.templatesEnabled = false + render() + + expect(screen.queryByText('Browse templates')).to.not.exist + }) + }) }) diff --git a/services/web/types/exposed-settings.ts b/services/web/types/exposed-settings.ts index 9a26441965..c59d853c87 100644 --- a/services/web/types/exposed-settings.ts +++ b/services/web/types/exposed-settings.ts @@ -47,4 +47,6 @@ export type ExposedSettings = { labsEnabled: boolean managedUsersEnabled?: boolean groupSSOEnabled?: boolean + wikiEnabled?: boolean + templatesEnabled?: boolean }