traceAutogroupedRow.tsx 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import {t} from 'sentry/locale';
  2. import {TraceIcons} from 'sentry/views/performance/newTraceDetails/icons';
  3. import {
  4. makeTraceNodeBarColor,
  5. type ParentAutogroupNode,
  6. type SiblingAutogroupNode,
  7. } from 'sentry/views/performance/newTraceDetails/traceModels/traceTree';
  8. import {AutogroupedTraceBar} from 'sentry/views/performance/newTraceDetails/traceRow/traceBar';
  9. import {
  10. maybeFocusTraceRow,
  11. TRACE_COUNT_FORMATTER,
  12. TraceChildrenButton,
  13. TraceRowConnectors,
  14. type TraceRowProps,
  15. } from 'sentry/views/performance/newTraceDetails/traceRow/traceRow';
  16. export function TraceAutogroupedRow(
  17. props: TraceRowProps<ParentAutogroupNode | SiblingAutogroupNode>
  18. ) {
  19. return (
  20. <div
  21. key={props.index}
  22. ref={r =>
  23. props.tabIndex === 0 && !props.isEmbedded
  24. ? maybeFocusTraceRow(r, props.node, props.previouslyFocusedNodeRef)
  25. : null
  26. }
  27. tabIndex={props.tabIndex}
  28. className={`Autogrouped TraceRow ${props.rowSearchClassName} ${props.node.has_errors ? props.node.max_severity : ''}`}
  29. onClick={props.onRowClick}
  30. onKeyDown={props.onRowKeyDown}
  31. style={props.style}
  32. >
  33. <div className="TraceLeftColumn" ref={props.registerListColumnRef}>
  34. <div
  35. className="TraceLeftColumnInner"
  36. style={props.listColumnStyle}
  37. onDoubleClick={props.onRowDoubleClick}
  38. >
  39. <div className="TraceChildrenCountWrapper">
  40. <TraceRowConnectors node={props.node} manager={props.manager} />
  41. <TraceChildrenButton
  42. icon={
  43. <TraceIcons.Chevron direction={props.node.expanded ? 'up' : 'down'} />
  44. }
  45. status={props.node.fetchStatus}
  46. expanded={!props.node.expanded}
  47. onClick={props.onExpand}
  48. onDoubleClick={props.onExpandDoubleClick}
  49. >
  50. {TRACE_COUNT_FORMATTER.format(props.node.groupCount)}
  51. </TraceChildrenButton>
  52. </div>
  53. <span className="TraceOperation">{t('Autogrouped')}</span>
  54. <strong className="TraceEmDash"></strong>
  55. <span className="TraceDescription">{props.node.value.autogrouped_by.op}</span>
  56. </div>
  57. </div>
  58. <div
  59. className={props.spanColumnClassName}
  60. ref={props.registerSpanColumnRef}
  61. onDoubleClick={props.onRowDoubleClick}
  62. >
  63. <AutogroupedTraceBar
  64. manager={props.manager}
  65. entire_space={props.node.space}
  66. errors={props.node.errors}
  67. virtualized_index={props.virtualized_index}
  68. color={makeTraceNodeBarColor(props.theme, props.node)}
  69. node_spaces={props.node.autogroupedSegments}
  70. performance_issues={props.node.performance_issues}
  71. profiles={props.node.profiles}
  72. />
  73. <button
  74. ref={props.registerSpanArrowRef}
  75. className="TraceArrow"
  76. onClick={props.onSpanArrowClick}
  77. >
  78. <TraceIcons.Chevron direction="left" />
  79. </button>
  80. </div>
  81. </div>
  82. );
  83. }