preview-first-error-pop-up.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import React from 'react'
  2. import PropTypes from 'prop-types'
  3. import { useTranslation } from 'react-i18next'
  4. import Icon from '../../../shared/components/icon'
  5. import PreviewLogsPaneEntry from './preview-logs-pane-entry'
  6. function PreviewFirstErrorPopUp({
  7. logEntry,
  8. onGoToErrorLocation,
  9. onViewLogs,
  10. onClose
  11. }) {
  12. const { t } = useTranslation()
  13. function handleGoToErrorLocation() {
  14. const { file, line, column } = logEntry
  15. onGoToErrorLocation({ file, line, column })
  16. }
  17. return (
  18. <div
  19. className="first-error-popup"
  20. role="alertdialog"
  21. aria-label={t('first_error_popup_label')}
  22. >
  23. <PreviewLogsPaneEntry
  24. headerTitle={logEntry.message}
  25. rawContent={logEntry.content}
  26. formattedContent={logEntry.humanReadableHintComponent}
  27. extraInfoURL={logEntry.extraInfoURL}
  28. level={logEntry.level}
  29. showLineAndNoLink={false}
  30. showCloseButton
  31. customClass="log-entry-first-error-popup"
  32. onClose={onClose}
  33. />
  34. <div className="first-error-popup-actions">
  35. <button
  36. className="btn btn-info btn-xs first-error-btn"
  37. type="button"
  38. onClick={handleGoToErrorLocation}
  39. >
  40. <Icon type="chain" />
  41. &nbsp;
  42. {t('go_to_error_location')}
  43. </button>
  44. <button
  45. className="btn btn-info btn-xs first-error-btn"
  46. type="button"
  47. onClick={onViewLogs}
  48. >
  49. <Icon type="file-text-o" />
  50. &nbsp;
  51. {t('view_all_errors')}
  52. </button>
  53. </div>
  54. </div>
  55. )
  56. }
  57. PreviewFirstErrorPopUp.propTypes = {
  58. logEntry: PropTypes.object.isRequired,
  59. onGoToErrorLocation: PropTypes.func.isRequired,
  60. onViewLogs: PropTypes.func.isRequired,
  61. onClose: PropTypes.func.isRequired
  62. }
  63. export default PreviewFirstErrorPopUp