preview-recompile-button.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  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. isClearingCache,
  10. isCompiling,
  11. isDraftModeOn,
  12. isSyntaxCheckOn
  13. },
  14. onClearCache,
  15. onRecompile,
  16. onRunSyntaxCheckNow,
  17. onSetAutoCompile,
  18. onSetDraftMode,
  19. onSetSyntaxCheck
  20. }) {
  21. const { t } = useTranslation()
  22. function handleRecompileFromScratch() {
  23. onClearCache()
  24. .then(() => {
  25. onRecompile()
  26. })
  27. .catch(error => {
  28. console.error(error)
  29. })
  30. }
  31. function handleSelectAutoCompileOn() {
  32. onSetAutoCompile(true)
  33. }
  34. function handleSelectAutoCompileOff() {
  35. onSetAutoCompile(false)
  36. }
  37. function handleSelectDraftModeOn() {
  38. onSetDraftMode(true)
  39. }
  40. function handleSelectDraftModeOff() {
  41. onSetDraftMode(false)
  42. }
  43. function handleSelectSyntaxCheckOn() {
  44. onSetSyntaxCheck(true)
  45. }
  46. function handleSelectSyntaxCheckOff() {
  47. onSetSyntaxCheck(false)
  48. }
  49. return (
  50. <Dropdown id="pdf-recompile-dropdown" className="btn-recompile-group">
  51. <button className="btn btn-recompile" onClick={onRecompile}>
  52. <Icon type="refresh" spin={isCompiling} />
  53. {isCompiling || isClearingCache ? (
  54. <span className="btn-recompile-label">
  55. {t('compiling')}
  56. &hellip;
  57. </span>
  58. ) : (
  59. <span className="btn-recompile-label">{t('recompile')}</span>
  60. )}
  61. </button>
  62. <Dropdown.Toggle
  63. aria-label={t('toggle_compile_options_menu')}
  64. className="btn btn-recompile"
  65. />
  66. <Dropdown.Menu>
  67. <MenuItem header>{t('auto_compile')}</MenuItem>
  68. <MenuItem onSelect={handleSelectAutoCompileOn}>
  69. <Icon type={isAutoCompileOn ? 'check' : ''} modifier="fw" />
  70. {t('on')}
  71. </MenuItem>
  72. <MenuItem onSelect={handleSelectAutoCompileOff}>
  73. <Icon type={!isAutoCompileOn ? 'check' : ''} modifier="fw" />
  74. {t('off')}
  75. </MenuItem>
  76. <MenuItem header>{t('compile_mode')}</MenuItem>
  77. <MenuItem onSelect={handleSelectDraftModeOff}>
  78. <Icon type={!isDraftModeOn ? 'check' : ''} modifier="fw" />
  79. {t('normal')}
  80. </MenuItem>
  81. <MenuItem onSelect={handleSelectDraftModeOn}>
  82. <Icon type={isDraftModeOn ? 'check' : ''} modifier="fw" />
  83. {t('fast')} <span className="subdued">[draft]</span>
  84. </MenuItem>
  85. <MenuItem header>Syntax Checks</MenuItem>
  86. <MenuItem onSelect={handleSelectSyntaxCheckOn}>
  87. <Icon type={isSyntaxCheckOn ? 'check' : ''} modifier="fw" />
  88. {t('stop_on_validation_error')}
  89. </MenuItem>
  90. <MenuItem onSelect={handleSelectSyntaxCheckOff}>
  91. <Icon type={!isSyntaxCheckOn ? 'check' : ''} modifier="fw" />
  92. {t('ignore_validation_errors')}
  93. </MenuItem>
  94. <MenuItem onSelect={onRunSyntaxCheckNow}>
  95. <Icon type="" modifier="fw" />
  96. {t('run_syntax_check_now')}
  97. </MenuItem>
  98. <MenuItem divider />
  99. <MenuItem
  100. onSelect={handleRecompileFromScratch}
  101. disabled={isCompiling || isClearingCache}
  102. aria-disabled={!!(isCompiling || isClearingCache)}
  103. >
  104. {t('recompile_from_scratch')}
  105. </MenuItem>
  106. </Dropdown.Menu>
  107. </Dropdown>
  108. )
  109. }
  110. PreviewRecompileButton.propTypes = {
  111. compilerState: PropTypes.shape({
  112. isAutoCompileOn: PropTypes.bool.isRequired,
  113. isClearingCache: PropTypes.bool.isRequired,
  114. isCompiling: PropTypes.bool.isRequired,
  115. isDraftModeOn: PropTypes.bool.isRequired,
  116. isSyntaxCheckOn: PropTypes.bool.isRequired,
  117. logEntries: PropTypes.object.isRequired
  118. }),
  119. onClearCache: PropTypes.func.isRequired,
  120. onRecompile: PropTypes.func.isRequired,
  121. onRunSyntaxCheckNow: PropTypes.func.isRequired,
  122. onSetAutoCompile: PropTypes.func.isRequired,
  123. onSetDraftMode: PropTypes.func.isRequired,
  124. onSetSyntaxCheck: PropTypes.func.isRequired
  125. }
  126. export default PreviewRecompileButton