mirror of
https://github.com/manyfold3d/manyfold.git
synced 2026-10-21 19:22:18 -05:00
48 lines
998 B
Ruby
48 lines
998 B
Ruby
class Components::InputRow < Components::Base
|
|
def initialize(form:, attribute:, label:, help: nil, options: {})
|
|
@form = form
|
|
@attribute = attribute
|
|
@attribute_without_id = @attribute.to_s.gsub("_id", "")
|
|
@label = label
|
|
@help = help
|
|
@options = options
|
|
end
|
|
|
|
def view_template
|
|
div do
|
|
@form.label(@attribute, @label, class: label_class)
|
|
end
|
|
div do
|
|
input_group
|
|
errors_for(@form.object, @attribute_without_id)
|
|
help
|
|
end
|
|
end
|
|
|
|
def label_class
|
|
"col-form-label"
|
|
end
|
|
|
|
def input_group
|
|
div class: "input-group" do
|
|
input_element
|
|
end
|
|
end
|
|
|
|
def input_element
|
|
raise NotImplementedError
|
|
end
|
|
|
|
def help
|
|
span(class: "form-text") { @help } if @help
|
|
end
|
|
|
|
def errors_for(object, attribute)
|
|
return if object.nil? || attribute.nil?
|
|
return unless object.errors.include? attribute
|
|
div class: "invalid-feedback d-block" do
|
|
object.errors.full_messages_for(attribute).join("; ")
|
|
end
|
|
end
|
|
end
|