From 16ba5eb4d89f903d89fbad33086013a2f69717dd Mon Sep 17 00:00:00 2001
From: Jacob Schatz <jacobschatz@Jacobs-MBP.fios-router.home>
Date: Fri, 11 Mar 2016 00:28:10 -0500
Subject: [PATCH] Updates sidebar milestone to use new dropdowns

---
 app/assets/javascripts/api.js.coffee          | 21 +++++++++++++++++++
 app/assets/javascripts/gl_dropdown.js.coffee  |  3 ++-
 .../javascripts/milestone_select.js.coffee    | 21 +++++++++++--------
 app/controllers/projects/issues_controller.rb |  1 +
 .../projects/merge_requests/_show.html.haml   |  2 +-
 app/views/shared/issuable/_filter.html.haml   |  4 +++-
 app/views/shared/issuable/_sidebar.html.haml  |  6 +++---
 config/environments/development.rb            |  2 +-
 8 files changed, 44 insertions(+), 16 deletions(-)

diff --git a/app/assets/javascripts/api.js.coffee b/app/assets/javascripts/api.js.coffee
index f3ed9a66715..b259c6556ae 100644
--- a/app/assets/javascripts/api.js.coffee
+++ b/app/assets/javascripts/api.js.coffee
@@ -5,6 +5,27 @@
   group_projects_path: "/api/:version/groups/:id/projects.json"
   projects_path: "/api/:version/projects.json"
   labels_path: "/api/:version/projects/:id/labels"
+  issues_paths:
+    update : "/api/:version/projects/:id/issues/:issue_id"
+  merge_request_path: "/api/:version/issues/:id.json"
+
+  issues: 
+    update: (project_id, issue_id, data, callback) ->
+      url = Api.buildUrl(Api.issues_paths.update)
+      url = url
+              .replace(":id", project_id)
+              .replace(":issue_id", issue_id)
+      if not data?
+        data = {}
+      data.private_token = gon.api_token
+      $.ajax(
+        url: url
+        type: "PUT"
+        data: data
+        dataType: "json"
+      ).done (issue) ->
+        if callback?
+          callback(issue)
 
   group: (group_id, callback) ->
     url = Api.buildUrl(Api.group_path)
diff --git a/app/assets/javascripts/gl_dropdown.js.coffee b/app/assets/javascripts/gl_dropdown.js.coffee
index 4b78bcde774..6cd39f5f0b9 100644
--- a/app/assets/javascripts/gl_dropdown.js.coffee
+++ b/app/assets/javascripts/gl_dropdown.js.coffee
@@ -143,10 +143,11 @@ class GitLabDropdown
         selector = ".dropdown-page-one .dropdown-content a"
 
       @dropdown.on "click", selector, (e) ->
+        e.preventDefault()
         self.rowClicked $(@)
 
         if self.options.clicked
-          self.options.clicked()
+          self.options.clicked.call(@,e)
 
   toggleLoading: ->
     $('.dropdown-menu', @dropdown).toggleClass LOADING_CLASS
diff --git a/app/assets/javascripts/milestone_select.js.coffee b/app/assets/javascripts/milestone_select.js.coffee
index e17a1adb648..18647e25c55 100644
--- a/app/assets/javascripts/milestone_select.js.coffee
+++ b/app/assets/javascripts/milestone_select.js.coffee
@@ -1,5 +1,6 @@
 class @MilestoneSelect
-  constructor: ->
+  constructor: (@opts) ->
+    opts = @opts
     $('.js-milestone-select').each (i, dropdown) ->
       $dropdown = $(dropdown)
       projectId = $dropdown.data('project-id')
@@ -9,6 +10,7 @@ class @MilestoneSelect
       showAny = $dropdown.data('show-any')
       useId = $dropdown.data('use-id')
       defaultLabel = $dropdown.data('default-label')
+      issuableId = $dropdown.data('issuable-id')
 
       $dropdown.glDropdown(
         data: (term, callback) ->
@@ -53,13 +55,14 @@ class @MilestoneSelect
             milestone.id
         isSelected: (milestone) ->
           milestone.title is selectedMilestone
-        clicked: ->
-          page = $('body').data 'page'
-          isIssueIndex = page is 'projects:issues:index'
-          isMRIndex = page is page is 'projects:merge_requests:index'
 
-          if $dropdown.hasClass('js-filter-submit') and (isIssueIndex or isMRIndex)
-            Issues.filterResults $dropdown.closest('form')
-          else if $dropdown.hasClass 'js-filter-submit'
-            $dropdown.closest('form').submit()
+        clicked: (e) ->
+          if $(dropdown).hasClass "js-filter-submit" && opts.submitForm
+            $(dropdown).parents('form').submit()
+          else
+            milestoneVal = $(@)
+              .closest('.selectbox')
+              .find('input[type="hidden"]')
+              .val()
+              Api.issues.update(projectId, issuableId, milestone_id: milestoneVal, (data) => console.log 'data', data)
       )
diff --git a/app/controllers/projects/issues_controller.rb b/app/controllers/projects/issues_controller.rb
index 877b39c9b1b..b3b098c5153 100644
--- a/app/controllers/projects/issues_controller.rb
+++ b/app/controllers/projects/issues_controller.rb
@@ -58,6 +58,7 @@ class Projects::IssuesController < Projects::ApplicationController
   end
 
   def edit
+    puts params
     respond_with(@issue)
   end
 
diff --git a/app/views/projects/merge_requests/_show.html.haml b/app/views/projects/merge_requests/_show.html.haml
index ee5b9fd95a8..1dd8f721f7e 100644
--- a/app/views/projects/merge_requests/_show.html.haml
+++ b/app/views/projects/merge_requests/_show.html.haml
@@ -10,7 +10,7 @@
 .merge-request{'data-url' => merge_request_path(@merge_request)}
   = render "projects/merge_requests/show/mr_title"
 
-  .merge-request-details.issuable-details
+  .merge-request-details.issuable-details{data: {id: @merge_request.project.id}}
     = render "projects/merge_requests/show/mr_box"
     .append-bottom-default.mr-source-target.prepend-top-default
       - if @merge_request.open?
diff --git a/app/views/shared/issuable/_filter.html.haml b/app/views/shared/issuable/_filter.html.haml
index f91ff0e3694..6eb5e5f867e 100644
--- a/app/views/shared/issuable/_filter.html.haml
+++ b/app/views/shared/issuable/_filter.html.haml
@@ -55,7 +55,9 @@
 :javascript
   new UsersSelect();
   new LabelsSelect();
-  new MilestoneSelect();
+  new MilestoneSelect({
+    submitForm: true
+  });
   new IssueStatusSelect();
   $('form.filter-form').on('submit', function (event) {
     event.preventDefault();
diff --git a/app/views/shared/issuable/_sidebar.html.haml b/app/views/shared/issuable/_sidebar.html.haml
index 0e20e86356d..4147eb613aa 100644
--- a/app/views/shared/issuable/_sidebar.html.haml
+++ b/app/views/shared/issuable/_sidebar.html.haml
@@ -62,10 +62,9 @@
               = issuable.milestone.title
           - else
             .light None
+
         .selectbox.hide-collapsed
-          = f.select(:milestone_id, milestone_options(issuable), { include_blank: true }, { class: 'select2 select2-compact js-select2 js-milestone', data: { placeholder: 'Select milestone' }})
-          = hidden_field_tag :issuable_context
-          = f.submit class: 'btn hide'
+          = dropdown_tag("Milestone", options: { title: "Assign milestone", toggle_class: 'js-milestone-select', filter: true, dropdown_class: "dropdown-menu-selectable", placeholder: "Search milestones", data: { show_no: true, field_name: "milestone_id", project_id: @project.id, issuable_id: issuable.id, milestones: namespace_project_milestones_path(@project.namespace, @project, :js), use_id: true }})
 
       - if issuable.project.labels.any?
         .block.labels
@@ -117,4 +116,5 @@
 
     :javascript
       new Subscription('.subscription');
+      new MilestoneSelect();
       new IssuableContext();
diff --git a/config/environments/development.rb b/config/environments/development.rb
index 689694a3480..78fc91bc3cc 100644
--- a/config/environments/development.rb
+++ b/config/environments/development.rb
@@ -36,7 +36,7 @@ Rails.application.configure do
   # For having correct urls in mails
   config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
   # Open sent mails in browser
-  config.action_mailer.delivery_method = :letter_opener
+  config.action_mailer.delivery_method = :test
   # Don't make a mess when bootstrapping a development environment
   config.action_mailer.perform_deliveries = (ENV['BOOTSTRAP'] != '1')
 
-- 
2.30.9