Commit 0b00b3dac3ec31924dae821c0fccc08598161762

Authored by Dmitriy Zaporozhets
1 parent 1d773577

Add sorting to merge requests on milestone page

Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
app/assets/javascripts/milestone.js.coffee
... ... @@ -23,6 +23,18 @@ class Milestone
23 23 new Flash("Issues update failed", 'alert')
24 24 dataType: "json"
25 25  
  26 + @sortMergeRequests: (data) ->
  27 + sort_mr_url = location.href + "/sort_merge_requests"
  28 +
  29 + $.ajax
  30 + type: "PUT"
  31 + url: sort_mr_url
  32 + data: data
  33 + success: (data) ->
  34 + if data.saved != true
  35 + new Flash("MR update failed", 'alert')
  36 + dataType: "json"
  37 +
26 38 @updateMergeRequest: (li, merge_request_url, data) ->
27 39 $.ajax
28 40 type: "PUT"
... ... @@ -71,6 +83,10 @@ class Milestone
71 83 $("#merge_requests-list-unassigned, #merge_requests-list-ongoing, #merge_requests-list-closed").sortable(
72 84 connectWith: ".merge_requests-sortable-list",
73 85 dropOnEmpty: true,
  86 + update: (event, ui) ->
  87 + data = $(this).sortable("serialize")
  88 + Milestone.sortMergeRequests(data)
  89 +
74 90 receive: (event, ui) ->
75 91 new_state = $(this).data('state')
76 92 merge_request_id = ui.item.data('iid')
... ...
app/controllers/projects/milestones_controller.rb
1 1 class Projects::MilestonesController < Projects::ApplicationController
2 2 before_filter :module_enabled
3   - before_filter :milestone, only: [:edit, :update, :destroy, :show, :sort_issues]
  3 + before_filter :milestone, only: [:edit, :update, :destroy, :show, :sort_issues, :sort_merge_requests]
4 4  
5 5 # Allow read any milestone
6 6 before_filter :authorize_read_milestone!
... ... @@ -82,6 +82,16 @@ class Projects::MilestonesController &lt; Projects::ApplicationController
82 82 render json: { saved: true }
83 83 end
84 84  
  85 + def sort_merge_requests
  86 + @merge_requests = @milestone.merge_requests.where(id: params['sortable_merge_request'])
  87 + @merge_requests.each do |merge_request|
  88 + merge_request.position = params['sortable_merge_request'].index(merge_request.id.to_s) + 1
  89 + merge_request.save
  90 + end
  91 +
  92 + render json: { saved: true }
  93 + end
  94 +
85 95 protected
86 96  
87 97 def milestone
... ...
app/views/projects/milestones/_merge_request.html.haml
1   -%li{ class: 'mr-row', 'data-iid' => merge_request.iid, 'data-url' => project_merge_request_path(@project, merge_request) }
  1 +%li{ id: dom_id(merge_request, 'sortable'), class: 'mr-row', 'data-iid' => merge_request.iid, 'data-url' => project_merge_request_path(@project, merge_request) }
2 2 %span.str-truncated
3 3 = link_to [@project, merge_request] do
4 4 %span.cgray ##{merge_request.iid}
... ...
app/views/projects/milestones/_merge_requests.html.haml
1 1 .panel.panel-default
2 2 .panel-heading= title
3 3 %ul{ class: "well-list merge_requests-sortable-list", id: "merge_requests-list-#{id}", "data-state" => id }
4   - - merge_requests.each do |merge_request|
  4 + - merge_requests.sort_by(&:position).each do |merge_request|
5 5 = render 'merge_request', merge_request: merge_request
6 6 %li.light Drag and drop available
... ...
config/routes.rb
... ... @@ -281,6 +281,7 @@ Gitlab::Application.routes.draw do
281 281 resources :milestones, except: [:destroy], constraints: {id: /\d+/} do
282 282 member do
283 283 put :sort_issues
  284 + put :sort_merge_requests
284 285 end
285 286 end
286 287  
... ...
db/migrate/20140611135229_add_position_to_merge_request.rb 0 → 100644
... ... @@ -0,0 +1,5 @@
  1 +class AddPositionToMergeRequest < ActiveRecord::Migration
  2 + def change
  3 + add_column :merge_requests, :position, :integer, default: 0
  4 + end
  5 +end
... ...
db/schema.rb
... ... @@ -11,7 +11,7 @@
11 11 #
12 12 # It's strongly recommended that you check this file into your version control system.
13 13  
14   -ActiveRecord::Schema.define(version: 20140502125220) do
  14 +ActiveRecord::Schema.define(version: 20140611135229) do
15 15  
16 16 # These are extensions that must be enabled in order to support this database
17 17 enable_extension "plpgsql"
... ... @@ -121,9 +121,9 @@ ActiveRecord::Schema.define(version: 20140502125220) do
121 121 add_index "merge_request_diffs", ["merge_request_id"], name: "index_merge_request_diffs_on_merge_request_id", unique: true, using: :btree
122 122  
123 123 create_table "merge_requests", force: true do |t|
124   - t.string "target_branch", null: false
125   - t.string "source_branch", null: false
126   - t.integer "source_project_id", null: false
  124 + t.string "target_branch", null: false
  125 + t.string "source_branch", null: false
  126 + t.integer "source_project_id", null: false
127 127 t.integer "author_id"
128 128 t.integer "assignee_id"
129 129 t.string "title"
... ... @@ -132,9 +132,10 @@ ActiveRecord::Schema.define(version: 20140502125220) do
132 132 t.integer "milestone_id"
133 133 t.string "state"
134 134 t.string "merge_status"
135   - t.integer "target_project_id", null: false
  135 + t.integer "target_project_id", null: false
136 136 t.integer "iid"
137 137 t.text "description"
  138 + t.integer "position", default: 0
138 139 end
139 140  
140 141 add_index "merge_requests", ["assignee_id"], name: "index_merge_requests_on_assignee_id", using: :btree
... ...