Merge pull request #7586 from aignatov-bio/ai-sci-10304-add-sorting-for-shared-inventories

Add sorting for shared invnetories [SCI-10304]
This commit is contained in:
aignatov-bio 2024-06-04 11:04:21 +02:00 committed by GitHub
commit 3701b2cbfb
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 53 additions and 11 deletions

View file

@ -37,7 +37,7 @@ class RepositoriesController < ApplicationController
render 'index'
end
format.json do
repositories = Lists::RepositoriesService.new(@repositories, params).call
repositories = Lists::RepositoriesService.new(@repositories, params, user: current_user).call
render json: repositories, each_serializer: Lists::RepositorySerializer, user: current_user,
meta: pagination_dict(repositories)
end

View file

@ -140,7 +140,8 @@ export default {
},
{
field: 'shared_label',
headerName: this.i18n.t('libraries.index.table.shared')
headerName: this.i18n.t('libraries.index.table.shared'),
sortable: true
},
{
field: 'team',

View file

@ -18,15 +18,14 @@ module Lists
end
def shared_label
if object.i_shared?(current_user.current_team)
case object[:shared]
when 1
I18n.t('libraries.index.shared')
elsif object.shared_with?(current_user.current_team)
if object.shared_with_read?(current_user.current_team)
I18n.t('libraries.index.shared_for_viewing')
else
I18n.t('libraries.index.shared_for_editing')
end
else
when 2
I18n.t('libraries.index.shared_for_editing')
when 3
I18n.t('libraries.index.shared_for_viewing')
when 4
I18n.t('libraries.index.not_shared')
end
end

View file

@ -16,6 +16,7 @@ module Lists
.select('COUNT(repository_rows.*) AS row_count')
.select('MAX(creators.full_name) AS created_by_user')
.select('MAX(archivers.full_name) AS archived_by_user')
.select(shared_sql_select)
.group('repositories.id')
view_mode = @params[:view_mode] || 'active'
@ -47,8 +48,49 @@ module Lists
archived_on: 'repositories.archived_on',
archived_by: 'archived_by_user',
nr_of_rows: 'row_count',
code: 'repositories.id'
code: 'repositories.id',
shared_label: 'shared'
}
end
def shared_sql_select
shared_write_value = Repository.permission_levels['shared_write']
not_shared_value = Repository.permission_levels['not_shared']
team_id = @user.current_team.id
case_statement = <<-SQL.squish
CASE
WHEN repositories.team_id = :team_id AND repositories.permission_level NOT IN (:not_shared_value)
OR EXISTS (
SELECT 1 FROM team_shared_objects
WHERE team_shared_objects.shared_object_id = repositories.id
AND team_shared_objects.shared_object_type = 'RepositoryBase'
) THEN 1
WHEN repositories.team_id != :team_id AND repositories.permission_level NOT IN (:not_shared_value)
OR EXISTS (
SELECT 1 FROM team_shared_objects
WHERE team_shared_objects.shared_object_id = repositories.id
AND team_shared_objects.shared_object_type = 'RepositoryBase'
AND team_shared_objects.team_id = :team_id
) THEN
CASE
WHEN repositories.permission_level IN (:shared_write_value)
OR EXISTS (
SELECT 1 FROM team_shared_objects
WHERE team_shared_objects.shared_object_id = repositories.id
AND team_shared_objects.shared_object_type = 'RepositoryBase'
AND team_shared_objects.permission_level = :shared_write_value
AND team_shared_objects.team_id = :team_id
) THEN 2
ELSE 3
END
ELSE 4
END as shared
SQL
ActiveRecord::Base.sanitize_sql_array(
[case_statement, { team_id:, not_shared_value:, shared_write_value: }]
)
end
end
end