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
@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 @@ module DashboardHelper
[]
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 @@ module TabHelper
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)
......
......@@ -153,6 +153,16 @@ class Project < ActiveRecord::Base
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
......
%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
......@@ -6,22 +28,22 @@
.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
......
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