|
|
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\") {event.preventDefault(); Turbo.visit('#{url}'+event.target.value, { frame: 'scores', turbo: true, acceptsStreamResponse: true })}" }) # args.last.merge!({ onkeypress: 'if (event.key === "Enter") {event.preventDefault()}' })
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
|