Sha256: d69f7195989278c28b9fb4eec1ff9dd66bf1ab9bce70a9bf938cee9d4260e9b8

Contents?: true

Size: 1.44 KB

Versions: 1

Compression:

Stored size: 1.44 KB

Contents

# frozen_string_literal: true

module Phlexi
  module Form
    module Components
      class Select < Base
        include Concerns::HasOptions

        def view_template(&block)
          select(**attributes) do
            blank_option { blank_option_text } unless skip_blank_option?
            options
          end
        end

        protected

        def options
          option_mapper.each do |value, label|
            option(selected: selected?(value), value: value) { label }
          end
        end

        def blank_option(&)
          option(selected: field.value.nil?, &)
        end

        def build_attributes
          super

          attributes[:id] = field.dom.id
          attributes[:name] = field.dom.name

          build_select_attributes
        end

        def build_select_attributes
          @include_blank_option = attributes.delete(:include_blank_option)

          attributes[:autofocus] = attributes.fetch(:autofocus, field.focused?)
          attributes[:required] = attributes.fetch(:required, field.required?)
          attributes[:disabled] = attributes.fetch(:disabled, field.disabled?)
          attributes[:multiple] = attributes.fetch(:multiple, field.multiple?)
          attributes[:size] = attributes.fetch(:size, field.limit)
        end

        def blank_option_text
          field.placeholder
        end

        def skip_blank_option?
          @include_blank_option == false
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
phlexi-form-0.2.0 lib/phlexi/form/components/select.rb