mirror of
https://github.com/hanzoai/sentinel.git
synced 2026-10-30 14:49:14 +00:00
87 lines
2.4 KiB
TypeScript
87 lines
2.4 KiB
TypeScript
import UserAvatar from 'sentry/components/avatar/userAvatar';
|
|
import ErrorBoundary from 'sentry/components/errorBoundary';
|
|
import ContextBlock from 'sentry/components/events/contexts/contextBlock';
|
|
import KeyValueList from 'sentry/components/events/interfaces/keyValueList';
|
|
import {removeFilterMaskedEntries} from 'sentry/components/events/interfaces/utils';
|
|
import type {AvatarUser} from 'sentry/types';
|
|
import type {Event} from 'sentry/types/event';
|
|
import {defined} from 'sentry/utils';
|
|
|
|
import {getKnownData, getUnknownData} from '../utils';
|
|
|
|
import {getUserKnownDataDetails} from './getUserKnownDataDetails';
|
|
|
|
export type UserEventContextData = {
|
|
data: Record<string, string>;
|
|
} & AvatarUser;
|
|
|
|
type Props = {
|
|
data: UserEventContextData;
|
|
event: Event;
|
|
};
|
|
|
|
export enum UserKnownDataType {
|
|
ID = 'id',
|
|
EMAIL = 'email',
|
|
USERNAME = 'username',
|
|
IP_ADDRESS = 'ip_address',
|
|
NAME = 'name',
|
|
}
|
|
|
|
export enum UserIgnoredDataType {
|
|
DATA = 'data',
|
|
}
|
|
|
|
export const userKnownDataValues = [
|
|
UserKnownDataType.ID,
|
|
UserKnownDataType.EMAIL,
|
|
UserKnownDataType.USERNAME,
|
|
UserKnownDataType.IP_ADDRESS,
|
|
UserKnownDataType.NAME,
|
|
];
|
|
|
|
const userIgnoredDataValues = [UserIgnoredDataType.DATA];
|
|
|
|
export function UserEventContext({data, event}: Props) {
|
|
const meta = event._meta?.user ?? event._meta?.contexts?.user ?? {};
|
|
|
|
return (
|
|
<div className="user-widget">
|
|
<div className="pull-left">
|
|
<UserAvatar user={removeFilterMaskedEntries(data)} size={48} gravatar={false} />
|
|
</div>
|
|
<ContextBlock
|
|
data={getKnownData<UserEventContextData, UserKnownDataType>({
|
|
data,
|
|
meta,
|
|
knownDataTypes: userKnownDataValues,
|
|
onGetKnownDataDetails: v => getUserKnownDataDetails(v),
|
|
}).map(v => ({
|
|
...v,
|
|
subjectDataTestId: `user-context-${v.key.toLowerCase()}-value`,
|
|
}))}
|
|
/>
|
|
<ContextBlock
|
|
data={getUnknownData({
|
|
allData: data,
|
|
knownKeys: [...userKnownDataValues, ...userIgnoredDataValues],
|
|
meta,
|
|
})}
|
|
/>
|
|
{defined(data?.data) && (
|
|
<ErrorBoundary mini>
|
|
<KeyValueList
|
|
data={Object.entries(data.data).map(([key, value]) => ({
|
|
key,
|
|
value,
|
|
subject: key,
|
|
meta: meta[key]?.[''],
|
|
}))}
|
|
isContextData
|
|
/>
|
|
</ErrorBoundary>
|
|
)}
|
|
</div>
|
|
);
|
|
}
|