diff options
author | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2012-11-21 08:24:05 +0300 |
---|---|---|
committer | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2012-11-21 08:24:05 +0300 |
commit | 23734a715e622f3f028bd565df3be130d3aba737 (patch) | |
tree | 2e3ad753e3ddafbde6da4e8bcf393ad8d5bf9c0e | |
parent | 899afd0067065be6b15d7b737100b82757421828 (diff) | |
download | gitlab-ce-23734a715e622f3f028bd565df3be130d3aba737.tar.gz |
Dashboard filters for events
-rw-r--r-- | app/assets/stylesheets/common.scss | 13 | ||||
-rw-r--r-- | app/controllers/dashboard_controller.rb | 39 | ||||
-rw-r--r-- | app/helpers/dashboard_helper.rb | 10 | ||||
-rw-r--r-- | app/models/project.rb | 9 | ||||
-rw-r--r-- | app/views/dashboard/_filter.html.haml | 32 | ||||
-rw-r--r-- | app/views/dashboard/issues.html.haml | 32 | ||||
-rw-r--r-- | app/views/dashboard/merge_requests.html.haml | 28 |
7 files changed, 130 insertions, 33 deletions
diff --git a/app/assets/stylesheets/common.scss b/app/assets/stylesheets/common.scss index e45cb876e7d..026751f4ed4 100644 --- a/app/assets/stylesheets/common.scss +++ b/app/assets/stylesheets/common.scss @@ -653,3 +653,16 @@ pre { margin-right:5px; } } + +.dashboard-search-filter { + padding:5px; + + .search-text-input { + float:left; + @extend .span2; + } + .btn { + margin-left: 5px; + float:left; + } +} diff --git a/app/controllers/dashboard_controller.rb b/app/controllers/dashboard_controller.rb index ad242d30f7f..4f874a9654a 100644 --- a/app/controllers/dashboard_controller.rb +++ b/app/controllers/dashboard_controller.rb @@ -1,13 +1,12 @@ class DashboardController < ApplicationController respond_to :html + before_filter :projects before_filter :event_filter, only: :index def index @groups = Group.where(id: current_user.projects.pluck(:namespace_id)) - @projects = current_user.projects_sorted_by_activity @projects = @projects.page(params[:page]).per(30) - @events = Event.in_projects(current_user.project_ids) @events = @event_filter.apply_filter(@events) @events = @events.limit(20).offset(params[:offset] || 0) @@ -23,15 +22,16 @@ class DashboardController < ApplicationController # Get authored or assigned open merge requests def merge_requests - @projects = current_user.projects.all - @merge_requests = current_user.cared_merge_requests.recent.page(params[:page]).per(20) + @merge_requests = current_user.cared_merge_requests + @merge_requests = dashboard_filter(@merge_requests) + @merge_requests = @merge_requests.recent.page(params[:page]).per(20) end # Get only assigned issues def issues - @projects = current_user.projects.all - @user = current_user - @issues = current_user.assigned_issues.opened.recent.page(params[:page]).per(20) + @issues = current_user.assigned_issues + @issues = dashboard_filter(@issues) + @issues = @issues.recent.page(params[:page]).per(20) @issues = @issues.includes(:author, :project) respond_to do |format| @@ -40,7 +40,32 @@ class DashboardController < ApplicationController end end + protected + + def projects + @projects = current_user.projects_sorted_by_activity + end + def event_filter @event_filter ||= EventFilter.new(params[:event_filter]) end + + def dashboard_filter items + if params[:project_id] + items = items.where(project_id: params[:project_id]) + end + + if params[:search].present? + items = items.search(params[:search]) + end + + case params[:status] + when 'closed' + items.closed + when 'all' + items + else + items.opened + end + end end diff --git a/app/helpers/dashboard_helper.rb b/app/helpers/dashboard_helper.rb new file mode 100644 index 00000000000..b73c1c1e1c2 --- /dev/null +++ b/app/helpers/dashboard_helper.rb @@ -0,0 +1,10 @@ +module DashboardHelper + def dashboard_filter_path(entity, options={}) + case entity + when 'issue' then + dashboard_issues_path(options) + when 'merge_request' + dashboard_merge_requests_path(options) + end + end +end diff --git a/app/models/project.rb b/app/models/project.rb index 0da1c93dcd4..4874dd14d8e 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -269,4 +269,13 @@ class Project < ActiveRecord::Base end end end + + def items_for entity + case entity + when 'issue' then + issues + when 'merge_request' then + merge_requests + end + end end diff --git a/app/views/dashboard/_filter.html.haml b/app/views/dashboard/_filter.html.haml new file mode 100644 index 00000000000..98961b3f373 --- /dev/null +++ b/app/views/dashboard/_filter.html.haml @@ -0,0 +1,32 @@ += form_tag dashboard_filter_path(entity), method: 'get' do + %fieldset.dashboard-search-filter + = search_field_tag "search", nil, { placeholder: 'Search', class: 'search-text-input' } + = button_tag type: 'submit', class: 'btn' do + %i.icon-search + + %fieldset + %legend Status: + %ul.nav.nav-pills.nav-stacked + %li{class: ("active" if !params[:status])} + = link_to dashboard_filter_path(entity) do + Open + %li{class: ("active" if params[:status] == 'closed')} + = link_to dashboard_filter_path(entity, status: 'closed') do + Closed + %li{class: ("active" if params[:status] == 'all')} + = link_to dashboard_filter_path(entity, status: 'all') do + All + + %fieldset + %legend Projects: + %ul.nav.nav-pills.nav-stacked + - @projects.each do |project| + %li{class: ("active" if params[:project_id] == project.id.to_s)} + = link_to dashboard_filter_path(entity, project_id: project.id) do + = project.name_with_namespace + %small.right= project.items_for(entity).where(assignee_id: current_user.id).count + + %fieldset + %hr + = link_to "Reset", dashboard_filter_path(entity), class: 'btn right' + diff --git a/app/views/dashboard/issues.html.haml b/app/views/dashboard/issues.html.haml index cc488d57e9e..e038582078d 100644 --- a/app/views/dashboard/issues.html.haml +++ b/app/views/dashboard/issues.html.haml @@ -3,17 +3,21 @@ %small (assigned to you) %small.right #{@issues.total_count} issues -%br -.clearfix -- if @issues.any? - - @issues.group_by(&:project).each do |group| - %div.ui-box - - @project = group[0] - %h5= @project.name - %ul.unstyled.issues_table - - group[1].each do |issue| - = render(partial: 'issues/show', locals: {issue: issue}) - %hr - = paginate @issues, theme: "gitlab" -- else - %h3.nothing_here_message Nothing to show here +%hr + +.row + .span3 + = render 'filter', entity: 'issue' + .span9 + - if @issues.any? + - @issues.group_by(&:project).each do |group| + %div.ui-box + - @project = group[0] + %h5= @project.name + %ul.unstyled.issues_table + - group[1].each do |issue| + = render(partial: 'issues/show', locals: {issue: issue}) + %hr + = paginate @issues, theme: "gitlab" + - else + %p.nothing_here_message Nothing to show here diff --git a/app/views/dashboard/merge_requests.html.haml b/app/views/dashboard/merge_requests.html.haml index 23a7e7222d7..8454cfdc120 100644 --- a/app/views/dashboard/merge_requests.html.haml +++ b/app/views/dashboard/merge_requests.html.haml @@ -3,16 +3,20 @@ %small (authored by or assigned to you) %small.right #{@merge_requests.total_count} merge requests -%br -- if @merge_requests.any? - - @merge_requests.group_by(&:project).each do |group| - %ul.unstyled.ui-box - - @project = group[0] - %h5= @project.name - - group[1].each do |merge_request| - = render(partial: 'merge_requests/merge_request', locals: {merge_request: merge_request}) - %hr - = paginate @merge_requests, theme: "gitlab" +%hr +.row + .span3 + = render 'filter', entity: 'merge_request' + .span9 + - if @merge_requests.any? + - @merge_requests.group_by(&:project).each do |group| + %ul.unstyled.ui-box + - @project = group[0] + %h5= @project.name + - group[1].each do |merge_request| + = render(partial: 'merge_requests/merge_request', locals: {merge_request: merge_request}) + %hr + = paginate @merge_requests, theme: "gitlab" -- else - %h3.nothing_here_message Nothing to show here + - else + %h3.nothing_here_message Nothing to show here |