content.tsx 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. import {Component, Fragment} from 'react';
  2. import {Params} from 'react-router/lib/Router';
  3. import styled from '@emotion/styled';
  4. import {Location} from 'history';
  5. import * as Layout from 'app/components/layouts/thirds';
  6. import {Panel} from 'app/components/panels';
  7. import {t} from 'app/locale';
  8. import {Organization} from 'app/types';
  9. import {Event} from 'app/types/event';
  10. import Breadcrumb from 'app/views/performance/breadcrumb';
  11. import TraceView from './traceView';
  12. import TransactionSummary from './transactionSummary';
  13. import {isTransactionEvent} from './utils';
  14. type Props = {
  15. organization: Organization;
  16. location: Location;
  17. params: Params;
  18. baselineEvent: Event;
  19. regressionEvent: Event;
  20. };
  21. class TransactionComparisonContent extends Component<Props> {
  22. getTransactionName() {
  23. const {baselineEvent, regressionEvent} = this.props;
  24. if (isTransactionEvent(baselineEvent) && isTransactionEvent(regressionEvent)) {
  25. if (baselineEvent.title === regressionEvent.title) {
  26. return baselineEvent.title;
  27. }
  28. return t('mixed transaction names');
  29. }
  30. if (isTransactionEvent(baselineEvent)) {
  31. return baselineEvent.title;
  32. }
  33. if (isTransactionEvent(regressionEvent)) {
  34. return regressionEvent.title;
  35. }
  36. return t('no transaction title found');
  37. }
  38. render() {
  39. const {baselineEvent, regressionEvent, organization, location, params} = this.props;
  40. const transactionName =
  41. baselineEvent.title === regressionEvent.title ? baselineEvent.title : undefined;
  42. return (
  43. <Fragment>
  44. <Layout.Header>
  45. <Layout.HeaderContent>
  46. <Breadcrumb
  47. organization={organization}
  48. location={location}
  49. transactionName={transactionName}
  50. transactionComparison
  51. />
  52. <Layout.Title>{this.getTransactionName()}</Layout.Title>
  53. </Layout.HeaderContent>
  54. <Layout.HeaderActions>
  55. <TransactionSummary
  56. organization={organization}
  57. location={location}
  58. params={params}
  59. baselineEvent={baselineEvent}
  60. regressionEvent={regressionEvent}
  61. />
  62. </Layout.HeaderActions>
  63. </Layout.Header>
  64. <Layout.Body>
  65. <StyledPanel>
  66. <TraceView baselineEvent={baselineEvent} regressionEvent={regressionEvent} />
  67. </StyledPanel>
  68. </Layout.Body>
  69. </Fragment>
  70. );
  71. }
  72. }
  73. const StyledPanel = styled(Panel)`
  74. grid-column: 1 / span 2;
  75. overflow: hidden;
  76. `;
  77. export default TransactionComparisonContent;