Commit 0b00b3da authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets

Add sorting to merge requests on milestone page

Signed-off-by: default avatarDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
parent 1d773577
......@@ -23,6 +23,18 @@ class Milestone
new Flash("Issues update failed", 'alert')
dataType: "json"
@sortMergeRequests: (data) ->
sort_mr_url = location.href + "/sort_merge_requests"
$.ajax
type: "PUT"
url: sort_mr_url
data: data
success: (data) ->
if data.saved != true
new Flash("MR update failed", 'alert')
dataType: "json"
@updateMergeRequest: (li, merge_request_url, data) ->
$.ajax
type: "PUT"
......@@ -71,6 +83,10 @@ class Milestone
$("#merge_requests-list-unassigned, #merge_requests-list-ongoing, #merge_requests-list-closed").sortable(
connectWith: ".merge_requests-sortable-list",
dropOnEmpty: true,
update: (event, ui) ->
data = $(this).sortable("serialize")
Milestone.sortMergeRequests(data)
receive: (event, ui) ->
new_state = $(this).data('state')
merge_request_id = ui.item.data('iid')
......
class Projects::MilestonesController < Projects::ApplicationController
before_filter :module_enabled
before_filter :milestone, only: [:edit, :update, :destroy, :show, :sort_issues]
before_filter :milestone, only: [:edit, :update, :destroy, :show, :sort_issues, :sort_merge_requests]
# Allow read any milestone
before_filter :authorize_read_milestone!
......@@ -82,6 +82,16 @@ class Projects::MilestonesController < Projects::ApplicationController
render json: { saved: true }
end
def sort_merge_requests
@merge_requests = @milestone.merge_requests.where(id: params['sortable_merge_request'])
@merge_requests.each do |merge_request|
merge_request.position = params['sortable_merge_request'].index(merge_request.id.to_s) + 1
merge_request.save
end
render json: { saved: true }
end
protected
def milestone
......
%li{ class: 'mr-row', 'data-iid' => merge_request.iid, 'data-url' => project_merge_request_path(@project, merge_request) }
%li{ id: dom_id(merge_request, 'sortable'), class: 'mr-row', 'data-iid' => merge_request.iid, 'data-url' => project_merge_request_path(@project, merge_request) }
%span.str-truncated
= link_to [@project, merge_request] do
%span.cgray ##{merge_request.iid}
......
.panel.panel-default
.panel-heading= title
%ul{ class: "well-list merge_requests-sortable-list", id: "merge_requests-list-#{id}", "data-state" => id }
- merge_requests.each do |merge_request|
- merge_requests.sort_by(&:position).each do |merge_request|
= render 'merge_request', merge_request: merge_request
%li.light Drag and drop available
......@@ -281,6 +281,7 @@ Gitlab::Application.routes.draw do
resources :milestones, except: [:destroy], constraints: {id: /\d+/} do
member do
put :sort_issues
put :sort_merge_requests
end
end
......
class AddPositionToMergeRequest < ActiveRecord::Migration
def change
add_column :merge_requests, :position, :integer, default: 0
end
end
......@@ -11,7 +11,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20140502125220) do
ActiveRecord::Schema.define(version: 20140611135229) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
......@@ -135,6 +135,7 @@ ActiveRecord::Schema.define(version: 20140502125220) do
t.integer "target_project_id", null: false
t.integer "iid"
t.text "description"
t.integer "position", default: 0
end
add_index "merge_requests", ["assignee_id"], name: "index_merge_requests_on_assignee_id", using: :btree
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment