2023-12-11 22:41:03 +08:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2023-11-10 20:34:36 +08:00
|
|
|
module Lists
|
|
|
|
class ProjectAndFolderSerializer < ActiveModel::Serializer
|
|
|
|
include Rails.application.routes.url_helpers
|
2023-12-05 03:59:16 +08:00
|
|
|
include Canaid::Helpers::PermissionsHelper
|
2023-11-10 20:34:36 +08:00
|
|
|
|
2024-01-24 21:06:26 +08:00
|
|
|
attributes :name, :code, :created_at, :archived_on, :users, :urls, :folder, :hidden,
|
2023-12-05 03:59:16 +08:00
|
|
|
:folder_info, :default_public_user_role_id, :team, :top_level_assignable
|
|
|
|
|
|
|
|
def team
|
|
|
|
object.team.name
|
|
|
|
end
|
2023-11-10 20:34:36 +08:00
|
|
|
|
|
|
|
def folder
|
|
|
|
!project?
|
|
|
|
end
|
|
|
|
|
2023-12-05 03:59:16 +08:00
|
|
|
def top_level_assignable
|
|
|
|
project?
|
|
|
|
end
|
|
|
|
|
2024-01-24 21:06:26 +08:00
|
|
|
def hidden
|
|
|
|
object.hidden? if project?
|
|
|
|
end
|
|
|
|
|
2023-12-01 07:01:08 +08:00
|
|
|
def default_public_user_role_id
|
|
|
|
object.default_public_user_role_id if project?
|
|
|
|
end
|
|
|
|
|
2023-11-10 20:34:36 +08:00
|
|
|
def code
|
|
|
|
object.code if project?
|
|
|
|
end
|
|
|
|
|
|
|
|
def created_at
|
2024-01-18 08:32:19 +08:00
|
|
|
I18n.l(object.created_at, format: :full_date) if project?
|
2023-11-10 20:34:36 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
def archived_on
|
|
|
|
I18n.l(object.archived_on, format: :full) if project? && object.archived_on
|
|
|
|
end
|
|
|
|
|
|
|
|
def users
|
|
|
|
if project?
|
|
|
|
object.user_assignments.map do |ua|
|
|
|
|
{
|
|
|
|
avatar: avatar_path(ua.user, :icon_small),
|
|
|
|
full_name: ua.user_name_with_role
|
|
|
|
}
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def urls
|
2023-12-01 07:01:08 +08:00
|
|
|
urls_list = {
|
2023-12-07 03:53:11 +08:00
|
|
|
show: project? ? experiments_path(project_id: object) : project_folder_path(object),
|
2023-11-24 18:08:28 +08:00
|
|
|
actions: actions_toolbar_projects_path(items: [{ id: object.id,
|
|
|
|
type: project? ? 'projects' : 'project_folders' }].to_json)
|
2023-11-10 20:34:36 +08:00
|
|
|
}
|
2023-12-01 07:01:08 +08:00
|
|
|
|
2023-12-05 03:59:16 +08:00
|
|
|
urls_list[:show] = nil if project? && !can_read_project?(object)
|
2023-12-01 07:01:08 +08:00
|
|
|
|
2023-12-05 03:59:16 +08:00
|
|
|
urls_list[:update] = if project?
|
2024-01-16 20:53:41 +08:00
|
|
|
project_path(object)
|
2023-12-05 03:59:16 +08:00
|
|
|
else
|
|
|
|
project_folder_path(object)
|
|
|
|
end
|
|
|
|
|
2023-12-11 22:41:03 +08:00
|
|
|
urls_list[:show_access] = access_permissions_project_path(object)
|
2023-12-05 03:59:16 +08:00
|
|
|
if project? && can_manage_project_users?(object)
|
2023-12-11 22:41:03 +08:00
|
|
|
urls_list[:update_access] = access_permissions_project_path(object)
|
2023-12-05 03:59:16 +08:00
|
|
|
urls_list[:new_access] = new_access_permissions_project_path(id: object.id)
|
|
|
|
urls_list[:create_access] = access_permissions_projects_path(id: object.id)
|
|
|
|
urls_list[:default_public_user_role_path] =
|
|
|
|
update_default_public_user_role_access_permissions_project_path(object)
|
|
|
|
end
|
2023-12-01 07:01:08 +08:00
|
|
|
|
|
|
|
urls_list
|
|
|
|
end
|
|
|
|
|
|
|
|
def folder_info
|
|
|
|
if folder
|
2023-12-05 03:59:16 +08:00
|
|
|
I18n.t('projects.index.folder.description', projects_count: object.projects_count,
|
|
|
|
folders_count: object.folders_count)
|
2023-12-01 07:01:08 +08:00
|
|
|
end
|
2023-11-10 20:34:36 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
def project?
|
2023-11-24 18:08:28 +08:00
|
|
|
object.instance_of?(Project)
|
2023-11-10 20:34:36 +08:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|