breadcrumb.tsx 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. import {Component} from 'react';
  2. import {Location, LocationDescriptor} from 'history';
  3. import Breadcrumbs, {Crumb} from 'app/components/breadcrumbs';
  4. import {t} from 'app/locale';
  5. import {Organization} from 'app/types';
  6. import {decodeScalar} from 'app/utils/queryString';
  7. import {vitalsRouteWithQuery} from './transactionSummary/transactionVitals/utils';
  8. import {transactionSummaryRouteWithQuery} from './transactionSummary/utils';
  9. import {vitalDetailRouteWithQuery} from './vitalDetail/utils';
  10. import {getPerformanceLandingUrl} from './utils';
  11. type Props = {
  12. organization: Organization;
  13. location: Location;
  14. transactionName?: string;
  15. vitalName?: string;
  16. eventSlug?: string;
  17. traceSlug?: string;
  18. transactionComparison?: boolean;
  19. realUserMonitoring?: boolean;
  20. };
  21. class Breadcrumb extends Component<Props> {
  22. getCrumbs() {
  23. const crumbs: Crumb[] = [];
  24. const {
  25. organization,
  26. location,
  27. transactionName,
  28. vitalName,
  29. eventSlug,
  30. traceSlug,
  31. transactionComparison,
  32. realUserMonitoring,
  33. } = this.props;
  34. const performanceTarget: LocationDescriptor = {
  35. pathname: getPerformanceLandingUrl(organization),
  36. query: {
  37. ...location.query,
  38. // clear out the transaction name
  39. transaction: undefined,
  40. },
  41. };
  42. crumbs.push({
  43. to: performanceTarget,
  44. label: t('Performance'),
  45. preserveGlobalSelection: true,
  46. });
  47. if (vitalName) {
  48. const rumTarget = vitalDetailRouteWithQuery({
  49. orgSlug: organization.slug,
  50. vitalName: 'fcp',
  51. projectID: decodeScalar(location.query.project),
  52. query: location.query,
  53. });
  54. crumbs.push({
  55. to: rumTarget,
  56. label: t('Vital Detail'),
  57. preserveGlobalSelection: true,
  58. });
  59. } else if (transactionName) {
  60. if (realUserMonitoring) {
  61. const rumTarget = vitalsRouteWithQuery({
  62. orgSlug: organization.slug,
  63. transaction: transactionName,
  64. projectID: decodeScalar(location.query.project),
  65. query: location.query,
  66. });
  67. crumbs.push({
  68. to: rumTarget,
  69. label: t('Web Vitals'),
  70. preserveGlobalSelection: true,
  71. });
  72. } else {
  73. const summaryTarget = transactionSummaryRouteWithQuery({
  74. orgSlug: organization.slug,
  75. transaction: transactionName,
  76. projectID: decodeScalar(location.query.project),
  77. query: location.query,
  78. });
  79. crumbs.push({
  80. to: summaryTarget,
  81. label: t('Transaction Summary'),
  82. preserveGlobalSelection: true,
  83. });
  84. }
  85. }
  86. if (transactionName && eventSlug) {
  87. crumbs.push({
  88. to: '',
  89. label: t('Event Details'),
  90. });
  91. } else if (transactionComparison) {
  92. crumbs.push({
  93. to: '',
  94. label: t('Compare to Baseline'),
  95. });
  96. } else if (traceSlug) {
  97. crumbs.push({
  98. to: '',
  99. label: t('Trace View'),
  100. });
  101. }
  102. return crumbs;
  103. }
  104. render() {
  105. return <Breadcrumbs crumbs={this.getCrumbs()} />;
  106. }
  107. }
  108. export default Breadcrumb;