Skip to content

Commit cc64f2a

Browse files
committed
Common filtering for dashboard and group. Share partial search result partial
1 parent 0a16039 commit cc64f2a

11 files changed

+214
-207
lines changed

app/contexts/filter_context.rb

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
class FilterContext
2+
attr_accessor :items, :params
3+
4+
def initialize(items, params)
5+
@items = items
6+
@params = params
7+
end
8+
9+
def execute
10+
apply_filter(items)
11+
end
12+
13+
def apply_filter items
14+
if params[:project_id]
15+
items = items.where(project_id: params[:project_id])
16+
end
17+
18+
if params[:search].present?
19+
items = items.search(params[:search])
20+
end
21+
22+
case params[:status]
23+
when 'closed'
24+
items.closed
25+
when 'all'
26+
items
27+
else
28+
items.opened
29+
end
30+
end
31+
end

app/controllers/dashboard_controller.rb

+2-21
Original file line numberDiff line numberDiff line change
@@ -36,14 +36,14 @@ def index
3636
# Get authored or assigned open merge requests
3737
def merge_requests
3838
@merge_requests = current_user.cared_merge_requests
39-
@merge_requests = dashboard_filter(@merge_requests)
39+
@merge_requests = FilterContext.new(@merge_requests, params).execute
4040
@merge_requests = @merge_requests.recent.page(params[:page]).per(20)
4141
end
4242

4343
# Get only assigned issues
4444
def issues
4545
@issues = current_user.assigned_issues
46-
@issues = dashboard_filter(@issues)
46+
@issues = FilterContext.new(@issues, params).execute
4747
@issues = @issues.recent.page(params[:page]).per(20)
4848
@issues = @issues.includes(:author, :project)
4949

@@ -62,23 +62,4 @@ def projects
6262
def event_filter
6363
@event_filter ||= EventFilter.new(params[:event_filter])
6464
end
65-
66-
def dashboard_filter items
67-
if params[:project_id]
68-
items = items.where(project_id: params[:project_id])
69-
end
70-
71-
if params[:search].present?
72-
items = items.search(params[:search])
73-
end
74-
75-
case params[:status]
76-
when 'closed'
77-
items.closed
78-
when 'all'
79-
items
80-
else
81-
items.opened
82-
end
83-
end
8465
end

app/controllers/groups_controller.rb

+7-5
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,16 @@ def show
2121

2222
# Get authored or assigned open merge requests
2323
def merge_requests
24-
@merge_requests = current_user.cared_merge_requests.opened
25-
@merge_requests = @merge_requests.of_group(@group).recent.page(params[:page]).per(20)
24+
@merge_requests = current_user.cared_merge_requests.of_group(@group)
25+
@merge_requests = FilterContext.new(@merge_requests, params).execute
26+
@merge_requests = @merge_requests.recent.page(params[:page]).per(20)
2627
end
2728

2829
# Get only assigned issues
2930
def issues
30-
@user = current_user
31-
@issues = current_user.assigned_issues.opened
32-
@issues = @issues.of_group(@group).recent.page(params[:page]).per(20)
31+
@issues = current_user.assigned_issues.of_group(@group)
32+
@issues = FilterContext.new(@issues, params).execute
33+
@issues = @issues.recent.page(params[:page]).per(20)
3334
@issues = @issues.includes(:author, :project)
3435

3536
respond_to do |format|
@@ -44,6 +45,7 @@ def search
4445
@projects = result[:projects]
4546
@merge_requests = result[:merge_requests]
4647
@issues = result[:issues]
48+
@wiki_pages = result[:wiki_pages]
4749
end
4850

4951
def people

app/helpers/groups_helper.rb

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
module GroupsHelper
2+
def group_filter_path(entity, options={})
3+
exist_opts = {
4+
status: params[:status],
5+
project_id: params[:project_id],
6+
}
7+
8+
options = exist_opts.merge(options)
9+
10+
case entity
11+
when 'issue' then
12+
issues_group_path(@group, options)
13+
when 'merge_request'
14+
merge_requests_group_path(@group, options)
15+
end
16+
end
17+
end

app/views/groups/_filter.html.haml

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
= form_tag group_filter_path(entity), method: 'get' do
2+
%fieldset.dashboard-search-filter
3+
= search_field_tag "search", params[:search], { 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 group_filter_path(entity, status: nil) do
12+
Open
13+
%li{class: ("active" if params[:status] == 'closed')}
14+
= link_to group_filter_path(entity, status: 'closed') do
15+
Closed
16+
%li{class: ("active" if params[:status] == 'all')}
17+
= link_to group_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+
- unless entities_per_project(project, entity).zero?
25+
%li{class: ("active" if params[:project_id] == project.id.to_s)}
26+
= link_to group_filter_path(entity, project_id: project.id) do
27+
= project.name_with_namespace
28+
%small.right= entities_per_project(project, entity)
29+
30+
%fieldset
31+
%hr
32+
= link_to "Reset", group_filter_path(entity), class: 'btn right'
33+

app/views/groups/issues.html.haml

+18-15
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,21 @@
33
%small (assigned to you)
44
%small.right #{@issues.total_count} issues
55

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.title
13-
= @project.name
14-
%ul.well-list.issues_table
15-
- group[1].each do |issue|
16-
= render(partial: 'issues/show', locals: {issue: issue})
17-
%hr
18-
= paginate @issues, theme: "gitlab"
19-
- else
20-
%h3.nothing_here_message Nothing to show here
6+
%hr
7+
.row
8+
.span3
9+
= render 'filter', entity: 'issue'
10+
.span9
11+
- if @issues.any?
12+
- @issues.group_by(&:project).each do |group|
13+
%div.ui-box
14+
- @project = group[0]
15+
%h5.title
16+
= link_to_project @project
17+
%ul.well-list.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/groups/merge_requests.html.haml

+18-13
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,22 @@
33
%small (authored by or assigned to you)
44
%small.right #{@merge_requests.total_count} merge requests
55

6-
%br
7-
- if @merge_requests.any?
8-
- @merge_requests.group_by(&:project).each do |group|
9-
%ul.well-list.ui-box
10-
- @project = group[0]
11-
%h5.title
12-
= @project.name
13-
- group[1].each do |merge_request|
14-
= render(partial: 'merge_requests/merge_request', locals: {merge_request: merge_request})
15-
%hr
16-
= 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+
.ui-box
14+
- @project = group[0]
15+
%h5.title
16+
= link_to_project @project
17+
%ul.well-list
18+
- group[1].each do |merge_request|
19+
= render(partial: 'merge_requests/merge_request', locals: {merge_request: merge_request})
20+
%hr
21+
= paginate @merge_requests, theme: "gitlab"
1722

18-
- else
19-
%h3.nothing_here_message Nothing to show here
23+
- else
24+
%h3.nothing_here_message Nothing to show here

app/views/groups/search.html.haml

+1-67
Original file line numberDiff line numberDiff line change
@@ -6,70 +6,4 @@
66
= search_field_tag :search, params[:search], placeholder: "issue 143", class: "input-xxlarge search-text-input", id: "dashboard_search"
77
= submit_tag 'Search', class: "btn primary wide"
88
- if params[:search].present?
9-
%br
10-
%h3
11-
Search results
12-
%small (#{@projects.count + @merge_requests.count + @issues.count})
13-
%hr
14-
.search_results
15-
.row
16-
.span6
17-
%table
18-
%thead
19-
%tr
20-
%th Projects
21-
%tbody
22-
- @projects.each do |project|
23-
%tr
24-
%td
25-
= link_to project do
26-
%strong.term= project.name
27-
%small.cgray
28-
last activity at
29-
= project.last_activity_date.stamp("Aug 25, 2011")
30-
- if @projects.blank?
31-
%tr
32-
%td
33-
%h4.nothing_here_message No Projects
34-
%br
35-
%table
36-
%thead
37-
%tr
38-
%th Merge Requests
39-
%tbody
40-
- @merge_requests.each do |merge_request|
41-
%tr
42-
%td
43-
= link_to [merge_request.project, merge_request] do
44-
%span.badge.badge-info ##{merge_request.id}
45-
–
46-
%strong.term= truncate merge_request.title, length: 50
47-
%strong.right
48-
%span.label= merge_request.project.name
49-
- if @merge_requests.blank?
50-
%tr
51-
%td
52-
%h4.nothing_here_message No Merge Requests
53-
.span6
54-
%table
55-
%thead
56-
%tr
57-
%th Issues
58-
%tbody
59-
- @issues.each do |issue|
60-
%tr
61-
%td
62-
= link_to [issue.project, issue] do
63-
%span.badge.badge-info ##{issue.id}
64-
–
65-
%strong.term= truncate issue.title, length: 40
66-
%strong.right
67-
%span.label= issue.project.name
68-
- if @issues.blank?
69-
%tr
70-
%td
71-
%h4.nothing_here_message No Issues
72-
:javascript
73-
$(function() {
74-
$(".search_results .term").highlight("#{params[:search]}");
75-
})
9+
= render 'search/result'

app/views/groups/show.html.haml

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
%span.cgray Events and projects are filtered in scope of group
88
%hr
99
- if @events.any?
10-
.content_list= render @events
10+
.content_list
1111
- else
1212
%p.nothing_here_message Projects activity will be displayed here
1313
.loading.hide
@@ -26,4 +26,4 @@
2626
= link_to "@gitlabhq", "https://twitter.com/gitlabhq"
2727

2828
:javascript
29-
$(function(){ Pager.init(20); });
29+
$(function(){ Pager.init(20, true); });

0 commit comments

Comments
 (0)