import { FC, memo, useCallback } from 'react' import { EditorSelection, EditorState } from '@codemirror/state' import { EditorView } from '@codemirror/view' import { useEditorContext } from '../../../../shared/context/editor-context' import useScopeEventEmitter from '../../../../shared/hooks/use-scope-event-emitter' import { useLayoutContext } from '../../../../shared/context/layout-context' import { withinFormattingCommand } from '../../utils/tree-operations/ancestors' import { ToolbarButton } from './toolbar-button' import { redo, undo } from '@codemirror/commands' import * as commands from '../../extensions/toolbar/commands' import { SectionHeadingDropdown } from './section-heading-dropdown' import { canAddComment } from '../../extensions/toolbar/comments' import getMeta from '../../../../utils/meta' import { InsertFigureDropdown } from './insert-figure-dropdown' import { useTranslation } from 'react-i18next' import { MathDropdown } from './math-dropdown' import { TableInserterDropdown } from './table-inserter-dropdown' const isMac = /Mac/.test(window.navigator?.platform) export const ToolbarItems: FC<{ state: EditorState overflowed?: Set languageName?: string visual: boolean listDepth: number }> = memo(function ToolbarItems({ state, overflowed, languageName, visual, listDepth, }) { const { t } = useTranslation() const { toggleSymbolPalette, showSymbolPalette } = useEditorContext() const isActive = withinFormattingCommand(state) const addCommentEmitter = useScopeEventEmitter('comment:start_adding') const { setReviewPanelOpen } = useLayoutContext() const splitTestVariants = getMeta('ol-splitTestVariants', {}) const addComment = useCallback( (view: EditorView) => { const range = view.state.selection.main if (range.empty) { const line = view.state.doc.lineAt(range.head) view.dispatch({ selection: EditorSelection.range(line.from, line.to), }) } setReviewPanelOpen(true) addCommentEmitter() }, [addCommentEmitter, setReviewPanelOpen] ) const showFigureModal = splitTestVariants['figure-modal'] === 'enabled' const showTableGenerator = splitTestVariants['table-generator'] === 'enabled' const symbolPaletteAvailable = getMeta('ol-symbolPaletteAvailable') const showGroup = (group: string) => !overflowed || overflowed.has(group) return ( <> {showGroup('group-history') && (
)} {languageName === 'latex' && ( <> {showGroup('group-section') && (
)} {showGroup('group-format') && (
)} {showGroup('group-math') && (
{symbolPaletteAvailable && ( )}
)} {showGroup('group-misc') && (
)} {showGroup('group-list') && (
)} )} ) })