viewIssueLink.tsx 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import styled from '@emotion/styled';
  2. import Link from 'sentry/components/links/link';
  3. import ShortId from 'sentry/components/shortId';
  4. import space from 'sentry/styles/space';
  5. import {BreadcrumbTypeDefault, Crumb} from 'sentry/types/breadcrumbs';
  6. import useOrganization from 'sentry/utils/useOrganization';
  7. import {breadcrumbHasIssue} from 'sentry/views/replays/detail/console/utils';
  8. type Props = {
  9. breadcrumb: Extract<Crumb, BreadcrumbTypeDefault>;
  10. };
  11. function ViewIssueLink({breadcrumb}: Props) {
  12. const organization = useOrganization();
  13. if (!breadcrumbHasIssue(breadcrumb)) {
  14. return null;
  15. }
  16. const {groupId, groupShortId, eventId} = breadcrumb.data || {};
  17. const to = {
  18. pathname: `/organizations/${organization.slug}/issues/${groupId}/events/${eventId}/?referrer=replay-console`,
  19. };
  20. return (
  21. <Link to={to}>
  22. <ShortIdBreadrcumb>
  23. <ShortId to={to} shortId={groupShortId} />
  24. </ShortIdBreadrcumb>
  25. </Link>
  26. );
  27. }
  28. const ShortIdBreadrcumb = styled('div')`
  29. display: flex;
  30. gap: ${space(1)};
  31. align-items: center;
  32. `;
  33. export default ViewIssueLink;