mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-09-30 08:54:31 +08:00
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:
commit
3701b2cbfb
4 changed files with 53 additions and 11 deletions
|
@ -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
|
||||
|
|
|
@ -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',
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue