Module: Decidim::Admin::FilterableHelper

Defined in:
app/helpers/decidim/admin/filterable_helper.rb

Overview

Helper that provides methods related to Decidim::Admin::Filterable concern.

Instance Method Summary collapse

Instance Method Details

#admin_filter_selectorObject

Renders the filters selector with tags in the admin panel.



8
9
10
# File 'app/helpers/decidim/admin/filterable_helper.rb', line 8

def admin_filter_selector
  render partial: "decidim/admin/shared/filters"
end

#applied_filter_tag(filter, value) ⇒ Object



103
104
105
106
107
108
109
# File 'app/helpers/decidim/admin/filterable_helper.rb', line 103

def applied_filter_tag(filter, value)
  (:span, class: "label secondary") do
    concat "#{i18n_filter_label(filter)}: "
    concat i18n_filter_value(filter, value)
    concat remove_filter_icon_link(filter)
  end
end

#applied_filters_hidden_field_tagsObject



86
87
88
89
90
91
92
93
94
95
# File 'app/helpers/decidim/admin/filterable_helper.rb', line 86

def applied_filters_hidden_field_tags
  html = []
  html += ransack_params.slice(*filters, *extra_filters).map do |filter, value|
    hidden_field_tag("q[#{filter}]", value)
  end
  html += query_params.slice(*extra_allowed_params).map do |filter, value|
    hidden_field_tag(filter, value)
  end
  html.join.html_safe
end

#applied_filters_tagsObject



97
98
99
100
101
# File 'app/helpers/decidim/admin/filterable_helper.rb', line 97

def applied_filters_tags
  ransack_params.slice(*filters).map do |filter, value|
    applied_filter_tag(filter, value)
  end.join.html_safe
end

#build_submenu_options_tree_from_array(filter, values) ⇒ Object

Builds a tree of links from an array. The tree will have only one level.



25
26
27
28
29
30
# File 'app/helpers/decidim/admin/filterable_helper.rb', line 25

def build_submenu_options_tree_from_array(filter, values)
  links = []
  links += extra_dropdown_submenu_options_items(filter)
  links += values.map { |value| filter_link_value(filter, value) }
  links.each_with_object({}) { |link, hash| hash[link] = nil }
end

#build_submenu_options_tree_from_hash(filter, values) ⇒ Object

Builds a tree of links from an Hash. The tree can have many levels.



39
40
41
42
43
44
45
46
47
48
# File 'app/helpers/decidim/admin/filterable_helper.rb', line 39

def build_submenu_options_tree_from_hash(filter, values)
  values.each_with_object({}) do |(key, value), hash|
    link = filter_link_value(filter, key)
    hash[link] = if value.nil?
                   nil
                 elsif value.is_a?(Hash)
                   build_submenu_options_tree_from_hash(filter, value)
                 end
  end
end

Produces the html for the dropdown submenu from the options tree. Returns a ActiveSupport::SafeBuffer.



52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'app/helpers/decidim/admin/filterable_helper.rb', line 52

def dropdown_submenu(options)
  (:ul, class: "vertical menu") do
    options.map do |key, value|
      if value.nil?
        (:li, key)
      elsif value.is_a?(Hash)
        (:li, class: "is-dropdown-submenu-parent") do
          key + dropdown_submenu(value)
        end
      end
    end.join.html_safe
  end
end

#extra_dropdown_submenu_options_items(_filter) ⇒ Object

To be overriden. Useful for adding links that do not match with the filter. Must return an Array.



34
35
36
# File 'app/helpers/decidim/admin/filterable_helper.rb', line 34

def extra_dropdown_submenu_options_items(_filter)
  []
end


66
67
68
# File 'app/helpers/decidim/admin/filterable_helper.rb', line 66

def filter_link_label(filter)
  link_to(i18n_filter_label(filter), href: "#")
end


70
71
72
# File 'app/helpers/decidim/admin/filterable_helper.rb', line 70

def filter_link_value(filter, value)
  link_to(i18n_filter_value(filter, value), query_params_with(filter => value))
end

#i18n_filter_label(filter) ⇒ Object



74
75
76
# File 'app/helpers/decidim/admin/filterable_helper.rb', line 74

def i18n_filter_label(filter)
  t("decidim.admin.filters.#{filter}.label")
end

#i18n_filter_value(filter, value) ⇒ Object



78
79
80
81
82
83
84
# File 'app/helpers/decidim/admin/filterable_helper.rb', line 78

def i18n_filter_value(filter, value)
  if I18n.exists?("decidim.admin.filters.#{filter}.values.#{value}")
    t(value, scope: "decidim.admin.filters.#{filter}.values")
  else
    find_dynamic_translation(filter, value)
  end
end


111
112
113
114
115
116
117
118
# File 'app/helpers/decidim/admin/filterable_helper.rb', line 111

def remove_filter_icon_link(filter)
  icon_link_to(
    "circle-x",
    url_for(query_params_without(filter)),
    t("decidim.admin.actions.cancel"),
    class: "action-icon--remove"
  )
end

Builds a tree of links from Decidim::Admin::Filterable::filters_with_values



13
14
15
16
17
18
19
20
21
22
# File 'app/helpers/decidim/admin/filterable_helper.rb', line 13

def submenu_options_tree
  filters_with_values.each_with_object({}) do |(filter, values), hash|
    link = filter_link_label(filter)
    hash[link] = if values.is_a?(Array)
                   build_submenu_options_tree_from_array(filter, values)
                 elsif values.is_a?(Hash)
                   build_submenu_options_tree_from_hash(filter, values)
                 end
  end
end