import {Fragment} from 'react'; import {css} from '@emotion/react'; import styled from '@emotion/styled'; import ProjectsStore from 'sentry/stores/projectsStore'; import {BaseGroup, GroupTombstone, Organization} from 'sentry/types'; import {Event} from 'sentry/types/event'; import {getTitle} from 'sentry/utils/events'; import withOrganization from 'sentry/utils/withOrganization'; import EventTitleTreeLabel from './eventTitleTreeLabel'; import {StackTracePreview} from './stacktracePreview'; type Props = { data: Event | BaseGroup | GroupTombstone; organization: Organization; className?: string; /* is issue breakdown? */ grouping?: boolean; hasGuideAnchor?: boolean; withStackTracePreview?: boolean; }; function EventOrGroupTitle({ organization, data, withStackTracePreview, grouping = false, className, }: Props) { const event = data as Event; const groupingCurrentLevel = (data as BaseGroup).metadata?.current_level; const hasGroupingTreeUI = !!organization?.features.includes('grouping-tree-ui'); const hasGroupingStacktraceUI = !!organization?.features.includes( 'grouping-stacktrace-ui' ); const {id, eventID, groupID, projectID} = event; const {title, subtitle, treeLabel} = getTitle(event, organization?.features, grouping); return ( {withStackTracePreview ? ( {treeLabel ? : title} ) : treeLabel ? ( ) : ( title )} {subtitle && ( {subtitle}
)}
); } export default withOrganization(EventOrGroupTitle); /** *   is used instead of margin/padding to split title and subtitle * into 2 separate text nodes on the HTML AST. This allows the * title to be highlighted without spilling over to the subtitle. */ const Spacer = () =>  ; const Subtitle = styled('em')` color: ${p => p.theme.gray300}; font-style: normal; `; const StyledStacktracePreview = styled(StackTracePreview)<{ hasGroupingStacktraceUI: boolean; }>` ${p => p.hasGroupingStacktraceUI && css` display: inline-flex; overflow: hidden; height: 100%; > span:first-child { ${p.theme.overflowEllipsis} } `} `; const Wrapper = styled('span')<{hasGroupingTreeUI: boolean}>` ${p => p.hasGroupingTreeUI && css` display: inline-grid; grid-template-columns: auto max-content 1fr max-content; align-items: flex-end; line-height: 100%; ${Subtitle} { ${p.theme.overflowEllipsis}; display: inline-block; height: 100%; } `} `;