import styled from '@emotion/styled'; import UserAvatar from 'sentry/components/avatar/userAvatar'; import {removeFilterMaskedEntries} from 'sentry/components/events/interfaces/utils'; import AnnotatedText from 'sentry/components/events/meta/annotatedText'; import TextOverflow from 'sentry/components/textOverflow'; import {t} from 'sentry/locale'; import space from 'sentry/styles/space'; import {AvatarUser, Event, Meta} from 'sentry/types'; import {EventUser} from 'sentry/types/event'; import {defined} from 'sentry/utils'; import ContextSummaryNoSummary from './contextSummaryNoSummary'; import Item from './item'; type Props = { data: EventUser; meta: NonNullable['user']; }; type UserTitle = { value: string; meta?: Meta; }; type UserDetails = { subject: string; meta?: Meta; value?: string; }; export function ContextSummaryUser({data, meta}: Props) { const user = removeFilterMaskedEntries(data); if (Object.keys(user).length === 0) { return ; } const renderUserDetails = (key: 'id' | 'username') => { const userDetails: UserDetails = { subject: t('Username:'), value: user.username ?? '', meta: meta.username?.[''], }; if (key === 'id') { userDetails.subject = t('ID:'); userDetails.value = user.id; userDetails.meta = meta.id?.['']; } return ( {userDetails.subject} ); }; const getUserTitle = (): UserTitle | undefined => { if (defined(user.email)) { return { value: user.email, meta: meta.email?.[''], }; } if (defined(user.ip_address)) { return { value: user.ip_address, meta: meta.ip_address?.[''], }; } if (defined(user.id)) { return { value: user.id, meta: meta.id?.[''], }; } if (defined(user.username)) { return { value: user.username, meta: meta.username?.[''], }; } return undefined; }; const userTitle = getUserTitle(); if (!userTitle) { return ; } const icon = userTitle ? ( ) : ( ); return ( {userTitle && (

)} {defined(user.id) && user.id !== userTitle?.value ? renderUserDetails('id') : user.username && user.username !== userTitle?.value && renderUserDetails('username')}
); } const Subject = styled('strong')` margin-right: ${space(0.5)}; `;