import styled from '@emotion/styled';
import ErrorBoundary from 'sentry/components/errorBoundary';
import ReplayTimeline from 'sentry/components/replays/breadcrumbs/replayTimeline';
import ReplayView from 'sentry/components/replays/replayView';
import {space} from 'sentry/styles/space';
import useFullscreen from 'sentry/utils/replays/hooks/useFullscreen';
import {LayoutKey} from 'sentry/utils/replays/hooks/useReplayLayout';
import FluidHeight from 'sentry/views/replays/detail/layout/fluidHeight';
import FluidPanel from 'sentry/views/replays/detail/layout/fluidPanel';
import FocusArea from 'sentry/views/replays/detail/layout/focusArea';
import FocusTabs from 'sentry/views/replays/detail/layout/focusTabs';
import MeasureSize from 'sentry/views/replays/detail/layout/measureSize';
import SidebarArea from 'sentry/views/replays/detail/layout/sidebarArea';
import SideTabs from 'sentry/views/replays/detail/layout/sideTabs';
import SplitPanel from 'sentry/views/replays/detail/layout/splitPanel';
const MIN_VIDEO_WIDTH = 325;
const MIN_CONTENT_WIDTH = 340;
const MIN_SIDEBAR_WIDTH = 325;
const MIN_VIDEO_HEIGHT = 200;
const MIN_CONTENT_HEIGHT = 180;
const MIN_SIDEBAR_HEIGHT = 120;
const DIVIDER_SIZE = 16;
type Props = {
layout?: LayoutKey;
};
function ReplayLayout({layout = LayoutKey.TOPBAR}: Props) {
const {ref: fullscreenRef, toggle: toggleFullscreen} = useFullscreen();
const timeline = (
);
const video = (
);
if (layout === LayoutKey.VIDEO_ONLY) {
return (
{timeline}
{video}
);
}
const focusArea = (
}>
);
const sidebarArea = (
}>
);
if (layout === LayoutKey.NO_VIDEO) {
return (
{timeline}
{({width}) => (
)}
);
}
if (layout === LayoutKey.SIDEBAR_LEFT) {
return (
{timeline}
{({height, width}) => (
),
default: (width - DIVIDER_SIZE) * 0.5,
min: MIN_SIDEBAR_WIDTH,
max: width - DIVIDER_SIZE - MIN_CONTENT_WIDTH,
}}
right={focusArea}
/>
)}
);
}
// layout === 'topbar'
return (
{timeline}
{({height, width}) => (
),
default: (height - DIVIDER_SIZE) * 0.5,
min: MIN_VIDEO_HEIGHT,
max: height - DIVIDER_SIZE - MIN_CONTENT_HEIGHT,
}}
bottom={focusArea}
/>
)}
);
}
const BodyContent = styled('main')`
background: ${p => p.theme.background};
width: 100%;
height: 100%;
display: grid;
grid-template-rows: auto 1fr;
overflow: hidden;
padding: ${space(2)};
`;
const SmallMarginFocusTabs = styled(FocusTabs)`
margin-bottom: ${space(1)};
`;
const SmallMarginSideTabs = styled(SideTabs)`
margin-bottom: ${space(1)};
`;
const VideoSection = styled(FluidHeight)`
background: ${p => p.theme.background};
gap: ${space(1)};
:fullscreen {
padding: ${space(1)};
}
`;
export default ReplayLayout;