trace.tsx 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import styled from '@emotion/styled';
  2. import Loading from 'sentry/components/loadingIndicator';
  3. import Placeholder from 'sentry/components/placeholder';
  4. import {useLocation} from 'sentry/utils/useLocation';
  5. import useOrganization from 'sentry/utils/useOrganization';
  6. import TraceView from 'sentry/views/performance/traceDetails/traceView';
  7. import FluidHeight from 'sentry/views/replays/detail/layout/fluidHeight';
  8. import {
  9. useFetchTransactions,
  10. useTransactionData,
  11. } from 'sentry/views/replays/detail/trace/replayTransactionContext';
  12. import type {ReplayRecord} from 'sentry/views/replays/types';
  13. type Props = {
  14. replayRecord: undefined | ReplayRecord;
  15. };
  16. function Trace({replayRecord}: Props) {
  17. const location = useLocation();
  18. const organization = useOrganization();
  19. const {state, eventView} = useTransactionData();
  20. useFetchTransactions();
  21. if (!replayRecord || !state.traces?.length) {
  22. return (
  23. <StyledPlaceholder height="100%">
  24. {state.isFetching && <Loading />}
  25. </StyledPlaceholder>
  26. );
  27. }
  28. return (
  29. <FluidHeight>
  30. <TraceView
  31. meta={null}
  32. traces={state.traces ?? null}
  33. location={location}
  34. organization={organization}
  35. traceEventView={eventView!}
  36. traceSlug="Replay"
  37. />
  38. </FluidHeight>
  39. );
  40. }
  41. const StyledPlaceholder = styled(Placeholder)`
  42. border: 1px solid ${p => p.theme.border};
  43. border-radius: ${p => p.theme.borderRadius};
  44. `;
  45. export default Trace;