add scope filters to project snippets page
This commit is contained in:
parent
b65d3e1132
commit
54a1193d79
3 changed files with 52 additions and 7 deletions
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue