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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. import PropTypes from 'prop-types'
  2. import { useTranslation } from 'react-i18next'
  3. import Icon from '../../../shared/components/icon'
  4. import PreviewLogsPaneEntry from './preview-logs-pane-entry'
  5. import { OverlayTrigger, Tooltip } from 'react-bootstrap'
  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. headerIcon={<FirstErrorPopUpInfoBadge />}
  26. rawContent={logEntry.content}
  27. formattedContent={logEntry.humanReadableHintComponent}
  28. extraInfoURL={logEntry.extraInfoURL}
  29. level={logEntry.level}
  30. showLineAndNoLink={false}
  31. showCloseButton
  32. customClass="log-entry-first-error-popup"
  33. onClose={onClose}
  34. />
  35. <div className="first-error-popup-actions">
  36. <button
  37. className="btn btn-info btn-xs first-error-btn"
  38. type="button"
  39. onClick={handleGoToErrorLocation}
  40. >
  41. <Icon type="chain" />
  42. &nbsp;
  43. {t('go_to_error_location')}
  44. </button>
  45. <button
  46. className="btn btn-info btn-xs first-error-btn"
  47. type="button"
  48. onClick={onViewLogs}
  49. >
  50. <Icon type="file-text-o" />
  51. &nbsp;
  52. {t('view_all_errors')}
  53. </button>
  54. </div>
  55. </div>
  56. )
  57. }
  58. function FirstErrorPopUpInfoBadge() {
  59. const { t } = useTranslation()
  60. const logsPaneInfoMessage = t('logs_pane_info_message_popup')
  61. const tooltip = (
  62. <Tooltip id="file-tree-badge-tooltip">{logsPaneInfoMessage}</Tooltip>
  63. )
  64. return (
  65. <OverlayTrigger placement="bottom" overlay={tooltip} delayHide={100}>
  66. <a
  67. href="https://forms.gle/AUbDDRvroQ7KFwHR9"
  68. target="_blank"
  69. rel="noopener noreferrer"
  70. className="info-badge-fade-bg"
  71. >
  72. <span className="sr-only">{logsPaneInfoMessage}</span>
  73. </a>
  74. </OverlayTrigger>
  75. )
  76. }
  77. PreviewFirstErrorPopUp.propTypes = {
  78. logEntry: PropTypes.object.isRequired,
  79. onGoToErrorLocation: PropTypes.func.isRequired,
  80. onViewLogs: PropTypes.func.isRequired,
  81. onClose: PropTypes.func.isRequired,
  82. }
  83. export default PreviewFirstErrorPopUp