mirror of https://github.com/docusealco/docuseal
parent
e1cd62ff40
commit
7fee82ded2
@ -0,0 +1,34 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Templates
|
||||
module Order
|
||||
module_function
|
||||
|
||||
def call(templates, order)
|
||||
case order
|
||||
when 'used_at'
|
||||
subquery = Submission.select(:template_id, Submission.arel_table[:created_at].maximum.as('created_at'))
|
||||
.group(:template_id)
|
||||
|
||||
templates = templates.joins(
|
||||
Template.arel_table
|
||||
.join(subquery.arel.as('submissions'), Arel::Nodes::OuterJoin)
|
||||
.on(Template.arel_table[:id].eq(Submission.arel_table[:template_id]))
|
||||
.join_sources
|
||||
)
|
||||
|
||||
templates.order(
|
||||
Arel::Nodes::Case.new
|
||||
.when(Submission.arel_table[:created_at].gt(Template.arel_table[:updated_at]))
|
||||
.then(Submission.arel_table[:created_at])
|
||||
.else(Template.arel_table[:updated_at])
|
||||
.desc
|
||||
)
|
||||
when 'name'
|
||||
templates.order(name: :asc)
|
||||
else
|
||||
templates.order(id: :desc)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Loading…
Reference in new issue