From 82ef4f1ef7f20720cf685b0adf738b516fa9fdab Mon Sep 17 00:00:00 2001
From: Phil Hughes <me@iamphill.com>
Date: Sat, 16 Jul 2016 08:46:12 +0100
Subject: [PATCH] Fix issue with label select not correctly showing selected
 values

---
 app/assets/javascripts/gl_dropdown.js.coffee  |  8 +++----
 .../javascripts/labels_select.js.coffee       | 23 +++++++++----------
 2 files changed, 15 insertions(+), 16 deletions(-)

diff --git a/app/assets/javascripts/gl_dropdown.js.coffee b/app/assets/javascripts/gl_dropdown.js.coffee
index 951530e03a5..3bc9ac450e3 100644
--- a/app/assets/javascripts/gl_dropdown.js.coffee
+++ b/app/assets/javascripts/gl_dropdown.js.coffee
@@ -486,7 +486,7 @@ class GitLabDropdown
 
       # Toggle the dropdown label
       if @options.toggleLabel
-        @updateLabel(selectedObject, el, @)
+        @updateLabel(selectedObject, el, @, false)
       else
         selectedObject
     else if el.hasClass(INDETERMINATE_CLASS)
@@ -515,7 +515,7 @@ class GitLabDropdown
 
       # Toggle the dropdown label
       if @options.toggleLabel
-        @updateLabel(selectedObject, el, @)
+        @updateLabel(selectedObject, el, @, true)
       if value?
         if !field.length and fieldName
           @addInput(fieldName, value)
@@ -616,8 +616,8 @@ class GitLabDropdown
       # Scroll the dropdown content up
       $dropdownContent.scrollTop(listItemTop - dropdownContentTop)
 
-  updateLabel: (selected = null, el = null, instance = null) =>
-    $(@el).find(".dropdown-toggle-text").text @options.toggleLabel(selected, el, instance)
+  updateLabel: (selected = null, el = null, instance = null, added = false) =>
+    $(@el).find(".dropdown-toggle-text").text @options.toggleLabel(selected, el, instance, added)
 
 $.fn.glDropdown = (opts) ->
   return @.each ->
diff --git a/app/assets/javascripts/labels_select.js.coffee b/app/assets/javascripts/labels_select.js.coffee
index 1a802b81452..ce030a8c07b 100644
--- a/app/assets/javascripts/labels_select.js.coffee
+++ b/app/assets/javascripts/labels_select.js.coffee
@@ -24,6 +24,7 @@ class @LabelsSelect
       $newLabelError = $('.js-label-error')
       $colorPreview = $('.js-dropdown-label-color-preview')
       $newLabelCreateButton = $('.js-new-label-btn')
+      selectedLabels = []
 
       $newLabelError.hide()
       $loading = $block.find('.block-loading').fadeOut()
@@ -272,19 +273,17 @@ class @LabelsSelect
           fields: ['title']
         selectable: true
         filterable: true
-        toggleLabel: (selected, el) ->
-          selected_labels = $('.js-label-select').siblings('.dropdown-menu-labels').find('.is-active')
+        toggleLabel: (selected, el, e, added) ->
+          if added
+            selectedLabels.push selected.title
+          else
+            index = selectedLabels.indexOf selected.title
+            selectedLabels.splice index, 1
 
-          if selected and selected.title?
-            if selected_labels.length > 1
-              "#{selected.title} +#{selected_labels.length - 1} more"
-            else
-              selected.title
-          else if not selected and selected_labels.length isnt 0
-            if selected_labels.length > 1
-              "#{$(selected_labels[0]).text()} +#{selected_labels.length - 1} more"
-            else if selected_labels.length is 1
-              $(selected_labels).text()
+          if selectedLabels.length > 1
+            "#{selectedLabels[0]} +#{selectedLabels.length - 1} more"
+          else if selectedLabels.length is 1
+            selectedLabels[0]
           else
             defaultLabel
         fieldName: $dropdown.data('field-name')
-- 
GitLab