lib/macros/search/query.rb in ff-tbl-macros-1.0.2 vs lib/macros/search/query.rb in ff-tbl-macros-2.0.0
- old
+ new
@@ -1,16 +1,21 @@
# frozen_string_literal: true
+require 'pagy'
+
module Macros
class Search
class Query < Macros::Base
+ include Pagy::Backend
+
# @return [Macros::Search::Results] step macro instance
#
- # @example searchable is optional
+ # @example searchable is optional, paginate is true by default
# Macros::Search::Query(searchable: Admin)
- def initialize(searchable:)
+ def initialize(searchable:, paginate: true)
@searchable = searchable
+ @paginate = paginate
end
# @param ctx [Trailblazer::Skill] tbl context hash
#
# The search params are passed in ctx[:params] and look like this:
@@ -20,15 +25,23 @@
# `{created_at: :desc}`
def call(ctx, params:, order: nil, **)
return false unless @searchable
ctx[:searchable] = @searchable
- ransack_search_result = @searchable.ransack params[:q]
- ctx[:query] = ransack_search_result
- temp_search_results = ransack_search_result.result
- search_results = order ? temp_search_results.order(order) : temp_search_results
- ctx[:search_results] = search_results.page params[:page]
+ ransack_search = @searchable.ransack params[:q]
+ ctx[:query] = ransack_search
+
+ temp_search_results = ransack_search.result
+
+ if @paginate
+ page = params[:page] || 1
+ pagy, records = pagy(temp_search_results, page: page)
+ ctx[:pages] = pagy
+ temp_search_results = records
+ end
+
+ ctx[:search_results] = order ? temp_search_results.order(order) : temp_search_results
end
end
end
end