diff --git a/.changeset/two-badgers-suffer.md b/.changeset/two-badgers-suffer.md new file mode 100644 index 0000000000..6e00104a91 --- /dev/null +++ b/.changeset/two-badgers-suffer.md @@ -0,0 +1,5 @@ +--- +'@primer/view-components': patch +--- + +Prevent hidden inputs from taking up space on the page diff --git a/app/forms/horizontal_form.rb b/app/forms/horizontal_form.rb index 9c821b2abc..f7b1b33045 100644 --- a/app/forms/horizontal_form.rb +++ b/app/forms/horizontal_form.rb @@ -3,6 +3,8 @@ # :nodoc: class HorizontalForm < ApplicationForm form do |my_form| + my_form.hidden(name: :token, value: "abc123") + my_form.group(layout: :horizontal) do |name_group| name_group.text_field( name: :first_name, diff --git a/app/lib/primer/forms/dsl/hidden_input.rb b/app/lib/primer/forms/dsl/hidden_input.rb index cbf00e450c..348f82a0ff 100644 --- a/app/lib/primer/forms/dsl/hidden_input.rb +++ b/app/lib/primer/forms/dsl/hidden_input.rb @@ -27,6 +27,10 @@ def type def supports_validation? false end + + def hidden? + true + end end end end diff --git a/app/lib/primer/forms/group.rb b/app/lib/primer/forms/group.rb index 2b7239b7f8..b0ebcec02d 100644 --- a/app/lib/primer/forms/group.rb +++ b/app/lib/primer/forms/group.rb @@ -18,9 +18,12 @@ def initialize(inputs:, builder:, form:, layout: DEFAULT_LAYOUT, **system_argume @layout = layout @system_arguments = system_arguments + @system_arguments[:display] = :none if inputs.all?(&:hidden?) + @system_arguments[:classes] = class_names( @system_arguments.delete(:classes), - "FormControl-horizontalGroup" => horizontal? + "FormControl-horizontalGroup" => horizontal?, + "FormControl-spacingWrapper" => !horizontal? && inputs.size > 1 ) end diff --git a/test/lib/primer/forms_test.rb b/test/lib/primer/forms_test.rb index 3269d137ec..7e14beceb4 100644 --- a/test/lib/primer/forms_test.rb +++ b/test/lib/primer/forms_test.rb @@ -172,6 +172,12 @@ def test_renders_horizontal_group assert_selector ".FormControl-horizontalGroup .FormControl", count: 2 end + def test_hidden_items_wrapped_in_display_none + render_preview :horizontal_form + + assert_selector ".d-none input[type=hidden]", visible: :hidden + end + def test_renders_multi_input render_preview :multi_input_form