issue.tsx 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import Link from 'sentry/components/links/link';
  2. import LoadingError from 'sentry/components/loadingError';
  3. import LoadingIndicator from 'sentry/components/loadingIndicator';
  4. import {
  5. ErrorDot,
  6. ErrorLevel,
  7. ErrorMessageContent,
  8. ErrorTitle,
  9. } from 'sentry/components/performance/waterfall/rowDetails';
  10. import {generateIssueEventTarget} from 'sentry/components/quickTrace/utils';
  11. import {t} from 'sentry/locale';
  12. import type {Group, Organization} from 'sentry/types';
  13. import type {TraceErrorOrIssue} from 'sentry/utils/performance/quickTrace/types';
  14. import {useApiQuery} from 'sentry/utils/queryClient';
  15. type Props = {
  16. issue: TraceErrorOrIssue;
  17. organization: Organization;
  18. };
  19. function Issue(props: Props) {
  20. const {
  21. isLoading,
  22. data: fetchedIssue,
  23. isError,
  24. } = useApiQuery<Group>(
  25. [
  26. `/issues/${props.issue.issue_id}/`,
  27. {
  28. query: {
  29. collapse: 'release',
  30. expand: 'inbox',
  31. },
  32. },
  33. ],
  34. {
  35. staleTime: 2 * 60 * 1000,
  36. }
  37. );
  38. return isLoading ? (
  39. <LoadingIndicator size={20} mini />
  40. ) : fetchedIssue ? (
  41. <ErrorMessageContent key={fetchedIssue.id}>
  42. <ErrorDot level={fetchedIssue.level} />
  43. <ErrorLevel>{fetchedIssue.level}</ErrorLevel>
  44. <ErrorTitle>
  45. <Link to={generateIssueEventTarget(props.issue, props.organization)}>
  46. {fetchedIssue.title}
  47. </Link>
  48. </ErrorTitle>
  49. </ErrorMessageContent>
  50. ) : isError ? (
  51. <LoadingError message={t('Failed to fetch issue')} />
  52. ) : null;
  53. }
  54. export default Issue;