breadcrumb.tsx 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import {Location} from 'history';
  2. import omit from 'lodash/omit';
  3. import Breadcrumbs, {Crumb} from 'sentry/components/breadcrumbs';
  4. import {t} from 'sentry/locale';
  5. import {Organization} from 'sentry/types';
  6. import {Event} from 'sentry/types/event';
  7. import EventView from 'sentry/utils/discover/eventView';
  8. import {getDiscoverLandingUrl, getDiscoverQueriesUrl} from 'sentry/utils/discover/urls';
  9. type Props = {
  10. eventView: EventView;
  11. location: Location;
  12. organization: Organization;
  13. event?: Event;
  14. isHomepage?: boolean;
  15. };
  16. function DiscoverBreadcrumb({
  17. eventView,
  18. event,
  19. organization,
  20. location,
  21. isHomepage,
  22. }: Props) {
  23. const crumbs: Crumb[] = [];
  24. const discoverTarget = organization.features.includes('discover-query')
  25. ? {
  26. pathname: organization.features.includes('discover-query-builder-as-landing-page')
  27. ? getDiscoverQueriesUrl(organization)
  28. : getDiscoverLandingUrl(organization),
  29. query: {
  30. ...omit(location.query, 'homepage'),
  31. ...eventView.generateBlankQueryStringObject(),
  32. ...eventView.getPageFiltersQuery(),
  33. },
  34. }
  35. : null;
  36. crumbs.push({
  37. to: discoverTarget,
  38. label: t('Discover'),
  39. });
  40. if (eventView && eventView.isValid()) {
  41. crumbs.push({
  42. to: eventView.getResultsViewUrlTarget(organization.slug, isHomepage),
  43. label: eventView.name || '',
  44. });
  45. }
  46. if (event) {
  47. crumbs.push({
  48. label: t('Event Detail'),
  49. });
  50. }
  51. return <Breadcrumbs crumbs={crumbs} />;
  52. }
  53. export default DiscoverBreadcrumb;