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

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  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. nErrors,
  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={<FirstErrorPopUpInfoBadge />}
  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_error', { count: nErrors })}
  54. </button>
  55. </div>
  56. </div>
  57. )
  58. }
  59. function FirstErrorPopUpInfoBadge() {
  60. const { t } = useTranslation()
  61. const logsPaneInfoMessage = t('logs_pane_info_message_popup')
  62. const tooltip = (
  63. <Tooltip id="file-tree-badge-tooltip">{logsPaneInfoMessage}</Tooltip>
  64. )
  65. return (
  66. <OverlayTrigger placement="bottom" overlay={tooltip} delayHide={100}>
  67. <a
  68. href="https://forms.gle/AUbDDRvroQ7KFwHR9"
  69. target="_blank"
  70. rel="noopener noreferrer"
  71. className="info-badge-fade-bg"
  72. >
  73. <span className="sr-only">{logsPaneInfoMessage}</span>
  74. </a>
  75. </OverlayTrigger>
  76. )
  77. }
  78. PreviewFirstErrorPopUp.propTypes = {
  79. logEntry: PropTypes.object.isRequired,
  80. nErrors: PropTypes.number.isRequired,
  81. onGoToErrorLocation: PropTypes.func.isRequired,
  82. onViewLogs: PropTypes.func.isRequired,
  83. onClose: PropTypes.func.isRequired,
  84. }
  85. export default PreviewFirstErrorPopUp