import {Fragment} from 'react'; import styled from '@emotion/styled'; import UserAvatar from 'sentry/components/avatar/userAvatar'; import CommitLink from 'sentry/components/commitLink'; import {BannerContainer, BannerSummary} from 'sentry/components/events/styles'; import TimeSince from 'sentry/components/timeSince'; import Version from 'sentry/components/version'; import {IconCheckmark} from 'sentry/icons'; import {t, tct} from 'sentry/locale'; import space from 'sentry/styles/space'; import { GroupActivity, GroupActivitySetByResolvedInRelease, GroupActivityType, Repository, ResolutionStatusDetails, } from 'sentry/types'; type Props = { projectId: string; statusDetails: ResolutionStatusDetails; activities?: GroupActivity[]; }; function renderReason( statusDetails: ResolutionStatusDetails, projectId: string, activities: GroupActivity[] ) { const actor = statusDetails.actor ? ( {statusDetails.actor.name} ) : null; const relevantActivity = activities.find( activity => activity.type === GroupActivityType.SET_RESOLVED_IN_RELEASE ) as GroupActivitySetByResolvedInRelease | undefined; const currentReleaseVersion = relevantActivity?.data.current_release_version!; if (statusDetails.inNextRelease && statusDetails.actor) { return tct('[actor] marked this issue as resolved in the upcoming release.', { actor, }); } if (statusDetails.inNextRelease) { return t('This issue has been marked as resolved in the upcoming release.'); } if (statusDetails.inRelease && statusDetails.actor) { return currentReleaseVersion ? tct('[actor] marked this issue as resolved in versions greater than [version].', { actor, version: ( ), }) : tct('[actor] marked this issue as resolved in version [version].', { actor, version: ( ), }); } if (statusDetails.inRelease) { return currentReleaseVersion ? tct( 'This issue has been marked as resolved in versions greater than [version].', { version: ( ), } ) : tct('This issue has been marked as resolved in version [version].', { version: ( ), }); } if (statusDetails.inCommit) { return tct('This issue has been marked as resolved by [commit]', { commit: ( {statusDetails.inCommit.dateCreated && ( )} ), }); } return t('This issue has been marked as resolved.'); } function ResolutionBox({statusDetails, projectId, activities = []}: Props) { return ( {renderReason(statusDetails, projectId, activities)} ); } const StyledTimeSince = styled(TimeSince)` color: ${p => p.theme.gray300}; margin-left: ${space(0.5)}; font-size: ${p => p.theme.fontSizeSmall}; `; const StyledIconCheckmark = styled(IconCheckmark)` /* override margin defined in BannerSummary */ margin-top: 0 !important; align-self: center; @media (max-width: ${p => p.theme.breakpoints.small}) { margin-top: ${space(0.5)} !important; align-self: flex-start; } `; export default ResolutionBox;