preview-log-entry.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import React from 'react'
  2. import PropTypes from 'prop-types'
  3. import classNames from 'classnames'
  4. import Icon from '../../../shared/components/icon'
  5. function PreviewLogEntry({ file, line, message, content, raw, level }) {
  6. const logEntryClasses = classNames('alert', {
  7. 'alert-danger': level === 'error',
  8. 'alert-warning': level === 'warning',
  9. 'alert-info': level === 'typesetting'
  10. })
  11. return (
  12. <div className={logEntryClasses}>
  13. <span className="line-no">
  14. <Icon type="link" />
  15. {file ? <span>{file}</span> : null}
  16. {line ? <span>, {line}</span> : null}
  17. </span>
  18. {message ? (
  19. <p className="entry-message">
  20. {level} {message}
  21. </p>
  22. ) : null}
  23. {content ? <p className="entry-content">{content.trim()}</p> : null}
  24. </div>
  25. )
  26. }
  27. PreviewLogEntry.propTypes = {
  28. file: PropTypes.string,
  29. // `line should be either a number or null (i.e. not required), but currently sometimes we get
  30. // an empty string (from BibTeX errors), which is why we're using `any` here. We should revert
  31. // to PropTypes.number (not required) once we fix that.
  32. line: PropTypes.any,
  33. message: PropTypes.string,
  34. content: PropTypes.string,
  35. raw: PropTypes.string,
  36. level: PropTypes.string.isRequired
  37. }
  38. export default PreviewLogEntry