Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2012-11-21 09:24:05 +0400
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2012-11-21 09:24:05 +0400
commit23734a715e622f3f028bd565df3be130d3aba737 (patch)
tree2e3ad753e3ddafbde6da4e8bcf393ad8d5bf9c0e /app
parent899afd0067065be6b15d7b737100b82757421828 (diff)
Dashboard filters for events
Diffstat (limited to 'app')
-rw-r--r--app/assets/stylesheets/common.scss13
-rw-r--r--app/controllers/dashboard_controller.rb39
-rw-r--r--app/helpers/dashboard_helper.rb10
-rw-r--r--app/models/project.rb9
-rw-r--r--app/views/dashboard/_filter.html.haml32
-rw-r--r--app/views/dashboard/issues.html.haml32
-rw-r--r--app/views/dashboard/merge_requests.html.haml28
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