Skip to content

Commit aa4091f

Browse files
committed
Make include sub items checkbox hideable
1 parent 0f43b46 commit aa4091f

File tree

6 files changed

+79
-8
lines changed

6 files changed

+79
-8
lines changed

app/components/primer/open_project/filterable_tree_view.html.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<%= render(@filter_mode_control) %>
88
<% end %>
99
<% end %>
10-
<%= render(Primer::Alpha::StackItem.new) do %>
10+
<%= render(Primer::Alpha::StackItem.new(hidden: @include_sub_items_check_box_arguments[:hidden])) do %>
1111
<%= render(@include_sub_items_check_box) do |input| %>
1212
<% input.merge_input_arguments!(form: "") %>
1313
<% end %>

app/components/primer/open_project/filterable_tree_view.rb

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,9 @@ class FilterableTreeView < Primer::Component
126126

127127
DEFAULT_INCLUDE_SUB_ITEMS_CHECK_BOX_ARGUMENTS = {
128128
label: I18n.t("filterable_tree_view.include_sub_items"),
129-
name: :include_sub_items
129+
name: :include_sub_items,
130+
checked: false,
131+
hidden: false,
130132
}
131133

132134
DEFAULT_INCLUDE_SUB_ITEMS_CHECK_BOX_ARGUMENTS.freeze
@@ -194,13 +196,15 @@ def initialize(
194196
@filter_mode_control = Primer::Alpha::SegmentedControl.new(**filter_mode_control_arguments)
195197
end
196198

197-
include_sub_items_check_box_arguments[:data] = merge_data(
198-
include_sub_items_check_box_arguments, {
199+
@include_sub_items_check_box_arguments = include_sub_items_check_box_arguments.reverse_merge(DEFAULT_INCLUDE_SUB_ITEMS_CHECK_BOX_ARGUMENTS)
200+
201+
@include_sub_items_check_box_arguments[:data] = merge_data(
202+
@include_sub_items_check_box_arguments, {
199203
data: { target: "filterable-tree-view.includeSubItemsCheckBox" }
200204
}
201205
)
202206

203-
@include_sub_items_check_box = Primer::Alpha::CheckBox.new(**include_sub_items_check_box_arguments)
207+
@include_sub_items_check_box = Primer::Alpha::CheckBox.new(**@include_sub_items_check_box_arguments)
204208

205209
@system_arguments = deny_tag_argument(**system_arguments)
206210
@system_arguments[:tag] = :"filterable-tree-view"

previews/primer/open_project/filterable_tree_view_preview.rb

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,13 @@ class FilterableTreeViewPreview < ViewComponent::Preview
77
# @label Playground
88
#
99
# @param expanded [Boolean] toggle
10-
def playground(expanded: true)
10+
# @param show_checkbox [Boolean] toggle
11+
# @param show_segmented_control [Boolean] toggle
12+
def playground(expanded: true, show_checkbox: true, show_segmented_control: true)
1113
render_with_template(locals: {
12-
expanded: coerce_bool(expanded)
14+
expanded: coerce_bool(expanded),
15+
show_checkbox: coerce_bool(show_checkbox),
16+
show_segmented_control: coerce_bool(show_segmented_control)
1317
})
1418
end
1519

@@ -106,6 +110,16 @@ def custom_checkbox_text(expanded: true)
106110
})
107111
end
108112

113+
# @label Hide checkbox
114+
#
115+
# @param include_sub_items [Boolean] toggle
116+
def hide_checkbox(include_sub_items: true)
117+
render_with_template(locals: {
118+
expanded: true,
119+
include_sub_items: coerce_bool(include_sub_items)
120+
})
121+
end
122+
109123
# @label Hide SegmentedControl
110124
def hide_segmented_control(expanded: true)
111125
render_with_template(locals: {
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<%= render(Primer::OpenProject::FilterableTreeView.new(
2+
include_sub_items_check_box_arguments: { hidden: true, checked: include_sub_items }
3+
)) do |tree| %>
4+
<% tree.with_sub_tree(label: "Students", expanded: expanded) do |hogwarts| %>
5+
<% hogwarts.with_sub_tree(label: "Ravenclaw", expanded: expanded) do |ravenclaw| %>
6+
<% ravenclaw.with_leaf(label: "Luna Lovegood") %>
7+
<% end %>
8+
9+
<% hogwarts.with_sub_tree(label: "Slytherin", expanded: expanded) do |hufflepuff| %>
10+
<% hufflepuff.with_leaf(label: "Draco Malfoy") %>
11+
<% end %>
12+
13+
<% hogwarts.with_sub_tree(label: "Hufflepuff", expanded: expanded) do |hufflepuff| %>
14+
<% hufflepuff.with_leaf(label: "Susan Bones") %>
15+
<% end %>
16+
17+
<% hogwarts.with_sub_tree(label: "Gryffindor", expanded: expanded) do |hufflepuff| %>
18+
<% hufflepuff.with_leaf(label: "Harry Potter") %>
19+
<% hufflepuff.with_leaf(label: "Ronald Weasley") %>
20+
<% hufflepuff.with_leaf(label: "Hermione Granger") %>
21+
<% end %>
22+
<% end %>
23+
24+
<% tree.with_leaf(label: "Albus Dumbledore") %>
25+
<% tree.with_leaf(label: "Minerva McGonagall") %>
26+
<% tree.with_leaf(label: "Severus Snape") %>
27+
<% tree.with_leaf(label: "Rubeus Hagrid") %>
28+
<% end %>

previews/primer/open_project/filterable_tree_view_preview/playground.html.erb

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
<%= render(Primer::OpenProject::FilterableTreeView.new) do |tree| %>
1+
<%= render(Primer::OpenProject::FilterableTreeView.new(
2+
include_sub_items_check_box_arguments: { hidden: !show_checkbox },
3+
**(show_segmented_control ? {} : { filter_mode_control_arguments: :none })
4+
)) do |tree| %>
25
<% tree.with_sub_tree(label: "Students", expanded: expanded) do |hogwarts| %>
36
<% hogwarts.with_sub_tree(label: "Ravenclaw", expanded: expanded) do |ravenclaw| %>
47
<% ravenclaw.with_leaf(label: "Luna Lovegood") %>

test/components/primer/open_project/filterable_tree_view_test.rb

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,28 @@ def test_has_include_sub_items_check_box
7171
assert_selector("label[for='#{id}']", text: "Include sub-items")
7272
end
7373

74+
def test_include_sub_items_can_be_hidden
75+
render_inline(
76+
Primer::OpenProject::FilterableTreeView.new(
77+
include_sub_items_check_box_arguments: { hidden: true }
78+
)
79+
)
80+
81+
assert_selector(".FormControl-checkbox-wrap", visible: :hidden)
82+
assert_selector("input[name=include_sub_items]", visible: :hidden)
83+
end
84+
85+
def test_include_sub_items_can_have_a_different_default
86+
render_inline(
87+
Primer::OpenProject::FilterableTreeView.new(
88+
include_sub_items_check_box_arguments: { checked: true }
89+
)
90+
)
91+
92+
assert_selector(".FormControl-checkbox-wrap", visible: :visible)
93+
assert_selector("input[name=include_sub_items][checked=checked]", visible: :visible)
94+
end
95+
7496
def test_has_filter_input
7597
render_preview(:default)
7698

0 commit comments

Comments
 (0)