import React from 'react' import PropTypes from 'prop-types' import { useTranslation } from 'react-i18next' import { Dropdown } from 'react-bootstrap' import PreviewLogsPaneEntry from './preview-logs-pane-entry' import PreviewValidationIssue from './preview-validation-issue' import PreviewDownloadFileList from './preview-download-file-list' import PreviewError from './preview-error' import Icon from '../../../shared/components/icon' import usePersistedState from '../../../infrastructure/persisted-state-hook' function PreviewLogsPane({ logEntries = { all: [], errors: [], warnings: [], typesetting: [] }, rawLog = '', validationIssues = {}, errors = {}, outputFiles = [], isClearingCache, isCompiling = false, onLogEntryLocationClick, onClearCache }) { const { t } = useTranslation() const { all: allCompilerIssues = [], errors: compilerErrors = [], warnings: compilerWarnings = [], typesetting: compilerTypesettingIssues = [] } = logEntries const errorsUI = Object.keys(errors).map((name, index) => ( )) const validationIssuesUI = Object.keys( validationIssues ).map((name, index) => ( )) const logEntriesUI = [ ...compilerErrors, ...compilerWarnings, ...compilerTypesettingIssues ].map((logEntry, idx) => ( )) const actionsUI = (
) const rawLogUI = ( ) return (
{errors ? errorsUI : null} {validationIssues ? validationIssuesUI : null} {allCompilerIssues.length > 0 ? logEntriesUI : null} {rawLog && rawLog !== '' ? rawLogUI : null} {actionsUI}
) } function LogsPaneBetaNotice() { const { t } = useTranslation() const [dismissedBetaNotice, setDismissedBetaNotice] = usePersistedState( `logs_pane.dismissed_beta_notice`, false ) function handleDismissButtonClick() { setDismissedBetaNotice(true) } return dismissedBetaNotice ? null : (

{t('logs_pane_beta_message')}

{t('give_feedback')}
) } PreviewLogsPane.propTypes = { logEntries: PropTypes.shape({ all: PropTypes.array, errors: PropTypes.array, warning: PropTypes.array, typesetting: PropTypes.array }), rawLog: PropTypes.string, outputFiles: PropTypes.array, isClearingCache: PropTypes.bool, isCompiling: PropTypes.bool, onLogEntryLocationClick: PropTypes.func.isRequired, onClearCache: PropTypes.func.isRequired, validationIssues: PropTypes.object, errors: PropTypes.object } export default PreviewLogsPane