Commit 611c5f1d authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets

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: default avatarDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
parent 231b91d0
...@@ -41,13 +41,13 @@ class DashboardController < ApplicationController ...@@ -41,13 +41,13 @@ class DashboardController < ApplicationController
@projects = @projects.where(namespace_id: Group.find_by_name(params[:group])) if params[:group].present? @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.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) @labels = current_user.authorized_projects.tags_on(:labels)
@groups = current_user.authorized_groups @groups = current_user.authorized_groups
@projects = @projects.tagged_with(params[:label]) if params[:label].present?
@projects = @projects.page(params[:page]).per(30)
end end
def merge_requests def merge_requests
......
...@@ -8,14 +8,7 @@ class Public::ProjectsController < ApplicationController ...@@ -8,14 +8,7 @@ class Public::ProjectsController < ApplicationController
def index def index
@projects = Project.public_or_internal_only(current_user) @projects = Project.public_or_internal_only(current_user)
@projects = @projects.search(params[:search]) if params[:search].present? @projects = @projects.search(params[:search]) if params[:search].present?
@sort = params[:sort] @projects = @projects.sort(@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.includes(:namespace).page(params[:page]).per(20) @projects = @projects.includes(:namespace).page(params[:page]).per(20)
end end
end end
...@@ -21,4 +21,18 @@ module DashboardHelper ...@@ -21,4 +21,18 @@ module DashboardHelper
[] []
end.count end.count
end 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 end
...@@ -92,7 +92,12 @@ module TabHelper ...@@ -92,7 +92,12 @@ module TabHelper
def nav_tab key, value, &block def nav_tab key, value, &block
o = {} o = {}
o[:class] = "" 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? if block_given?
content_tag(:li, capture(&block), o) content_tag(:li, capture(&block), o)
......
...@@ -153,6 +153,16 @@ class Project < ActiveRecord::Base ...@@ -153,6 +153,16 @@ class Project < ActiveRecord::Base
def visibility_levels def visibility_levels
Gitlab::VisibilityLevel.options Gitlab::VisibilityLevel.options
end 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 end
def team def team
......
%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 %p.light
All projects you have access to are listed here. Public projects are not included here unless you are a member All projects you have access to are listed here. Public projects are not included here unless you are a member
%hr %hr
...@@ -6,22 +28,22 @@ ...@@ -6,22 +28,22 @@
.span3 .span3
%ul.nav.nav-pills.nav-stacked %ul.nav.nav-pills.nav-stacked
= nav_tab :scope, nil do = nav_tab :scope, nil do
= link_to projects_dashboard_path do = link_to projects_dashboard_filter_path(scope: nil) do
All All
%span.pull-right %span.pull-right
= current_user.authorized_projects.count = current_user.authorized_projects.count
= nav_tab :scope, 'personal' do = nav_tab :scope, 'personal' do
= link_to projects_dashboard_path(scope: 'personal') do = link_to projects_dashboard_filter_path(scope: 'personal') do
Personal Personal
%span.pull-right %span.pull-right
= current_user.personal_projects.count = current_user.personal_projects.count
= nav_tab :scope, 'joined' do = nav_tab :scope, 'joined' do
= link_to projects_dashboard_path(scope: 'joined') do = link_to projects_dashboard_filter_path(scope: 'joined') do
Joined Joined
%span.pull-right %span.pull-right
= current_user.authorized_projects.joined(current_user).count = current_user.authorized_projects.joined(current_user).count
= nav_tab :scope, 'owned' do = nav_tab :scope, 'owned' do
= link_to projects_dashboard_path(scope: 'owned') do = link_to projects_dashboard_filter_path(scope: 'owned') do
Owned Owned
%span.pull-right %span.pull-right
= current_user.owned_projects.count = current_user.owned_projects.count
...@@ -31,7 +53,7 @@ ...@@ -31,7 +53,7 @@
%ul.bordered-list.visibility-filter %ul.bordered-list.visibility-filter
- Gitlab::VisibilityLevel.values.each do |level| - Gitlab::VisibilityLevel.values.each do |level|
%li{ class: (level.to_s == params[:visibility_level]) ? 'active' : 'light' } %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_icon(level)
= visibility_level_label(level) = visibility_level_label(level)
...@@ -41,7 +63,7 @@ ...@@ -41,7 +63,7 @@
%ul.bordered-list %ul.bordered-list
- @groups.each do |group| - @groups.each do |group|
%li{ class: (group.name == params[:group]) ? 'active' : 'light' } %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 %i.icon-folder-close-alt
= group.name = group.name
%small.pull-right %small.pull-right
...@@ -55,7 +77,7 @@ ...@@ -55,7 +77,7 @@
%ul.bordered-list %ul.bordered-list
- @labels.each do |label| - @labels.each do |label|
%li{ class: (label.name == params[:label]) ? 'active' : 'light' } %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 %i.icon-tag
= label.name = label.name
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment