import styled from '@emotion/styled';
import Loading from 'sentry/components/loadingIndicator';
import Placeholder from 'sentry/components/placeholder';
import {IconSad} from 'sentry/icons';
import {t} from 'sentry/locale';
import {useLocation} from 'sentry/utils/useLocation';
import useOrganization from 'sentry/utils/useOrganization';
import TraceView from 'sentry/views/performance/traceDetails/traceView';
import EmptyState from 'sentry/views/replays/detail/emptyState';
import FluidHeight from 'sentry/views/replays/detail/layout/fluidHeight';
import {
useFetchTransactions,
useTransactionData,
} from 'sentry/views/replays/detail/trace/replayTransactionContext';
import type {ReplayRecord} from 'sentry/views/replays/types';
type Props = {
replayRecord: undefined | ReplayRecord;
};
function Trace({replayRecord}: Props) {
const location = useLocation();
const organization = useOrganization();
const {
state: {didInit, errors, isFetching, traces},
eventView,
} = useTransactionData();
useFetchTransactions();
if (!replayRecord || !didInit || (isFetching && !traces?.length)) {
// Show the blank screen until we start fetching, thats when you get a spinner
return (
{isFetching ? : null}
);
}
if (errors.length) {
// Same style as
return (
{t('Unable to retrieve traces')}
);
}
if (!traces?.length) {
return (
{t('No traces found')}
);
}
return (
);
}
// This has the gray background, to match other loaders on Replay Details
const StyledPlaceholder = styled(Placeholder)`
border: 1px solid ${p => p.theme.border};
border-radius: ${p => p.theme.borderRadius};
`;
// White background, to match the loaded component
const BorderedSection = styled(FluidHeight)`
border: 1px solid ${p => p.theme.border};
border-radius: ${p => p.theme.borderRadius};
`;
export default Trace;