| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- import React from 'react'
- import PropTypes from 'prop-types'
- import { Dropdown, MenuItem, OverlayTrigger, Tooltip } from 'react-bootstrap'
- import { useTranslation } from 'react-i18next'
- import classNames from 'classnames'
- import Icon from '../../../shared/components/icon'
- function PreviewRecompileButton({
- compilerState: {
- autoCompileHasChanges,
- autoCompileHasLintingError,
- isAutoCompileOn,
- isCompiling,
- isDraftModeOn,
- isSyntaxCheckOn
- },
- onRecompile,
- onRecompileFromScratch,
- onRunSyntaxCheckNow,
- onStopCompilation,
- onSetAutoCompile,
- onSetDraftMode,
- onSetSyntaxCheck,
- showText
- }) {
- const { t } = useTranslation()
- function handleSelectAutoCompileOn() {
- onSetAutoCompile(true)
- }
- function handleSelectAutoCompileOff() {
- onSetAutoCompile(false)
- }
- function handleSelectDraftModeOn() {
- onSetDraftMode(true)
- }
- function handleSelectDraftModeOff() {
- onSetDraftMode(false)
- }
- function handleSelectSyntaxCheckOn() {
- onSetSyntaxCheck(true)
- }
- function handleSelectSyntaxCheckOff() {
- onSetSyntaxCheck(false)
- }
- let compilingProps = {}
- let recompileProps = {}
- function _hideText(keepAria) {
- return {
- 'aria-hidden': !keepAria,
- style: {
- position: 'absolute',
- right: '-100vw'
- }
- }
- }
- if (!showText) {
- compilingProps = _hideText(isCompiling)
- recompileProps = _hideText(!isCompiling)
- } else if (isCompiling) {
- recompileProps = _hideText()
- } else {
- compilingProps = _hideText()
- }
- const recompileButtonGroupClasses = classNames(
- 'btn-recompile-group',
- 'toolbar-item',
- {
- 'btn-recompile-group-has-changes':
- autoCompileHasChanges && !autoCompileHasLintingError
- }
- )
- const buttonElement = (
- <Dropdown
- id="pdf-recompile-dropdown"
- className={recompileButtonGroupClasses}
- >
- <button className="btn btn-recompile" onClick={onRecompile}>
- <Icon type="refresh" spin={isCompiling} />
- <span id="text-compiling" className="toolbar-text" {...compilingProps}>
- {t('compiling')}
- …
- </span>
- <span id="text-recompile" className="toolbar-text" {...recompileProps}>
- {t('recompile')}
- </span>
- </button>
- <Dropdown.Toggle
- aria-label={t('toggle_compile_options_menu')}
- className="btn btn-recompile"
- bsStyle="success"
- />
- <Dropdown.Menu>
- <MenuItem header>{t('auto_compile')}</MenuItem>
- <MenuItem onSelect={handleSelectAutoCompileOn}>
- <Icon type={isAutoCompileOn ? 'check' : ''} modifier="fw" />
- {t('on')}
- </MenuItem>
- <MenuItem onSelect={handleSelectAutoCompileOff}>
- <Icon type={!isAutoCompileOn ? 'check' : ''} modifier="fw" />
- {t('off')}
- </MenuItem>
- <MenuItem header>{t('compile_mode')}</MenuItem>
- <MenuItem onSelect={handleSelectDraftModeOff}>
- <Icon type={!isDraftModeOn ? 'check' : ''} modifier="fw" />
- {t('normal')}
- </MenuItem>
- <MenuItem onSelect={handleSelectDraftModeOn}>
- <Icon type={isDraftModeOn ? 'check' : ''} modifier="fw" />
- {t('fast')} <span className="subdued">[draft]</span>
- </MenuItem>
- <MenuItem header>Syntax Checks</MenuItem>
- <MenuItem onSelect={handleSelectSyntaxCheckOn}>
- <Icon type={isSyntaxCheckOn ? 'check' : ''} modifier="fw" />
- {t('stop_on_validation_error')}
- </MenuItem>
- <MenuItem onSelect={handleSelectSyntaxCheckOff}>
- <Icon type={!isSyntaxCheckOn ? 'check' : ''} modifier="fw" />
- {t('ignore_validation_errors')}
- </MenuItem>
- <MenuItem onSelect={onRunSyntaxCheckNow}>
- <Icon type="" modifier="fw" />
- {t('run_syntax_check_now')}
- </MenuItem>
- <MenuItem className={!isCompiling ? 'hidden' : ''} divider />
- <MenuItem
- onSelect={onStopCompilation}
- className={!isCompiling ? 'hidden' : ''}
- disabled={!isCompiling}
- aria-disabled={!isCompiling}
- >
- {t('stop_compile')}
- </MenuItem>
- <MenuItem divider />
- <MenuItem
- onSelect={onRecompileFromScratch}
- disabled={isCompiling}
- aria-disabled={!!isCompiling}
- >
- {t('recompile_from_scratch')}
- </MenuItem>
- </Dropdown.Menu>
- </Dropdown>
- )
- return showText ? (
- buttonElement
- ) : (
- <OverlayTrigger
- placement="bottom"
- overlay={
- <Tooltip id="tooltip-download-pdf">
- {isCompiling ? t('compiling') : t('recompile')}
- </Tooltip>
- }
- >
- {buttonElement}
- </OverlayTrigger>
- )
- }
- PreviewRecompileButton.propTypes = {
- compilerState: PropTypes.shape({
- autoCompileHasChanges: PropTypes.bool.isRequired,
- autoCompileHasLintingError: PropTypes.bool,
- isAutoCompileOn: PropTypes.bool.isRequired,
- isCompiling: PropTypes.bool.isRequired,
- isDraftModeOn: PropTypes.bool.isRequired,
- isSyntaxCheckOn: PropTypes.bool.isRequired,
- logEntries: PropTypes.object.isRequired
- }),
- onRecompile: PropTypes.func.isRequired,
- onRecompileFromScratch: PropTypes.func.isRequired,
- onRunSyntaxCheckNow: PropTypes.func.isRequired,
- onSetAutoCompile: PropTypes.func.isRequired,
- onSetDraftMode: PropTypes.func.isRequired,
- onSetSyntaxCheck: PropTypes.func.isRequired,
- onStopCompilation: PropTypes.func.isRequired,
- showText: PropTypes.bool.isRequired
- }
- export default PreviewRecompileButton
|