margin-right:5px;
}
}
+
+.dashboard-search-filter {
+ padding:5px;
+
+ .search-text-input {
+ float:left;
+ @extend .span2;
+ }
+ .btn {
+ margin-left: 5px;
+ float:left;
+ }
+}
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)
# 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|
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
--- /dev/null
+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
end
end
end
+
+ def items_for entity
+ case entity
+ when 'issue' then
+ issues
+ when 'merge_request' then
+ merge_requests
+ end
+ end
end
--- /dev/null
+= 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'
+
%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
%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