traceTreeNodeDetails.tsx 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import type {Organization} from 'sentry/types/organization';
  2. import type {ReplayRecord} from 'sentry/views/replays/types';
  3. import {
  4. isAutogroupedNode,
  5. isMissingInstrumentationNode,
  6. isSpanNode,
  7. isTraceErrorNode,
  8. isTransactionNode,
  9. } from '../../traceGuards';
  10. import type {TraceTree} from '../../traceModels/traceTree';
  11. import type {TraceTreeNode} from '../../traceModels/traceTreeNode';
  12. import type {VirtualizedViewManager} from '../../traceRenderers/virtualizedViewManager';
  13. import {AutogroupNodeDetails} from '../details/autogroup';
  14. import {ErrorNodeDetails} from '../details/error';
  15. import {MissingInstrumentationNodeDetails} from '../details/missingInstrumentation';
  16. import {SpanNodeDetails} from '../details/span/index';
  17. import {TransactionNodeDetails} from '../details/transaction/index';
  18. export interface TraceTreeNodeDetailsProps<T> {
  19. manager: VirtualizedViewManager;
  20. node: T;
  21. onParentClick: (node: TraceTreeNode<TraceTree.NodeValue>) => void;
  22. onTabScrollToNode: (node: TraceTreeNode<any>) => void;
  23. organization: Organization;
  24. replay: ReplayRecord | null;
  25. }
  26. export function TraceTreeNodeDetails(props: TraceTreeNodeDetailsProps<any>) {
  27. if (isTransactionNode(props.node)) {
  28. return <TransactionNodeDetails {...props} />;
  29. }
  30. if (isSpanNode(props.node)) {
  31. return <SpanNodeDetails {...props} />;
  32. }
  33. if (isTraceErrorNode(props.node)) {
  34. return <ErrorNodeDetails {...props} />;
  35. }
  36. if (isAutogroupedNode(props.node)) {
  37. return <AutogroupNodeDetails {...props} />;
  38. }
  39. if (isMissingInstrumentationNode(props.node)) {
  40. return <MissingInstrumentationNodeDetails {...props} />;
  41. }
  42. throw new Error('Unknown clicked node type');
  43. }