diff --git a/src/sentry/static/sentry/app/components/idBadge/userBadge.jsx b/src/sentry/static/sentry/app/components/idBadge/userBadge.jsx index 482f75afe2d784..c38175c4f79e0b 100644 --- a/src/sentry/static/sentry/app/components/idBadge/userBadge.jsx +++ b/src/sentry/static/sentry/app/components/idBadge/userBadge.jsx @@ -6,6 +6,7 @@ import Link from 'app/components/links/link'; import overflowEllipsis from 'app/styles/overflowEllipsis'; import space from 'app/styles/space'; import SentryTypes from 'app/sentryTypes'; +import {omit} from 'lodash'; const UserBadge = ({ displayName, @@ -31,6 +32,7 @@ const UserBadge = ({ {displayName || userFromPropsOrMember.name || userFromPropsOrMember.email || + userFromPropsOrMember.username || userFromPropsOrMember.ipAddress || /** * Because this can be used to render EventUser models, or User *interface* @@ -87,9 +89,10 @@ const StyledEmail = styled('div')` ${overflowEllipsis}; `; -const StyledName = styled(({useLink, hideEmail, to, ...props}) => - useLink ? : -)` +const StyledName = styled(({useLink, to, ...props}) => { + const forwardProps = omit(props, 'hideEmail'); + return useLink ? : ; +})` font-weight: ${p => (p.hideEmail ? 'inherit' : 'bold')}; line-height: 1.15em; ${overflowEllipsis}; diff --git a/src/sentry/static/sentry/app/views/organizationEventsV2/data.jsx b/src/sentry/static/sentry/app/views/organizationEventsV2/data.jsx index 7b9218e8f86887..e0178eb93f8c72 100644 --- a/src/sentry/static/sentry/app/views/organizationEventsV2/data.jsx +++ b/src/sentry/static/sentry/app/views/organizationEventsV2/data.jsx @@ -122,16 +122,20 @@ export const SPECIAL_FIELDS = { }, }, user: { - fields: ['user', 'user.name', 'user.email', 'user.ip'], + fields: ['user', 'user.name', 'user.username', 'user.email', 'user.ip', 'user.id'], sortField: 'user', renderFunc: (data, {organization, location}) => { const userObj = { + id: data['user.id'], name: data['user.name'], email: data['user.email'], - ip: data['user.ip'], + username: data['user.username'], + ip_address: data['user.ip'], }; - const badge = ; + const badge = ( + + ); if (!data.user) { return {badge}; diff --git a/tests/js/spec/components/idBadge/userBadge.spec.jsx b/tests/js/spec/components/idBadge/userBadge.spec.jsx index a5f7d5cbd72455..add384035273a7 100644 --- a/tests/js/spec/components/idBadge/userBadge.spec.jsx +++ b/tests/js/spec/components/idBadge/userBadge.spec.jsx @@ -38,6 +38,31 @@ describe('UserBadge', function() { expect(wrapper.find('StyledEmail').prop('children')).toBe('Other Display Email'); }); + it('can coalesce using username', function() { + const username = TestStubs.User({ + name: null, + email: null, + username: 'the-batman', + }); + const wrapper = shallow(); + + expect(wrapper.find('StyledName').prop('children')).toBe(username.username); + expect(wrapper.find('StyledEmail').prop('children')).toBe(null); + }); + + it('can coalesce using ipaddress', function() { + const ipUser = TestStubs.User({ + name: null, + email: null, + username: null, + ipAddress: '127.0.0.1', + }); + const wrapper = shallow(); + + expect(wrapper.find('StyledName').prop('children')).toBe(ipUser.ipAddress); + expect(wrapper.find('StyledEmail').prop('children')).toBe(null); + }); + it('does not use a link for member name', function() { const wrapper = mount(); diff --git a/tests/js/spec/views/organizationEventsV2/utils.spec.jsx b/tests/js/spec/views/organizationEventsV2/utils.spec.jsx index 884e7378f6db1c..2f814b453e09ac 100644 --- a/tests/js/spec/views/organizationEventsV2/utils.spec.jsx +++ b/tests/js/spec/views/organizationEventsV2/utils.spec.jsx @@ -35,8 +35,10 @@ describe('getQuery()', function() { 'project.name', 'user', 'user.name', + 'user.username', 'user.email', 'user.ip', + 'user.id', 'issue.id', ]); });