diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2023-02-03 18:07:39 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2023-02-03 18:07:39 +0300 |
commit | 3cda3d43aef1e92e2eedf7383122c6db9c61149f (patch) | |
tree | 1b4dd068a449d050afafa403de54a00a63e9bfc4 /app/models | |
parent | 83916cf0a2f9254455a08a723961db34f0840df4 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/models')
-rw-r--r-- | app/models/work_item.rb | 25 | ||||
-rw-r--r-- | app/models/work_items/widgets/hierarchy.rb | 2 |
2 files changed, 24 insertions, 3 deletions
diff --git a/app/models/work_item.rb b/app/models/work_item.rb index ec2071b663f..5ae3fb6cf78 100644 --- a/app/models/work_item.rb +++ b/app/models/work_item.rb @@ -17,8 +17,9 @@ class WorkItem < Issue has_many :child_links, class_name: '::WorkItems::ParentLink', foreign_key: :work_item_parent_id has_many :work_item_children, through: :child_links, class_name: 'WorkItem', foreign_key: :work_item_id, source: :work_item - has_many :work_item_children_by_created_at, -> { order(:created_at) }, through: :child_links, class_name: 'WorkItem', - foreign_key: :work_item_id, source: :work_item + has_many :work_item_children_by_relative_position, -> { work_item_children_keyset_order }, + through: :child_links, class_name: 'WorkItem', + foreign_key: :work_item_id, source: :work_item scope :inc_relations_for_permission_check, -> { includes(:author, project: :project_feature) } @@ -32,6 +33,26 @@ class WorkItem < Issue def test_reports_join_column 'issues.id' end + + def work_item_children_keyset_order + keyset_order = Gitlab::Pagination::Keyset::Order.build([ + Gitlab::Pagination::Keyset::ColumnOrderDefinition.new( + attribute_name: :relative_position, + column_expression: WorkItems::ParentLink.arel_table[:relative_position], + order_expression: WorkItems::ParentLink.arel_table[:relative_position].asc.nulls_last, + nullable: :nulls_last, + distinct: false + ), + Gitlab::Pagination::Keyset::ColumnOrderDefinition.new( + attribute_name: :created_at, + order_expression: WorkItem.arel_table[:created_at].asc, + nullable: :not_nullable, + distinct: false + ) + ]) + + includes(:child_links).order(keyset_order) + end end def noteable_target_type_name diff --git a/app/models/work_items/widgets/hierarchy.rb b/app/models/work_items/widgets/hierarchy.rb index ee10c631bcc..8f54cb32f43 100644 --- a/app/models/work_items/widgets/hierarchy.rb +++ b/app/models/work_items/widgets/hierarchy.rb @@ -8,7 +8,7 @@ module WorkItems end def children - work_item.work_item_children_by_created_at + work_item.work_item_children_by_relative_position end end end |