format :html do
# sort and filter ui
view :filter_form, cache: :never do
filter_fields slot_selector: "._filter-result-slot",
sort_field: _render(:sort_formgroup)
end
view :quick_filters, cache: :never do
return "" unless quick_filter_list.present?
haml :quick_filters, filter_list: normalized_quick_filter_list
end
def normalized_quick_filter_list
quick_filter_list.map do |hash|
quick_filter_item hash.clone, hash.keys.first
end
end
def reset_filter_data
JSON default_filter_hash
end
def quick_filter_item hash, filter_key
{
text: (hash.delete(:text) || hash[filter_key]),
class: css_classes(hash.delete(:class),
"_filter-link quick-filter-by-#{filter_key}"),
filter: JSON(hash[:filter] || hash)
}
end
# for override
def quick_filter_list
[]
end
# for override
def custom_quick_filters
""
end
# @param data [Hash] the filter categories. The hash needs for every category
# a hash with a label and a input_field entry.
def filter_form data={}, sort_input_field=nil, form_args={}
haml :filter_form, categories: data,
sort_input_field: sort_input_field,
form_args: form_args
end
def filter_fields slot_selector: nil, sort_field: nil
form_args = { action: filter_action_path, class: "slotter" }
form_args["data-slot-selector"] = slot_selector if slot_selector
filter_form filter_form_data, sort_field, form_args
end
def filter_form_data
all_filter_keys.each_with_object({}) do |cat, h|
h[cat] = { label: filter_label(cat),
input_field: _render("filter_#{cat}_formgroup"),
active: active_filter?(cat) }
end
end
def active_filter? field
if filter_keys_from_params.present?
filter_hash.key? field
else
default_filter? field
end
end
def default_filter? field
default_filter_hash.key? field
end
def filter_label field
# return "Keyword" if field.to_sym == :name
#
filter_label_from_method(field) || filter_label_from_name(field)
end
def filter_label_from_method field
try "#{field}_filter_label"
end
def filter_label_from_name field
Card.fetch_name(field) { field.to_s.titleize }
end
def filter_action_path
path
end
view :sort_formgroup, cache: :never do
select_tag "sort",
options_for_select(sort_options, current_sort),
class: "pointer-select _filter-sort form-control",
"data-minimum-results-for-search": "Infinity"
end
end