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

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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. import { OverlayTrigger, Tooltip } from 'react-bootstrap'
  7. function PreviewFirstErrorPopUp({
  8. logEntry,
  9. onGoToErrorLocation,
  10. onViewLogs,
  11. onClose
  12. }) {
  13. const { t } = useTranslation()
  14. function handleGoToErrorLocation() {
  15. const { file, line, column } = logEntry
  16. onGoToErrorLocation({ file, line, column })
  17. }
  18. return (
  19. <div
  20. className="first-error-popup"
  21. role="alertdialog"
  22. aria-label={t('first_error_popup_label')}
  23. >
  24. <PreviewLogsPaneEntry
  25. headerTitle={logEntry.message}
  26. headerIcon={<FirstErrorPopUpBetaBadge />}
  27. rawContent={logEntry.content}
  28. formattedContent={logEntry.humanReadableHintComponent}
  29. extraInfoURL={logEntry.extraInfoURL}
  30. level={logEntry.level}
  31. showLineAndNoLink={false}
  32. showCloseButton
  33. customClass="log-entry-first-error-popup"
  34. onClose={onClose}
  35. />
  36. <div className="first-error-popup-actions">
  37. <button
  38. className="btn btn-info btn-xs first-error-btn"
  39. type="button"
  40. onClick={handleGoToErrorLocation}
  41. >
  42. <Icon type="chain" />
  43. &nbsp;
  44. {t('go_to_error_location')}
  45. </button>
  46. <button
  47. className="btn btn-info btn-xs first-error-btn"
  48. type="button"
  49. onClick={onViewLogs}
  50. >
  51. <Icon type="file-text-o" />
  52. &nbsp;
  53. {t('view_all_errors')}
  54. </button>
  55. </div>
  56. </div>
  57. )
  58. }
  59. function FirstErrorPopUpBetaBadge() {
  60. const { t } = useTranslation()
  61. const logsPaneBetaMessage = t('logs_pane_beta_message_popup')
  62. const tooltip = (
  63. <Tooltip id="file-tree-badge-tooltip">{logsPaneBetaMessage}</Tooltip>
  64. )
  65. return (
  66. <OverlayTrigger placement="bottom" overlay={tooltip} delayHide={100}>
  67. <a
  68. href="/beta/participate"
  69. target="_blank"
  70. rel="noopener noreferrer"
  71. className="beta-badge"
  72. >
  73. <span className="sr-only">{logsPaneBetaMessage}</span>
  74. </a>
  75. </OverlayTrigger>
  76. )
  77. }
  78. PreviewFirstErrorPopUp.propTypes = {
  79. logEntry: PropTypes.object.isRequired,
  80. onGoToErrorLocation: PropTypes.func.isRequired,
  81. onViewLogs: PropTypes.func.isRequired,
  82. onClose: PropTypes.func.isRequired
  83. }
  84. export default PreviewFirstErrorPopUp