debian-mirror-gitlab/app/assets/javascripts/environments/components/confirm_rollback_modal.vue

171 lines
4.4 KiB
Vue
Raw Normal View History

2019-07-07 11:18:12 +05:30
<script>
/**
* Render modal to confirm rollback/redeploy.
*/
2021-10-27 15:23:28 +05:30
import { GlModal, GlSprintf, GlLink } from '@gitlab/ui';
2021-03-11 19:13:27 +05:30
import { escape } from 'lodash';
2021-10-27 15:23:28 +05:30
import csrf from '~/lib/utils/csrf';
import { __, s__, sprintf } from '~/locale';
2019-07-07 11:18:12 +05:30
2022-01-26 12:08:38 +05:30
import rollbackEnvironment from '../graphql/mutations/rollback_environment.mutation.graphql';
2019-07-07 11:18:12 +05:30
import eventHub from '../event_hub';
export default {
name: 'ConfirmRollbackModal',
components: {
GlModal,
2021-10-27 15:23:28 +05:30
GlSprintf,
GlLink,
},
model: {
prop: 'visible',
event: 'change',
2019-07-07 11:18:12 +05:30
},
props: {
environment: {
type: Object,
required: true,
},
2021-10-27 15:23:28 +05:30
visible: {
type: Boolean,
required: false,
default: false,
},
hasMultipleCommits: {
type: Boolean,
required: false,
default: true,
},
retryUrl: {
type: String,
required: false,
default: null,
},
2022-01-26 12:08:38 +05:30
graphql: {
type: Boolean,
required: false,
default: false,
},
2019-07-07 11:18:12 +05:30
},
computed: {
modalTitle() {
2022-01-26 12:08:38 +05:30
const title = this.isLastDeployment
2019-07-07 11:18:12 +05:30
? s__('Environments|Re-deploy environment %{name}?')
: s__('Environments|Rollback environment %{name}?');
return sprintf(title, {
2020-05-24 23:13:21 +05:30
name: escape(this.environment.name),
2019-07-07 11:18:12 +05:30
});
},
commitShortSha() {
2021-10-27 15:23:28 +05:30
if (this.hasMultipleCommits) {
2022-01-26 12:08:38 +05:30
if (this.graphql) {
const { lastDeployment } = this.environment;
return this.commitData(lastDeployment, 'shortId');
}
2021-10-27 15:23:28 +05:30
const { last_deployment } = this.environment;
return this.commitData(last_deployment, 'short_id');
}
2019-07-07 11:18:12 +05:30
2021-10-27 15:23:28 +05:30
return this.environment.commitShortSha;
2019-07-07 11:18:12 +05:30
},
2021-10-27 15:23:28 +05:30
commitUrl() {
if (this.hasMultipleCommits) {
2022-01-26 12:08:38 +05:30
if (this.graphql) {
const { lastDeployment } = this.environment;
return this.commitData(lastDeployment, 'commitPath');
}
2021-10-27 15:23:28 +05:30
const { last_deployment } = this.environment;
return this.commitData(last_deployment, 'commit_path');
}
2019-07-07 11:18:12 +05:30
2021-10-27 15:23:28 +05:30
return this.environment.commitUrl;
2019-07-07 11:18:12 +05:30
},
modalActionText() {
2022-01-26 12:08:38 +05:30
return this.isLastDeployment ? s__('Environments|Re-deploy') : s__('Environments|Rollback');
2019-07-07 11:18:12 +05:30
},
2021-10-27 15:23:28 +05:30
primaryProps() {
let attributes = [{ variant: 'danger' }];
if (this.retryUrl) {
attributes = [...attributes, { 'data-method': 'post' }, { href: this.retryUrl }];
}
2019-07-07 11:18:12 +05:30
2021-10-27 15:23:28 +05:30
return {
text: this.modalActionText,
attributes,
};
},
2022-01-26 12:08:38 +05:30
isLastDeployment() {
2022-03-02 08:16:31 +05:30
return this.environment?.isLastDeployment || this.environment?.lastDeployment?.isLast;
2022-01-26 12:08:38 +05:30
},
2021-10-27 15:23:28 +05:30
},
2019-07-07 11:18:12 +05:30
methods: {
2021-10-27 15:23:28 +05:30
handleChange(event) {
this.$emit('change', event);
},
2019-07-07 11:18:12 +05:30
onOk() {
2022-01-26 12:08:38 +05:30
if (this.graphql) {
this.$apollo.mutate({
mutation: rollbackEnvironment,
variables: { environment: this.environment },
});
} else {
eventHub.$emit('rollbackEnvironment', this.environment);
}
2019-07-07 11:18:12 +05:30
},
commitData(lastDeployment, key) {
2022-01-26 12:08:38 +05:30
return lastDeployment?.commit?.[key] ?? '';
2019-07-07 11:18:12 +05:30
},
},
2021-10-27 15:23:28 +05:30
csrf,
cancelProps: {
text: __('Cancel'),
attributes: [{ variant: 'danger' }],
},
2019-07-07 11:18:12 +05:30
};
</script>
<template>
<gl-modal
:title="modalTitle"
2021-10-27 15:23:28 +05:30
:visible="visible"
:action-cancel="$options.cancelProps"
:action-primary="primaryProps"
2019-07-07 11:18:12 +05:30
modal-id="confirm-rollback-modal"
@ok="onOk"
2021-10-27 15:23:28 +05:30
@change="handleChange"
2019-07-07 11:18:12 +05:30
>
2021-10-27 15:23:28 +05:30
<gl-sprintf
v-if="environment.isLastDeployment"
:message="
s__(
'Environments|This action will relaunch the job for commit %{linkStart}%{commitId}%{linkEnd}, putting the environment in a previous version. Are you sure you want to continue?',
)
"
>
<template #link>
<gl-link :href="commitUrl" target="_blank" class="commit-sha mr-0">{{
commitShortSha
}}</gl-link>
</template>
</gl-sprintf>
<gl-sprintf
v-else
:message="
s__(
'Environments|This action will run the job defined by %{name} for commit %{linkStart}%{commitId}%{linkEnd} putting the environment in a previous version. You can revert it by re-deploying the latest version of your application. Are you sure you want to continue?',
)
"
>
<template #name>{{ environment.name }}</template>
<template #link>
<gl-link :href="commitUrl" target="_blank" class="commit-sha mr-0">{{
commitShortSha
}}</gl-link>
</template>
</gl-sprintf>
2019-07-07 11:18:12 +05:30
</gl-modal>
</template>