Commit 23734a715e622f3f028bd565df3be130d3aba737

Authored by Dmitriy Zaporozhets
1 parent 899afd00

Dashboard filters for events

app/assets/stylesheets/common.scss
@@ -653,3 +653,16 @@ pre { @@ -653,3 +653,16 @@ pre {
653 margin-right:5px; 653 margin-right:5px;
654 } 654 }
655 } 655 }
  656 +
  657 +.dashboard-search-filter {
  658 + padding:5px;
  659 +
  660 + .search-text-input {
  661 + float:left;
  662 + @extend .span2;
  663 + }
  664 + .btn {
  665 + margin-left: 5px;
  666 + float:left;
  667 + }
  668 +}
app/controllers/dashboard_controller.rb
1 class DashboardController < ApplicationController 1 class DashboardController < ApplicationController
2 respond_to :html 2 respond_to :html
3 3
  4 + before_filter :projects
4 before_filter :event_filter, only: :index 5 before_filter :event_filter, only: :index
5 6
6 def index 7 def index
7 @groups = Group.where(id: current_user.projects.pluck(:namespace_id)) 8 @groups = Group.where(id: current_user.projects.pluck(:namespace_id))
8 - @projects = current_user.projects_sorted_by_activity  
9 @projects = @projects.page(params[:page]).per(30) 9 @projects = @projects.page(params[:page]).per(30)
10 -  
11 @events = Event.in_projects(current_user.project_ids) 10 @events = Event.in_projects(current_user.project_ids)
12 @events = @event_filter.apply_filter(@events) 11 @events = @event_filter.apply_filter(@events)
13 @events = @events.limit(20).offset(params[:offset] || 0) 12 @events = @events.limit(20).offset(params[:offset] || 0)
@@ -23,15 +22,16 @@ class DashboardController &lt; ApplicationController @@ -23,15 +22,16 @@ class DashboardController &lt; ApplicationController
23 22
24 # Get authored or assigned open merge requests 23 # Get authored or assigned open merge requests
25 def merge_requests 24 def merge_requests
26 - @projects = current_user.projects.all  
27 - @merge_requests = current_user.cared_merge_requests.recent.page(params[:page]).per(20) 25 + @merge_requests = current_user.cared_merge_requests
  26 + @merge_requests = dashboard_filter(@merge_requests)
  27 + @merge_requests = @merge_requests.recent.page(params[:page]).per(20)
28 end 28 end
29 29
30 # Get only assigned issues 30 # Get only assigned issues
31 def issues 31 def issues
32 - @projects = current_user.projects.all  
33 - @user = current_user  
34 - @issues = current_user.assigned_issues.opened.recent.page(params[:page]).per(20) 32 + @issues = current_user.assigned_issues
  33 + @issues = dashboard_filter(@issues)
  34 + @issues = @issues.recent.page(params[:page]).per(20)
35 @issues = @issues.includes(:author, :project) 35 @issues = @issues.includes(:author, :project)
36 36
37 respond_to do |format| 37 respond_to do |format|
@@ -40,7 +40,32 @@ class DashboardController &lt; ApplicationController @@ -40,7 +40,32 @@ class DashboardController &lt; ApplicationController
40 end 40 end
41 end 41 end
42 42
  43 + protected
  44 +
  45 + def projects
  46 + @projects = current_user.projects_sorted_by_activity
  47 + end
  48 +
43 def event_filter 49 def event_filter
44 @event_filter ||= EventFilter.new(params[:event_filter]) 50 @event_filter ||= EventFilter.new(params[:event_filter])
45 end 51 end
  52 +
  53 + def dashboard_filter items
  54 + if params[:project_id]
  55 + items = items.where(project_id: params[:project_id])
  56 + end
  57 +
  58 + if params[:search].present?
  59 + items = items.search(params[:search])
  60 + end
  61 +
  62 + case params[:status]
  63 + when 'closed'
  64 + items.closed
  65 + when 'all'
  66 + items
  67 + else
  68 + items.opened
  69 + end
  70 + end
46 end 71 end
app/helpers/dashboard_helper.rb 0 → 100644
@@ -0,0 +1,10 @@ @@ -0,0 +1,10 @@
  1 +module DashboardHelper
  2 + def dashboard_filter_path(entity, options={})
  3 + case entity
  4 + when 'issue' then
  5 + dashboard_issues_path(options)
  6 + when 'merge_request'
  7 + dashboard_merge_requests_path(options)
  8 + end
  9 + end
  10 +end
app/models/project.rb
@@ -269,4 +269,13 @@ class Project &lt; ActiveRecord::Base @@ -269,4 +269,13 @@ class Project &lt; ActiveRecord::Base
269 end 269 end
270 end 270 end
271 end 271 end
  272 +
  273 + def items_for entity
  274 + case entity
  275 + when 'issue' then
  276 + issues
  277 + when 'merge_request' then
  278 + merge_requests
  279 + end
  280 + end
272 end 281 end
app/views/dashboard/_filter.html.haml 0 → 100644
@@ -0,0 +1,32 @@ @@ -0,0 +1,32 @@
  1 += form_tag dashboard_filter_path(entity), method: 'get' do
  2 + %fieldset.dashboard-search-filter
  3 + = search_field_tag "search", nil, { placeholder: 'Search', class: 'search-text-input' }
  4 + = button_tag type: 'submit', class: 'btn' do
  5 + %i.icon-search
  6 +
  7 + %fieldset
  8 + %legend Status:
  9 + %ul.nav.nav-pills.nav-stacked
  10 + %li{class: ("active" if !params[:status])}
  11 + = link_to dashboard_filter_path(entity) do
  12 + Open
  13 + %li{class: ("active" if params[:status] == 'closed')}
  14 + = link_to dashboard_filter_path(entity, status: 'closed') do
  15 + Closed
  16 + %li{class: ("active" if params[:status] == 'all')}
  17 + = link_to dashboard_filter_path(entity, status: 'all') do
  18 + All
  19 +
  20 + %fieldset
  21 + %legend Projects:
  22 + %ul.nav.nav-pills.nav-stacked
  23 + - @projects.each do |project|
  24 + %li{class: ("active" if params[:project_id] == project.id.to_s)}
  25 + = link_to dashboard_filter_path(entity, project_id: project.id) do
  26 + = project.name_with_namespace
  27 + %small.right= project.items_for(entity).where(assignee_id: current_user.id).count
  28 +
  29 + %fieldset
  30 + %hr
  31 + = link_to "Reset", dashboard_filter_path(entity), class: 'btn right'
  32 +
app/views/dashboard/issues.html.haml
@@ -3,17 +3,21 @@ @@ -3,17 +3,21 @@
3 %small (assigned to you) 3 %small (assigned to you)
4 %small.right #{@issues.total_count} issues 4 %small.right #{@issues.total_count} issues
5 5
6 -%br  
7 -.clearfix  
8 -- if @issues.any?  
9 - - @issues.group_by(&:project).each do |group|  
10 - %div.ui-box  
11 - - @project = group[0]  
12 - %h5= @project.name  
13 - %ul.unstyled.issues_table  
14 - - group[1].each do |issue|  
15 - = render(partial: 'issues/show', locals: {issue: issue})  
16 - %hr  
17 - = paginate @issues, theme: "gitlab"  
18 -- else  
19 - %h3.nothing_here_message Nothing to show here 6 +%hr
  7 +
  8 +.row
  9 + .span3
  10 + = render 'filter', entity: 'issue'
  11 + .span9
  12 + - if @issues.any?
  13 + - @issues.group_by(&:project).each do |group|
  14 + %div.ui-box
  15 + - @project = group[0]
  16 + %h5= @project.name
  17 + %ul.unstyled.issues_table
  18 + - group[1].each do |issue|
  19 + = render(partial: 'issues/show', locals: {issue: issue})
  20 + %hr
  21 + = paginate @issues, theme: "gitlab"
  22 + - else
  23 + %p.nothing_here_message Nothing to show here
app/views/dashboard/merge_requests.html.haml
@@ -3,16 +3,20 @@ @@ -3,16 +3,20 @@
3 %small (authored by or assigned to you) 3 %small (authored by or assigned to you)
4 %small.right #{@merge_requests.total_count} merge requests 4 %small.right #{@merge_requests.total_count} merge requests
5 5
6 -%br  
7 -- if @merge_requests.any?  
8 - - @merge_requests.group_by(&:project).each do |group|  
9 - %ul.unstyled.ui-box  
10 - - @project = group[0]  
11 - %h5= @project.name  
12 - - group[1].each do |merge_request|  
13 - = render(partial: 'merge_requests/merge_request', locals: {merge_request: merge_request})  
14 - %hr  
15 - = paginate @merge_requests, theme: "gitlab" 6 +%hr
  7 +.row
  8 + .span3
  9 + = render 'filter', entity: 'merge_request'
  10 + .span9
  11 + - if @merge_requests.any?
  12 + - @merge_requests.group_by(&:project).each do |group|
  13 + %ul.unstyled.ui-box
  14 + - @project = group[0]
  15 + %h5= @project.name
  16 + - group[1].each do |merge_request|
  17 + = render(partial: 'merge_requests/merge_request', locals: {merge_request: merge_request})
  18 + %hr
  19 + = paginate @merge_requests, theme: "gitlab"
16 20
17 -- else  
18 - %h3.nothing_here_message Nothing to show here 21 + - else
  22 + %h3.nothing_here_message Nothing to show here