Sha256: ca3ee6d24b66bdad1e83a925d95264da1187135592732f5f2dd44c603f639cc6

Contents?: true

Size: 1.69 KB

Versions: 18

Compression:

Stored size: 1.69 KB

Contents

# frozen_string_literal: true

module Primer
  module Forms
    module Dsl
      # :nodoc:
      class CheckBoxInput < Input
        DEFAULT_SCHEME = :boolean
        SCHEMES = [DEFAULT_SCHEME, :array].freeze

        attr_reader :name, :label, :value, :unchecked_value, :scheme, :nested_form_block, :nested_form_arguments

        def initialize(name:, label:, value: nil, unchecked_value: nil, scheme: DEFAULT_SCHEME, **system_arguments)
          raise ArgumentError, "Check box scheme must be one of #{SCHEMES.join(', ')}" unless SCHEMES.include?(scheme)

          raise ArgumentError, "Check box needs an explicit value if scheme is array" if scheme == :array && value.nil?

          @name = name
          @label = label
          @value = value
          @unchecked_value = unchecked_value
          @scheme = scheme

          super(**system_arguments)

          yield(self) if block_given?
        end

        # check boxes cannot be invalid, as both checked and unchecked are valid states
        # :nocov:
        def valid?
          true
        end
        # :nocov:

        def to_component
          CheckBox.new(input: self)
        end

        def nested_form(**system_arguments, &block)
          @nested_form_arguments = system_arguments
          @nested_form_block = block
        end

        def type
          :check_box
        end

        def supports_validation?
          false
        end

        def values_disambiguate_template_names?
          # Check boxes submitted as an array all have the same name, so we return true here
          # to ensure different caption templates can be attached to individual check box inputs.
          @scheme == :array
        end
      end
    end
  end
end

Version data entries

18 entries across 18 versions & 2 rubygems

Version Path
primer_view_components-0.36.5 app/lib/primer/forms/dsl/check_box_input.rb
openproject-primer_view_components-0.52.2 app/lib/primer/forms/dsl/check_box_input.rb
primer_view_components-0.36.4 app/lib/primer/forms/dsl/check_box_input.rb
openproject-primer_view_components-0.52.1 app/lib/primer/forms/dsl/check_box_input.rb
openproject-primer_view_components-0.52.0 app/lib/primer/forms/dsl/check_box_input.rb
primer_view_components-0.36.3 app/lib/primer/forms/dsl/check_box_input.rb
openproject-primer_view_components-0.51.0 app/lib/primer/forms/dsl/check_box_input.rb
primer_view_components-0.36.2 app/lib/primer/forms/dsl/check_box_input.rb
openproject-primer_view_components-0.50.1 app/lib/primer/forms/dsl/check_box_input.rb
openproject-primer_view_components-0.50.0 app/lib/primer/forms/dsl/check_box_input.rb
primer_view_components-0.36.1 app/lib/primer/forms/dsl/check_box_input.rb
primer_view_components-0.36.0 app/lib/primer/forms/dsl/check_box_input.rb
openproject-primer_view_components-0.49.2 app/lib/primer/forms/dsl/check_box_input.rb
primer_view_components-0.35.2 app/lib/primer/forms/dsl/check_box_input.rb
openproject-primer_view_components-0.49.1 app/lib/primer/forms/dsl/check_box_input.rb
openproject-primer_view_components-0.49.0 app/lib/primer/forms/dsl/check_box_input.rb
primer_view_components-0.35.1 app/lib/primer/forms/dsl/check_box_input.rb
primer_view_components-0.35.0 app/lib/primer/forms/dsl/check_box_input.rb