Sha256: 0a21e2f637a592c7e1b570b5fb2870c24df54b11bc17048d35bcfb105bb0b32e

Contents?: true

Size: 1.16 KB

Versions: 4

Compression:

Stored size: 1.16 KB

Contents

# frozen_string_literal: true

module Maquina
  module Application
    module Components
      class SelectComponent < ComponentBase
        delegate :controller, :options_for_select, to: :helpers

        def view_template
          options = input_html(no_helpers: true).deep_dup

          div(**control_html) do
            @form.label attribute_name, class: "label #{label_css_class}"
            div(class: "mt-1") do
              @form.select attribute_name, to_values!(options), extract_options!(options), options
              help_template
              error_template
            end
          end
        end

        private

        def extract_options!(options)
          options.extract!(:include_blank)
        end

        def to_values!(options)
          values = options.delete(:values)
          selected = options.delete(:selected)

          if values.is_a?(Symbol)
            values = controller.send(values) if controller.respond_to?(values, true)
          else
            # TODO: Add support for other value options
            []
          end

          options_for_select(values, selected.present? ? selected : nil)
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
maquina-0.7.2 app/views/maquina/application/components/select_component.rb
maquina-0.7.1 app/views/maquina/application/components/select_component.rb
maquina-0.5.2 app/views/maquina/application/components/select_component.rb
maquina-0.5.1 app/views/maquina/application/components/select_component.rb