mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2024-12-25 09:13:05 +08:00
145 lines
4 KiB
Ruby
145 lines
4 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class ResultSerializer < ActiveModel::Serializer
|
|
include Canaid::Helpers::PermissionsHelper
|
|
include Rails.application.routes.url_helpers
|
|
include ApplicationHelper
|
|
include ActionView::Helpers::TextHelper
|
|
include InputSanitizeHelper
|
|
|
|
attributes :name, :id, :urls, :updated_at, :created_at_formatted, :updated_at_formatted, :user,
|
|
:my_module_id, :attachments_manageble, :marvinjs_enabled, :marvinjs_context, :type,
|
|
:wopi_enabled, :wopi_context, :created_at, :created_by, :archived, :assets_order,
|
|
:open_vector_editor_context, :comments_count, :assets_view_mode, :storage_limit
|
|
|
|
def marvinjs_enabled
|
|
MarvinJsService.enabled?
|
|
end
|
|
|
|
def type
|
|
'Result'
|
|
end
|
|
|
|
def name
|
|
if archived
|
|
"(A) #{object.name}"
|
|
else
|
|
object.name
|
|
end
|
|
end
|
|
|
|
def archived
|
|
object.archived?
|
|
end
|
|
|
|
def current_user
|
|
scope
|
|
end
|
|
|
|
def storage_limit
|
|
nil
|
|
end
|
|
|
|
def marvinjs_context
|
|
if marvinjs_enabled
|
|
{
|
|
marvin_js_asset_url: marvin_js_assets_path,
|
|
icon: image_path('icon_small/marvinjs.svg')
|
|
}
|
|
end
|
|
end
|
|
|
|
def updated_at
|
|
object.updated_at.to_i
|
|
end
|
|
|
|
def user
|
|
{
|
|
avatar: object.user&.avatar_url(:icon_small),
|
|
name: object.user&.full_name
|
|
}
|
|
end
|
|
|
|
def assets_order
|
|
object.current_view_state(current_user).state.dig('assets', 'sort') unless object.destroyed?
|
|
end
|
|
|
|
def attachments_manageble
|
|
can_manage_result?(object)
|
|
end
|
|
|
|
def comments_count
|
|
object.comments.count
|
|
end
|
|
|
|
def wopi_enabled
|
|
wopi_enabled?
|
|
end
|
|
|
|
def wopi_context
|
|
if wopi_enabled
|
|
{
|
|
create_wopi: create_wopi_file_path,
|
|
icon: image_path('office/office.svg')
|
|
}
|
|
end
|
|
end
|
|
|
|
def open_vector_editor_context
|
|
if can_manage_result?(object)
|
|
{
|
|
new_sequence_asset_url: new_gene_sequence_asset_url(parent_type: 'Result', parent_id: object.id),
|
|
icon: image_path('icon_small/sequence-editor.svg')
|
|
}
|
|
end
|
|
end
|
|
|
|
def created_at_formatted
|
|
I18n.l(object.created_at, format: :full)
|
|
end
|
|
|
|
def updated_at_formatted
|
|
I18n.l(object.updated_at, format: :full)
|
|
end
|
|
|
|
def urls
|
|
urls_list = {
|
|
elements_url: elements_my_module_result_path(object.my_module, object),
|
|
attachments_url: assets_my_module_result_path(object.my_module, object)
|
|
}
|
|
|
|
if can_manage_result?(object)
|
|
urls_list.merge!({
|
|
archive_url: archive_my_module_result_path(object.my_module, object),
|
|
update_url: my_module_result_path(object.my_module, object),
|
|
create_table_url: my_module_result_tables_path(object.my_module, object),
|
|
create_text_url: my_module_result_texts_path(object.my_module, object),
|
|
update_asset_view_mode_url: update_asset_view_mode_my_module_result_path(object.my_module,
|
|
object),
|
|
update_view_state_url: update_view_state_my_module_result_path(object.my_module, object),
|
|
direct_upload_url: rails_direct_uploads_url,
|
|
upload_attachment_url: upload_attachment_my_module_result_path(object.my_module, object),
|
|
reorder_elements_url: reorder_my_module_result_result_orderable_elements_path(
|
|
object.my_module, object
|
|
)
|
|
})
|
|
end
|
|
|
|
urls_list[:restore_url] = restore_my_module_result_path(object.my_module, object) if can_restore_result?(object)
|
|
urls_list[:delete_url] = my_module_result_path(object.my_module, object) if can_delete_result?(object)
|
|
if can_create_results?(object.my_module)
|
|
urls_list[:duplicate_url] =
|
|
duplicate_my_module_result_url(object.my_module, object)
|
|
end
|
|
|
|
urls_list
|
|
end
|
|
|
|
def created_at
|
|
object.created_at.strftime('%B %d, %Y at %H:%M')
|
|
end
|
|
|
|
def created_by
|
|
object.user.full_name
|
|
end
|
|
end
|