debian-mirror-gitlab/app/assets/javascripts/pages/milestones/shared/components/delete_milestone_modal.vue

134 lines
3.4 KiB
Vue
Raw Normal View History

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
Youre 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|
Youre 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"
2019-01-03 12:48:30 +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>
2019-01-03 12:48:30 +05:30
2018-05-09 12:01:36 +05:30
</deprecated-modal>
2018-03-17 18:26:18 +05:30
</template>