Fix sorting on PET tables [SCI-11995]

This commit is contained in:
Andrej 2025-06-10 15:28:06 +02:00
parent c6fe2b4d8c
commit c7ec773825
4 changed files with 43 additions and 19 deletions

View file

@ -11,11 +11,13 @@
:valueType="'stringWithoutTimezone'"
:clearable="true"/>
<template v-else-if="this.params.data[this.params.field].value_formatted">
<i :class="this.params.data[this.params.field].icon || 'sn-icon sn-icon-calendar'"></i>
{{ this.params.data[this.params.field].value_formatted }}
<div class="pl-1">
<i :class="this.params.data[this.params.field].icon || 'sn-icon sn-icon-calendar'"></i>
{{ this.params.data[this.params.field].value_formatted }}
</div>
</template>
<template v-else>
{{ this.params.emptyPlaceholder }}
<div class="pl-2">{{ this.params.emptyPlaceholder }}</div>
</template>
</div>
</template>

View file

@ -116,6 +116,10 @@ module Lists
@records.order(Arel.sql('COALESCE(experiments.archived_on, projects.archived_on) DESC'))
.group('experiments.archived_on', 'projects.archived_on')
end
when 'favorite'
@records.order(Arel.sql("CASE
WHEN favorites IS NULL THEN 1
ELSE 0 END #{sort_direction(order_params)}"))
when 'status'
@records.order(Arel.sql("CASE
WHEN experiments.started_at IS NULL AND experiments.done_at IS NULL THEN -1

View file

@ -122,9 +122,9 @@ module Lists
.group('my_modules.id')
.order(Arel.sql('COUNT(DISTINCT tags.id) DESC'))
when 'favorite_ASC'
@records = @records.order(:favorite)
when 'favorite_DESC'
@records = @records.order(favorite: :desc)
when 'favorite_DESC'
@records = @records.order(:favorite)
else
__send__("#{sortable_columns[order_params[:column].to_sym]}_sort", sort_direction(order_params))
end

View file

@ -141,9 +141,9 @@ module Lists
case sort
when 'created_at_ASC'
@records = @records.sort_by { |object| project_timestamp(:created_at, object) }.reverse!
when 'created_at_DESC'
@records = @records.sort_by { |object| project_timestamp(:created_at, object) }
when 'created_at_DESC'
@records = @records.sort_by { |object| project_timestamp(:created_at, object) }.reverse!
when 'name_ASC'
@records = @records.sort_by { |c| c.name.downcase }
when 'name_DESC'
@ -161,9 +161,9 @@ module Lists
when 'users_DESC'
@records = @records.sort_by { |object| project_users_count(object) }.reverse!
when 'updated_at_ASC'
@records = @records.sort_by { |object| project_timestamp(:updated_at, object) }.reverse!
when 'updated_at_DESC'
@records = @records.sort_by { |object| project_timestamp(:updated_at, object) }
when 'updated_at_DESC'
@records = @records.sort_by { |object| project_timestamp(:updated_at, object) }.reverse!
when 'comments_ASC'
@records = @records.sort_by { |object| project_comments_count(object) }
when 'comments_DESC'
@ -192,6 +192,14 @@ module Lists
@records = @records.sort_by { |object| project_description(object) }
when 'description_DESC'
@records = @records.sort_by { |object| project_description(object) }.reverse!
when 'completed_experiments_ASC'
@records = @records.sort_by { |object| completed_experiments(object) }
when 'completed_experiments_DESC'
@records = @records.sort_by { |object| completed_experiments(object) }.reverse!
when 'completed_tasks_ASC'
@records = @records.sort_by { |object| completed_tasks(object) }
when 'completed_tasks_DESC'
@records = @records.sort_by { |object| completed_tasks(object) }.reverse!
end
end
@ -200,23 +208,21 @@ module Lists
end
def project_comments_count(object)
return [0, 0, -1] unless project?(object)
return [1, 0, -1] unless project?(object)
[1, object.comments.count, can_create_project_comments?(@user, object) ? 1 : 0]
[0, object.comments.count, can_create_project_comments?(@user, object) ? 1 : 0]
end
def project_users_count(object)
return [0, -1] unless project?(object)
return [1, -1] unless project?(object)
[1, object.users.count]
[0, object.users.count]
end
def project_favorites(object)
if project?(object)
object.favorite ? 1 : 0
else
-1
end
return [1, 0, -1] unless project?(object)
[0, can_read_project?(@user, object) ? 0 : 1, object.favorite ? 0 : 1]
end
def project_start_date(object)
@ -246,7 +252,7 @@ module Lists
def project_supervised_by(object)
return [1, '', 1] unless project?(object)
[object.supervised_by_id ? 0 : 1, object.supervised_by&.full_name || '', 0]
[object.supervised_by_id ? 0 : 1, strip_tags(object.supervised_by&.full_name&.downcase || ''), 0]
end
def project_description(object)
@ -259,6 +265,18 @@ module Lists
project?(object) ? object[timestamp_name] : Constants::INFINITE_DATE
end
def completed_experiments(object)
return [1, -1] unless project?(object)
[0, object.completed_experiments_count]
end
def completed_tasks(object)
return [1, -1] unless project?(object)
[0, object.completed_tasks_count]
end
def project?(object)
object.instance_of?(Project)
end