preview-recompile-button.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. import React from 'react'
  2. import PropTypes from 'prop-types'
  3. import { Dropdown, MenuItem } from 'react-bootstrap'
  4. import { useTranslation } from 'react-i18next'
  5. import Icon from '../../../shared/components/icon'
  6. function PreviewRecompileButton({
  7. compilerState: {
  8. isAutoCompileOn,
  9. isCompiling,
  10. isDraftModeOn,
  11. isSyntaxCheckOn
  12. },
  13. onRecompile,
  14. onRunSyntaxCheckNow,
  15. onSetAutoCompile,
  16. onSetDraftMode,
  17. onSetSyntaxCheck
  18. }) {
  19. const { t } = useTranslation()
  20. function handleSelectAutoCompileOn() {
  21. onSetAutoCompile(true)
  22. }
  23. function handleSelectAutoCompileOff() {
  24. onSetAutoCompile(false)
  25. }
  26. function handleSelectDraftModeOn() {
  27. onSetDraftMode(true)
  28. }
  29. function handleSelectDraftModeOff() {
  30. onSetDraftMode(false)
  31. }
  32. function handleSelectSyntaxCheckOn() {
  33. onSetSyntaxCheck(true)
  34. }
  35. function handleSelectSyntaxCheckOff() {
  36. onSetSyntaxCheck(false)
  37. }
  38. return (
  39. <Dropdown id="pdf-recompile-dropdown" className="btn-recompile-group">
  40. <button className="btn btn-recompile" onClick={onRecompile}>
  41. <Icon type="refresh" spin={isCompiling} />
  42. {isCompiling ? (
  43. <span className="btn-recompile-label">
  44. {t('compiling')}
  45. &hellip;
  46. </span>
  47. ) : (
  48. <span className="btn-recompile-label">{t('recompile')}</span>
  49. )}
  50. </button>
  51. <Dropdown.Toggle className="btn btn-recompile" />
  52. <Dropdown.Menu>
  53. <MenuItem header>{t('auto_compile')}</MenuItem>
  54. <MenuItem onSelect={handleSelectAutoCompileOn}>
  55. <Icon type={isAutoCompileOn ? 'check' : ''} modifier="fw" />
  56. {t('on')}
  57. </MenuItem>
  58. <MenuItem onSelect={handleSelectAutoCompileOff}>
  59. <Icon type={!isAutoCompileOn ? 'check' : ''} modifier="fw" />
  60. {t('off')}
  61. </MenuItem>
  62. <MenuItem header>{t('compile_mode')}</MenuItem>
  63. <MenuItem onSelect={handleSelectDraftModeOff}>
  64. <Icon type={!isDraftModeOn ? 'check' : ''} modifier="fw" />
  65. {t('normal')}
  66. </MenuItem>
  67. <MenuItem onSelect={handleSelectDraftModeOn}>
  68. <Icon type={isDraftModeOn ? 'check' : ''} modifier="fw" />
  69. {t('fast')} <span className="subdued">[draft]</span>
  70. </MenuItem>
  71. <MenuItem header>Syntax Checks</MenuItem>
  72. <MenuItem onSelect={handleSelectSyntaxCheckOn}>
  73. <Icon type={isSyntaxCheckOn ? 'check' : ''} modifier="fw" />
  74. {t('stop_on_validation_error')}
  75. </MenuItem>
  76. <MenuItem onSelect={handleSelectSyntaxCheckOff}>
  77. <Icon type={!isSyntaxCheckOn ? 'check' : ''} modifier="fw" />
  78. {t('ignore_validation_errors')}
  79. </MenuItem>
  80. <MenuItem onSelect={onRunSyntaxCheckNow}>
  81. <Icon type="" modifier="fw" />
  82. {t('run_syntax_check_now')}
  83. </MenuItem>
  84. </Dropdown.Menu>
  85. </Dropdown>
  86. )
  87. }
  88. PreviewRecompileButton.propTypes = {
  89. compilerState: PropTypes.shape({
  90. isAutoCompileOn: PropTypes.bool.isRequired,
  91. isCompiling: PropTypes.bool.isRequired,
  92. isDraftModeOn: PropTypes.bool.isRequired,
  93. isSyntaxCheckOn: PropTypes.bool.isRequired,
  94. logEntries: PropTypes.object.isRequired
  95. }),
  96. onRecompile: PropTypes.func.isRequired,
  97. onRunSyntaxCheckNow: PropTypes.func.isRequired,
  98. onSetAutoCompile: PropTypes.func.isRequired,
  99. onSetDraftMode: PropTypes.func.isRequired,
  100. onSetSyntaxCheck: PropTypes.func.isRequired
  101. }
  102. export default PreviewRecompileButton