pdf-logs-viewer.js 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import { useTranslation } from 'react-i18next'
  2. import { memo } from 'react'
  3. import classnames from 'classnames'
  4. import PdfValidationIssue from './pdf-validation-issue'
  5. import StopOnFirstErrorPrompt from './stop-on-first-error-prompt'
  6. import TimeoutUpgradePrompt from './timeout-upgrade-prompt'
  7. import TimeoutUpgradePromptNew from './timeout-upgrade-prompt-new'
  8. import PdfPreviewError from './pdf-preview-error'
  9. import PdfClearCacheButton from './pdf-clear-cache-button'
  10. import PdfDownloadFilesButton from './pdf-download-files-button'
  11. import PdfLogsEntries from './pdf-logs-entries'
  12. import withErrorBoundary from '../../../infrastructure/error-boundary'
  13. import PdfPreviewErrorBoundaryFallback from './pdf-preview-error-boundary-fallback'
  14. import PdfCodeCheckFailedNotice from './pdf-code-check-failed-notice'
  15. import { useDetachCompileContext as useCompileContext } from '../../../shared/context/detach-compile-context'
  16. import PdfLogEntry from './pdf-log-entry'
  17. function PdfLogsViewer() {
  18. const {
  19. codeCheckFailed,
  20. error,
  21. logEntries,
  22. rawLog,
  23. validationIssues,
  24. showLogs,
  25. stoppedOnFirstError,
  26. showNewCompileTimeoutUI,
  27. } = useCompileContext()
  28. const { t } = useTranslation()
  29. return (
  30. <div className={classnames('logs-pane', { hidden: !showLogs })}>
  31. <div className="logs-pane-content">
  32. {codeCheckFailed && <PdfCodeCheckFailedNotice />}
  33. {stoppedOnFirstError && <StopOnFirstErrorPrompt />}
  34. {showNewCompileTimeoutUI && error === 'timedout' ? (
  35. <TimeoutUpgradePromptNew />
  36. ) : (
  37. <>
  38. {error && <PdfPreviewError error={error} />}
  39. {error === 'timedout' && <TimeoutUpgradePrompt />}
  40. </>
  41. )}
  42. {validationIssues &&
  43. Object.entries(validationIssues).map(([name, issue]) => (
  44. <PdfValidationIssue key={name} name={name} issue={issue} />
  45. ))}
  46. {logEntries?.all && (
  47. <PdfLogsEntries
  48. entries={logEntries.all}
  49. hasErrors={logEntries.errors.length > 0}
  50. />
  51. )}
  52. {rawLog && (
  53. <PdfLogEntry
  54. headerTitle={t('raw_logs')}
  55. rawContent={rawLog}
  56. entryAriaLabel={t('raw_logs_description')}
  57. level="raw"
  58. />
  59. )}
  60. <div className="logs-pane-actions">
  61. <PdfClearCacheButton />
  62. <PdfDownloadFilesButton />
  63. </div>
  64. </div>
  65. </div>
  66. )
  67. }
  68. export default withErrorBoundary(memo(PdfLogsViewer), () => (
  69. <PdfPreviewErrorBoundaryFallback type="logs" />
  70. ))