import { ChangeEvent, FC, memo, useCallback } from 'react' import useScopeValue from '../../../shared/hooks/use-scope-value' import Tooltip from '../../../shared/components/tooltip' import { sendMB } from '../../../infrastructure/event-tracking' import getMeta from '../../../utils/meta' import SplitTestBadge from '../../../shared/components/split-test-badge' import isValidTeXFile from '../../../main/is-valid-tex-file' import { useTranslation } from 'react-i18next' function Badge() { const content = ( <> Overleaf has upgraded the source editor. You can still use the old editor by selecting "Source (legacy)".

Click to learn more and give feedback ) return ( {content} ) } const showLegacySourceEditor: boolean = getMeta('ol-showLegacySourceEditor') const hasNewSourceEditor: boolean = getMeta('ol-hasNewSourceEditor') function EditorSwitch() { const [newSourceEditor, setNewSourceEditor] = useScopeValue( 'editor.newSourceEditor' ) const [richText, setRichText] = useScopeValue('editor.showRichText') const [visual, setVisual] = useScopeValue('editor.showVisual') const [docName] = useScopeValue('editor.open_doc_name') const richTextAvailable = isValidTeXFile(docName) const richTextOrVisual = richText || (richTextAvailable && visual) const handleChange = useCallback( event => { const editorType = event.target.value switch (editorType) { case 'ace': setRichText(false) setVisual(false) setNewSourceEditor(false) break case 'cm6': setRichText(false) setVisual(false) setNewSourceEditor(true) break case 'rich-text': if (getMeta('ol-richTextVariant') === 'cm6') { setRichText(false) setVisual(true) setNewSourceEditor(true) } else { setRichText(true) setVisual(false) } break } sendMB('editor-switch-change', { editorType }) }, [setRichText, setVisual, setNewSourceEditor] ) return (
{showLegacySourceEditor ? : null}
Editor mode. {hasNewSourceEditor && ( <> )} {showLegacySourceEditor ? ( <> ) : null}
{!!richTextOrVisual && ( )}
) } const RichTextToggle: FC<{ checked: boolean disabled: boolean handleChange: (event: ChangeEvent) => void }> = ({ checked, disabled, handleChange }) => { const { t } = useTranslation() const toggle = ( ) if (disabled) { return ( {toggle} ) } return toggle } export default memo(EditorSwitch)