mirror of
https://github.com/opf/openproject.git
synced 2026-06-13 19:20:00 +00:00
[chore] render filterable tree view in fieldset
Fieldset-style inputs never go through the `FormControl` wrapper, so the legend needs the `FormControl-label` class applied by the component. The input does not support validation for the time being. Wrapper arguments stay on the fieldset, while the component-specific and form arguments flow to the inner tree view.
This commit is contained in:
@@ -1 +1,2 @@
|
|||||||
@import "advanced_form_group"
|
@import "advanced_form_group"
|
||||||
|
@import "filterable_tree_view"
|
||||||
|
|||||||
@@ -59,6 +59,10 @@ module Primer
|
|||||||
true
|
true
|
||||||
end
|
end
|
||||||
# :nocov:
|
# :nocov:
|
||||||
|
|
||||||
|
def supports_validation?
|
||||||
|
false
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,7 +1,19 @@
|
|||||||
<%=
|
<div class="FormControl-filterable-tree-view-wrap">
|
||||||
render(FormControl.new(input: @input)) do
|
<%= content_tag(:fieldset, **@fieldset_arguments) do %>
|
||||||
render(Primer::OpenProject::FilterableTreeView.new(**@input.input_arguments)) do |tree_view|
|
<% if @input.label %>
|
||||||
@input.block&.call(tree_view)
|
<%= content_tag(:legend, **@input.label_arguments) do %>
|
||||||
end
|
<%= @input.label %>
|
||||||
end
|
<% end %>
|
||||||
%>
|
<% end %>
|
||||||
|
<div class="mb-2">
|
||||||
|
<%= render(Caption.new(input: @input)) %>
|
||||||
|
</div>
|
||||||
|
<%= render(SpacingWrapper.new) do %>
|
||||||
|
<%=
|
||||||
|
render(Primer::OpenProject::FilterableTreeView.new(**@tree_view_arguments)) do |tree_view|
|
||||||
|
@input.block&.call(tree_view)
|
||||||
|
end
|
||||||
|
%>
|
||||||
|
<% end %>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
|
|||||||
@@ -39,10 +39,18 @@ module Primer
|
|||||||
super()
|
super()
|
||||||
|
|
||||||
@input = input
|
@input = input
|
||||||
|
@input.add_label_classes("FormControl-label")
|
||||||
|
|
||||||
@input.input_arguments[:form_arguments] = {
|
@fieldset_arguments = @input.input_arguments.extract!(:hidden, :class, :classes)
|
||||||
name: @input.name,
|
Primer::Forms::Utils.classify(@fieldset_arguments)
|
||||||
builder: builder
|
@fieldset_arguments.delete(:class) if @fieldset_arguments[:class].blank?
|
||||||
|
|
||||||
|
@tree_view_arguments = {
|
||||||
|
**@input.input_arguments,
|
||||||
|
form_arguments: {
|
||||||
|
name: @input.name,
|
||||||
|
builder: builder
|
||||||
|
}
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
.FormControl-filterable-tree-view-wrap
|
||||||
|
& fieldset
|
||||||
|
padding: 0
|
||||||
|
margin: 0
|
||||||
|
border: 0
|
||||||
@@ -37,6 +37,7 @@ module Wikis
|
|||||||
|
|
||||||
f.filterable_tree_view(
|
f.filterable_tree_view(
|
||||||
name: "wiki_page_selection",
|
name: "wiki_page_selection",
|
||||||
|
label: I18n.t("wikis.link_existing_wiki_page_form.label"),
|
||||||
src: helpers.search_wiki_pages_path(provider_id: model.provider_id, name: "wiki_page_selection"),
|
src: helpers.search_wiki_pages_path(provider_id: model.provider_id, name: "wiki_page_selection"),
|
||||||
filter_mode_control_arguments: { hidden: true },
|
filter_mode_control_arguments: { hidden: true },
|
||||||
filter_input_arguments: {
|
filter_input_arguments: {
|
||||||
|
|||||||
@@ -151,6 +151,7 @@ en:
|
|||||||
link_existing_wiki_page_dialog:
|
link_existing_wiki_page_dialog:
|
||||||
title: Add existing wiki page
|
title: Add existing wiki page
|
||||||
link_existing_wiki_page_form:
|
link_existing_wiki_page_form:
|
||||||
|
label: Wiki page
|
||||||
no_results: No wiki pages found
|
no_results: No wiki pages found
|
||||||
placeholder: Search for a wiki page
|
placeholder: Search for a wiki page
|
||||||
oauth_login_component:
|
oauth_login_component:
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ RSpec.describe Primer::OpenProject::Forms::FilterableTreeView, type: :forms do
|
|||||||
render_in_view_context(model, params) do |model, params|
|
render_in_view_context(model, params) do |model, params|
|
||||||
primer_form_with(url: "/foo", model:) do |f|
|
primer_form_with(url: "/foo", model:) do |f|
|
||||||
render_inline_form(f) do |form|
|
render_inline_form(f) do |form|
|
||||||
form.filterable_tree_view(name: :ingredients, **params) do |tree|
|
form.filterable_tree_view(name: :ingredients, label: "Ingredients", **params) do |tree|
|
||||||
tree.with_leaf(select_variant: :multiple, label: "flour")
|
tree.with_leaf(select_variant: :multiple, label: "flour")
|
||||||
tree.with_leaf(select_variant: :multiple, label: "sugar")
|
tree.with_leaf(select_variant: :multiple, label: "sugar")
|
||||||
tree.with_leaf(select_variant: :multiple, label: "eggs")
|
tree.with_leaf(select_variant: :multiple, label: "eggs")
|
||||||
@@ -60,10 +60,30 @@ RSpec.describe Primer::OpenProject::Forms::FilterableTreeView, type: :forms do
|
|||||||
expect(rendered_form).to have_element :"filterable-tree-view"
|
expect(rendered_form).to have_element :"filterable-tree-view"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "renders the fieldset" do
|
||||||
|
expect(rendered_form).to have_selector :fieldset, "Ingredients"
|
||||||
|
end
|
||||||
|
|
||||||
|
it "renders the label as the fieldset legend" do
|
||||||
|
expect(rendered_form).to have_element :legend, class: "FormControl-label", text: "Ingredients"
|
||||||
|
end
|
||||||
|
|
||||||
it "renders the leafs", :aggregate_failures do
|
it "renders the leafs", :aggregate_failures do
|
||||||
expect(rendered_form).to have_element(:li, class: "TreeViewItem", role: "none", text: "flour")
|
expect(rendered_form).to have_element(:li, class: "TreeViewItem", role: "none", text: "flour")
|
||||||
expect(rendered_form).to have_element(:li, class: "TreeViewItem", role: "none", text: "sugar")
|
expect(rendered_form).to have_element(:li, class: "TreeViewItem", role: "none", text: "sugar")
|
||||||
expect(rendered_form).to have_element(:li, class: "TreeViewItem", role: "none", text: "eggs")
|
expect(rendered_form).to have_element(:li, class: "TreeViewItem", role: "none", text: "eggs")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "wires the tree view up for form submission" do
|
||||||
|
expect(rendered_form).to have_element :input, type: "hidden", name: "comment[ingredients][]", visible: :all
|
||||||
|
end
|
||||||
|
|
||||||
|
context "when hidden" do
|
||||||
|
let(:params) { { hidden: true } }
|
||||||
|
|
||||||
|
it "hides the whole fieldset" do
|
||||||
|
expect(rendered_form).to have_selector :fieldset, visible: :hidden
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user