|
@@ -3,6 +3,7 @@ import {withRouter, WithRouterProps} from 'react-router';
|
|
|
import styled from '@emotion/styled';
|
|
|
|
|
|
import FeatureBadge from 'sentry/components/featureBadge';
|
|
|
+import UserBadge from 'sentry/components/idBadge/userBadge';
|
|
|
import Link from 'sentry/components/links/link';
|
|
|
import PageFiltersContainer from 'sentry/components/organizations/pageFilters/container';
|
|
|
import PageHeading from 'sentry/components/pageHeading';
|
|
@@ -37,7 +38,7 @@ class Replays extends React.Component<Props> {
|
|
|
id: '',
|
|
|
name: '',
|
|
|
version: 2,
|
|
|
- fields: ['eventID', 'timestamp', 'replayId', 'user'],
|
|
|
+ fields: ['eventID', 'timestamp', 'replayId', 'user.display', 'url'],
|
|
|
orderby: '-timestamp',
|
|
|
environment: selection.environments,
|
|
|
projects: selection.projects,
|
|
@@ -64,11 +65,20 @@ class Replays extends React.Component<Props> {
|
|
|
id: replay.id,
|
|
|
})}/`}
|
|
|
>
|
|
|
- {replay.replayId}
|
|
|
+ <ReplayUserBadge
|
|
|
+ avatarSize={32}
|
|
|
+ displayName={replay['user.display']}
|
|
|
+ user={{
|
|
|
+ username: replay['user.display'],
|
|
|
+ id: replay['user.display'],
|
|
|
+ ip_address: replay['user.display'],
|
|
|
+ name: replay['user.display'],
|
|
|
+ email: replay['user.display'],
|
|
|
+ }}
|
|
|
+ // this is the subheading for the avatar, so displayEmail in this case is a misnomer
|
|
|
+ displayEmail={replay.url?.split('?')[0] || ''}
|
|
|
+ />
|
|
|
</Link>
|
|
|
- <div>
|
|
|
- <span>{replay.user}</span>
|
|
|
- </div>
|
|
|
<div>
|
|
|
<TimeSinceWrapper>
|
|
|
<StyledIconCalendarWrapper color="gray500" size="sm" />
|
|
@@ -106,7 +116,7 @@ class Replays extends React.Component<Props> {
|
|
|
<PanelTable
|
|
|
isLoading={data.isLoading}
|
|
|
isEmpty={data.tableData?.data.length === 0}
|
|
|
- headers={['Replay ID', 'User', 'Timestamp']}
|
|
|
+ headers={[t('Session'), t('Timestamp')]}
|
|
|
>
|
|
|
{data.tableData
|
|
|
? this.renderTable(data.tableData.data as Replay[])
|
|
@@ -130,6 +140,11 @@ const HeaderTitle = styled(PageHeading)`
|
|
|
flex: 1;
|
|
|
`;
|
|
|
|
|
|
+const ReplayUserBadge = styled(UserBadge)`
|
|
|
+ font-size: ${p => p.theme.fontSizeMedium};
|
|
|
+ color: ${p => p.theme.linkColor};
|
|
|
+`;
|
|
|
+
|
|
|
const TimeSinceWrapper = styled('div')`
|
|
|
display: grid;
|
|
|
grid-template-columns: repeat(2, minmax(auto, max-content));
|