import { useTranslation } from 'react-i18next'
import { memo } from 'react'
import classNames from 'classnames'
import { useDetachCompileContext as useCompileContext } from '../../../shared/context/detach-compile-context'
import { useStopOnFirstError } from '../../../shared/hooks/use-stop-on-first-error'
import SplitMenu from '../../../shared/components/split-menu'
import Icon from '../../../shared/components/icon'
import * as eventTracking from '../../../infrastructure/event-tracking'
const modifierKey = /Mac/i.test(navigator.platform) ? 'Cmd' : 'Ctrl'
function sendEventAndSet(value, setter, settingName) {
eventTracking.sendMB('recompile-setting-changed', {
setting: settingName,
settingVal: value,
})
setter(value)
}
function PdfCompileButton() {
const {
animateCompileDropdownArrow,
autoCompile,
compiling,
draft,
hasChanges,
setAnimateCompileDropdownArrow,
setAutoCompile,
setDraft,
setStopOnValidationError,
stopOnFirstError,
stopOnValidationError,
startCompile,
stopCompile,
recompileFromScratch,
} = useCompileContext()
const { enableStopOnFirstError, disableStopOnFirstError } =
useStopOnFirstError({ eventSource: 'dropdown' })
const { t } = useTranslation()
const fromScratchWithEvent = () => {
eventTracking.sendMB('recompile-setting-changed', {
setting: 'from-scratch',
})
recompileFromScratch()
}
const compileButtonLabel = compiling ? `${t('compiling')}…` : t('recompile')
const tooltipElement = (
<>
{t('recompile_pdf')}{' '}
({modifierKey} + Enter)
>
)
const dropdownToggleClassName = classNames({
'detach-compile-button-animate': animateCompileDropdownArrow,
'btn-striped-animated': hasChanges,
})
const buttonClassName = classNames({
'btn-striped-animated': hasChanges,
'no-left-radius': true,
})
return (
startCompile(),
text: compileButtonLabel,
className: buttonClassName,
}}
dropdownToggle={{
'aria-label': t('toggle_compile_options_menu'),
handleAnimationEnd: () => setAnimateCompileDropdownArrow(false),
className: dropdownToggleClassName,
}}
dropdown={{
id: 'pdf-recompile-dropdown',
}}
>
{t('auto_compile')}
sendEventAndSet(true, setAutoCompile, 'auto-compile')}
>
{t('on')}
sendEventAndSet(false, setAutoCompile, 'auto-compile')}
>
{t('off')}
{t('compile_mode')}
sendEventAndSet(false, setDraft, 'compile-mode')}
>
{t('normal')}
sendEventAndSet(true, setDraft, 'compile-mode')}
>
{t('fast')} [draft]
Syntax Checks
sendEventAndSet(true, setStopOnValidationError, 'syntax-check')
}
>
{t('stop_on_validation_error')}
sendEventAndSet(false, setStopOnValidationError, 'syntax-check')
}
>
{t('ignore_validation_errors')}
{t('compile_error_handling')}
{t('stop_on_first_error')}
{t('try_to_compile_despite_errors')}
stopCompile()}
disabled={!compiling}
aria-disabled={!compiling}
>
{t('stop_compile')}
{t('recompile_from_scratch')}
)
}
export default memo(PdfCompileButton)