preview-pane.js 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import React from 'react'
  2. import PropTypes from 'prop-types'
  3. import PreviewToolbar from './preview-toolbar'
  4. import PreviewLogsPane from './preview-logs-pane'
  5. import { useTranslation } from 'react-i18next'
  6. function PreviewPane({
  7. compilerState,
  8. onClearCache,
  9. onRecompile,
  10. onRunSyntaxCheckNow,
  11. onSetAutoCompile,
  12. onSetDraftMode,
  13. onSetSyntaxCheck,
  14. onToggleLogs,
  15. outputFiles,
  16. pdfDownloadUrl,
  17. showLogs
  18. }) {
  19. const { t } = useTranslation()
  20. const nErrors =
  21. compilerState.logEntries && compilerState.logEntries.errors
  22. ? compilerState.logEntries.errors.length
  23. : 0
  24. const nWarnings =
  25. compilerState.logEntries && compilerState.logEntries.warnings
  26. ? compilerState.logEntries.warnings.length
  27. : 0
  28. const nLogEntries =
  29. compilerState.logEntries && compilerState.logEntries.all
  30. ? compilerState.logEntries.all.length
  31. : 0
  32. return (
  33. <>
  34. <PreviewToolbar
  35. compilerState={compilerState}
  36. logsState={{ nErrors, nWarnings, nLogEntries }}
  37. showLogs={showLogs}
  38. onClearCache={onClearCache}
  39. onRecompile={onRecompile}
  40. onRunSyntaxCheckNow={onRunSyntaxCheckNow}
  41. onSetAutoCompile={onSetAutoCompile}
  42. onSetDraftMode={onSetDraftMode}
  43. onSetSyntaxCheck={onSetSyntaxCheck}
  44. onToggleLogs={onToggleLogs}
  45. outputFiles={outputFiles}
  46. pdfDownloadUrl={pdfDownloadUrl}
  47. />
  48. <span aria-live="polite" className="sr-only">
  49. {nErrors && !compilerState.isCompiling
  50. ? t('n_errors', { count: nErrors })
  51. : ''}
  52. </span>
  53. <span aria-live="polite" className="sr-only">
  54. {nWarnings && !compilerState.isCompiling
  55. ? t('n_warnings', { count: nWarnings })
  56. : ''}
  57. </span>
  58. {showLogs ? (
  59. <PreviewLogsPane logEntries={compilerState.logEntries.all} />
  60. ) : null}
  61. </>
  62. )
  63. }
  64. PreviewPane.propTypes = {
  65. compilerState: PropTypes.shape({
  66. isAutoCompileOn: PropTypes.bool.isRequired,
  67. isCompiling: PropTypes.bool.isRequired,
  68. isDraftModeOn: PropTypes.bool.isRequired,
  69. isSyntaxCheckOn: PropTypes.bool.isRequired,
  70. logEntries: PropTypes.object.isRequired
  71. }),
  72. onClearCache: PropTypes.func.isRequired,
  73. onRecompile: PropTypes.func.isRequired,
  74. onRunSyntaxCheckNow: PropTypes.func.isRequired,
  75. onSetAutoCompile: PropTypes.func.isRequired,
  76. onSetDraftMode: PropTypes.func.isRequired,
  77. onSetSyntaxCheck: PropTypes.func.isRequired,
  78. onToggleLogs: PropTypes.func.isRequired,
  79. outputFiles: PropTypes.array,
  80. pdfDownloadUrl: PropTypes.string,
  81. showLogs: PropTypes.bool.isRequired
  82. }
  83. export default PreviewPane