diff --git a/.haml-lint_todo.yml b/.haml-lint_todo.yml
index 12505521435..c83d5420a4d 100644
--- a/.haml-lint_todo.yml
+++ b/.haml-lint_todo.yml
@@ -214,7 +214,6 @@ linters:
- 'app/views/projects/mattermosts/_team_selection.html.haml'
- 'app/views/projects/mattermosts/new.html.haml'
- 'app/views/projects/merge_requests/_commits.html.haml'
- - 'app/views/projects/merge_requests/_how_to_merge.html.haml'
- 'app/views/projects/merge_requests/_mr_title.html.haml'
- 'app/views/projects/merge_requests/conflicts/_commit_stats.html.haml'
- 'app/views/projects/merge_requests/conflicts/_file_actions.html.haml'
diff --git a/GITALY_SERVER_VERSION b/GITALY_SERVER_VERSION
index 857ea235035..895e4e48247 100644
--- a/GITALY_SERVER_VERSION
+++ b/GITALY_SERVER_VERSION
@@ -1 +1 @@
-9677be26e1a7f7e4f56bf4f7ba47bc0d16f40e16
+ae38755015839b67292e5f550a9a4fd72c3c1a56
diff --git a/app/assets/javascripts/boards/components/board_assignee_dropdown.vue b/app/assets/javascripts/boards/components/board_assignee_dropdown.vue
index 231cde0d24f..b4a9d34e738 100644
--- a/app/assets/javascripts/boards/components/board_assignee_dropdown.vue
+++ b/app/assets/javascripts/boards/components/board_assignee_dropdown.vue
@@ -1,5 +1,5 @@
-
+
diff --git a/app/assets/javascripts/boards/stores/actions.js b/app/assets/javascripts/boards/stores/actions.js
index 2b6d606c56e..fd5049ef9bc 100644
--- a/app/assets/javascripts/boards/stores/actions.js
+++ b/app/assets/javascripts/boards/stores/actions.js
@@ -320,6 +320,8 @@ export default {
},
setAssignees: ({ commit, getters }, assigneeUsernames) => {
+ commit(types.SET_ASSIGNEE_LOADING, true);
+
return gqlClient
.mutate({
mutation: updateAssignees,
@@ -339,6 +341,9 @@ export default {
});
return nodes;
+ })
+ .finally(() => {
+ commit(types.SET_ASSIGNEE_LOADING, false);
});
},
diff --git a/app/assets/javascripts/boards/stores/mutation_types.js b/app/assets/javascripts/boards/stores/mutation_types.js
index 3a57cb9b5e1..2b2c2bee51c 100644
--- a/app/assets/javascripts/boards/stores/mutation_types.js
+++ b/app/assets/javascripts/boards/stores/mutation_types.js
@@ -34,4 +34,5 @@ export const SET_CURRENT_PAGE = 'SET_CURRENT_PAGE';
export const TOGGLE_EMPTY_STATE = 'TOGGLE_EMPTY_STATE';
export const SET_ACTIVE_ID = 'SET_ACTIVE_ID';
export const UPDATE_ISSUE_BY_ID = 'UPDATE_ISSUE_BY_ID';
+export const SET_ASSIGNEE_LOADING = 'SET_ASSIGNEE_LOADING';
export const RESET_ISSUES = 'RESET_ISSUES';
diff --git a/app/assets/javascripts/boards/stores/mutations.js b/app/assets/javascripts/boards/stores/mutations.js
index bb083158c8f..efe6c2042af 100644
--- a/app/assets/javascripts/boards/stores/mutations.js
+++ b/app/assets/javascripts/boards/stores/mutations.js
@@ -143,6 +143,10 @@ export default {
Vue.set(state.issues[issueId], prop, value);
},
+ [mutationTypes.SET_ASSIGNEE_LOADING](state, isLoading) {
+ state.isSettingAssignees = isLoading;
+ },
+
[mutationTypes.REQUEST_ADD_ISSUE]: () => {
notImplemented();
},
diff --git a/app/assets/javascripts/boards/stores/state.js b/app/assets/javascripts/boards/stores/state.js
index b91c09f8051..6f29115aebd 100644
--- a/app/assets/javascripts/boards/stores/state.js
+++ b/app/assets/javascripts/boards/stores/state.js
@@ -11,6 +11,7 @@ export default () => ({
boardLists: {},
listsFlags: {},
issuesByListId: {},
+ isSettingAssignees: false,
pageInfoByListId: {},
issues: {},
filterParams: {},
diff --git a/app/assets/javascripts/close_reopen_report_toggle.js b/app/assets/javascripts/close_reopen_report_toggle.js
deleted file mode 100644
index 9bbbe07e7a1..00000000000
--- a/app/assets/javascripts/close_reopen_report_toggle.js
+++ /dev/null
@@ -1,92 +0,0 @@
-import DropLab from './droplab/drop_lab';
-import ISetter from './droplab/plugins/input_setter';
-
-// Todo: Remove this when fixing issue in input_setter plugin
-const InputSetter = { ...ISetter };
-
-class CloseReopenReportToggle {
- constructor(opts = {}) {
- this.dropdownTrigger = opts.dropdownTrigger;
- this.dropdownList = opts.dropdownList;
- this.button = opts.button;
- }
-
- initDroplab() {
- this.reopenItem = this.dropdownList.querySelector('.reopen-item');
- this.closeItem = this.dropdownList.querySelector('.close-item');
-
- this.droplab = new DropLab();
-
- const config = this.setConfig();
-
- this.droplab.init(this.dropdownTrigger, this.dropdownList, [InputSetter], config);
- }
-
- updateButton(isClosed) {
- this.toggleButtonType(isClosed);
-
- this.button.blur();
- }
-
- toggleButtonType(isClosed) {
- const [showItem, hideItem] = this.getButtonTypes(isClosed);
-
- showItem.classList.remove('hidden');
- showItem.classList.add('droplab-item-selected');
-
- hideItem.classList.add('hidden');
- hideItem.classList.remove('droplab-item-selected');
-
- showItem.click();
- }
-
- getButtonTypes(isClosed) {
- return isClosed ? [this.reopenItem, this.closeItem] : [this.closeItem, this.reopenItem];
- }
-
- setDisable(shouldDisable = true) {
- if (shouldDisable) {
- this.button.setAttribute('disabled', 'true');
- this.dropdownTrigger.setAttribute('disabled', 'true');
- } else {
- this.button.removeAttribute('disabled');
- this.dropdownTrigger.removeAttribute('disabled');
- }
- }
-
- setConfig() {
- const config = {
- InputSetter: [
- {
- input: this.button,
- valueAttribute: 'data-text',
- inputAttribute: 'data-value',
- },
- {
- input: this.button,
- valueAttribute: 'data-text',
- inputAttribute: 'title',
- },
- {
- input: this.button,
- valueAttribute: 'data-button-class',
- inputAttribute: 'class',
- },
- {
- input: this.dropdownTrigger,
- valueAttribute: 'data-toggle-class',
- inputAttribute: 'class',
- },
- {
- input: this.button,
- valueAttribute: 'data-url',
- inputAttribute: 'data-endpoint',
- },
- ],
- };
-
- return config;
- }
-}
-
-export default CloseReopenReportToggle;
diff --git a/app/assets/javascripts/diffs/components/merge_conflict_warning.vue b/app/assets/javascripts/diffs/components/merge_conflict_warning.vue
index e47bea8e589..587efd6ed41 100644
--- a/app/assets/javascripts/diffs/components/merge_conflict_warning.vue
+++ b/app/assets/javascripts/diffs/components/merge_conflict_warning.vue
@@ -1,5 +1,5 @@