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
}