Skip to content

Commit 5907105

Browse files
authored
[SelectPanel] Add banner variant arg to component (#3083)
1 parent e0d3da9 commit 5907105

File tree

6 files changed

+50
-4
lines changed

6 files changed

+50
-4
lines changed

.changeset/three-readers-switch.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+
[SelectPanel] Adds banner scheme as param.

app/components/primer/alpha/select_panel.html.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
<% if show_filter? %>
1212
<% header.with_filter do %>
1313
<div data-target="select-panel.bannerErrorElement" hidden>
14-
<%= render Primer::Alpha::Banner.new(scheme: :danger, mb: 2) do %>
14+
<%= render Primer::Alpha::Banner.new(scheme: @banner_scheme, mb: 2) do %>
1515
<% if error_content? %>
1616
<%= error_content %>
1717
<% else %>

app/components/primer/alpha/select_panel.rb

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,12 @@ def with_avatar_item(**system_arguments)
312312
:none,
313313
].freeze
314314

315+
DEFAULT_BANNER_SCHEME = :danger
316+
BANNER_SCHEME_OPTIONS = [
317+
DEFAULT_BANNER_SCHEME,
318+
:warning
319+
].freeze
320+
315321
# The URL to fetch search results from.
316322
#
317323
# @return [String]
@@ -332,6 +338,11 @@ def with_avatar_item(**system_arguments)
332338
# @return [Symbol]
333339
attr_reader :select_variant
334340

341+
# <%= one_of(Primer::Alpha::SelectPanel::BANNER_SCHEME_OPTIONS) %>
342+
#
343+
# @return [Symbol]
344+
attr_reader :banner_scheme
345+
335346
# <%= one_of(Primer::Alpha::SelectPanel::FETCH_STRATEGIES) %>
336347
#
337348
# @return [Symbol]
@@ -369,6 +380,7 @@ def with_avatar_item(**system_arguments)
369380
# @param open_on_load [Boolean] Open the panel when the page loads.
370381
# @param anchor_align [Symbol] The anchor alignment of the Overlay. <%= one_of(Primer::Alpha::Overlay::ANCHOR_ALIGN_OPTIONS) %>
371382
# @param anchor_side [Symbol] The side to anchor the Overlay to. <%= one_of(Primer::Alpha::Overlay::ANCHOR_SIDE_OPTIONS) %>
383+
# @param banner_scheme [Symbol] The scheme for the error banner <%= one_of(Primer::Alpha::SelectPanel::BANNER_SCHEME_OPTIONS) %>
372384
# @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
373385
def initialize(
374386
src: nil,
@@ -389,6 +401,7 @@ def initialize(
389401
open_on_load: false,
390402
anchor_align: Primer::Alpha::Overlay::DEFAULT_ANCHOR_ALIGN,
391403
anchor_side: Primer::Alpha::Overlay::DEFAULT_ANCHOR_SIDE,
404+
banner_scheme: DEFAULT_BANNER_SCHEME,
392405
**system_arguments
393406
)
394407
raise_if_role_given!(**system_arguments)
@@ -410,6 +423,7 @@ def initialize(
410423
@dynamic_label = dynamic_label
411424
@dynamic_label_prefix = dynamic_label_prefix
412425
@dynamic_aria_label_prefix = dynamic_aria_label_prefix
426+
@banner_scheme = fetch_or_fallback(BANNER_SCHEME_OPTIONS, banner_scheme, DEFAULT_BANNER_SCHEME)
413427

414428
@system_arguments = deny_tag_argument(**system_arguments)
415429
@system_arguments[:id] = @panel_id

previews/primer/alpha/select_panel_preview.rb

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -208,8 +208,18 @@ def remote_fetch_initial_failure(open_on_load: false)
208208
#
209209
# @snapshot interactive
210210
# @param open_on_load toggle
211-
def remote_fetch_filter_failure(open_on_load: false)
212-
render_with_template(locals: { open_on_load: open_on_load })
211+
# @param banner_scheme [Symbol] select [danger, warning]
212+
def remote_fetch_filter_failure(
213+
open_on_load: false,
214+
banner_scheme: :danger
215+
)
216+
render_with_template(locals: {
217+
open_on_load: open_on_load,
218+
system_arguments: {
219+
# .to_sym workaround for https://github.com/lookbook-hq/lookbook/issues/640
220+
banner_scheme: banner_scheme.to_sym
221+
}
222+
})
213223
end
214224

215225
# @label Eventually local fetch initial failure

previews/primer/alpha/select_panel_preview/remote_fetch_filter_failure.html.erb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
# passing a uuid here causes the request to succeed the first time and fail all subsequent times
66
src: select_panel_items_path(fail: "true", uuid: SecureRandom.uuid),
77
fetch_strategy: :remote,
8-
open_on_load: open_on_load
8+
open_on_load: open_on_load,
9+
**system_arguments
910
)) do |panel| %>
1011
<% panel.with_show_button { "Sci-fi equipment" } %>
1112
<% end %>

test/system/alpha/select_panel_test.rb

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -671,6 +671,22 @@ def test_multi_select_allows_server_to_check_multiple_items
671671
assert_selector "[aria-checked=true]", text: "Photon torpedo"
672672
end
673673

674+
def test_banner_scheme_is_passed_to_banner_component
675+
visit_preview(:remote_fetch_filter_failure, banner_scheme: :warning)
676+
677+
wait_for_items_to_load do
678+
click_on_invoker_button
679+
end
680+
681+
assert_selector "select-panel ul li"
682+
683+
wait_for_items_to_load do
684+
filter_results(query: "foobar")
685+
end
686+
687+
assert_selector "[data-target='select-panel.bannerErrorElement'] .Banner--warning", text: "Sorry, something went wrong"
688+
end
689+
674690
########## JAVASCRIPT API TESTS ############
675691

676692
def test_disable_item_via_js_api

0 commit comments

Comments
 (0)