pdf-compile-button.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  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 PdfCompileButtonInner from './pdf-compile-button-inner'
  9. function PdfCompileButton() {
  10. const {
  11. autoCompile,
  12. compiling,
  13. draft,
  14. hasChanges,
  15. setAutoCompile,
  16. setDraft,
  17. setStopOnValidationError,
  18. stopOnValidationError,
  19. startCompile,
  20. stopCompile,
  21. recompileFromScratch,
  22. } = useCompileContext()
  23. const { t } = useTranslation()
  24. return (
  25. <ControlledDropdown
  26. className={classnames({
  27. 'toolbar-item': true,
  28. 'btn-recompile-group': true,
  29. 'btn-recompile-group-has-changes': hasChanges,
  30. })}
  31. id="pdf-recompile-dropdown"
  32. >
  33. <PdfCompileButtonInner
  34. startCompile={startCompile}
  35. compiling={compiling}
  36. />
  37. <Dropdown.Toggle
  38. aria-label={t('toggle_compile_options_menu')}
  39. className="btn-recompile"
  40. bsStyle="success"
  41. />
  42. <Dropdown.Menu>
  43. <MenuItem header>{t('auto_compile')}</MenuItem>
  44. <MenuItem onSelect={() => setAutoCompile(true)}>
  45. <Icon type={autoCompile ? 'check' : ''} fw />
  46. {t('on')}
  47. </MenuItem>
  48. <MenuItem onSelect={() => setAutoCompile(false)}>
  49. <Icon type={!autoCompile ? 'check' : ''} fw />
  50. {t('off')}
  51. </MenuItem>
  52. <MenuItem header>{t('compile_mode')}</MenuItem>
  53. <MenuItem onSelect={() => setDraft(false)}>
  54. <Icon type={!draft ? 'check' : ''} fw />
  55. {t('normal')}
  56. </MenuItem>
  57. <MenuItem onSelect={() => setDraft(true)}>
  58. <Icon type={draft ? 'check' : ''} fw />
  59. {t('fast')} <span className="subdued">[draft]</span>
  60. </MenuItem>
  61. <MenuItem header>Syntax Checks</MenuItem>
  62. <MenuItem onSelect={() => setStopOnValidationError(true)}>
  63. <Icon type={stopOnValidationError ? 'check' : ''} fw />
  64. {t('stop_on_validation_error')}
  65. </MenuItem>
  66. <MenuItem onSelect={() => setStopOnValidationError(false)}>
  67. <Icon type={!stopOnValidationError ? 'check' : ''} fw />
  68. {t('ignore_validation_errors')}
  69. </MenuItem>
  70. <MenuItem divider />
  71. <MenuItem
  72. onSelect={() => stopCompile()}
  73. disabled={!compiling}
  74. aria-disabled={!compiling}
  75. >
  76. {t('stop_compile')}
  77. </MenuItem>
  78. <MenuItem
  79. onSelect={() => recompileFromScratch()}
  80. disabled={compiling}
  81. aria-disabled={compiling}
  82. >
  83. {t('recompile_from_scratch')}
  84. </MenuItem>
  85. </Dropdown.Menu>
  86. </ControlledDropdown>
  87. )
  88. }
  89. export default memo(PdfCompileButton)