index.tsx 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import UserAvatar from 'sentry/components/avatar/userAvatar';
  2. import ErrorBoundary from 'sentry/components/errorBoundary';
  3. import ContextBlock from 'sentry/components/events/contexts/contextBlock';
  4. import KeyValueList from 'sentry/components/events/interfaces/keyValueList';
  5. import {removeFilterMaskedEntries} from 'sentry/components/events/interfaces/utils';
  6. import {AvatarUser} from 'sentry/types';
  7. import {Event} from 'sentry/types/event';
  8. import {defined} from 'sentry/utils';
  9. import {getUnknownData} from '../getUnknownData';
  10. import {getUserKnownData} from './getUserKnownData';
  11. export type UserEventContextData = {
  12. data: Record<string, string>;
  13. } & AvatarUser;
  14. type Props = {
  15. data: UserEventContextData;
  16. event: Event;
  17. };
  18. export enum UserKnownDataType {
  19. ID = 'id',
  20. EMAIL = 'email',
  21. USERNAME = 'username',
  22. IP_ADDRESS = 'ip_address',
  23. NAME = 'name',
  24. }
  25. export enum UserIgnoredDataType {
  26. DATA = 'data',
  27. }
  28. export const userKnownDataValues = [
  29. UserKnownDataType.ID,
  30. UserKnownDataType.EMAIL,
  31. UserKnownDataType.USERNAME,
  32. UserKnownDataType.IP_ADDRESS,
  33. UserKnownDataType.NAME,
  34. ];
  35. const userIgnoredDataValues = [UserIgnoredDataType.DATA];
  36. function User({data, event}: Props) {
  37. const meta = event._meta?.user ?? {};
  38. return (
  39. <div className="user-widget">
  40. <div className="pull-left">
  41. <UserAvatar user={removeFilterMaskedEntries(data)} size={48} gravatar={false} />
  42. </div>
  43. <ContextBlock data={getUserKnownData({data, meta})} />
  44. <ContextBlock
  45. data={getUnknownData({
  46. allData: data,
  47. knownKeys: [...userKnownDataValues, ...userIgnoredDataValues],
  48. meta,
  49. })}
  50. />
  51. {defined(data?.data) && (
  52. <ErrorBoundary mini>
  53. <KeyValueList
  54. data={Object.entries(data.data).map(([key, value]) => ({
  55. key,
  56. value,
  57. subject: key,
  58. meta: meta[key]?.[''],
  59. }))}
  60. isContextData
  61. />
  62. </ErrorBoundary>
  63. )}
  64. </div>
  65. );
  66. }
  67. export default User;