mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2024-11-17 06:35:14 +08:00
91 lines
2.7 KiB
Ruby
91 lines
2.7 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class LabelTemplateDatatable < CustomDatatable
|
|
include InputSanitizeHelper
|
|
include Rails.application.routes.url_helpers
|
|
|
|
TABLE_COLUMNS = %w(
|
|
label_templates.default
|
|
label_templates.name
|
|
label_templates.type
|
|
label_templates.description
|
|
label_templates.modified_by
|
|
label_templates.updated_at
|
|
label_templates.created_by_user
|
|
label_templates.created_at
|
|
).freeze
|
|
|
|
def initialize(view, label_templates)
|
|
super(view)
|
|
@label_templates = label_templates
|
|
end
|
|
|
|
def sortable_columns
|
|
@sortable_columns ||= TABLE_COLUMNS
|
|
end
|
|
|
|
def searchable_columns
|
|
@searchable_columns ||= TABLE_COLUMNS
|
|
end
|
|
|
|
private
|
|
|
|
def data
|
|
records.map do |record|
|
|
{
|
|
'0' => record.id,
|
|
'1' => record.default,
|
|
'2' => append_format_icon(record),
|
|
'3' => escape_input(record.label_format),
|
|
'4' => escape_input(record.description),
|
|
'5' => escape_input(record.modified_by),
|
|
'6' => I18n.l(record.updated_at, format: :full),
|
|
'7' => escape_input(record.created_by_user),
|
|
'8' => I18n.l(record.created_at, format: :full),
|
|
'recordInfoUrl' => '',
|
|
'DT_RowAttr': {
|
|
'data-edit-url': label_template_path(record),
|
|
'data-set-default-url': set_default_label_template_path(record),
|
|
'data-default': record.default,
|
|
'data-format': record.label_format
|
|
}
|
|
}
|
|
end
|
|
end
|
|
|
|
def append_format_icon(record)
|
|
{
|
|
icon_image_tag:
|
|
ActionController::Base.helpers.image_tag(
|
|
"label_template_icons/#{record.icon}.svg",
|
|
class: 'label-template-icon'
|
|
),
|
|
name: escape_input(record.name)
|
|
}
|
|
end
|
|
|
|
def get_raw_records
|
|
res = @label_templates.joins(
|
|
'LEFT OUTER JOIN users AS creators ' \
|
|
'ON label_templates.created_by_id = creators.id'
|
|
).joins(
|
|
'LEFT OUTER JOIN users AS modifiers '\
|
|
'ON label_templates.last_modified_by_id = modifiers.id'
|
|
).select('label_templates.* AS label_templates')
|
|
.select('creators.full_name AS created_by_user')
|
|
.select('modifiers.full_name AS modified_by')
|
|
.select(
|
|
"('#{Extends::LABEL_TEMPLATE_FORMAT_MAP.to_json}'::jsonb -> label_templates.type)::text "\
|
|
"AS label_format"
|
|
)
|
|
LabelTemplate.from(res, :label_templates)
|
|
end
|
|
|
|
def filter_records(records)
|
|
records.where_attributes_like(
|
|
['label_templates.name', 'label_templates.label_format', 'label_templates.description',
|
|
'label_templates.modified_by', 'label_templates.created_by_user'],
|
|
dt_params.dig(:search, :value)
|
|
)
|
|
end
|
|
end
|