12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- import {Fragment} from 'react';
- import styled from '@emotion/styled';
- import ContextIcon from 'sentry/components/replays/contextIcon';
- import ErrorCounts from 'sentry/components/replays/header/errorCounts';
- import HeaderPlaceholder from 'sentry/components/replays/header/headerPlaceholder';
- import TimeSince from 'sentry/components/timeSince';
- import {IconCalendar} from 'sentry/icons';
- import {t} from 'sentry/locale';
- import {space} from 'sentry/styles/space';
- import type {ReplayError, ReplayRecord} from 'sentry/views/replays/types';
- type Props = {
- replayErrors: ReplayError[];
- replayRecord: ReplayRecord | undefined;
- };
- function ReplayMetaData({replayErrors, replayRecord}: Props) {
- return (
- <KeyMetrics>
- <KeyMetricLabel>{t('OS')}</KeyMetricLabel>
- <KeyMetricData>
- <ContextIcon
- name={replayRecord?.os.name ?? ''}
- version={replayRecord?.os.version ?? undefined}
- showVersion
- />
- </KeyMetricData>
- <KeyMetricLabel>{t('Browser')}</KeyMetricLabel>
- <KeyMetricData>
- <ContextIcon
- name={replayRecord?.browser.name ?? ''}
- version={replayRecord?.browser.version ?? undefined}
- showVersion
- />
- </KeyMetricData>
- <KeyMetricLabel>{t('Start Time')}</KeyMetricLabel>
- <KeyMetricData>
- {replayRecord ? (
- <Fragment>
- <IconCalendar color="gray300" />
- <TimeSince date={replayRecord.started_at} unitStyle="regular" />
- </Fragment>
- ) : (
- <HeaderPlaceholder width="80px" height="16px" />
- )}
- </KeyMetricData>
- <KeyMetricLabel>{t('Errors')}</KeyMetricLabel>
- <KeyMetricData>
- {replayRecord ? (
- <ErrorCounts replayErrors={replayErrors} replayRecord={replayRecord} />
- ) : (
- <HeaderPlaceholder width="80px" height="16px" />
- )}
- </KeyMetricData>
- </KeyMetrics>
- );
- }
- const KeyMetrics = styled('dl')`
- display: grid;
- grid-template-rows: max-content 1fr;
- grid-template-columns: repeat(4, max-content);
- grid-auto-flow: column;
- gap: 0 ${space(3)};
- align-items: center;
- align-self: end;
- color: ${p => p.theme.gray300};
- margin: 0;
- @media (min-width: ${p => p.theme.breakpoints.medium}) {
- justify-self: flex-end;
- }
- `;
- const KeyMetricLabel = styled('dt')`
- font-size: ${p => p.theme.fontSizeMedium};
- `;
- const KeyMetricData = styled('dd')`
- font-size: ${p => p.theme.fontSizeExtraLarge};
- font-weight: normal;
- display: flex;
- align-items: center;
- gap: ${space(1)};
- line-height: ${p => p.theme.text.lineHeightBody};
- `;
- export default ReplayMetaData;
|