Skip to content

Commit 757635a

Browse files
authored
Add a filter slot to the dialog header (primer#2804)
1 parent 797b904 commit 757635a

File tree

6 files changed

+51
-0
lines changed

6 files changed

+51
-0
lines changed

.changeset/tall-pears-vanish.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@primer/view-components": minor
3+
---
4+
5+
Add a filter slot to the dialog header

app/components/primer/alpha/dialog/header.html.erb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,5 @@
1414
<%= render Primer::Beta::CloseButton.new(classes: "Overlay-closeButton", "data-close-dialog-id": @id) %>
1515
</div>
1616
</div>
17+
<%= filter %>
1718
<% end %>

app/components/primer/alpha/dialog/header.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,18 @@ class Header < Primer::Component
1616
}.freeze
1717
VARIANT_OPTIONS = VARIANT_MAPPINGS.keys
1818

19+
# Optional filter slot for adding a filter input to the header.
20+
#
21+
# @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
22+
renders_one :filter, lambda { |**system_arguments|
23+
system_arguments[:tag] = :div
24+
system_arguments[:classes] = class_names(
25+
"Overlay-headerFilter",
26+
system_arguments[:classes]
27+
)
28+
Primer::BaseComponent.new(**system_arguments)
29+
}
30+
1931
# @param id [String] The HTML element's ID value.
2032
# @param title [String] Describes the content of the dialog.
2133
# @param subtitle [String] Provides additional context for the dialog, also setting the `aria-describedby` attribute.

previews/primer/alpha/dialog_preview.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,10 @@ def initally_open(title: "Test Dialog", subtitle: nil, size: :medium, button_tex
296296
d.with_body { body_text }
297297
end
298298
end
299+
300+
def with_header_filter
301+
render_with_template(locals: {})
302+
end
299303
end
300304
end
301305
end
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<%= render(Primer::Alpha::Dialog.new(open: true, title: "Dialog")) do |dialog| %>
2+
<% dialog.with_show_button { "Open" } %>
3+
<% dialog.with_header do |header| %>
4+
<% header.with_filter(pr: 3, pl: 3) do %>
5+
<%= render Primer::Alpha::TextField.new(
6+
autofocus: true,
7+
visually_hide_label: true,
8+
name: "filter",
9+
label: "Filter dialog",
10+
) %>
11+
<% end %>
12+
<% end %>
13+
<% dialog.with_body do %>
14+
Body
15+
<% end %>
16+
<% dialog.with_footer do %>
17+
Footer
18+
<% end %>
19+
<% end %>

test/components/primer/alpha/dialog_test.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,16 @@ def test_renders_large_header
9191
end
9292
end
9393

94+
def test_renders_header_with_filter
95+
render_preview(:with_header_filter)
96+
97+
assert_selector("dialog") do |dialog|
98+
dialog.assert_selector(".Overlay-header") do |header|
99+
header.assert_selector("input[type=text]")
100+
end
101+
end
102+
end
103+
94104
def test_renders_footer_without_divider_by_default
95105
render_inline(Primer::Alpha::Dialog.new(title: "Title", id: "my-dialog", subtitle: "Subtitle")) do |component|
96106
component.with_body { "content" }

0 commit comments

Comments
 (0)