You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

55 lines
1.7 KiB

module PagyHelper
include Pagy::Frontend
# preferable to sort_link, prepend page=1 as second args (options like) automatically
def pagy_sort_link(search_object, attribute, *args, &)
prepend_args_with_common_pagy_options(args)
sort_link(search_object, attribute.to_s, *args, &)
end
# TODO: needs some refactoring
def pagy_toggle_link(search_object, attribute, *args, &)
params = preserve_q
state = params.dig(:q, attribute).to_s == 'true'
params[:q] = params[:q].merge(archived: !state)
url = url_for(params:)
# build_toggle_field_tag("q[#{attribute}]", t("actions.#{attribute}"), state, on_change: "Turbo.visit('#{url}')")
build_toggle_field_tag("q[#{attribute}]", '', state, on_change: "Turbo.visit('#{url}')")
end
# TODO: needs some refactoring
def pagy_search_field(search_object, attribute, *args)
params = preserve_q
value = params.dig(:q, attribute)
args << {} unless args.last.is_a?(Hash)
url = url_for(params:)
url += url.include?('?') ? '&' : '?'
url += "q[#{attribute}]="
args.last.merge!({ onkeypress: "if (event.key === \"Enter\") {Turbo.visit('#{url}'+event.target.value)}" })
search_field_tag("q[#{attribute}]", value, *args)
end
# preserve ransack search parameters from default parameter 'q'
def preserve_q(search_object = nil)
{ q: request.params[:q] || {} }
end
# in case q exists and q[:sym] exists, its content is returned else nil
def optional_q(sym) = request.params.fetch(:q, nil)&.fetch(sym, nil)
private
def prepend_args_with_common_pagy_options(args)
args << {} unless args.last.is_a?(Hash)
args.last.merge!(
{ page: 1,
data: {
'turbo-action': 'advance'
} }
)
end
end