2018-10-15 14:42:47 +05:30
|
|
|
<script>
|
2020-10-24 23:57:45 +05:30
|
|
|
import { GlButton } from '@gitlab/ui';
|
2021-01-29 00:20:46 +05:30
|
|
|
import { produce } from 'immer';
|
2021-03-11 19:13:27 +05:30
|
|
|
import $ from 'jquery';
|
2021-09-04 01:27:46 +05:30
|
|
|
import createFlash from '~/flash';
|
2021-11-18 22:05:49 +05:30
|
|
|
import toast from '~/vue_shared/plugins/global_toast';
|
2021-03-11 19:13:27 +05:30
|
|
|
import { __ } from '~/locale';
|
2021-01-03 14:25:43 +05:30
|
|
|
import MergeRequest from '~/merge_request';
|
2020-10-24 23:57:45 +05:30
|
|
|
import glFeatureFlagMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
|
2021-03-11 19:13:27 +05:30
|
|
|
import eventHub from '../../event_hub';
|
2020-10-24 23:57:45 +05:30
|
|
|
import mergeRequestQueryVariablesMixin from '../../mixins/merge_request_query_variables';
|
|
|
|
import getStateQuery from '../../queries/get_state.query.graphql';
|
|
|
|
import workInProgressQuery from '../../queries/states/work_in_progress.query.graphql';
|
|
|
|
import removeWipMutation from '../../queries/toggle_wip.mutation.graphql';
|
2020-04-08 14:13:33 +05:30
|
|
|
import StatusIcon from '../mr_widget_status_icon.vue';
|
2017-08-17 22:00:37 +05:30
|
|
|
|
|
|
|
export default {
|
2018-10-15 14:42:47 +05:30
|
|
|
name: 'WorkInProgress',
|
|
|
|
components: {
|
2020-04-08 14:13:33 +05:30
|
|
|
StatusIcon,
|
2020-10-24 23:57:45 +05:30
|
|
|
GlButton,
|
2017-08-17 22:00:37 +05:30
|
|
|
},
|
2020-10-24 23:57:45 +05:30
|
|
|
mixins: [glFeatureFlagMixin(), mergeRequestQueryVariablesMixin],
|
|
|
|
apollo: {
|
|
|
|
userPermissions: {
|
|
|
|
query: workInProgressQuery,
|
|
|
|
skip() {
|
|
|
|
return !this.glFeatures.mergeRequestWidgetGraphql;
|
|
|
|
},
|
|
|
|
variables() {
|
|
|
|
return this.mergeRequestQueryVariables;
|
|
|
|
},
|
2021-03-08 18:12:59 +05:30
|
|
|
update: (data) => data.project.mergeRequest.userPermissions,
|
2020-10-24 23:57:45 +05:30
|
|
|
},
|
|
|
|
},
|
2018-10-15 14:42:47 +05:30
|
|
|
props: {
|
|
|
|
mr: { type: Object, required: true },
|
|
|
|
service: { type: Object, required: true },
|
|
|
|
},
|
2017-08-17 22:00:37 +05:30
|
|
|
data() {
|
|
|
|
return {
|
2020-10-24 23:57:45 +05:30
|
|
|
userPermissions: {},
|
2017-08-17 22:00:37 +05:30
|
|
|
isMakingRequest: false,
|
|
|
|
};
|
|
|
|
},
|
2020-04-08 14:13:33 +05:30
|
|
|
computed: {
|
2020-10-24 23:57:45 +05:30
|
|
|
canUpdate() {
|
|
|
|
if (this.glFeatures.mergeRequestWidgetGraphql) {
|
|
|
|
return this.userPermissions.updateMergeRequest;
|
|
|
|
}
|
|
|
|
|
|
|
|
return Boolean(this.mr.removeWIPPath);
|
2020-04-08 14:13:33 +05:30
|
|
|
},
|
|
|
|
},
|
2017-08-17 22:00:37 +05:30
|
|
|
methods: {
|
2020-10-24 23:57:45 +05:30
|
|
|
removeWipMutation() {
|
2020-11-24 15:15:51 +05:30
|
|
|
const { mergeRequestQueryVariables } = this;
|
|
|
|
|
2017-08-17 22:00:37 +05:30
|
|
|
this.isMakingRequest = true;
|
2020-10-24 23:57:45 +05:30
|
|
|
|
|
|
|
this.$apollo
|
|
|
|
.mutate({
|
|
|
|
mutation: removeWipMutation,
|
|
|
|
variables: {
|
2020-11-24 15:15:51 +05:30
|
|
|
...mergeRequestQueryVariables,
|
2020-10-24 23:57:45 +05:30
|
|
|
wip: false,
|
|
|
|
},
|
|
|
|
update(
|
|
|
|
store,
|
|
|
|
{
|
|
|
|
data: {
|
|
|
|
mergeRequestSetWip: {
|
|
|
|
errors,
|
2021-04-17 20:07:23 +05:30
|
|
|
mergeRequest: { mergeableDiscussionsState, workInProgress, title },
|
2020-10-24 23:57:45 +05:30
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
) {
|
|
|
|
if (errors?.length) {
|
2021-09-04 01:27:46 +05:30
|
|
|
createFlash({
|
|
|
|
message: __('Something went wrong. Please try again.'),
|
|
|
|
});
|
2020-10-24 23:57:45 +05:30
|
|
|
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2021-01-29 00:20:46 +05:30
|
|
|
const sourceData = store.readQuery({
|
2020-10-24 23:57:45 +05:30
|
|
|
query: getStateQuery,
|
2020-11-24 15:15:51 +05:30
|
|
|
variables: mergeRequestQueryVariables,
|
2020-10-24 23:57:45 +05:30
|
|
|
});
|
2021-01-29 00:20:46 +05:30
|
|
|
|
2021-03-08 18:12:59 +05:30
|
|
|
const data = produce(sourceData, (draftState) => {
|
2021-04-17 20:07:23 +05:30
|
|
|
draftState.project.mergeRequest.mergeableDiscussionsState = mergeableDiscussionsState;
|
2021-01-29 00:20:46 +05:30
|
|
|
draftState.project.mergeRequest.workInProgress = workInProgress;
|
|
|
|
draftState.project.mergeRequest.title = title;
|
|
|
|
});
|
|
|
|
|
2020-10-24 23:57:45 +05:30
|
|
|
store.writeQuery({
|
|
|
|
query: getStateQuery,
|
|
|
|
data,
|
2020-11-24 15:15:51 +05:30
|
|
|
variables: mergeRequestQueryVariables,
|
2020-10-24 23:57:45 +05:30
|
|
|
});
|
|
|
|
},
|
|
|
|
optimisticResponse: {
|
|
|
|
// eslint-disable-next-line @gitlab/require-i18n-strings
|
|
|
|
__typename: 'Mutation',
|
|
|
|
mergeRequestSetWip: {
|
|
|
|
__typename: 'MergeRequestSetWipPayload',
|
|
|
|
errors: [],
|
|
|
|
mergeRequest: {
|
|
|
|
__typename: 'MergeRequest',
|
2021-04-17 20:07:23 +05:30
|
|
|
mergeableDiscussionsState: true,
|
2020-10-24 23:57:45 +05:30
|
|
|
title: this.mr.title,
|
|
|
|
workInProgress: false,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
})
|
2021-03-08 18:12:59 +05:30
|
|
|
.then(
|
|
|
|
({
|
|
|
|
data: {
|
|
|
|
mergeRequestSetWip: {
|
|
|
|
mergeRequest: { title },
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}) => {
|
2021-11-18 22:05:49 +05:30
|
|
|
toast(__('Marked as ready. Merging is now allowed.'));
|
2021-03-08 18:12:59 +05:30
|
|
|
$('.merge-request .detail-page-description .title').text(title);
|
|
|
|
},
|
|
|
|
)
|
2021-09-04 01:27:46 +05:30
|
|
|
.catch(() =>
|
|
|
|
createFlash({
|
|
|
|
message: __('Something went wrong. Please try again.'),
|
|
|
|
}),
|
|
|
|
)
|
2020-10-24 23:57:45 +05:30
|
|
|
.finally(() => {
|
2017-08-17 22:00:37 +05:30
|
|
|
this.isMakingRequest = false;
|
|
|
|
});
|
|
|
|
},
|
2020-10-24 23:57:45 +05:30
|
|
|
handleRemoveWIP() {
|
|
|
|
if (this.glFeatures.mergeRequestWidgetGraphql) {
|
|
|
|
this.removeWipMutation();
|
|
|
|
} else {
|
|
|
|
this.isMakingRequest = true;
|
|
|
|
this.service
|
|
|
|
.removeWIP()
|
2021-03-08 18:12:59 +05:30
|
|
|
.then((res) => res.data)
|
|
|
|
.then((data) => {
|
2020-10-24 23:57:45 +05:30
|
|
|
eventHub.$emit('UpdateWidgetData', data);
|
2021-01-03 14:25:43 +05:30
|
|
|
MergeRequest.toggleDraftStatus(this.mr.title, true);
|
2020-10-24 23:57:45 +05:30
|
|
|
})
|
|
|
|
.catch(() => {
|
|
|
|
this.isMakingRequest = false;
|
2021-09-04 01:27:46 +05:30
|
|
|
createFlash({
|
|
|
|
message: __('Something went wrong. Please try again.'),
|
|
|
|
});
|
2020-10-24 23:57:45 +05:30
|
|
|
});
|
|
|
|
}
|
|
|
|
},
|
2017-08-17 22:00:37 +05:30
|
|
|
},
|
|
|
|
};
|
2018-10-15 14:42:47 +05:30
|
|
|
</script>
|
|
|
|
|
|
|
|
<template>
|
|
|
|
<div class="mr-widget-body media">
|
2020-10-24 23:57:45 +05:30
|
|
|
<status-icon :show-disabled-button="canUpdate" status="warning" />
|
|
|
|
<div class="media-body">
|
|
|
|
<div class="gl-ml-3 float-left">
|
|
|
|
<span class="gl-font-weight-bold">
|
2021-01-29 00:20:46 +05:30
|
|
|
{{ __('This merge request is still a draft.') }}
|
2020-10-24 23:57:45 +05:30
|
|
|
</span>
|
|
|
|
<span class="gl-display-block text-muted">{{
|
|
|
|
__("Draft merge requests can't be merged.")
|
|
|
|
}}</span>
|
|
|
|
</div>
|
|
|
|
<gl-button
|
|
|
|
v-if="canUpdate"
|
|
|
|
size="small"
|
2018-10-15 14:42:47 +05:30
|
|
|
:disabled="isMakingRequest"
|
2020-04-08 14:13:33 +05:30
|
|
|
:loading="isMakingRequest"
|
2020-10-24 23:57:45 +05:30
|
|
|
class="js-remove-wip gl-ml-3"
|
2020-04-08 14:13:33 +05:30
|
|
|
@click="handleRemoveWIP"
|
2019-02-15 15:39:39 +05:30
|
|
|
>
|
2020-10-24 23:57:45 +05:30
|
|
|
{{ s__('mrWidget|Mark as ready') }}
|
|
|
|
</gl-button>
|
2018-10-15 14:42:47 +05:30
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</template>
|