Sha256: 9cee3789691271701a152da78486036addbc86722818e685dbcf01e443b01940

Contents?: true

Size: 1.77 KB

Versions: 46

Compression:

Stored size: 1.77 KB

Contents

module Avo
  module Fields
    class SelectField < BaseField
      include Avo::Fields::FieldExtensions::HasIncludeBlank

      attr_reader :options
      attr_reader :enum
      attr_reader :display_value

      def initialize(id, **args, &block)
        args[:placeholder] ||= I18n.t("avo.choose_an_option")

        super(id, **args, &block)

        @options = args[:options] || args[:enum]
        @options = ActiveSupport::HashWithIndifferentAccess.new @options if @options.is_a? Hash
        @enum = args[:enum].present? ? args[:enum] : nil
        @display_value = args[:display_value].present? ? args[:display_value] : false
      end

      def options_for_select
        if options.respond_to? :call
          computed_options = options.call model: model, resource: resource, view: view, field: self
          if display_value
            computed_options.map { |label, value| [value, value] }.to_h
          else
            computed_options
          end
        elsif enum.present?
          if display_value
            options.invert
          else
            options.map { |label, value| [label, label] }.to_h
          end
        elsif display_value
          options.map { |label, value| [value, value] }.to_h
        else
          options
        end
      end

      def label
        if options.respond_to? :call
          computed_options = options.call model: model, resource: resource, view: view, field: self

          return value if display_value

          computed_options.invert.stringify_keys[value]
        elsif enum.present?
          if display_value
            options[value]
          else
            value
          end
        elsif display_value
          value
        else
          options.invert.stringify_keys[value]
        end
      end
    end
  end
end

Version data entries

46 entries across 46 versions & 1 rubygems

Version Path
avo-2.16.0 lib/avo/fields/select_field.rb
avo-2.15.3 lib/avo/fields/select_field.rb
avo-2.15.3.pre.1.data.attrs.to.sidebar.items lib/avo/fields/select_field.rb
avo-2.15.2 lib/avo/fields/select_field.rb
avo-2.15.2.pre.1 lib/avo/fields/select_field.rb
avo-2.15.1 lib/avo/fields/select_field.rb
avo-2.15.0 lib/avo/fields/select_field.rb
avo-2.14.3.pre.7.polytranslations1 lib/avo/fields/select_field.rb
avo-2.14.3.pre.6.nosprockets lib/avo/fields/select_field.rb
avo-2.14.3.pre.5.nosprockets lib/avo/fields/select_field.rb
avo-2.14.3.pre.4.tosqlfix lib/avo/fields/select_field.rb
avo-2.14.3.pre.3.jsbundling lib/avo/fields/select_field.rb
avo-2.14.3.pre.2.tailwindcss lib/avo/fields/select_field.rb
avo-2.14.3.pre.1.branding lib/avo/fields/select_field.rb
avo-2.14.2 lib/avo/fields/select_field.rb
avo-2.14.2.pre.1 lib/avo/fields/select_field.rb
avo-2.14.1 lib/avo/fields/select_field.rb
avo-2.14.1.pre.1 lib/avo/fields/select_field.rb
avo-2.14.0 lib/avo/fields/select_field.rb
avo-2.13.6.pre.2 lib/avo/fields/select_field.rb