Class: StimulusPlumbers::Components::Combobox

Inherits:
Plumber::Base show all
Defined in:
lib/stimulus_plumbers/components/combobox.rb,
lib/stimulus_plumbers/components/combobox/date.rb,
lib/stimulus_plumbers/components/combobox/time.rb,
lib/stimulus_plumbers/components/combobox/options.rb,
lib/stimulus_plumbers/components/combobox/popover.rb,
lib/stimulus_plumbers/components/combobox/trigger.rb,
lib/stimulus_plumbers/components/combobox/dropdown.rb,
lib/stimulus_plumbers/components/combobox/time/drum.rb,
lib/stimulus_plumbers/components/combobox/autocomplete.rb,
lib/stimulus_plumbers/components/combobox/options/option.rb,
lib/stimulus_plumbers/components/combobox/options/option_group.rb

Defined Under Namespace

Classes: Autocomplete, Date, Dropdown, Options, Popover, Time, Trigger

Constant Summary collapse

STIMULUS_CONTROLLER =
"input-combobox"
FORMAT_CONTROLLER =
"input-format"
FORMAT_ACTION =
"input-combobox:changed->input-format#format"

Constants included from Plumber::HtmlOptions

Plumber::HtmlOptions::STIMULUS_SPACEJOIN_KEYS

Instance Attribute Summary

Attributes inherited from Plumber::Base

#template

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Plumber::Base

#initialize, #theme

Methods included from Plumber::HtmlOptions

#extract_classes, #merge_data_options, #merge_html_options, #merge_string_option, #normalize_part

Constructor Details

This class inherits a constructor from StimulusPlumbers::Plumber::Base

Class Method Details

.popover_id_for(trigger_id) ⇒ Object



10
11
12
# File 'lib/stimulus_plumbers/components/combobox.rb', line 10

def self.popover_id_for(trigger_id)
  [trigger_id, "popover"].compact.join("_")
end

Instance Method Details

#render(trigger: {}, input: {}, popover: {}, **kwargs, &block) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/stimulus_plumbers/components/combobox.rb', line 14

def render(trigger: {}, input: {}, popover: {}, **kwargs, &block)
  popover_id    = self.class.popover_id_for(trigger[:id])
  initial_value = input[:value]
  haspopup      = popover.delete(:haspopup) { popover[:role] || "dialog" }
  html_options  = merge_html_options({ data: build_stimulus_data(initial_value) }, kwargs)

  template.(:div, **html_options) do
    template.safe_join(
      [
        combobox_trigger(popover_id, trigger, haspopup),
        hidden_input(input),
        combobox_popover(popover_id, popover, &block)
      ]
    )
  end
end