summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/merge_request.js
diff options
context:
space:
mode:
Diffstat (limited to 'app/assets/javascripts/merge_request.js')
-rw-r--r--app/assets/javascripts/merge_request.js74
1 files changed, 59 insertions, 15 deletions
diff --git a/app/assets/javascripts/merge_request.js b/app/assets/javascripts/merge_request.js
index 79a4c3700ef..fe4e2cee69f 100644
--- a/app/assets/javascripts/merge_request.js
+++ b/app/assets/javascripts/merge_request.js
@@ -3,11 +3,12 @@
import $ from 'jquery';
import axios from './lib/utils/axios_utils';
import { __ } from '~/locale';
+import eventHub from '~/vue_merge_request_widget/event_hub';
import { deprecatedCreateFlash as createFlash } from '~/flash';
import TaskList from './task_list';
import MergeRequestTabs from './merge_request_tabs';
-import IssuablesHelper from './helpers/issuables_helper';
import { addDelimiter } from './lib/utils/text_utility';
+import { getParameterValues, setUrlParams } from './lib/utils/url_utility';
function MergeRequest(opts) {
// Initialize MergeRequest behavior
@@ -23,7 +24,6 @@ function MergeRequest(opts) {
this.initTabs();
this.initMRBtnListeners();
this.initCommitMessageListeners();
- this.closeReopenReportToggle = IssuablesHelper.initCloseReopenReport();
if ($('.description.js-task-list-container').length) {
this.taskList = new TaskList({
@@ -66,13 +66,38 @@ MergeRequest.prototype.showAllCommits = function() {
MergeRequest.prototype.initMRBtnListeners = function() {
const _this = this;
+ const draftToggles = document.querySelectorAll('.js-draft-toggle-button');
- $('.report-abuse-link').on('click', e => {
- // this is needed because of the implementation of
- // the dropdown toggle and Report Abuse needing to be
- // linked to another page.
- e.stopPropagation();
- });
+ if (draftToggles.length) {
+ draftToggles.forEach(draftToggle => {
+ draftToggle.addEventListener('click', e => {
+ e.preventDefault();
+ e.stopImmediatePropagation();
+
+ const url = draftToggle.href;
+ const wipEvent = getParameterValues('merge_request[wip_event]', url)[0];
+ const mobileDropdown = draftToggle.closest('.dropdown.show');
+
+ if (mobileDropdown) {
+ $(mobileDropdown.firstElementChild).dropdown('toggle');
+ }
+
+ draftToggle.setAttribute('disabled', 'disabled');
+
+ axios
+ .put(draftToggle.href, null, { params: { format: 'json' } })
+ .then(({ data }) => {
+ draftToggle.removeAttribute('disabled');
+ eventHub.$emit('MRWidgetUpdateRequested');
+ MergeRequest.toggleDraftStatus(data.title, wipEvent === 'unwip');
+ })
+ .catch(() => {
+ draftToggle.removeAttribute('disabled');
+ createFlash(__('Something went wrong. Please try again.'));
+ });
+ });
+ });
+ }
return $('.btn-close, .btn-reopen').on('click', function(e) {
const $this = $(this);
@@ -89,8 +114,6 @@ MergeRequest.prototype.initMRBtnListeners = function() {
return;
}
- if (this.closeReopenReportToggle) this.closeReopenReportToggle.setDisable();
-
if (shouldSubmit) {
if ($this.hasClass('btn-comment-and-close') || $this.hasClass('btn-comment-and-reopen')) {
e.preventDefault();
@@ -151,14 +174,35 @@ MergeRequest.hideCloseButton = function() {
const closeDropdownItem = el.querySelector('li.close-item');
if (closeDropdownItem) {
closeDropdownItem.classList.add('hidden');
- // Selects the next dropdown item
- el.querySelector('li.report-item').click();
- } else {
- // No dropdown just hide the Close button
- el.querySelector('.btn-close').classList.add('hidden');
}
// Dropdown for mobile screen
el.querySelector('li.js-close-item').classList.add('hidden');
};
+MergeRequest.toggleDraftStatus = function(title, isReady) {
+ if (isReady) {
+ createFlash(__('The merge request can now be merged.'), 'notice');
+ }
+ const titleEl = document.querySelector('.merge-request .detail-page-description .title');
+
+ if (titleEl) {
+ titleEl.textContent = title;
+ }
+
+ const draftToggles = document.querySelectorAll('.js-draft-toggle-button');
+
+ if (draftToggles.length) {
+ draftToggles.forEach(el => {
+ const draftToggle = el;
+ const url = setUrlParams(
+ { 'merge_request[wip_event]': isReady ? 'wip' : 'unwip' },
+ draftToggle.href,
+ );
+
+ draftToggle.setAttribute('href', url);
+ draftToggle.textContent = isReady ? __('Mark as draft') : __('Mark as ready');
+ });
+ }
+};
+
export default MergeRequest;