{t('Resolving is better with Releases')}
{t(
'Set up Releases so Sentry can bother you when this problem comes back in a future release.'
)}
{t('Set up Releases Now')}
);
}
export interface ResolveActionsProps {
hasRelease: boolean;
onUpdate: (data: GroupStatusResolution) => void;
confirmLabel?: string;
confirmMessage?: React.ReactNode;
disableDropdown?: boolean;
disabled?: boolean;
isAutoResolved?: boolean;
isResolved?: boolean;
latestRelease?: Project['latestRelease'];
multipleProjectsSelected?: boolean;
priority?: 'primary';
projectFetchError?: boolean;
projectSlug?: string;
shouldConfirm?: boolean;
size?: 'xs' | 'sm';
}
function ResolveActions({
size = 'xs',
isResolved = false,
isAutoResolved = false,
confirmLabel = t('Resolve'),
projectSlug,
hasRelease,
latestRelease,
confirmMessage,
shouldConfirm,
disabled,
disableDropdown,
priority,
projectFetchError,
multipleProjectsSelected,
onUpdate,
}: ResolveActionsProps) {
const organization = useOrganization();
function handleCommitResolution(statusDetails: ResolvedStatusDetails) {
onUpdate({
status: GroupStatus.RESOLVED,
statusDetails,
substatus: null,
});
}
function handleAnotherExistingReleaseResolution(statusDetails: ResolvedStatusDetails) {
onUpdate({
status: GroupStatus.RESOLVED,
statusDetails,
substatus: null,
});
trackAnalytics('resolve_issue', {
organization,
release: 'anotherExisting',
});
}
function handleCurrentReleaseResolution() {
if (hasRelease) {
onUpdate({
status: GroupStatus.RESOLVED,
statusDetails: {
inRelease: latestRelease ? latestRelease.version : 'latest',
},
substatus: null,
});
}
trackAnalytics('resolve_issue', {
organization,
release: 'current',
});
}
function handleNextReleaseResolution() {
if (hasRelease) {
onUpdate({
status: GroupStatus.RESOLVED,
statusDetails: {
inNextRelease: true,
},
substatus: null,
});
}
trackAnalytics('resolve_issue', {
organization,
release: 'next',
});
}
function renderResolved() {
return (