| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- import { useTranslation } from 'react-i18next'
- import { memo } from 'react'
- import classnames from 'classnames'
- import PdfValidationIssue from './pdf-validation-issue'
- import StopOnFirstErrorPrompt from './stop-on-first-error-prompt'
- import TimeoutUpgradePromptNew from './timeout-upgrade-prompt-new'
- import PdfPreviewError from './pdf-preview-error'
- import PdfClearCacheButton from './pdf-clear-cache-button'
- import PdfDownloadFilesButton from './pdf-download-files-button'
- import PdfLogsEntries from './pdf-logs-entries'
- import withErrorBoundary from '../../../infrastructure/error-boundary'
- import PdfPreviewErrorBoundaryFallback from './pdf-preview-error-boundary-fallback'
- import PdfCodeCheckFailedNotice from './pdf-code-check-failed-notice'
- import { useDetachCompileContext as useCompileContext } from '../../../shared/context/detach-compile-context'
- import PdfLogEntry from './pdf-log-entry'
- import { usePdfPreviewContext } from '@/features/pdf-preview/components/pdf-preview-provider'
- import PropTypes from 'prop-types'
- function PdfLogsViewer({ alwaysVisible = false }) {
- const {
- codeCheckFailed,
- error,
- hasShortCompileTimeout,
- logEntries,
- rawLog,
- validationIssues,
- showLogs,
- stoppedOnFirstError,
- } = useCompileContext()
- const { loadingError } = usePdfPreviewContext()
- const { t } = useTranslation()
- return (
- <div
- className={classnames('logs-pane', {
- hidden: !showLogs && !alwaysVisible && !loadingError,
- })}
- >
- <div className="logs-pane-content">
- {codeCheckFailed && <PdfCodeCheckFailedNotice />}
- {stoppedOnFirstError && <StopOnFirstErrorPrompt />}
- {loadingError && <PdfPreviewError error="pdf-viewer-loading-error" />}
- {hasShortCompileTimeout && error === 'timedout' ? (
- <TimeoutUpgradePromptNew />
- ) : (
- <>{error && <PdfPreviewError error={error} />}</>
- )}
- {validationIssues &&
- Object.entries(validationIssues).map(([name, issue]) => (
- <PdfValidationIssue key={name} name={name} issue={issue} />
- ))}
- {logEntries?.all && (
- <PdfLogsEntries
- entries={logEntries.all}
- hasErrors={logEntries.errors.length > 0}
- />
- )}
- {rawLog && (
- <PdfLogEntry
- headerTitle={t('raw_logs')}
- rawContent={rawLog}
- entryAriaLabel={t('raw_logs_description')}
- level="raw"
- />
- )}
- <div className="logs-pane-actions">
- <PdfClearCacheButton />
- <PdfDownloadFilesButton />
- </div>
- </div>
- </div>
- )
- }
- PdfLogsViewer.propTypes = {
- alwaysVisible: PropTypes.bool,
- }
- export default withErrorBoundary(memo(PdfLogsViewer), () => (
- <PdfPreviewErrorBoundaryFallback type="logs" />
- ))
|