Commit c38b9a2f80111f8074f8e6ce36e63d68f519c581

Authored by Dmitriy Zaporozhets
1 parent a03f3189

Filter projects on dashboard

app/assets/stylesheets/gitlab_bootstrap/common.scss
... ... @@ -100,3 +100,17 @@ input[type='search'].search-text-input {
100 100 }
101 101  
102 102 fieldset legend { font-size: 17px; }
  103 +
  104 +ul.nav.nav-projects-tabs {
  105 + @extend .nav-tabs;
  106 +
  107 + padding-left: 8px;
  108 +
  109 + li {
  110 + a {
  111 + padding: 4px 20px;
  112 + margin-top: 2px;
  113 + border-color: #DDD;
  114 + }
  115 + }
  116 +}
... ...
app/controllers/dashboard_controller.rb
... ... @@ -7,6 +7,15 @@ class DashboardController < ApplicationController
7 7 def index
8 8 @groups = current_user.authorized_groups
9 9  
  10 + @projects = case params[:scope]
  11 + when 'personal' then
  12 + @projects.personal(current_user)
  13 + when 'joined' then
  14 + @projects.joined(current_user)
  15 + else
  16 + @projects
  17 + end
  18 +
10 19 @projects = @projects.page(params[:page]).per(30)
11 20  
12 21 @events = Event.in_projects(current_user.project_ids)
... ...
app/helpers/tab_helper.rb
... ... @@ -84,4 +84,17 @@ module TabHelper
84 84 'active'
85 85 end
86 86 end
  87 +
  88 + # Use nav_tab for save controller/action but different params
  89 + def nav_tab key, value, &block
  90 + o = {}
  91 + o[:class] = ""
  92 + o[:class] << " active" if params[key] == value
  93 +
  94 + if block_given?
  95 + content_tag(:li, capture(&block), o)
  96 + else
  97 + content_tag(:li, nil, o)
  98 + end
  99 + end
87 100 end
... ...
app/models/project.rb
... ... @@ -74,6 +74,8 @@ class Project &lt; ActiveRecord::Base
74 74 scope :without_user, ->(user) { where("id NOT IN (:ids)", ids: user.projects.map(&:id) ) }
75 75 scope :not_in_group, ->(group) { where("id NOT IN (:ids)", ids: group.project_ids ) }
76 76 scope :sorted_by_activity, ->() { order("(SELECT max(events.created_at) FROM events WHERE events.project_id = projects.id) DESC") }
  77 + scope :personal, ->(user) { where(namespace_id: user.namespace_id) }
  78 + scope :joined, ->(user) { where("namespace_id != ?", user.namespace_id) }
77 79  
78 80 class << self
79 81 def authorized_for user
... ...
app/views/dashboard/_projects.html.haml
... ... @@ -8,6 +8,14 @@
8 8 = link_to new_project_path, class: "btn very_small info" do
9 9 %i.icon-plus
10 10 New Project
  11 + %ul.nav.nav-projects-tabs
  12 + = nav_tab :scope, nil do
  13 + = link_to "All", dashboard_path
  14 + = nav_tab :scope, 'personal' do
  15 + = link_to "Personal", dashboard_path(scope: 'personal')
  16 + = nav_tab :scope, 'joined' do
  17 + = link_to "Joined", dashboard_path(scope: 'joined')
  18 +
11 19 %ul.unstyled
12 20 - projects.each do |project|
13 21 %li.wll
... ...