Commit d1f3643cbcf35034be71842733d8fe0937474139
Exists in
spb-stable
and in
2 other branches
Merge branch 'sort-milestone-merge-requests' into 'master'
Sort milestone merge requests Part of #1207
Showing
7 changed files
with
41 additions
and
8 deletions
Show diff stats
app/assets/javascripts/milestone.js.coffee
| @@ -23,6 +23,18 @@ class Milestone | @@ -23,6 +23,18 @@ class Milestone | ||
| 23 | new Flash("Issues update failed", 'alert') | 23 | new Flash("Issues update failed", 'alert') |
| 24 | dataType: "json" | 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 | @updateMergeRequest: (li, merge_request_url, data) -> | 38 | @updateMergeRequest: (li, merge_request_url, data) -> |
| 27 | $.ajax | 39 | $.ajax |
| 28 | type: "PUT" | 40 | type: "PUT" |
| @@ -71,6 +83,10 @@ class Milestone | @@ -71,6 +83,10 @@ class Milestone | ||
| 71 | $("#merge_requests-list-unassigned, #merge_requests-list-ongoing, #merge_requests-list-closed").sortable( | 83 | $("#merge_requests-list-unassigned, #merge_requests-list-ongoing, #merge_requests-list-closed").sortable( |
| 72 | connectWith: ".merge_requests-sortable-list", | 84 | connectWith: ".merge_requests-sortable-list", |
| 73 | dropOnEmpty: true, | 85 | dropOnEmpty: true, |
| 86 | + update: (event, ui) -> | ||
| 87 | + data = $(this).sortable("serialize") | ||
| 88 | + Milestone.sortMergeRequests(data) | ||
| 89 | + | ||
| 74 | receive: (event, ui) -> | 90 | receive: (event, ui) -> |
| 75 | new_state = $(this).data('state') | 91 | new_state = $(this).data('state') |
| 76 | merge_request_id = ui.item.data('iid') | 92 | merge_request_id = ui.item.data('iid') |
app/controllers/projects/milestones_controller.rb
| 1 | class Projects::MilestonesController < Projects::ApplicationController | 1 | class Projects::MilestonesController < Projects::ApplicationController |
| 2 | before_filter :module_enabled | 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 | # Allow read any milestone | 5 | # Allow read any milestone |
| 6 | before_filter :authorize_read_milestone! | 6 | before_filter :authorize_read_milestone! |
| @@ -82,6 +82,16 @@ class Projects::MilestonesController < Projects::ApplicationController | @@ -82,6 +82,16 @@ class Projects::MilestonesController < Projects::ApplicationController | ||
| 82 | render json: { saved: true } | 82 | render json: { saved: true } |
| 83 | end | 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 | protected | 95 | protected |
| 86 | 96 | ||
| 87 | def milestone | 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 | %span.str-truncated | 2 | %span.str-truncated |
| 3 | = link_to [@project, merge_request] do | 3 | = link_to [@project, merge_request] do |
| 4 | %span.cgray ##{merge_request.iid} | 4 | %span.cgray ##{merge_request.iid} |
app/views/projects/milestones/_merge_requests.html.haml
| 1 | .panel.panel-default | 1 | .panel.panel-default |
| 2 | .panel-heading= title | 2 | .panel-heading= title |
| 3 | %ul{ class: "well-list merge_requests-sortable-list", id: "merge_requests-list-#{id}", "data-state" => id } | 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 | = render 'merge_request', merge_request: merge_request | 5 | = render 'merge_request', merge_request: merge_request |
| 6 | %li.light Drag and drop available | 6 | %li.light Drag and drop available |
config/routes.rb
| @@ -281,6 +281,7 @@ Gitlab::Application.routes.draw do | @@ -281,6 +281,7 @@ Gitlab::Application.routes.draw do | ||
| 281 | resources :milestones, except: [:destroy], constraints: {id: /\d+/} do | 281 | resources :milestones, except: [:destroy], constraints: {id: /\d+/} do |
| 282 | member do | 282 | member do |
| 283 | put :sort_issues | 283 | put :sort_issues |
| 284 | + put :sort_merge_requests | ||
| 284 | end | 285 | end |
| 285 | end | 286 | end |
| 286 | 287 |
db/migrate/20140611135229_add_position_to_merge_request.rb
0 → 100644
db/schema.rb
| @@ -11,7 +11,7 @@ | @@ -11,7 +11,7 @@ | ||
| 11 | # | 11 | # |
| 12 | # It's strongly recommended that you check this file into your version control system. | 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 | # These are extensions that must be enabled in order to support this database | 16 | # These are extensions that must be enabled in order to support this database |
| 17 | enable_extension "plpgsql" | 17 | enable_extension "plpgsql" |
| @@ -121,9 +121,9 @@ ActiveRecord::Schema.define(version: 20140502125220) do | @@ -121,9 +121,9 @@ ActiveRecord::Schema.define(version: 20140502125220) do | ||
| 121 | add_index "merge_request_diffs", ["merge_request_id"], name: "index_merge_request_diffs_on_merge_request_id", unique: true, using: :btree | 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 | create_table "merge_requests", force: true do |t| | 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 | t.integer "author_id" | 127 | t.integer "author_id" |
| 128 | t.integer "assignee_id" | 128 | t.integer "assignee_id" |
| 129 | t.string "title" | 129 | t.string "title" |
| @@ -132,9 +132,10 @@ ActiveRecord::Schema.define(version: 20140502125220) do | @@ -132,9 +132,10 @@ ActiveRecord::Schema.define(version: 20140502125220) do | ||
| 132 | t.integer "milestone_id" | 132 | t.integer "milestone_id" |
| 133 | t.string "state" | 133 | t.string "state" |
| 134 | t.string "merge_status" | 134 | t.string "merge_status" |
| 135 | - t.integer "target_project_id", null: false | 135 | + t.integer "target_project_id", null: false |
| 136 | t.integer "iid" | 136 | t.integer "iid" |
| 137 | t.text "description" | 137 | t.text "description" |
| 138 | + t.integer "position", default: 0 | ||
| 138 | end | 139 | end |
| 139 | 140 | ||
| 140 | add_index "merge_requests", ["assignee_id"], name: "index_merge_requests_on_assignee_id", using: :btree | 141 | add_index "merge_requests", ["assignee_id"], name: "index_merge_requests_on_assignee_id", using: :btree |