2018-03-17 18:26:18 +05:30
|
|
|
|
<script>
|
2018-12-13 13:39:08 +05:30
|
|
|
|
import axios from '~/lib/utils/axios_utils';
|
2018-03-17 18:26:18 +05:30
|
|
|
|
|
2018-12-13 13:39:08 +05:30
|
|
|
|
import Flash from '~/flash';
|
|
|
|
|
import DeprecatedModal from '~/vue_shared/components/deprecated_modal.vue';
|
|
|
|
|
import { n__, s__, sprintf } from '~/locale';
|
|
|
|
|
import { redirectTo } from '~/lib/utils/url_utility';
|
|
|
|
|
import eventHub from '../event_hub';
|
2018-03-17 18:26:18 +05:30
|
|
|
|
|
2018-12-13 13:39:08 +05:30
|
|
|
|
export default {
|
|
|
|
|
components: {
|
|
|
|
|
DeprecatedModal,
|
|
|
|
|
},
|
|
|
|
|
props: {
|
|
|
|
|
issueCount: {
|
|
|
|
|
type: Number,
|
|
|
|
|
required: true,
|
2018-03-17 18:26:18 +05:30
|
|
|
|
},
|
2018-12-13 13:39:08 +05:30
|
|
|
|
mergeRequestCount: {
|
|
|
|
|
type: Number,
|
|
|
|
|
required: true,
|
2018-03-17 18:26:18 +05:30
|
|
|
|
},
|
2018-12-13 13:39:08 +05:30
|
|
|
|
milestoneId: {
|
|
|
|
|
type: Number,
|
|
|
|
|
required: true,
|
|
|
|
|
},
|
|
|
|
|
milestoneTitle: {
|
|
|
|
|
type: String,
|
|
|
|
|
required: true,
|
|
|
|
|
},
|
|
|
|
|
milestoneUrl: {
|
|
|
|
|
type: String,
|
|
|
|
|
required: true,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
computed: {
|
|
|
|
|
text() {
|
|
|
|
|
const milestoneTitle = sprintf('<strong>%{milestoneTitle}</strong>', {
|
|
|
|
|
milestoneTitle: this.milestoneTitle,
|
|
|
|
|
});
|
2018-03-17 18:26:18 +05:30
|
|
|
|
|
2018-12-13 13:39:08 +05:30
|
|
|
|
if (this.issueCount === 0 && this.mergeRequestCount === 0) {
|
2018-03-17 18:26:18 +05:30
|
|
|
|
return sprintf(
|
|
|
|
|
s__(`Milestones|
|
2018-12-13 13:39:08 +05:30
|
|
|
|
You’re about to permanently delete the milestone %{milestoneTitle}.
|
|
|
|
|
This milestone is not currently used in any issues or merge requests.`),
|
2018-03-17 18:26:18 +05:30
|
|
|
|
{
|
|
|
|
|
milestoneTitle,
|
|
|
|
|
},
|
|
|
|
|
false,
|
|
|
|
|
);
|
2018-12-13 13:39:08 +05:30
|
|
|
|
}
|
2018-03-17 18:26:18 +05:30
|
|
|
|
|
2018-12-13 13:39:08 +05:30
|
|
|
|
return sprintf(
|
|
|
|
|
s__(`Milestones|
|
|
|
|
|
You’re about to permanently delete the milestone %{milestoneTitle} and remove it from %{issuesWithCount} and %{mergeRequestsWithCount}.
|
|
|
|
|
Once deleted, it cannot be undone or recovered.`),
|
|
|
|
|
{
|
|
|
|
|
milestoneTitle,
|
|
|
|
|
issuesWithCount: n__('%d issue', '%d issues', this.issueCount),
|
|
|
|
|
mergeRequestsWithCount: n__(
|
|
|
|
|
'%d merge request',
|
|
|
|
|
'%d merge requests',
|
|
|
|
|
this.mergeRequestCount,
|
|
|
|
|
),
|
|
|
|
|
},
|
|
|
|
|
false,
|
|
|
|
|
);
|
|
|
|
|
},
|
|
|
|
|
title() {
|
|
|
|
|
return sprintf(s__('Milestones|Delete milestone %{milestoneTitle}?'), {
|
|
|
|
|
milestoneTitle: this.milestoneTitle,
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
methods: {
|
|
|
|
|
onSubmit() {
|
|
|
|
|
eventHub.$emit('deleteMilestoneModal.requestStarted', this.milestoneUrl);
|
2018-03-17 18:26:18 +05:30
|
|
|
|
|
2018-12-13 13:39:08 +05:30
|
|
|
|
return axios
|
|
|
|
|
.delete(this.milestoneUrl)
|
|
|
|
|
.then(response => {
|
|
|
|
|
eventHub.$emit('deleteMilestoneModal.requestFinished', {
|
|
|
|
|
milestoneUrl: this.milestoneUrl,
|
|
|
|
|
successful: true,
|
|
|
|
|
});
|
2018-03-17 18:26:18 +05:30
|
|
|
|
|
2018-12-13 13:39:08 +05:30
|
|
|
|
// follow the rediect to milestones overview page
|
|
|
|
|
redirectTo(response.request.responseURL);
|
|
|
|
|
})
|
|
|
|
|
.catch(error => {
|
|
|
|
|
eventHub.$emit('deleteMilestoneModal.requestFinished', {
|
|
|
|
|
milestoneUrl: this.milestoneUrl,
|
|
|
|
|
successful: false,
|
2018-03-17 18:26:18 +05:30
|
|
|
|
});
|
2018-12-13 13:39:08 +05:30
|
|
|
|
|
|
|
|
|
if (error.response && error.response.status === 404) {
|
|
|
|
|
Flash(
|
|
|
|
|
sprintf(s__('Milestones|Milestone %{milestoneTitle} was not found'), {
|
|
|
|
|
milestoneTitle: this.milestoneTitle,
|
|
|
|
|
}),
|
|
|
|
|
);
|
|
|
|
|
} else {
|
|
|
|
|
Flash(
|
|
|
|
|
sprintf(s__('Milestones|Failed to delete milestone %{milestoneTitle}'), {
|
|
|
|
|
milestoneTitle: this.milestoneTitle,
|
|
|
|
|
}),
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
throw error;
|
|
|
|
|
});
|
2018-03-17 18:26:18 +05:30
|
|
|
|
},
|
2018-12-13 13:39:08 +05:30
|
|
|
|
},
|
|
|
|
|
};
|
2018-03-17 18:26:18 +05:30
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<template>
|
2018-05-09 12:01:36 +05:30
|
|
|
|
<deprecated-modal
|
2018-03-17 18:26:18 +05:30
|
|
|
|
id="delete-milestone-modal"
|
|
|
|
|
:title="title"
|
|
|
|
|
:text="text"
|
|
|
|
|
:primary-button-label="s__('Milestones|Delete milestone')"
|
2018-11-08 19:23:39 +05:30
|
|
|
|
kind="danger"
|
2018-12-23 12:14:25 +05:30
|
|
|
|
@submit="onSubmit"
|
|
|
|
|
>
|
|
|
|
|
<template slot="body" slot-scope="props">
|
2018-03-17 18:26:18 +05:30
|
|
|
|
<p v-html="props.text"></p>
|
|
|
|
|
</template>
|
2018-05-09 12:01:36 +05:30
|
|
|
|
</deprecated-modal>
|
2018-03-17 18:26:18 +05:30
|
|
|
|
</template>
|