pdf-compile-button.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. import { Dropdown, MenuItem } from 'react-bootstrap'
  2. import Icon from '../../../shared/components/icon'
  3. import ControlledDropdown from '../../../shared/components/controlled-dropdown'
  4. import { useTranslation } from 'react-i18next'
  5. import { memo } from 'react'
  6. import classnames from 'classnames'
  7. import { useDetachCompileContext as useCompileContext } from '../../../shared/context/detach-compile-context'
  8. import { useStopOnFirstError } from '../../../shared/hooks/use-stop-on-first-error'
  9. import PdfCompileButtonInner from './pdf-compile-button-inner'
  10. function PdfCompileButton() {
  11. const {
  12. animateCompileDropdownArrow,
  13. autoCompile,
  14. compiling,
  15. draft,
  16. hasChanges,
  17. setAnimateCompileDropdownArrow,
  18. setAutoCompile,
  19. setDraft,
  20. setStopOnValidationError,
  21. stopOnFirstError,
  22. stopOnValidationError,
  23. startCompile,
  24. stopCompile,
  25. recompileFromScratch,
  26. } = useCompileContext()
  27. const { enableStopOnFirstError, disableStopOnFirstError } =
  28. useStopOnFirstError({ eventSource: 'dropdown' })
  29. const { t } = useTranslation()
  30. return (
  31. <ControlledDropdown
  32. className={classnames({
  33. 'toolbar-item': true,
  34. 'btn-recompile-group': true,
  35. 'btn-recompile-group-has-changes': hasChanges,
  36. })}
  37. id="pdf-recompile-dropdown"
  38. >
  39. <PdfCompileButtonInner
  40. startCompile={startCompile}
  41. compiling={compiling}
  42. />
  43. <Dropdown.Toggle
  44. aria-label={t('toggle_compile_options_menu')}
  45. className={classnames({
  46. 'btn-recompile': true,
  47. 'btn-recompile-animate': animateCompileDropdownArrow,
  48. })}
  49. bsStyle="success"
  50. onAnimationEnd={() => {
  51. setAnimateCompileDropdownArrow(false)
  52. }}
  53. />
  54. <Dropdown.Menu>
  55. <MenuItem header>{t('auto_compile')}</MenuItem>
  56. <MenuItem onSelect={() => setAutoCompile(true)}>
  57. <Icon type={autoCompile ? 'check' : ''} fw />
  58. {t('on')}
  59. </MenuItem>
  60. <MenuItem onSelect={() => setAutoCompile(false)}>
  61. <Icon type={!autoCompile ? 'check' : ''} fw />
  62. {t('off')}
  63. </MenuItem>
  64. <MenuItem header>{t('compile_mode')}</MenuItem>
  65. <MenuItem onSelect={() => setDraft(false)}>
  66. <Icon type={!draft ? 'check' : ''} fw />
  67. {t('normal')}
  68. </MenuItem>
  69. <MenuItem onSelect={() => setDraft(true)}>
  70. <Icon type={draft ? 'check' : ''} fw />
  71. {t('fast')} <span className="subdued">[draft]</span>
  72. </MenuItem>
  73. <MenuItem header>Syntax Checks</MenuItem>
  74. <MenuItem onSelect={() => setStopOnValidationError(true)}>
  75. <Icon type={stopOnValidationError ? 'check' : ''} fw />
  76. {t('stop_on_validation_error')}
  77. </MenuItem>
  78. <MenuItem onSelect={() => setStopOnValidationError(false)}>
  79. <Icon type={!stopOnValidationError ? 'check' : ''} fw />
  80. {t('ignore_validation_errors')}
  81. </MenuItem>
  82. <MenuItem header>{t('compile_error_handling')}</MenuItem>
  83. <MenuItem onSelect={enableStopOnFirstError}>
  84. <Icon type={stopOnFirstError ? 'check' : ''} fw />
  85. {t('stop_on_first_error')}
  86. </MenuItem>
  87. <MenuItem onSelect={disableStopOnFirstError}>
  88. <Icon type={!stopOnFirstError ? 'check' : ''} fw />
  89. {t('try_to_compile_despite_errors')}
  90. </MenuItem>
  91. <MenuItem divider />
  92. <MenuItem
  93. onSelect={() => stopCompile()}
  94. disabled={!compiling}
  95. aria-disabled={!compiling}
  96. >
  97. {t('stop_compile')}
  98. </MenuItem>
  99. <MenuItem
  100. onSelect={() => recompileFromScratch()}
  101. disabled={compiling}
  102. aria-disabled={compiling}
  103. >
  104. {t('recompile_from_scratch')}
  105. </MenuItem>
  106. </Dropdown.Menu>
  107. </ControlledDropdown>
  108. )
  109. }
  110. export default memo(PdfCompileButton)