mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2024-11-17 14:46:00 +08:00
98 lines
2.9 KiB
Ruby
98 lines
2.9 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module GlobalSearch
|
|
class AssetSerializer < ActiveModel::Serializer
|
|
include Rails.application.routes.url_helpers
|
|
include FileIconsHelper
|
|
attributes :id, :file_name, :icon, :created_at, :updated_at, :team, :parent, :experiment, :repository
|
|
|
|
def file_name
|
|
object.render_file_name
|
|
end
|
|
|
|
def icon
|
|
file_fa_icon_class(object)
|
|
end
|
|
|
|
def created_at
|
|
I18n.l(object.created_at, format: :full_date)
|
|
end
|
|
|
|
def updated_at
|
|
I18n.l(object.updated_at, format: :full_date)
|
|
end
|
|
|
|
def team
|
|
{
|
|
name: object.team.name,
|
|
url: dashboard_path(team: object.team)
|
|
}
|
|
end
|
|
|
|
def experiment
|
|
return { name: '' } unless object.my_module
|
|
|
|
archived = object.my_module.experiment.archived_branch?
|
|
{
|
|
name: object.my_module.experiment.name,
|
|
url: my_modules_experiment_path(id: object.my_module.experiment.id, view_mode: view_mode(archived)),
|
|
archived: archived
|
|
}
|
|
end
|
|
|
|
def repository
|
|
parent = object.parent
|
|
|
|
return { name: '' } unless parent.is_a?(RepositoryCell)
|
|
|
|
archived = parent.repository_row.archived?
|
|
|
|
{
|
|
name: parent.repository_row.repository.name,
|
|
url: repository_path(id: parent.repository_row.repository_id, archived: archived),
|
|
archived: archived
|
|
}
|
|
end
|
|
|
|
def parent
|
|
parent = object.parent
|
|
if parent.is_a?(Result) && object.my_module
|
|
parent_type = 'task'
|
|
parent_name = object.my_module.name
|
|
parent_archived = parent.my_module.archived_branch?
|
|
parent_url = my_module_results_path(my_module_id: object.my_module.id, view_mode: view_mode(parent.archived?))
|
|
elsif parent.is_a?(Step) && object.my_module
|
|
parent_type = 'task'
|
|
parent_name = object.my_module.name
|
|
parent_archived = object.my_module.archived_branch?
|
|
parent_url = protocols_my_module_path(object.my_module.id,
|
|
view_mode: view_mode(parent_archived))
|
|
elsif parent.is_a?(Step)
|
|
parent_type = 'protocol_template'
|
|
parent_name = parent.protocol.name || I18n.t('search.index.untitled_protocol')
|
|
parent_url = protocol_path(parent.protocol_id)
|
|
parent_archived = parent.protocol.archived?
|
|
elsif parent.is_a?(RepositoryCell)
|
|
parent_type = 'inventory_item'
|
|
parent_name = parent.repository_row.name
|
|
parent_archived = parent.repository_row.archived?
|
|
|
|
params = {
|
|
id: parent.repository_row.repository_id,
|
|
landing_page: true,
|
|
row_id: parent.repository_row.id
|
|
}
|
|
params[:archived] = true if parent_archived
|
|
parent_url = repository_path(params)
|
|
end
|
|
|
|
{ name: parent_name, url: parent_url, type: parent_type, archived: parent_archived }
|
|
end
|
|
|
|
private
|
|
|
|
def view_mode(archived)
|
|
archived ? 'archived' : 'active'
|
|
end
|
|
end
|
|
end
|