user.tsx 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  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 {getMeta} from 'sentry/components/events/meta/metaProxy';
  7. import {AvatarUser as UserType} from 'sentry/types';
  8. import {defined} from 'sentry/utils';
  9. import getUnknownData from '../getUnknownData';
  10. import getUserKnownData from './getUserKnownData';
  11. import {UserIgnoredDataType, UserKnownDataType} from './types';
  12. type Props = {
  13. data: Data;
  14. };
  15. type Data = {
  16. data: Record<string, string>;
  17. } & UserType;
  18. const userKnownDataValues = [
  19. UserKnownDataType.ID,
  20. UserKnownDataType.EMAIL,
  21. UserKnownDataType.USERNAME,
  22. UserKnownDataType.IP_ADDRESS,
  23. UserKnownDataType.NAME,
  24. ];
  25. const userIgnoredDataValues = [UserIgnoredDataType.DATA];
  26. function User({data}: Props) {
  27. return (
  28. <div className="user-widget">
  29. <div className="pull-left">
  30. <UserAvatar user={removeFilterMaskedEntries(data)} size={48} gravatar={false} />
  31. </div>
  32. <ContextBlock data={getUserKnownData(data, userKnownDataValues)} />
  33. <ContextBlock
  34. data={getUnknownData(data, [...userKnownDataValues, ...userIgnoredDataValues])}
  35. />
  36. {defined(data?.data) && (
  37. <ErrorBoundary mini>
  38. <KeyValueList
  39. data={Object.entries(data.data).map(([key, value]) => ({
  40. key,
  41. value,
  42. subject: key,
  43. meta: getMeta(data.data, key),
  44. }))}
  45. isContextData
  46. />
  47. </ErrorBoundary>
  48. )}
  49. </div>
  50. );
  51. }
  52. export default User;