Class: SimpleFormExtension::Inputs::SelectizeInput

Inherits:
SimpleForm::Inputs::Base
  • Object
show all
Includes:
ResourceNameHelper, Translations
Defined in:
lib/simple_form_extension/inputs/selectize_input.rb

Instance Method Summary collapse

Methods included from ResourceNameHelper

#resource_name_for

Methods included from Translations

#_translate

Instance Method Details

#collectionObject



73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/simple_form_extension/inputs/selectize_input.rb', line 73

def collection
  return if search_url

  if (collection = options[:collection])
    if enumerable?(collection)
      collection.map(&method(:serialize_option))
    else
      (object.send(collection) || []).map(&method(:serialize_option))
    end
  elsif relation?
    reflection.klass.all.map(&method(:serialize_option))
  elsif enum?
    enum_options
  else
    []
  end
end

#creatable?Boolean

Returns:

  • (Boolean)


46
47
48
# File 'lib/simple_form_extension/inputs/selectize_input.rb', line 46

def creatable?
  !!options[:creatable]
end

#escapeObject



50
51
52
# File 'lib/simple_form_extension/inputs/selectize_input.rb', line 50

def escape
  options[:escape]
end

#input(wrapper_options = {}) ⇒ Object

This field only allows local select options (serialized into JSON) Searching for remote ones will be implemented later.

Data attributes that may be useful :

:'search-url' => search_url,
:'search-param' => search_param,
:'preload' => preload,


16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/simple_form_extension/inputs/selectize_input.rb', line 16

def input(wrapper_options = {})
  @attribute_name = foreign_key if relation?

  input_html_options[:data] ||= {}

  input_html_options[:data].merge!(
    :'selectize'       => true,
    :'value'           => serialized_value,
    :'creatable'       => creatable?,
    :'multi'           => multi?,
    :'add-translation' => _translate('selectize.add'),
    :'collection'      => collection,
    :'max-items'       => max_items,
    :'sort-field'      => sort_field,
    :'search-url'      => search_url,
    :'search-param'    => search_param,
    :'escape'          => escape
  )

  @builder.hidden_field attribute_name, input_html_options
end

#max_itemsObject



59
60
61
# File 'lib/simple_form_extension/inputs/selectize_input.rb', line 59

def max_items
  options[:max_items]
end

#multi?Boolean

Returns:

  • (Boolean)


54
55
56
57
# File 'lib/simple_form_extension/inputs/selectize_input.rb', line 54

def multi?
  (options.key?(:multi) && !!options[:multi]) ||
    enumerable?(value)
end

#search_paramObject



38
39
40
# File 'lib/simple_form_extension/inputs/selectize_input.rb', line 38

def search_param
  options[:search_param] ||= 'q'
end

#search_urlObject



42
43
44
# File 'lib/simple_form_extension/inputs/selectize_input.rb', line 42

def search_url
  options[:search_url]
end

#serialize_value(value, text = nil) ⇒ Object



119
120
121
# File 'lib/simple_form_extension/inputs/selectize_input.rb', line 119

def serialize_value(value, text = nil)
  { text: (text || value), value: value }
end

#serialized_valueObject



91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
# File 'lib/simple_form_extension/inputs/selectize_input.rb', line 91

def serialized_value
  return input_html_options[:data][:value] if input_html_options[:data][:value]

  if multi?
    if relation?
      value.map do |item|
        if (resource = relation.find { |resource| resource.id == item.to_i }) && (text = text_from(resource))
          serialize_value(item, text)
        else
          serialize_value(item)
        end
      end
    else
      value.map(&method(:serialize_value))
    end
  else
    if relation? && relation && (text = text_from(relation))
      serialize_value(value, text)
    else
      serialize_value(value)
    end
  end
end

#sort_fieldObject



63
64
65
66
67
68
69
70
71
# File 'lib/simple_form_extension/inputs/selectize_input.rb', line 63

def sort_field
  if (sort_field = options[:sort_field]).present?
    sort_field
  elsif enum?
    'position'
  else
    'text'
  end
end

#valueObject



115
116
117
# File 'lib/simple_form_extension/inputs/selectize_input.rb', line 115

def value
  @value ||= options_fetch(:value) { object.send(attribute_name) }
end