Permalink
Browse files

Sort dropdown for Dashboard#projects page

Be default it sorts by name now
Respect filters like scope, label, visibility when do sort or another
filter

Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
  • Loading branch information...
1 parent 231b91d commit 611c5f1d7cb0ae74d923499d01c2f30d5e8f9384 @randx randx committed Dec 29, 2013
@@ -41,13 +41,13 @@ def projects
@projects = @projects.where(namespace_id: Group.find_by_name(params[:group])) if params[:group].present?
@projects = @projects.where(visibility_level: params[:visibility_level]) if params[:visibility_level].present?
- @projects = @projects.includes(:namespace).sorted_by_activity
+ @projects = @projects.includes(:namespace)
+ @projects = @projects.tagged_with(params[:label]) if params[:label].present?
+ @projects = @projects.sort(@sort = params[:sort])
+ @projects = @projects.page(params[:page]).per(30)
@labels = current_user.authorized_projects.tags_on(:labels)
@groups = current_user.authorized_groups
-
- @projects = @projects.tagged_with(params[:label]) if params[:label].present?
- @projects = @projects.page(params[:page]).per(30)
end
def merge_requests
@@ -8,14 +8,7 @@ class Public::ProjectsController < ApplicationController
def index
@projects = Project.public_or_internal_only(current_user)
@projects = @projects.search(params[:search]) if params[:search].present?
- @sort = params[:sort]
- @projects = case @sort
- when 'newest' then @projects.order('created_at DESC')
- when 'oldest' then @projects.order('created_at ASC')
- when 'recently_updated' then @projects.order('updated_at DESC')
- when 'last_updated' then @projects.order('updated_at ASC')
- else @projects.order("namespaces.path, projects.name ASC")
- end
+ @projects = @projects.sort(@sort = params[:sort])
@projects = @projects.includes(:namespace).page(params[:page]).per(20)
end
end
@@ -21,4 +21,18 @@ def entities_per_project(project, entity)
[]
end.count
end
+
+ def projects_dashboard_filter_path(options={})
+ exist_opts = {
+ sort: params[:sort],
+ scope: params[:scope],
+ group: params[:group],
+ }
+
+ options = exist_opts.merge(options)
+
+ path = request.path
+ path << "?#{options.to_param}"
+ path
+ end
end
@@ -92,7 +92,12 @@ def branches_tab_class
def nav_tab key, value, &block
o = {}
o[:class] = ""
- o[:class] << " active" if params[key] == value
+
+ if value.nil?
+ o[:class] << " active" if params[key].blank?
+ else
+ o[:class] << " active" if params[key] == value
+ end
if block_given?
content_tag(:li, capture(&block), o)
View
@@ -153,6 +153,16 @@ def find_with_namespace(id)
def visibility_levels
Gitlab::VisibilityLevel.options
end
+
+ def sort(method)
+ case method.to_s
+ when 'newest' then reorder('projects.created_at DESC')
+ when 'oldest' then reorder('projects.created_at ASC')
+ when 'recently_updated' then reorder('projects.updated_at DESC')
+ when 'last_updated' then reorder('projects.updated_at ASC')
+ else reorder("namespaces.path, projects.name ASC")
+ end
+ end
end
def team
@@ -1,27 +1,49 @@
-%h3.page-title My Projects
+%h3.page-title
+ My Projects
+.pull-right
+ .dropdown.inline
+ %a.dropdown-toggle.btn.btn-small{href: '#', "data-toggle" => "dropdown"}
+ %span.light sort:
+ - if @sort.present?
+ = @sort.humanize
+ - else
+ Name
+ %b.caret
+ %ul.dropdown-menu
+ %li
+ = link_to projects_dashboard_filter_path(sort: nil) do
+ Name
+ = link_to projects_dashboard_filter_path(sort: 'newest') do
+ Newest
+ = link_to projects_dashboard_filter_path(sort: 'oldest') do
+ Oldest
+ = link_to projects_dashboard_filter_path(sort: 'recently_updated') do
+ Recently updated
+ = link_to projects_dashboard_filter_path(sort: 'last_updated') do
+ Last updated
%p.light
All projects you have access to are listed here. Public projects are not included here unless you are a member
%hr
.row
.span3
%ul.nav.nav-pills.nav-stacked
= nav_tab :scope, nil do
- = link_to projects_dashboard_path do
+ = link_to projects_dashboard_filter_path(scope: nil) do
All
%span.pull-right
= current_user.authorized_projects.count
= nav_tab :scope, 'personal' do
- = link_to projects_dashboard_path(scope: 'personal') do
+ = link_to projects_dashboard_filter_path(scope: 'personal') do
Personal
%span.pull-right
= current_user.personal_projects.count
= nav_tab :scope, 'joined' do
- = link_to projects_dashboard_path(scope: 'joined') do
+ = link_to projects_dashboard_filter_path(scope: 'joined') do
Joined
%span.pull-right
= current_user.authorized_projects.joined(current_user).count
= nav_tab :scope, 'owned' do
- = link_to projects_dashboard_path(scope: 'owned') do
+ = link_to projects_dashboard_filter_path(scope: 'owned') do
Owned
%span.pull-right
= current_user.owned_projects.count
@@ -31,7 +53,7 @@
%ul.bordered-list.visibility-filter
- Gitlab::VisibilityLevel.values.each do |level|
%li{ class: (level.to_s == params[:visibility_level]) ? 'active' : 'light' }
- = link_to projects_dashboard_path(visibility_level: level) do
+ = link_to projects_dashboard_filter_path(visibility_level: level) do
= visibility_level_icon(level)
= visibility_level_label(level)
@@ -41,7 +63,7 @@
%ul.bordered-list
- @groups.each do |group|
%li{ class: (group.name == params[:group]) ? 'active' : 'light' }
- = link_to projects_dashboard_path(group: group.name) do
+ = link_to projects_dashboard_filter_path(group: group.name) do
%i.icon-folder-close-alt
= group.name
%small.pull-right
@@ -55,7 +77,7 @@
%ul.bordered-list
- @labels.each do |label|
%li{ class: (label.name == params[:label]) ? 'active' : 'light' }
- = link_to projects_dashboard_path(scope: params[:scope], label: label.name) do
+ = link_to projects_dashboard_filter_path(scope: params[:scope], label: label.name) do
%i.icon-tag
= label.name

0 comments on commit 611c5f1

Please sign in to comment.