diff --git a/services/web/config/settings.defaults.js b/services/web/config/settings.defaults.js index 9bdaf93192..521dc9b78a 100644 --- a/services/web/config/settings.defaults.js +++ b/services/web/config/settings.defaults.js @@ -1008,6 +1008,7 @@ module.exports = { importProjectFromGithubMenu: [], editorLeftMenuSync: [], editorLeftMenuManageTemplate: [], + menubarExtraComponents: [], oauth2Server: [], managedGroupSubscriptionEnrollmentNotification: [], managedGroupEnrollmentInvite: [], diff --git a/services/web/frontend/extracted-translations.json b/services/web/frontend/extracted-translations.json index fceb8b6558..37a99eafef 100644 --- a/services/web/frontend/extracted-translations.json +++ b/services/web/frontend/extracted-translations.json @@ -1061,6 +1061,7 @@ "manage_sessions": "", "manage_subscription": "", "manage_tag": "", + "manage_template": "", "manage_your_ai_assist_add_on": "", "managed": "", "managed_user_accounts": "", diff --git a/services/web/frontend/js/features/ide-redesign/components/toolbar/menu-bar.tsx b/services/web/frontend/js/features/ide-redesign/components/toolbar/menu-bar.tsx index 51dc92eae8..1610cdb896 100644 --- a/services/web/frontend/js/features/ide-redesign/components/toolbar/menu-bar.tsx +++ b/services/web/frontend/js/features/ide-redesign/components/toolbar/menu-bar.tsx @@ -8,7 +8,7 @@ import { MenuBarDropdown } from '@/shared/components/menu-bar/menu-bar-dropdown' import { MenuBarOption } from '@/shared/components/menu-bar/menu-bar-option' import { useTranslation } from 'react-i18next' import ChangeLayoutOptions from './change-layout-options' -import { useCallback, useMemo, useState } from 'react' +import { ElementType, useCallback, useMemo, useState } from 'react' import { useLayoutContext } from '@/shared/context/layout-context' import { useCommandProvider } from '@/features/ide-react/hooks/use-command-provider' import CommandDropdown, { @@ -24,6 +24,13 @@ import { useProjectSettingsContext } from '@/features/editor-left-menu/context/p import getMeta from '@/utils/meta' import EditorCloneProjectModalWrapper from '@/features/clone-project-modal/components/editor-clone-project-modal-wrapper' import useOpenProject from '@/shared/hooks/use-open-project' +import importOverleafModules from '../../../../../macros/import-overleaf-module.macro' + +const menubarExtraComponents = importOverleafModules( + 'menubarExtraComponents' +) as { + import: { default: ElementType } +}[] export const ToolbarMenuBar = () => { const { t } = useTranslation() @@ -75,7 +82,7 @@ export const ToolbarMenuBar = () => { children: ['new_file', 'new_folder', 'upload_file', 'copy_project'], }, { id: 'file-tools', children: ['show_version_history', 'word_count'] }, - { id: 'submit', children: ['submit-project'] }, + { id: 'submit', children: ['submit-project', 'manage-template'] }, { id: 'file-download', children: ['download-as-source-zip', 'download-pdf'], @@ -283,6 +290,11 @@ export const ToolbarMenuBar = () => { handleHide={() => setShowCloneProjectModal(false)} openProject={openProject} /> + {menubarExtraComponents.map( + ({ import: { default: Component } }, index) => ( + + ) + )} ) } diff --git a/services/web/locales/en.json b/services/web/locales/en.json index 8b84468f86..e6cefc2e80 100644 --- a/services/web/locales/en.json +++ b/services/web/locales/en.json @@ -1377,6 +1377,7 @@ "manage_sessions": "Manage sessions", "manage_subscription": "Manage subscription", "manage_tag": "Manage tag", + "manage_template": "Manage template", "manage_your_ai_assist_add_on": "Manage your AI Assist add-on", "managed": "Managed", "managed_user_accounts": "Managed user accounts",