Sha256: 63d13dcbe76e55d7599d443f0f0ac8e5ed30d8350fa8c49307dea445e8a457ee

Contents?: true

Size: 771 Bytes

Versions: 8

Compression:

Stored size: 771 Bytes

Contents

require "securerandom"

class HotwireCombobox::Listbox::Group
  attr_reader :options

  def initialize(name, options:)
    @name = name
    @options = options
  end

  def render_in(view)
    view.tag.ul **group_attrs do
      view.concat view.tag.li(name, **label_attrs)

      options.map do |option|
        view.concat view.render(option)
      end
    end
  end

  private
    attr_reader :name

    def id
      @id ||= SecureRandom.uuid
    end

    def group_attrs
      {
        class: "hw-combobox__group",
        role: :group,
        aria: group_aria
      }
    end

    def group_aria
      { labelledby: id }
    end

    def label_attrs
      {
        id: id,
        class: "hw-combobox__group__label",
        role: :presentation
      }
    end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
hotwire_combobox-0.3.2 app/presenters/hotwire_combobox/listbox/group.rb
hotwire_combobox-0.3.1 app/presenters/hotwire_combobox/listbox/group.rb
hotwire_combobox-0.3.0 app/presenters/hotwire_combobox/listbox/group.rb
hotwire_combobox-0.2.5 app/presenters/hotwire_combobox/listbox/group.rb
hotwire_combobox-0.2.4 app/presenters/hotwire_combobox/listbox/group.rb
hotwire_combobox-0.2.3 app/presenters/hotwire_combobox/listbox/group.rb
hotwire_combobox-0.2.2 app/presenters/hotwire_combobox/listbox/group.rb
hotwire_combobox-0.2.1 app/presenters/hotwire_combobox/listbox/group.rb