OSDN Git Service

Dashboard filters for events
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Wed, 21 Nov 2012 05:24:05 +0000 (08:24 +0300)
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Wed, 21 Nov 2012 05:24:05 +0000 (08:24 +0300)
app/assets/stylesheets/common.scss
app/controllers/dashboard_controller.rb
app/helpers/dashboard_helper.rb [new file with mode: 0644]
app/models/project.rb
app/views/dashboard/_filter.html.haml [new file with mode: 0644]
app/views/dashboard/issues.html.haml
app/views/dashboard/merge_requests.html.haml

index e45cb87..026751f 100644 (file)
@@ -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;
+  }
+}
index ad242d3..4f874a9 100644 (file)
@@ -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 (file)
index 0000000..b73c1c1
--- /dev/null
@@ -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
index 0da1c93..4874dd1 100644 (file)
@@ -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 (file)
index 0000000..98961b3
--- /dev/null
@@ -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'
+
index cc488d5..e038582 100644 (file)
@@ -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
index 23a7e72..8454cfd 100644 (file)
@@ -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