Module: AdvancedSelect::Helper

Defined in:
lib/advanced_select/helper.rb

Instance Method Summary collapse

Instance Method Details

#advanced_select_add_option?(options, selected_options, add_mode, query) ⇒ Boolean

Returns:

  • (Boolean)


66
67
68
69
70
71
72
73
# File 'lib/advanced_select/helper.rb', line 66

def advanced_select_add_option?(options, selected_options, add_mode, query)
  return false unless add_mode && query.present?

  query_label = advanced_select_normalized_label(query)
  advanced_select_matched_labels(options, selected_options).none? do |label|
    advanced_select_normalized_label(label) == query_label
  end
end

#advanced_select_array(value) ⇒ Object



113
114
115
116
117
118
119
120
121
122
# File 'lib/advanced_select/helper.rb', line 113

def advanced_select_array(value)
  case value
  when nil
    []
  when Array
    value.compact
  else
    [value]
  end
end

#advanced_select_class(class_map, *keys) ⇒ Object



37
38
39
# File 'lib/advanced_select/helper.rb', line 37

def advanced_select_class(class_map, *keys)
  class_map.class_name(*keys)
end

#advanced_select_class_map(classes, append_classes = {}) ⇒ Object



145
146
147
148
149
150
151
# File 'lib/advanced_select/helper.rb', line 145

def advanced_select_class_map(classes, append_classes = {})
  if classes.is_a?(AdvancedSelect::ClassMap)
    classes
  else
    AdvancedSelect::ClassMap.new(classes, append_classes)
  end
end

#advanced_select_display_label(label) ⇒ Object



109
110
111
# File 'lib/advanced_select/helper.rb', line 109

def advanced_select_display_label(label)
  label.to_s.split(" > ").last
end

#advanced_select_flat_options(options) ⇒ Object



141
142
143
# File 'lib/advanced_select/helper.rb', line 141

def advanced_select_flat_options(options)
  options.flat_map { |option| option.key?(:options) ? option.fetch(:options) : option }
end

#advanced_select_matched_labels(options, selected_options) ⇒ Object



124
125
126
127
128
129
130
131
132
133
134
135
# File 'lib/advanced_select/helper.rb', line 124

def advanced_select_matched_labels(options, selected_options)
  option_labels = advanced_select_flat_options(options).flat_map do |option|
    label = advanced_select_option_label(option)
    [label, advanced_select_option_display_label(option)]
  end

  selected_labels = selected_options.flat_map do |option|
    [advanced_select_option_label(option), advanced_select_option_display_label(option)]
  end

  option_labels + selected_labels
end

#advanced_select_normalized_label(label) ⇒ Object



137
138
139
# File 'lib/advanced_select/helper.rb', line 137

def advanced_select_normalized_label(label)
  I18n.transliterate(label.to_s.squish).downcase
end

#advanced_select_option_description(option) ⇒ Object



105
106
107
# File 'lib/advanced_select/helper.rb', line 105

def advanced_select_option_description(option)
  option[:description].to_s
end

#advanced_select_option_display_label(option) ⇒ Object



101
102
103
# File 'lib/advanced_select/helper.rb', line 101

def advanced_select_option_display_label(option)
  option.fetch(:display_label, advanced_select_display_label(advanced_select_option_label(option))).to_s
end

#advanced_select_option_groups(options) ⇒ Object



75
76
77
78
79
80
81
82
83
# File 'lib/advanced_select/helper.rb', line 75

def advanced_select_option_groups(options)
  options.map do |option|
    if option.key?(:options)
      { label: option.fetch(:label), options: option.fetch(:options) }
    else
      { label: nil, options: [option] }
    end
  end
end

#advanced_select_option_label(option) ⇒ Object



93
94
95
# File 'lib/advanced_select/helper.rb', line 93

def advanced_select_option_label(option)
  option.fetch(:label, option.fetch(:display_label, option.fetch(:value, option.fetch(:id)))).to_s
end

#advanced_select_option_selected?(option, selected_options) ⇒ Boolean

Returns:

  • (Boolean)


85
86
87
# File 'lib/advanced_select/helper.rb', line 85

def advanced_select_option_selected?(option, selected_options)
  selected_options.any? { |selected_option| selected_option.fetch(:id).to_s == option.fetch(:id).to_s }
end

#advanced_select_option_value(option) ⇒ Object



97
98
99
# File 'lib/advanced_select/helper.rb', line 97

def advanced_select_option_value(option)
  option.fetch(:value, option.fetch(:id)).to_s
end

#advanced_select_options_empty?(options) ⇒ Boolean

Returns:

  • (Boolean)


89
90
91
# File 'lib/advanced_select/helper.rb', line 89

def advanced_select_options_empty?(options)
  advanced_select_flat_options(options).empty?
end

#advanced_select_options_for_render(options, selected_options, searchable) ⇒ Object



62
63
64
# File 'lib/advanced_select/helper.rb', line 62

def advanced_select_options_for_render(options, selected_options, searchable)
  searchable ? selected_options.presence || options : options
end

#advanced_select_options_tag(target_id:, selected:, options:, multiple: false, add_mode: false, query: nil, option_content_partial: nil, classes: {}, append_classes: {}) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/advanced_select/helper.rb', line 24

def advanced_select_options_tag(target_id:, selected:, options:, multiple: false, add_mode: false, query: nil, option_content_partial: nil, classes: {}, append_classes: {})
  render partial: "advanced_select/options", locals: {
    target_id: target_id,
    selected_options: advanced_select_selected_options(selected),
    options: options,
    multiple: multiple,
    add_mode: add_mode,
    query: query,
    option_content_partial: option_content_partial,
    class_map: advanced_select_class_map(classes, append_classes)
  }
end

#advanced_select_selected_options(selected) ⇒ Object



45
46
47
48
49
50
51
52
53
54
# File 'lib/advanced_select/helper.rb', line 45

def advanced_select_selected_options(selected)
  advanced_select_array(selected).map do |option|
    {
      id: option.fetch(:id).to_s,
      value: advanced_select_option_value(option),
      label: advanced_select_option_label(option),
      display_label: advanced_select_option_display_label(option)
    }
  end
end

#advanced_select_selected_value(selected_options) ⇒ Object



56
57
58
59
60
# File 'lib/advanced_select/helper.rb', line 56

def advanced_select_selected_value(selected_options)
  selected_options.map do |option|
    option.merge(displayLabel: option.fetch(:display_label))
  end.to_json
end

#advanced_select_state_class(class_map, key) ⇒ Object



41
42
43
# File 'lib/advanced_select/helper.rb', line 41

def advanced_select_state_class(class_map, key)
  class_map.state_class(key)
end

#advanced_select_tag(name, id:, selected:, options:, placeholder:, options_url: nil, multiple: false, searchable: true, add_mode: false, dependent_fields: {}, option_content_partial: nil, classes: {}, append_classes: {}) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/advanced_select/helper.rb', line 3

def advanced_select_tag(name, id:, selected:, options:, placeholder:, options_url: nil, multiple: false, searchable: true, add_mode: false, dependent_fields: {}, option_content_partial: nil, classes: {}, append_classes: {})
  selected_options = advanced_select_selected_options(selected)
  class_map = advanced_select_class_map(classes, append_classes)

  render partial: "advanced_select/select", locals: {
    name: name,
    id: id,
    options_url: options_url,
    selected_options: selected_options,
    options: options,
    placeholder: placeholder,
    multiple: multiple,
    searchable: searchable && options_url.present?,
    add_mode: add_mode,
    dependent_fields: dependent_fields,
    target_id: "#{id}_options",
    option_content_partial: option_content_partial,
    class_map: class_map
  }
end