diff --git a/app/assets/javascripts/issuable_bulk_update_actions.js b/app/assets/javascripts/issuable_bulk_update_actions.js index f507f072253d50838f72fbe7c10ee38f490bb1ca..366a9a8a883183d750e43c8ddc9cde046b8d70c9 100644 --- a/app/assets/javascripts/issuable_bulk_update_actions.js +++ b/app/assets/javascripts/issuable_bulk_update_actions.js @@ -87,7 +87,7 @@ export default { // From issuable's initial bulk selection getOriginalCommonIds() { const labelIds = []; - this.getElement('.selected-issuable:checked').each((i, el) => { + this.getElement('.issuable-list input[type="checkbox"]:checked').each((i, el) => { labelIds.push(this.getElement(`#${this.prefixId}${el.dataset.id}`).data('labels')); }); return intersection.apply(this, labelIds); @@ -100,7 +100,7 @@ export default { let issuableLabels = []; // Collect unique label IDs for all checked issues - this.getElement('.selected-issuable:checked').each((i, el) => { + this.getElement('.issuable-list input[type="checkbox"]:checked').each((i, el) => { issuableLabels = this.getElement(`#${this.prefixId}${el.dataset.id}`).data('labels'); issuableLabels.forEach((labelId) => { // Store unique IDs diff --git a/app/assets/javascripts/issuable_bulk_update_sidebar.js b/app/assets/javascripts/issuable_bulk_update_sidebar.js index ef98db5151a66c2a279341c7c277c78c2888c98d..1f707bc955f1dec34e5c7b7dbb86ad2124ddd8d3 100644 --- a/app/assets/javascripts/issuable_bulk_update_sidebar.js +++ b/app/assets/javascripts/issuable_bulk_update_sidebar.js @@ -34,7 +34,7 @@ export default class IssuableBulkUpdateSidebar { this.$otherFilters = $('.issues-other-filters'); this.$checkAllContainer = $('.check-all-holder'); this.$issueChecks = $('.issue-check'); - this.$issuesList = $('.selected-issuable'); + this.$issuesList = $('.issuable-list input[type="checkbox"]'); this.$issuableIdsInput = $('#update_issuable_ids'); } @@ -46,16 +46,14 @@ export default class IssuableBulkUpdateSidebar { this.$bulkEditSubmitBtn.on('click', () => this.prepForSubmit()); this.$checkAllContainer.on('click', () => this.updateFormState()); - if (this.vueIssuablesListFeature) { - issueableEventHub.$on('issuables:updateBulkEdit', () => { - // Danger! Strong coupling ahead! - // The bulk update sidebar and its dropdowns look for .selected-issuable checkboxes, and get data on which issue - // is selected by inspecting the DOM. Ideally, we would pass the selected issuable IDs and their properties - // explicitly, but this component is used in too many places right now to refactor straight away. + issueableEventHub.$on('issuables:updateBulkEdit', () => { + // Danger! Strong coupling ahead! + // The bulk update sidebar and its dropdowns look for checkboxes, and get data on which issue + // is selected by inspecting the DOM. Ideally, we would pass the selected issuable IDs and their properties + // explicitly, but this component is used in too many places right now to refactor straight away. - this.updateFormState(); - }); - } + this.updateFormState(); + }); } initDropdowns() { @@ -96,7 +94,7 @@ export default class IssuableBulkUpdateSidebar { } updateFormState() { - const noCheckedIssues = !$('.selected-issuable:checked').length; + const noCheckedIssues = !$('.issuable-list input[type="checkbox"]:checked').length; this.toggleSubmitButtonDisabled(noCheckedIssues); this.updateSelectedIssuableIds(); @@ -166,7 +164,7 @@ export default class IssuableBulkUpdateSidebar { } static getCheckedIssueIds() { - const $checkedIssues = $('.selected-issuable:checked'); + const $checkedIssues = $('.issuable-list input[type="checkbox"]:checked'); if ($checkedIssues.length > 0) { return $.map($checkedIssues, (value) => $(value).data('id')); diff --git a/app/assets/javascripts/issuable_index.js b/app/assets/javascripts/issuable_index.js index 4856f9781ce2bc622aa353b226b9658a6cdd5edd..cdeee68b762e558dc8c9a0f92814c2663106f9b7 100644 --- a/app/assets/javascripts/issuable_index.js +++ b/app/assets/javascripts/issuable_index.js @@ -1,7 +1,7 @@ import issuableInitBulkUpdateSidebar from './issuable_init_bulk_update_sidebar'; export default class IssuableIndex { - constructor(pagePrefix) { + constructor(pagePrefix = 'issuable_') { issuableInitBulkUpdateSidebar.init(pagePrefix); } } diff --git a/app/assets/javascripts/issuable_list/components/issuable_item.vue b/app/assets/javascripts/issuable_list/components/issuable_item.vue index 92c527c79ffc3d9a08fec01abd0c44adf964f3e6..5d497369f5a5f5af29fb953a05e81d26667f30bd 100644 --- a/app/assets/javascripts/issuable_list/components/issuable_item.vue +++ b/app/assets/javascripts/issuable_list/components/issuable_item.vue @@ -65,6 +65,9 @@ export default { labels() { return this.issuable.labels?.nodes || this.issuable.labels || []; }, + labelIdsString() { + return JSON.stringify(this.labels.map((label) => label.id)); + }, assignees() { return this.issuable.assignees || []; }, @@ -149,12 +152,13 @@ export default {