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 visualEditorNameVariant: string = getMeta('ol-visualEditorNameVariant')
const isParticipatingInVisualEditorNamingTest: boolean = getMeta(
'ol-isParticipatingInVisualEditorNamingTest'
)
function EditorSwitch() {
const [newSourceEditor, setNewSourceEditor] = useScopeValue(
'editor.newSourceEditor'
)
const [richText, setRichText] = useScopeValue('editor.showRichText')
const sourceName =
visualEditorNameVariant === 'code-visual'
? 'Code Editor'
: visualEditorNameVariant === 'source-visual'
? 'Source Editor'
: 'Source'
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.
{sourceName}
{showLegacySourceEditor ? (
<>
Source (legacy)
>
) : null}
{!!richTextOrVisual && !isParticipatingInVisualEditorNamingTest && (
)}
)
}
const RichTextToggle: FC<{
checked: boolean
disabled: boolean
handleChange: (event: ChangeEvent) => void
}> = ({ checked, disabled, handleChange }) => {
const { t } = useTranslation()
const richTextName =
visualEditorNameVariant === 'default' ? 'Rich Text' : 'Visual Editor'
const toggle = (
{richTextName}
)
if (disabled) {
return (
{toggle}
)
}
return toggle
}
export default memo(EditorSwitch)