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