123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- import styled from '@emotion/styled';
- import EventOrGroupExtraDetails from 'sentry/components/eventOrGroupExtraDetails';
- import EventOrGroupHeader from 'sentry/components/eventOrGroupHeader';
- import TimeSince from 'sentry/components/timeSince';
- import {IconExclamation, IconSentry} from 'sentry/icons';
- import {t} from 'sentry/locale';
- import space from 'sentry/styles/space';
- import useOrganization from 'sentry/utils/useOrganization';
- import {ReleaseActivityRow} from './releaseActivityRow';
- import {
- ReleaseActivity,
- ReleaseActivityDeployed,
- ReleaseActivityIssue,
- ReleaseActivityType,
- } from './types';
- function ReleaseActivityStartStop(props: ReleaseActivityItemProps) {
- const isFinished = props.activity.type === ReleaseActivityType.FINISHED;
- return (
- <ReleaseActivityRow
- icon={<StyledIconSentry color="white" size="lg" />}
- iconColor="gray500"
- hideConnector={isFinished}
- >
- <div>
- {isFinished
- ? t('Release has been deployed for an hour and is no longer active')
- : t('Release Created')}
- </div>
- <DateContainer>
- <TimeSince date={props.activity.dateAdded} />
- </DateContainer>
- </ReleaseActivityRow>
- );
- }
- export function ReleaseActivityWaiting() {
- return (
- <ReleaseActivityRow
- icon={<StyledIconSentry color="white" size="lg" />}
- iconColor="gray500"
- hideConnector
- >
- <WaitingContainer>{t('Waiting for issues in this release...')}</WaitingContainer>
- </ReleaseActivityRow>
- );
- }
- interface ReleaseActivityDeployProps {
- activity: ReleaseActivityDeployed;
- }
- function ReleaseActivityDeploy(props: ReleaseActivityDeployProps) {
- return (
- <ReleaseActivityRow
- icon={<StyledIconSentry color="white" size="lg" />}
- iconColor="gray500"
- >
- <div>{t('Deployed to %s', props.activity.data.environment)}</div>
- <DateContainer>
- <TimeSince date={props.activity.dateAdded} />
- </DateContainer>
- </ReleaseActivityRow>
- );
- }
- interface ReleaseIssueActivityProps {
- activity: ReleaseActivityIssue;
- }
- function ReleaseIssueActivity(props: ReleaseIssueActivityProps) {
- const org = useOrganization();
- const group = props.activity.data.group;
- return (
- <ReleaseActivityRow
- icon={<IconExclamation color="white" size="lg" />}
- iconColor="yellow300"
- >
- <GroupSummary>
- <EventOrGroupHeader
- organization={org}
- data={group}
- query=""
- size="normal"
- includeLink
- hideLevel
- />
- <EventOrGroupExtraDetails data={group} showInboxTime={false} />
- </GroupSummary>
- </ReleaseActivityRow>
- );
- }
- interface ReleaseActivityItemProps {
- activity: ReleaseActivity;
- }
- export function ReleaseActivityItem(props: ReleaseActivityItemProps) {
- switch (props.activity.type) {
- case ReleaseActivityType.CREATED:
- case ReleaseActivityType.FINISHED:
- return <ReleaseActivityStartStop activity={props.activity} />;
- case ReleaseActivityType.DEPLOYED:
- return <ReleaseActivityDeploy activity={props.activity} />;
- case ReleaseActivityType.ISSUE:
- return <ReleaseIssueActivity activity={props.activity} />;
- default:
- return null;
- }
- }
- const DateContainer = styled('div')`
- color: ${p => p.theme.subText};
- font-size: ${p => p.theme.fontSizeMedium};
- `;
- // Fix sentry icon looking off center
- const StyledIconSentry = styled(IconSentry)`
- margin-top: -${space(0.5)};
- `;
- const GroupSummary = styled('div')`
- overflow: hidden;
- flex: 1;
- margin-top: ${space(0.75)};
- `;
- const WaitingContainer = styled('div')`
- padding: ${space(1.5)} 0;
- `;
|