import PropTypes from 'prop-types' import classNames from 'classnames' import { useTranslation } from 'react-i18next' import useExpandCollapse from '../../../shared/hooks/use-expand-collapse' import Icon from '../../../shared/components/icon' import PreviewLogEntryHeader from './preview-log-entry-header' function PreviewLogsPaneEntry({ headerTitle, headerIcon, rawContent, logType, formattedContent, extraInfoURL, level, sourceLocation, showSourceLocationLink = true, showCloseButton = false, entryAriaLabel = null, customClass, onSourceLocationClick, onClose, }) { const logEntryClasses = classNames('log-entry', customClass) function handleLogEntryLinkClick(e) { e.preventDefault() onSourceLocationClick(sourceLocation) } return (
{rawContent || formattedContent ? ( ) : null}
) } function PreviewLogEntryContent({ rawContent, formattedContent, extraInfoURL, }) { const { isExpanded, needsExpandCollapse, expandableProps, toggleProps, } = useExpandCollapse({ collapsedSize: 150, }) const buttonContainerClasses = classNames( 'log-entry-content-button-container', { 'log-entry-content-button-container-collapsed': !isExpanded, } ) const { t } = useTranslation() return (
{formattedContent ? (
{formattedContent}
) : null} {extraInfoURL ? (
{t('log_hint_extra_info')}
) : null} {rawContent ? (
{rawContent.trim()}
{needsExpandCollapse ? (
) : null}
) : null}
) } PreviewLogEntryContent.propTypes = { rawContent: PropTypes.string, formattedContent: PropTypes.node, extraInfoURL: PropTypes.string, } PreviewLogsPaneEntry.propTypes = { sourceLocation: PreviewLogEntryHeader.propTypes.sourceLocation, headerTitle: PropTypes.string, headerIcon: PropTypes.element, rawContent: PropTypes.string, logType: PropTypes.string, formattedContent: PropTypes.node, extraInfoURL: PropTypes.string, level: PropTypes.oneOf(['error', 'warning', 'typesetting', 'raw', 'success']) .isRequired, customClass: PropTypes.string, showSourceLocationLink: PropTypes.bool, showCloseButton: PropTypes.bool, entryAriaLabel: PropTypes.string, onSourceLocationClick: PropTypes.func, onClose: PropTypes.func, } export default PreviewLogsPaneEntry