From c38b9a2f80111f8074f8e6ce36e63d68f519c581 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Fri, 30 Nov 2012 06:14:05 +0300 Subject: [PATCH] Filter projects on dashboard --- .../stylesheets/gitlab_bootstrap/common.scss | 14 ++++++++++++++ app/controllers/dashboard_controller.rb | 9 +++++++++ app/helpers/tab_helper.rb | 13 +++++++++++++ app/models/project.rb | 2 ++ app/views/dashboard/_projects.html.haml | 8 ++++++++ 5 files changed, 46 insertions(+) diff --git a/app/assets/stylesheets/gitlab_bootstrap/common.scss b/app/assets/stylesheets/gitlab_bootstrap/common.scss index d6089cea6dc..9a4f2e80f87 100644 --- a/app/assets/stylesheets/gitlab_bootstrap/common.scss +++ b/app/assets/stylesheets/gitlab_bootstrap/common.scss @@ -100,3 +100,17 @@ input[type='search'].search-text-input { } fieldset legend { font-size: 17px; } + +ul.nav.nav-projects-tabs { + @extend .nav-tabs; + + padding-left: 8px; + + li { + a { + padding: 4px 20px; + margin-top: 2px; + border-color: #DDD; + } + } +} diff --git a/app/controllers/dashboard_controller.rb b/app/controllers/dashboard_controller.rb index 3d9b09405d3..461dd51b570 100644 --- a/app/controllers/dashboard_controller.rb +++ b/app/controllers/dashboard_controller.rb @@ -7,6 +7,15 @@ class DashboardController < ApplicationController def index @groups = current_user.authorized_groups + @projects = case params[:scope] + when 'personal' then + @projects.personal(current_user) + when 'joined' then + @projects.joined(current_user) + else + @projects + end + @projects = @projects.page(params[:page]).per(30) @events = Event.in_projects(current_user.project_ids) diff --git a/app/helpers/tab_helper.rb b/app/helpers/tab_helper.rb index 740700c3009..a4bec87caa7 100644 --- a/app/helpers/tab_helper.rb +++ b/app/helpers/tab_helper.rb @@ -84,4 +84,17 @@ module TabHelper 'active' end end + + # Use nav_tab for save controller/action but different params + def nav_tab key, value, &block + o = {} + o[:class] = "" + o[:class] << " active" if params[key] == value + + if block_given? + content_tag(:li, capture(&block), o) + else + content_tag(:li, nil, o) + end + end end diff --git a/app/models/project.rb b/app/models/project.rb index 1d03d065c28..898f0267e8f 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -74,6 +74,8 @@ class Project < ActiveRecord::Base scope :without_user, ->(user) { where("id NOT IN (:ids)", ids: user.projects.map(&:id) ) } scope :not_in_group, ->(group) { where("id NOT IN (:ids)", ids: group.project_ids ) } scope :sorted_by_activity, ->() { order("(SELECT max(events.created_at) FROM events WHERE events.project_id = projects.id) DESC") } + scope :personal, ->(user) { where(namespace_id: user.namespace_id) } + scope :joined, ->(user) { where("namespace_id != ?", user.namespace_id) } class << self def authorized_for user diff --git a/app/views/dashboard/_projects.html.haml b/app/views/dashboard/_projects.html.haml index a2031861e8c..fac0a074691 100644 --- a/app/views/dashboard/_projects.html.haml +++ b/app/views/dashboard/_projects.html.haml @@ -8,6 +8,14 @@ = link_to new_project_path, class: "btn very_small info" do %i.icon-plus New Project + %ul.nav.nav-projects-tabs + = nav_tab :scope, nil do + = link_to "All", dashboard_path + = nav_tab :scope, 'personal' do + = link_to "Personal", dashboard_path(scope: 'personal') + = nav_tab :scope, 'joined' do + = link_to "Joined", dashboard_path(scope: 'joined') + %ul.unstyled - projects.each do |project| %li.wll -- GitLab