traceMetadataHeader.tsx 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import {useCallback, useMemo} from 'react';
  2. import ButtonBar from 'sentry/components/buttonBar';
  3. import DiscoverButton from 'sentry/components/discoverButton';
  4. import * as Layout from 'sentry/components/layouts/thirds';
  5. import {t} from 'sentry/locale';
  6. import type {Organization} from 'sentry/types';
  7. import {trackAnalytics} from 'sentry/utils/analytics';
  8. import type EventView from 'sentry/utils/discover/eventView';
  9. import {useLocation} from 'sentry/utils/useLocation';
  10. import Breadcrumb from '../breadcrumb';
  11. interface TraceMetadataHeaderProps {
  12. organization: Organization;
  13. projectID: string;
  14. title: string;
  15. traceEventView: EventView;
  16. traceSlug: string;
  17. }
  18. export function TraceMetadataHeader(props: TraceMetadataHeaderProps) {
  19. const location = useLocation();
  20. const breadcrumbTransaction = useMemo(() => {
  21. return {
  22. project: props.projectID ?? '',
  23. name: props.title ?? '',
  24. };
  25. }, [props.projectID, props.title]);
  26. const trackOpenInDiscover = useCallback(() => {
  27. trackAnalytics('performance_views.trace_view.open_in_discover', {
  28. organization: props.organization,
  29. });
  30. }, [props.organization]);
  31. return (
  32. <Layout.Header>
  33. <Layout.HeaderContent>
  34. <Breadcrumb
  35. organization={props.organization}
  36. location={location}
  37. transaction={breadcrumbTransaction}
  38. traceSlug={props.traceSlug}
  39. />
  40. </Layout.HeaderContent>
  41. <Layout.HeaderActions>
  42. <ButtonBar gap={1}>
  43. <DiscoverButton
  44. size="sm"
  45. to={props.traceEventView.getResultsViewUrlTarget(props.organization.slug)}
  46. onClick={trackOpenInDiscover}
  47. >
  48. {t('Open in Discover')}
  49. </DiscoverButton>
  50. </ButtonBar>
  51. </Layout.HeaderActions>
  52. </Layout.Header>
  53. );
  54. }