spanGroupDetailsLink.tsx 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import * as qs from 'query-string';
  2. import Link from 'sentry/components/links/link';
  3. import {useLocation} from 'sentry/utils/useLocation';
  4. import useOrganization from 'sentry/utils/useOrganization';
  5. import {normalizeUrl} from 'sentry/utils/withDomainRequired';
  6. import {OverflowEllipsisTextContainer} from 'sentry/views/starfish/components/textAlign';
  7. import {SpanMetricsField} from 'sentry/views/starfish/types';
  8. import {useRoutingContext} from 'sentry/views/starfish/utils/routingContext';
  9. const {SPAN_OP} = SpanMetricsField;
  10. interface Props {
  11. description: React.ReactNode;
  12. projectId: number;
  13. group?: string;
  14. spanOp?: string;
  15. }
  16. export function SpanGroupDetailsLink({group, projectId, spanOp, description}: Props) {
  17. const location = useLocation();
  18. const organization = useOrganization();
  19. const routingContext = useRoutingContext();
  20. const queryString = {
  21. ...location.query,
  22. project: projectId,
  23. ...(spanOp ? {[SPAN_OP]: spanOp} : {}),
  24. };
  25. return (
  26. <OverflowEllipsisTextContainer>
  27. {group ? (
  28. <Link
  29. to={normalizeUrl(
  30. `/organizations/${organization.slug}${routingContext.baseURL}/spans/span/${group}/?${qs.stringify(queryString)}`
  31. )}
  32. >
  33. {description}
  34. </Link>
  35. ) : (
  36. description
  37. )}
  38. </OverflowEllipsisTextContainer>
  39. );
  40. }