|
@@ -4,14 +4,53 @@ import {
|
|
|
DropdownMenu,
|
|
DropdownMenu,
|
|
|
DropdownToggle,
|
|
DropdownToggle,
|
|
|
} from '@/features/ui/components/bootstrap-5/dropdown-menu'
|
|
} from '@/features/ui/components/bootstrap-5/dropdown-menu'
|
|
|
-import OLDropdownMenuItem from '@/features/ui/components/ol/ol-dropdown-menu-item'
|
|
|
|
|
import MaterialIcon from '@/shared/components/material-icon'
|
|
import MaterialIcon from '@/shared/components/material-icon'
|
|
|
import { useProjectContext } from '@/shared/context/project-context'
|
|
import { useProjectContext } from '@/shared/context/project-context'
|
|
|
import { useTranslation } from 'react-i18next'
|
|
import { useTranslation } from 'react-i18next'
|
|
|
|
|
+import importOverleafModules from '../../../../../macros/import-overleaf-module.macro'
|
|
|
|
|
+import { useEditorContext } from '@/shared/context/editor-context'
|
|
|
|
|
+import { DownloadProjectPDF, DownloadProjectZip } from './download-project'
|
|
|
|
|
+import { useCallback, useState } from 'react'
|
|
|
|
|
+import OLDropdownMenuItem from '@/features/ui/components/ol/ol-dropdown-menu-item'
|
|
|
|
|
+import EditableLabel from './editable-label'
|
|
|
|
|
+
|
|
|
|
|
+const [publishModalModules] = importOverleafModules('publishModal')
|
|
|
|
|
+const SubmitProjectButton = publishModalModules?.import.NewPublishToolbarButton
|
|
|
|
|
|
|
|
export const ToolbarProjectTitle = () => {
|
|
export const ToolbarProjectTitle = () => {
|
|
|
- const { name } = useProjectContext()
|
|
|
|
|
const { t } = useTranslation()
|
|
const { t } = useTranslation()
|
|
|
|
|
+ const { permissionsLevel, renameProject } = useEditorContext()
|
|
|
|
|
+ const { name } = useProjectContext()
|
|
|
|
|
+ const shouldDisplaySubmitButton =
|
|
|
|
|
+ (permissionsLevel === 'owner' || permissionsLevel === 'readAndWrite') &&
|
|
|
|
|
+ SubmitProjectButton
|
|
|
|
|
+ const hasRenamePermissions = permissionsLevel === 'owner'
|
|
|
|
|
+ const [isRenaming, setIsRenaming] = useState(false)
|
|
|
|
|
+ const onRename = useCallback(
|
|
|
|
|
+ name => {
|
|
|
|
|
+ if (name) {
|
|
|
|
|
+ renameProject(name)
|
|
|
|
|
+ }
|
|
|
|
|
+ setIsRenaming(false)
|
|
|
|
|
+ },
|
|
|
|
|
+ [renameProject]
|
|
|
|
|
+ )
|
|
|
|
|
+ const onCancel = useCallback(() => {
|
|
|
|
|
+ setIsRenaming(false)
|
|
|
|
|
+ }, [])
|
|
|
|
|
+
|
|
|
|
|
+ if (isRenaming) {
|
|
|
|
|
+ return (
|
|
|
|
|
+ <EditableLabel
|
|
|
|
|
+ onChange={onRename}
|
|
|
|
|
+ onCancel={onCancel}
|
|
|
|
|
+ initialText={name}
|
|
|
|
|
+ maxLength={150}
|
|
|
|
|
+ className="ide-redesign-toolbar-editable-project-name"
|
|
|
|
|
+ />
|
|
|
|
|
+ )
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
return (
|
|
return (
|
|
|
<Dropdown align="start">
|
|
<Dropdown align="start">
|
|
|
<DropdownToggle
|
|
<DropdownToggle
|
|
@@ -24,13 +63,23 @@ export const ToolbarProjectTitle = () => {
|
|
|
accessibilityLabel={t('project_title_options')}
|
|
accessibilityLabel={t('project_title_options')}
|
|
|
/>
|
|
/>
|
|
|
</DropdownToggle>
|
|
</DropdownToggle>
|
|
|
- <DropdownMenu>
|
|
|
|
|
- <OLDropdownMenuItem>TODO: Export</OLDropdownMenuItem>
|
|
|
|
|
|
|
+ <DropdownMenu renderOnMount>
|
|
|
|
|
+ {shouldDisplaySubmitButton && (
|
|
|
|
|
+ <>
|
|
|
|
|
+ <SubmitProjectButton />
|
|
|
|
|
+ <DropdownDivider />
|
|
|
|
|
+ </>
|
|
|
|
|
+ )}
|
|
|
|
|
+ <DownloadProjectPDF />
|
|
|
|
|
+ <DownloadProjectZip />
|
|
|
<DropdownDivider />
|
|
<DropdownDivider />
|
|
|
- <OLDropdownMenuItem>{t('rename')}</OLDropdownMenuItem>
|
|
|
|
|
- <OLDropdownMenuItem>{t('download')}</OLDropdownMenuItem>
|
|
|
|
|
- <OLDropdownMenuItem className="text-danger">
|
|
|
|
|
- {t('delete')}
|
|
|
|
|
|
|
+ <OLDropdownMenuItem
|
|
|
|
|
+ onClick={() => {
|
|
|
|
|
+ setIsRenaming(true)
|
|
|
|
|
+ }}
|
|
|
|
|
+ disabled={!hasRenamePermissions}
|
|
|
|
|
+ >
|
|
|
|
|
+ {t('rename')}
|
|
|
</OLDropdownMenuItem>
|
|
</OLDropdownMenuItem>
|
|
|
</DropdownMenu>
|
|
</DropdownMenu>
|
|
|
</Dropdown>
|
|
</Dropdown>
|