preview-recompile-button.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. import React from 'react'
  2. import PropTypes from 'prop-types'
  3. import classNames from 'classnames'
  4. import { Dropdown, MenuItem } from 'react-bootstrap'
  5. import { useTranslation } from 'react-i18next'
  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. const iconClasses = {
  21. recompile: classNames('fa', 'fa-refresh', {
  22. 'fa-spin': isCompiling
  23. }),
  24. autoCompileOn: classNames('fa', 'fa-fw', { 'fa-check': isAutoCompileOn }),
  25. autoCompileOff: classNames('fa', 'fa-fw', { 'fa-check': !isAutoCompileOn }),
  26. compileModeNormal: classNames('fa', 'fa-fw', {
  27. 'fa-check': !isDraftModeOn
  28. }),
  29. compileModeDraft: classNames('fa', 'fa-fw', { 'fa-check': isDraftModeOn }),
  30. syntaxCheckOn: classNames('fa', 'fa-fw', { 'fa-check': isSyntaxCheckOn }),
  31. syntaxCheckOff: classNames('fa', 'fa-fw', { 'fa-check': !isSyntaxCheckOn })
  32. }
  33. function handleSelectAutoCompileOn() {
  34. onSetAutoCompile(true)
  35. }
  36. function handleSelectAutoCompileOff() {
  37. onSetAutoCompile(false)
  38. }
  39. function handleSelectDraftModeOn() {
  40. onSetDraftMode(true)
  41. }
  42. function handleSelectDraftModeOff() {
  43. onSetDraftMode(false)
  44. }
  45. function handleSelectSyntaxCheckOn() {
  46. onSetSyntaxCheck(true)
  47. }
  48. function handleSelectSyntaxCheckOff() {
  49. onSetSyntaxCheck(false)
  50. }
  51. return (
  52. <Dropdown id="pdf-recompile-dropdown" className="btn-recompile-group">
  53. <button className="btn btn-recompile" onClick={onRecompile}>
  54. <i className={iconClasses.recompile} aria-hidden="true" />
  55. {isCompiling ? (
  56. <span className="btn-recompile-label">
  57. {t('compiling')}
  58. &hellip;
  59. </span>
  60. ) : (
  61. <span className="btn-recompile-label">{t('recompile')}</span>
  62. )}
  63. </button>
  64. <Dropdown.Toggle className="btn btn-recompile" />
  65. <Dropdown.Menu>
  66. <MenuItem header>{t('auto_compile')}</MenuItem>
  67. <MenuItem onSelect={handleSelectAutoCompileOn}>
  68. <i className={iconClasses.autoCompileOn} aria-hidden="true" />
  69. {t('on')}
  70. </MenuItem>
  71. <MenuItem onSelect={handleSelectAutoCompileOff}>
  72. <i className={iconClasses.autoCompileOff} aria-hidden="true" />
  73. {t('off')}
  74. </MenuItem>
  75. <MenuItem header>{t('compile_mode')}</MenuItem>
  76. <MenuItem onSelect={handleSelectDraftModeOff}>
  77. <i className={iconClasses.compileModeNormal} aria-hidden="true" />
  78. {t('normal')}
  79. </MenuItem>
  80. <MenuItem onSelect={handleSelectDraftModeOn}>
  81. <i className={iconClasses.compileModeDraft} aria-hidden="true" />
  82. {t('fast')} <span className="subdued">[draft]</span>
  83. </MenuItem>
  84. <MenuItem header>Syntax Checks</MenuItem>
  85. <MenuItem onSelect={handleSelectSyntaxCheckOn}>
  86. <i className={iconClasses.syntaxCheckOn} aria-hidden="true" />
  87. {t('stop_on_validation_error')}
  88. </MenuItem>
  89. <MenuItem onSelect={handleSelectSyntaxCheckOff}>
  90. <i className={iconClasses.syntaxCheckOff} aria-hidden="true" />
  91. {t('ignore_validation_errors')}
  92. </MenuItem>
  93. <MenuItem onSelect={onRunSyntaxCheckNow}>
  94. <i className="fa fa-fw" aria-hidden="true" />
  95. {t('run_syntax_check_now')}
  96. </MenuItem>
  97. </Dropdown.Menu>
  98. </Dropdown>
  99. )
  100. }
  101. PreviewRecompileButton.propTypes = {
  102. compilerState: PropTypes.shape({
  103. isAutoCompileOn: PropTypes.bool.isRequired,
  104. isCompiling: PropTypes.bool.isRequired,
  105. isDraftModeOn: PropTypes.bool.isRequired,
  106. isSyntaxCheckOn: PropTypes.bool.isRequired
  107. }),
  108. onRecompile: PropTypes.func.isRequired,
  109. onRunSyntaxCheckNow: PropTypes.func.isRequired,
  110. onSetAutoCompile: PropTypes.func.isRequired,
  111. onSetDraftMode: PropTypes.func.isRequired,
  112. onSetSyntaxCheck: PropTypes.func.isRequired
  113. }
  114. export default PreviewRecompileButton