spanGroup.tsx 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import {Component, Fragment} from 'react';
  2. import {TreeDepthType} from 'app/components/events/interfaces/spans/types';
  3. import SpanBar from './spanBar';
  4. import {DiffSpanType, SpanGeneratedBoundsType} from './utils';
  5. type Props = {
  6. span: Readonly<DiffSpanType>;
  7. renderedSpanChildren: Array<JSX.Element>;
  8. treeDepth: number;
  9. continuingTreeDepths: Array<TreeDepthType>;
  10. spanNumber: number;
  11. isLast: boolean;
  12. isRoot: boolean;
  13. numOfSpanChildren: number;
  14. generateBounds: (span: DiffSpanType) => SpanGeneratedBoundsType;
  15. };
  16. type State = {
  17. showSpanTree: boolean;
  18. };
  19. class SpanGroup extends Component<Props, State> {
  20. state: State = {
  21. showSpanTree: true,
  22. };
  23. toggleSpanTree = () => {
  24. this.setState(state => ({
  25. showSpanTree: !state.showSpanTree,
  26. }));
  27. };
  28. renderSpanChildren() {
  29. if (!this.state.showSpanTree) {
  30. return null;
  31. }
  32. return this.props.renderedSpanChildren;
  33. }
  34. render() {
  35. const {
  36. span,
  37. treeDepth,
  38. continuingTreeDepths,
  39. spanNumber,
  40. isLast,
  41. isRoot,
  42. numOfSpanChildren,
  43. generateBounds,
  44. } = this.props;
  45. return (
  46. <Fragment>
  47. <SpanBar
  48. span={span}
  49. treeDepth={treeDepth}
  50. continuingTreeDepths={continuingTreeDepths}
  51. spanNumber={spanNumber}
  52. isLast={isLast}
  53. isRoot={isRoot}
  54. numOfSpanChildren={numOfSpanChildren}
  55. showSpanTree={this.state.showSpanTree}
  56. toggleSpanTree={this.toggleSpanTree}
  57. generateBounds={generateBounds}
  58. />
  59. {this.renderSpanChildren()}
  60. </Fragment>
  61. );
  62. }
  63. }
  64. export default SpanGroup;