mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2024-12-29 11:45:18 +08:00
3f4c4dd222
* Fix table pagination when sorting by columns with non unique values [SCI-10359] * Refactor solution [SCI-10359]
62 lines
2.1 KiB
Ruby
62 lines
2.1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Lists
|
|
class LabelTemplatesService < BaseService
|
|
private
|
|
|
|
def fetch_records
|
|
res = @raw_data.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"
|
|
)
|
|
@records = LabelTemplate.from(res, :label_templates)
|
|
end
|
|
|
|
def filter_records
|
|
return unless @params[:search]
|
|
|
|
@records = @records.where_attributes_like(
|
|
['label_templates.name', 'label_templates.label_format', 'label_templates.description',
|
|
'label_templates.modified_by', 'label_templates.created_by_user'],
|
|
@params[:search]
|
|
)
|
|
end
|
|
|
|
def sort_records
|
|
return unless @params[:order]
|
|
|
|
sorted_column = sortable_columns[order_params[:column].to_sym]
|
|
|
|
# Handle null values in description column
|
|
if sorted_column == 'label_templates.description'
|
|
sort_by = "COALESCE(label_templates.description, '') ASC"
|
|
sort_by = "COALESCE(label_templates.description, '') DESC" if sort_direction(order_params) == 'DESC'
|
|
@records = @records.order(Arel.sql(sort_by)).order(:id)
|
|
else
|
|
super
|
|
end
|
|
end
|
|
|
|
def sortable_columns
|
|
@sortable_columns ||= {
|
|
default: 'label_templates.default',
|
|
name: 'label_templates.name',
|
|
format: 'label_templates.type',
|
|
description: 'label_templates.description',
|
|
modified_by: 'label_templates.modified_by',
|
|
updated_at: 'label_templates.updated_at',
|
|
created_by: 'label_templates.created_by_user',
|
|
created_at: 'label_templates.created_at'
|
|
}
|
|
end
|
|
end
|
|
end
|