import {useLayoutEffect, useState} from 'react'; import {useTheme} from '@emotion/react'; import styled from '@emotion/styled'; import {CommitRow} from 'sentry/components/commitRow'; import {SuspectCommits} from 'sentry/components/events/suspectCommits'; import {DatePageFilter} from 'sentry/components/organizations/datePageFilter'; import {EnvironmentPageFilter} from 'sentry/components/organizations/environmentPageFilter'; import {space} from 'sentry/styles/space'; import useMedia from 'sentry/utils/useMedia'; import usePageFilters from 'sentry/utils/usePageFilters'; import { EventDetailsContent, type EventDetailsContentProps, } from 'sentry/views/issueDetails/groupEventDetails/groupEventDetailsContent'; import { EventDetailsContext, useEventDetailsReducer, } from 'sentry/views/issueDetails/streamline/context'; import {EventNavigation} from 'sentry/views/issueDetails/streamline/eventNavigation'; import {EventSearch} from 'sentry/views/issueDetails/streamline/eventSearch'; export function EventDetails({ group, event, project, }: Required) { const [nav, setNav] = useState(null); const {selection} = usePageFilters(); const {environments} = selection; const {eventDetails, dispatch} = useEventDetailsReducer(); const theme = useTheme(); const isScreenMedium = useMedia(`(max-width: ${theme.breakpoints.medium})`); useLayoutEffect(() => { const navHeight = nav?.offsetHeight ?? 0; const sidebarHeight = isScreenMedium ? theme.sidebar.mobileHeightNumber : 0; dispatch({ type: 'UPDATE_DETAILS', state: {navScrollMargin: navHeight + sidebarHeight}, }); }, [nav, isScreenMedium, dispatch, theme.sidebar.mobileHeightNumber]); return ( {}} environments={environments} query={''} /> ); } const FloatingEventNavigation = styled(EventNavigation)` position: sticky; top: 0; @media (max-width: ${p => p.theme.breakpoints.medium}) { top: ${p => p.theme.sidebar.mobileHeight}; } background: ${p => p.theme.background}; z-index: 100; border-radius: 6px 6px 0 0; `; const SearchFilter = styled(EventSearch)` border-radius: ${p => p.theme.borderRadius}; `; const GroupContent = styled('div')<{navHeight?: number}>` border: 1px solid ${p => p.theme.translucentBorder}; background: ${p => p.theme.background}; border-radius: ${p => p.theme.borderRadius}; position: relative; `; const GroupContentPadding = styled('div')` padding: ${space(1)} ${space(1.5)}; `; const FilterContainer = styled('div')` display: grid; grid-template-columns: auto 1fr auto; gap: ${space(1)}; `;