This commit is contained in:
Matt Jankowski 2025-11-26 17:05:15 +00:00 committed by GitHub
commit f005f71805
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -1,31 +1,49 @@
# frozen_string_literal: true # frozen_string_literal: true
class DateOfBirthInput < SimpleForm::Inputs::Base class DateOfBirthInput < SimpleForm::Inputs::Base
OPTIONS = [ OPTIONS = {
{ autocomplete: 'bday-year', maxlength: 4, pattern: '[0-9]+', placeholder: 'YYYY' }.freeze, day: { autocomplete: 'bday-day', maxlength: 2, pattern: '[0-9]+', placeholder: 'DD' },
{ autocomplete: 'bday-month', maxlength: 2, pattern: '[0-9]+', placeholder: 'MM' }.freeze, month: { autocomplete: 'bday-month', maxlength: 2, pattern: '[0-9]+', placeholder: 'MM' },
{ autocomplete: 'bday-day', maxlength: 2, pattern: '[0-9]+', placeholder: 'DD' }.freeze, year: { autocomplete: 'bday-year', maxlength: 4, pattern: '[0-9]+', placeholder: 'YYYY' },
].freeze }.freeze
def input(wrapper_options = nil) def input(wrapper_options = nil)
merged_input_options = merge_wrapper_options(input_html_options, wrapper_options) merged_input_options = merge_wrapper_options(input_html_options, wrapper_options)
merged_input_options[:inputmode] = 'numeric' merged_input_options[:inputmode] = 'numeric'
values = (object.public_send(attribute_name) || '').to_s.split('-') safe_join(
ordered_options.map do |option|
safe_join(2.downto(0).map do |index| options = merged_input_options
options = merged_input_options.merge(OPTIONS[index]).merge id: generate_id(index), 'aria-label': I18n.t("simple_form.labels.user.date_of_birth_#{index + 1}i"), value: values[index] .merge(OPTIONS[option])
@builder.text_field("#{attribute_name}(#{index + 1}i)", options) .merge(
end) id: generate_id(option),
'aria-label': I18n.t("simple_form.labels.user.date_of_birth_#{param_for(option)}"),
value: values[option]
)
@builder.text_field("#{attribute_name}(#{param_for(option)})", options)
end
)
end end
def label_target def label_target
"#{attribute_name}_3i" "#{attribute_name}_#{param_for(ordered_options.first)}"
end end
private private
def generate_id(index) def ordered_options
"#{object_name}_#{attribute_name}_#{index + 1}i" I18n.t('date.order').map(&:to_sym)
end
def generate_id(option)
"#{object_name}_#{attribute_name}_#{param_for(option)}"
end
def param_for(option)
"#{ActionView::Helpers::DateTimeSelector::POSITION[option]}i"
end
def values
Date._parse((object.public_send(attribute_name) || '').to_s).transform_keys(mon: :month, mday: :day)
end end
end end