archivedBox.tsx 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import DateTime from 'sentry/components/dateTime';
  2. import Duration from 'sentry/components/duration';
  3. import {BannerContainer, BannerSummary} from 'sentry/components/events/styles';
  4. import ExternalLink from 'sentry/components/links/externalLink';
  5. import {t} from 'sentry/locale';
  6. import {Group, GroupSubstatus, IgnoredStatusDetails, Organization} from 'sentry/types';
  7. import {trackAnalytics} from 'sentry/utils/analytics';
  8. interface ArchivedBoxProps {
  9. organization: Organization;
  10. statusDetails: IgnoredStatusDetails;
  11. substatus: Group['substatus'];
  12. }
  13. function ArchivedBox({substatus, statusDetails, organization}: ArchivedBoxProps) {
  14. function trackDocsClick() {
  15. trackAnalytics('issue_details.issue_status_docs_clicked', {
  16. organization,
  17. });
  18. }
  19. function renderReason() {
  20. const {ignoreUntil, ignoreCount, ignoreWindow, ignoreUserCount, ignoreUserWindow} =
  21. statusDetails;
  22. if (substatus === GroupSubstatus.ARCHIVED_UNTIL_ESCALATING) {
  23. return t(
  24. "This issue has been archived. It'll return to your inbox if it escalates. To learn more, %s",
  25. <ExternalLink
  26. href="https://docs.sentry.io/product/accounts/early-adopter-features/issue-archiving/"
  27. onClick={trackDocsClick}
  28. >
  29. {t('read the docs')}
  30. </ExternalLink>
  31. );
  32. }
  33. if (ignoreUntil) {
  34. return t(
  35. 'This issue has been archived until %s.',
  36. <strong>
  37. <DateTime date={ignoreUntil} />
  38. </strong>
  39. );
  40. }
  41. if (ignoreCount && ignoreWindow) {
  42. return t(
  43. 'This issue has been archived until it occurs %s time(s) in %s.',
  44. <strong>{ignoreCount.toLocaleString()}</strong>,
  45. <strong>
  46. <Duration seconds={ignoreWindow * 60} />
  47. </strong>
  48. );
  49. }
  50. if (ignoreCount) {
  51. return t(
  52. 'This issue has been archived until it occurs %s more time(s).',
  53. <strong>{ignoreCount.toLocaleString()}</strong>
  54. );
  55. }
  56. if (ignoreUserCount && ignoreUserWindow) {
  57. return t(
  58. 'This issue has been archived until it affects %s user(s) in %s.',
  59. <strong>{ignoreUserCount.toLocaleString()}</strong>,
  60. <strong>
  61. <Duration seconds={ignoreUserWindow * 60} />
  62. </strong>
  63. );
  64. }
  65. if (ignoreUserCount) {
  66. return t(
  67. 'This issue has been archived until it affects %s more user(s).',
  68. <strong>{ignoreUserCount.toLocaleString()}</strong>
  69. );
  70. }
  71. return t('This issue has been archived forever.');
  72. }
  73. return (
  74. <BannerContainer priority="default">
  75. <BannerSummary>
  76. <span>{renderReason()}</span>
  77. </BannerSummary>
  78. </BannerContainer>
  79. );
  80. }
  81. export default ArchivedBox;