Class: Satis::Dropdown::Component

Inherits:
ViewComponent::Base
  • Object
show all
Defined in:
app/components/satis/dropdown/component.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(form:, attribute:, **options, &block) ⇒ Component

Returns a new instance of Component.



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'app/components/satis/dropdown/component.rb', line 8

def initialize(form:, attribute:, **options, &block)
  super

  @form = form
  @attribute = attribute
  @title = title
  @options = options
  @url = options[:url]
  @chain_to = options[:chain_to]
  @free_text = options[:free_text]
  @needs_exact_match = options[:needs_exact_match]
  @reset_button = options[:reset_button] || options[:include_blank]

  options[:input_html] ||= {}
  options[:input_html][:value] = hidden_value

  options[:input_html][:autofocus] ||= false
  if options[:input_html][:autofocus]
    options[:autofocus] = 'autofocus'
    options[:input_html].delete(:autofocus)
  end

  actions =  [options[:input_html]['data-action'], 'change->satis-dropdown#display',
             'focus->satis-dropdown#focus'].join(' ') unless options[:input_html]['data-reflex']

  options[:input_html].merge!('data-satis-dropdown-target' => 'hiddenInput',
                              'data-action' => actions)

  @block = block
  @page_size = options[:page_size] || 10
end

Instance Attribute Details

#attributeObject (readonly)

Returns the value of attribute attribute.



6
7
8
# File 'app/components/satis/dropdown/component.rb', line 6

def attribute
  @attribute
end

#formObject (readonly)

Returns the value of attribute form.



6
7
8
# File 'app/components/satis/dropdown/component.rb', line 6

def form
  @form
end

#optionsObject (readonly)

Returns the value of attribute options.



6
7
8
# File 'app/components/satis/dropdown/component.rb', line 6

def options
  @options
end

#titleObject (readonly)

Returns the value of attribute title.



6
7
8
# File 'app/components/satis/dropdown/component.rb', line 6

def title
  @title
end

#urlObject (readonly)

Returns the value of attribute url.



6
7
8
# File 'app/components/satis/dropdown/component.rb', line 6

def url
  @url
end

Instance Method Details

#custom_item_html?Boolean

Returns:

  • (Boolean)


68
69
70
# File 'app/components/satis/dropdown/component.rb', line 68

def custom_item_html?
  !!@block
end

#hidden_valueObject

Deal with context



41
42
43
44
45
46
47
48
# File 'app/components/satis/dropdown/component.rb', line 41

def hidden_value
  value = @options[:selected]
  value ||= @options.dig(:input_html, :value)
  value ||= form.object&.send(attribute)
  value = value.id if value.respond_to? :id
  value = value.second if value.is_a?(Array) && value.size == 2 && value.first.casecmp?(value.second)
  value
end

#item_html(item) ⇒ Object



72
73
74
# File 'app/components/satis/dropdown/component.rb', line 72

def item_html(item)
  form.template.capture { @block.call(item) }
end

#placeholderObject



50
51
52
53
54
55
56
57
58
# File 'app/components/satis/dropdown/component.rb', line 50

def placeholder
  return title if title.present?

  if form.object.class.respond_to?(:human_attribute_name)
    form.object.class.human_attribute_name(attribute)
  else
    attribute.to_s.humanize
  end
end

#text_methodObject



64
65
66
# File 'app/components/satis/dropdown/component.rb', line 64

def text_method
  options[:text_method] || :name
end

#value_methodObject



60
61
62
# File 'app/components/satis/dropdown/component.rb', line 60

def value_method
  options[:value_method] || :id
end