preview-log-entry.js 1.3 KB

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