add scope filters to project snippets page

This commit is contained in:
Mike Greiling 2016-12-07 16:35:53 -06:00
parent b65d3e1132
commit 54a1193d79
3 changed files with 52 additions and 7 deletions

View file

@ -19,10 +19,12 @@ class Projects::SnippetsController < Projects::ApplicationController
respond_to :html respond_to :html
def index def index
@snippets = SnippetsFinder.new.execute(current_user, { @snippets = SnippetsFinder.new.execute(
current_user,
filter: :by_project, filter: :by_project,
project: @project project: @project,
}) scope: params[:scope]
)
@snippets = @snippets.page(params[:page]) @snippets = @snippets.page(params[:page])
end end

View file

@ -8,7 +8,7 @@ class SnippetsFinder
when :by_user then when :by_user then
by_user(current_user, params[:user], params[:scope]) by_user(current_user, params[:user], params[:scope])
when :by_project when :by_project
by_project(current_user, params[:project]) by_project(current_user, params[:project], params[:scope])
end end
end end
@ -47,14 +47,30 @@ class SnippetsFinder
end end
end end
def by_project(current_user, project) def by_project(current_user, project, scope)
snippets = project.snippets.fresh snippets = project.snippets.fresh
if current_user if current_user
if project.team.member?(current_user) || current_user.admin? if project.team.member?(current_user) || current_user.admin?
snippets case scope
when 'are_internal' then
snippets.are_internal
when 'are_private' then
snippets.are_private
when 'are_public' then
snippets.are_public
else
snippets
end
else else
snippets.public_and_internal case scope
when 'are_internal' then
snippets.are_internal
when 'are_public' then
snippets.are_public
else
snippets.public_and_internal
end
end end
else else
snippets.are_public snippets.are_public

View file

@ -1,5 +1,32 @@
- page_title "Snippets" - page_title "Snippets"
- if current_user
.nav-links.snippet-scope-menu
%li{ class: ("active" unless params[:scope]) }
= link_to namespace_project_snippets_path(@project.namespace, @project) do
All
%span.badge
= @project.snippets.count
- if @project.team.member?(current_user) || current_user.admin?
%li{ class: ("active" if params[:scope] == "are_private") }
= link_to namespace_project_snippets_path(@project.namespace, @project, scope: 'are_private') do
Private
%span.badge
= @project.snippets.are_private.count
%li{ class: ("active" if params[:scope] == "are_internal") }
= link_to namespace_project_snippets_path(@project.namespace, @project, scope: 'are_internal') do
Internal
%span.badge
= @project.snippets.are_internal.count
%li{ class: ("active" if params[:scope] == "are_public") }
= link_to namespace_project_snippets_path(@project.namespace, @project, scope: 'are_public') do
Public
%span.badge
= @project.snippets.are_public.count
.sub-header-block .sub-header-block
- if can?(current_user, :create_project_snippet, @project) - if can?(current_user, :create_project_snippet, @project)
= link_to new_namespace_project_snippet_path(@project.namespace, @project), class: "btn btn-new btn-wide-on-sm pull-right", title: "New snippet" do = link_to new_namespace_project_snippet_path(@project.namespace, @project), class: "btn btn-new btn-wide-on-sm pull-right", title: "New snippet" do