latex-ub/services/web/frontend/js/features/ide-redesign/components/toolbar/menu-bar.tsx
2025-05-05 12:24:05 +00:00

171 lines
6.2 KiB
TypeScript

import {
DropdownDivider,
DropdownHeader,
} from '@/features/ui/components/bootstrap-5/dropdown-menu'
import { MenuBar } from '@/shared/components/menu-bar/menu-bar'
import {
MenuBarDropdown,
NestedMenuBarDropdown,
} 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 { MouseEventHandler, useCallback } from 'react'
import { useIdeRedesignSwitcherContext } from '@/features/ide-react/context/ide-redesign-switcher-context'
import { useSwitchEnableNewEditorState } from '../../hooks/use-switch-enable-new-editor-state'
import MaterialIcon from '@/shared/components/material-icon'
import OLSpinner from '@/features/ui/components/ol/ol-spinner'
export const ToolbarMenuBar = () => {
const { t } = useTranslation()
const { setShowSwitcherModal } = useIdeRedesignSwitcherContext()
const openEditorRedesignSwitcherModal = useCallback(() => {
setShowSwitcherModal(true)
}, [setShowSwitcherModal])
return (
<MenuBar
className="ide-redesign-toolbar-menu-bar"
id="toolbar-menu-bar-item"
>
<MenuBarDropdown
title={t('file')}
id="file"
className="ide-redesign-toolbar-dropdown-toggle-subdued ide-redesign-toolbar-button-subdued"
>
<MenuBarOption title="New file" />
<MenuBarOption title="New folder" />
<MenuBarOption title="Upload file" />
<DropdownDivider />
<MenuBarOption title="Show version history" />
<DropdownDivider />
<MenuBarOption title="Download as source (.zip)" />
<MenuBarOption title="Download as PDF" />
<DropdownDivider />
<MenuBarOption title="New project" />
</MenuBarDropdown>
<MenuBarDropdown
title={t('edit')}
id="edit"
className="ide-redesign-toolbar-dropdown-toggle-subdued ide-redesign-toolbar-button-subdued"
>
<MenuBarOption title="Undo" />
<MenuBarOption title="Redo" />
<DropdownDivider />
<MenuBarOption title="Cut" />
<MenuBarOption title="Copy" />
<MenuBarOption title="Paste" />
<MenuBarOption title="Paste without formatting" />
<DropdownDivider />
<MenuBarOption title="Find" />
<MenuBarOption title="Select all" />
</MenuBarDropdown>
<MenuBarDropdown
title={t('view')}
id="view"
className="ide-redesign-toolbar-dropdown-toggle-subdued ide-redesign-toolbar-button-subdued"
>
<ChangeLayoutOptions />
<DropdownHeader>Editor settings</DropdownHeader>
<MenuBarOption title="Show breadcrumbs" />
<MenuBarOption title="Show equation preview" />
<DropdownHeader>PDF preview</DropdownHeader>
<MenuBarOption title="Presentation mode" />
<MenuBarOption title="Zoom in" />
<MenuBarOption title="Zoom out" />
<MenuBarOption title="Fit to width" />
<MenuBarOption title="Fit to height" />
</MenuBarDropdown>
<MenuBarDropdown
title={t('insert')}
id="insert"
className="ide-redesign-toolbar-dropdown-toggle-subdued ide-redesign-toolbar-button-subdued"
>
<NestedMenuBarDropdown title="Math" id="math">
<MenuBarOption title="Generate from text or image" />
<DropdownDivider />
<MenuBarOption title="Inline math" />
<MenuBarOption title="Display math" />
</NestedMenuBarDropdown>
<MenuBarOption title="Symbol" />
<NestedMenuBarDropdown title="Figure" id="figure">
<MenuBarOption title="Upload from computer" />
<MenuBarOption title="From project files" />
<MenuBarOption title="From another project" />
<MenuBarOption title="From URL" />
</NestedMenuBarDropdown>
<MenuBarOption title="Table" />
<MenuBarOption title="Citation" />
<MenuBarOption title="Link" />
<MenuBarOption title="Cross-reference" />
<DropdownDivider />
<MenuBarOption title="Comment" />
</MenuBarDropdown>
<MenuBarDropdown
title={t('format')}
id="format"
className="ide-redesign-toolbar-dropdown-toggle-subdued ide-redesign-toolbar-button-subdued"
>
<MenuBarOption title="Bold" />
<MenuBarOption title="Italics" />
<DropdownDivider />
<MenuBarOption title="Bullet list" />
<MenuBarOption title="Numbered list" />
<MenuBarOption title="Increase indentation" />
<MenuBarOption title="Decrease indentation" />
<DropdownDivider />
<DropdownHeader>Paragraph styles</DropdownHeader>
<MenuBarOption title="Normal text" />
<MenuBarOption title="Section" />
<MenuBarOption title="Subsection" />
<MenuBarOption title="Subsubsection" />
<MenuBarOption title="Paragraph" />
<MenuBarOption title="Subparagraph" />
</MenuBarDropdown>
<MenuBarDropdown
title={t('help')}
id="help"
className="ide-redesign-toolbar-dropdown-toggle-subdued ide-redesign-toolbar-button-subdued"
>
<MenuBarOption title="Keyboard shortcuts" />
<MenuBarOption title="Documentation" />
<DropdownDivider />
<MenuBarOption title="Contact us" />
<MenuBarOption title="Give feedback" />
<DropdownDivider />
<SwitchToOldEditorMenuBarOption />
<MenuBarOption
title="What's new?"
onClick={openEditorRedesignSwitcherModal}
/>
</MenuBarDropdown>
</MenuBar>
)
}
const SwitchToOldEditorMenuBarOption = () => {
const { loading, error, setEditorRedesignStatus } =
useSwitchEnableNewEditorState()
const disable: MouseEventHandler = useCallback(
event => {
// Don't close the dropdown
event.stopPropagation()
setEditorRedesignStatus(false)
},
[setEditorRedesignStatus]
)
let icon = null
if (loading) {
icon = <OLSpinner size="sm" />
} else if (error) {
icon = <MaterialIcon type="error" title={error} className="text-danger" />
}
return (
<MenuBarOption
title="Switch to old editor"
onClick={disable}
disabled={loading}
trailingIcon={icon}
/>
)
}