Resolve "Board label edit drop down is showing incorrect selected labels summary"
This commit is contained in:
parent
821f1a6496
commit
0b3ff7267c
5 changed files with 34 additions and 6 deletions
|
@ -51,6 +51,16 @@ gl.issueBoards.BoardSidebar = Vue.extend({
|
|||
canRemove() {
|
||||
return !this.list.preset;
|
||||
},
|
||||
hasLabels() {
|
||||
return this.issue.labels && this.issue.labels.length;
|
||||
},
|
||||
labelDropdownTitle() {
|
||||
return this.hasLabels ?
|
||||
`${this.issue.labels[0].title} ${this.issue.labels.length - 1}+ more` : 'Label';
|
||||
},
|
||||
selectedLabels() {
|
||||
return this.hasLabels ? this.issue.labels.map(l => l.title).join(',') : '';
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
detail: {
|
||||
|
|
|
@ -616,7 +616,11 @@ GitLabDropdown = (function() {
|
|||
}
|
||||
|
||||
if (this.options.opened) {
|
||||
this.options.opened.call(this, e);
|
||||
if (this.options.preserveContext) {
|
||||
this.options.opened(e);
|
||||
} else {
|
||||
this.options.opened.call(this, e);
|
||||
}
|
||||
}
|
||||
|
||||
return this.dropdown.trigger('shown.gl.dropdown');
|
||||
|
|
|
@ -39,7 +39,7 @@ export default class LabelsSelect {
|
|||
showNo = $dropdown.data('showNo');
|
||||
showAny = $dropdown.data('showAny');
|
||||
showMenuAbove = $dropdown.data('showMenuAbove');
|
||||
defaultLabel = $dropdown.data('defaultLabel');
|
||||
defaultLabel = $dropdown.data('defaultLabel') || 'Label';
|
||||
abilityName = $dropdown.data('abilityName');
|
||||
$selectbox = $dropdown.closest('.selectbox');
|
||||
$block = $selectbox.closest('.block');
|
||||
|
@ -244,21 +244,21 @@ export default class LabelsSelect {
|
|||
var $dropdownInputField = $dropdownParent.find('.dropdown-input-field');
|
||||
var isSelected = el !== null ? el.hasClass('is-active') : false;
|
||||
|
||||
var { title } = selected;
|
||||
var title = selected ? selected.title : null;
|
||||
var selectedLabels = this.selected;
|
||||
|
||||
if ($dropdownInputField.length && $dropdownInputField.val().length) {
|
||||
$dropdownParent.find('.dropdown-input-clear').trigger('click');
|
||||
}
|
||||
|
||||
if (selected.id === 0) {
|
||||
if (selected && selected.id === 0) {
|
||||
this.selected = [];
|
||||
return 'No Label';
|
||||
}
|
||||
else if (isSelected) {
|
||||
this.selected.push(title);
|
||||
}
|
||||
else {
|
||||
else if (!isSelected && title) {
|
||||
var index = this.selected.indexOf(title);
|
||||
this.selected.splice(index, 1);
|
||||
}
|
||||
|
@ -409,6 +409,14 @@ export default class LabelsSelect {
|
|||
}
|
||||
}
|
||||
},
|
||||
opened: function(e) {
|
||||
if ($dropdown.hasClass('js-issue-board-sidebar')) {
|
||||
const previousSelection = $dropdown.attr('data-selected');
|
||||
this.selected = previousSelection ? previousSelection.split(',') : [];
|
||||
$dropdown.data('glDropdown').updateLabel();
|
||||
}
|
||||
},
|
||||
preserveContext: true,
|
||||
});
|
||||
|
||||
// Set dropdown data
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
":value" => "label.id" }
|
||||
.dropdown
|
||||
%button.dropdown-menu-toggle.js-label-select.js-multiselect.js-issue-board-sidebar{ type: "button",
|
||||
"v-bind:data-selected" => "selectedLabels",
|
||||
data: { toggle: "dropdown",
|
||||
field_name: "issue[label_names][]",
|
||||
show_no: "true",
|
||||
|
@ -28,7 +29,7 @@
|
|||
namespace_path: @namespace_path,
|
||||
project_path: @project.try(:path) } }
|
||||
%span.dropdown-toggle-text
|
||||
= _("Label")
|
||||
{{ labelDropdownTitle }}
|
||||
= icon('chevron-down')
|
||||
.dropdown-menu.dropdown-select.dropdown-menu-paging.dropdown-menu-labels.dropdown-menu-selectable
|
||||
= render partial: "shared/issuable/label_page_default"
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Board label edit dropdown shows incorrect selected labels summary
|
||||
merge_request: 20673
|
||||
author:
|
||||
type: fixed
|
Loading…
Reference in a new issue