Description
A common use case when building forms is the need to group labels and fields, or multiple fields together. Let's discuss these cases.
A label + a field
It's the most common use case. That's for instance what is generated by Rails scaffolding:
<div class="field">
<%= form.label :first_name %>
<%= form.text_field :first_name %>
</div>
When the field is a check_box
or a radio_button
, you usually want to invert the label and the input:
<div class="field">
<%= form.check_box :accepts_terms %>
<%= form.label :accepts_terms %>
</div>
We could have a ViewComponent::Form::GroupComponent
for this purpose.
We could also add a label
option to some helpers (see #16).
Errors
When a field has errors, it's a good practice to display them next to the field. The errors could be handled by the ViewComponent::Form::GroupComponent
.
Hints
Some fields require additional information to help the user. The ViewComponent::Form::GroupComponent
could accept a hint
option for this. See GOV.UK for an example implementation.
A group of fields (and their labels)
The <fieldset>
element is used for this.
<fieldset>
<legend>Your identity</legend>
<div class="field">
<%= form.label :first_name %>
<%= form.text_field :first_name %>
</div>
<div class="field">
<%= form.label :last_name %>
<%= form.text_field :last_name %>
</div>
</fieldset>
Rails does not provide a dedicated helper for this element.
We could have a ViewComponent::Form::FieldsetComponent
for this purpose, or reuse the ViewComponent::Form::GroupComponent
(but it would make it more complex).