Class: Primer::Forms::Dsl::TextFieldInput

Inherits:
Input
  • Object
show all
Defined in:
app/lib/primer/forms/dsl/text_field_input.rb

Overview

:nodoc:

Constant Summary

Constants inherited from Input

Input::DEFAULT_SIZE, Input::SIZE_MAPPINGS, Input::SIZE_OPTIONS, Input::SPACE_DELIMITED_ARIA_ATTRIBUTES

Instance Attribute Summary

Attributes inherited from Input

#base_id, #builder, #caption, #form, #form_control, #ids, #input_arguments, #label_arguments, #validation_message

Instance Method Summary collapse

Methods inherited from Input

#add_input_aria, #add_input_classes, #add_input_data, #add_label_classes, #autofocus!, #caption?, #caption_id, #caption_template?, #character_limit_id, #character_limit_target_prefix, #disabled?, #full_width?, #hidden?, #id, #input?, #invalid?, #label, #merge_input_arguments!, #name, #remove_input_data, #render_caption_template, #required?, #size, #supports_validation?, #valid?, #validation_id, #validation_messages, #value, #values_disambiguate_template_names?

Methods included from ClassNameHelper

#class_names

Constructor Details

#initialize(name:, label:, **system_arguments) ⇒ TextFieldInput

Returns a new instance of TextFieldInput.



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'app/lib/primer/forms/dsl/text_field_input.rb', line 15

def initialize(name:, label:, **system_arguments)
  @name = name
  @label = label

  @show_clear_button = system_arguments.delete(:show_clear_button)
  @leading_visual = system_arguments.delete(:leading_visual)
  @trailing_visual = system_arguments.delete(:trailing_visual)
  @leading_spinner = !!system_arguments.delete(:leading_spinner)
  @clear_button_id = system_arguments.delete(:clear_button_id) || SecureRandom.uuid
  @inset = system_arguments.delete(:inset)
  @monospace = system_arguments.delete(:monospace)
  @auto_check_src = system_arguments.delete(:auto_check_src)
  @character_limit = system_arguments.delete(:character_limit)

  if @character_limit.present? && @character_limit.to_i <= 0
    raise ArgumentError, "character_limit must be a positive integer, got #{@character_limit}"
  end

  if @leading_visual
    @leading_visual[:classes] = class_names(
      "FormControl-input-leadingVisual",
      @leading_visual[:classes]
    )
  end

  if @leading_spinner && !@leading_visual
    raise ArgumentError, "text fields that request a leading spinner must also specify a leading visual"
  end

  super(**system_arguments)

  add_input_data(:target, "primer-text-field.inputElement #{system_arguments.dig(:data, :target) || ''}")
  add_input_classes("FormControl-inset") if inset?
  add_input_classes("FormControl-monospace") if monospace?
end

Instance Method Details

#character_limit?Boolean

Returns:



75
76
77
# File 'app/lib/primer/forms/dsl/text_field_input.rb', line 75

def character_limit?
  @character_limit.present?
end

#focusable?Boolean

Returns:



71
72
73
# File 'app/lib/primer/forms/dsl/text_field_input.rb', line 71

def focusable?
  true
end

#leading_visual?Boolean

Returns:



59
60
61
# File 'app/lib/primer/forms/dsl/text_field_input.rb', line 59

def leading_visual?
  !!@leading_visual
end

#to_componentObject



63
64
65
# File 'app/lib/primer/forms/dsl/text_field_input.rb', line 63

def to_component
  TextField.new(input: self)
end

#trailing_visual?Boolean

Returns:



55
56
57
# File 'app/lib/primer/forms/dsl/text_field_input.rb', line 55

def trailing_visual?
  !!@trailing_visual
end

#typeObject



67
68
69
# File 'app/lib/primer/forms/dsl/text_field_input.rb', line 67

def type
  :text_field
end

#validation_argumentsObject



79
80
81
82
83
84
85
86
87
88
89
# File 'app/lib/primer/forms/dsl/text_field_input.rb', line 79

def validation_arguments
  if auto_check_src.present?
    super.merge(
      data: {
        target: "primer-text-field.validationElement"
      }
    )
  else
    super
  end
end

#validation_error_icon_targetObject



95
96
97
# File 'app/lib/primer/forms/dsl/text_field_input.rb', line 95

def validation_error_icon_target
  "primer-text-field.validationErrorIcon"
end

#validation_message_argumentsObject



99
100
101
102
103
104
105
106
107
108
109
# File 'app/lib/primer/forms/dsl/text_field_input.rb', line 99

def validation_message_arguments
  if auto_check_src.present?
    super.merge(
      data: {
        target: "primer-text-field.validationMessageElement"
      }
    )
  else
    super
  end
end

#validation_success_icon_targetObject



91
92
93
# File 'app/lib/primer/forms/dsl/text_field_input.rb', line 91

def validation_success_icon_target
  "primer-text-field.validationSuccessIcon"
end