File tree 4 files changed +40
-3
lines changed
app/components/primer/alpha
4 files changed +40
-3
lines changed Original file line number Diff line number Diff line change
1
+ ---
2
+ ' @primer/view-components ' : minor
3
+ ---
4
+
5
+ Fire an event when banners are dismissed
Original file line number Diff line number Diff line change @@ -4,6 +4,12 @@ module Primer
4
4
module Alpha
5
5
# Use `Banner` to highlight important information.
6
6
#
7
+ # ### Events
8
+ #
9
+ # |Name |Type |Bubbles |Cancelable |
10
+ # |:---------|:-------------------|:-------|:----------|
11
+ # |`dismiss` |`CustomEvent<void>` |No |No |
12
+ #
7
13
# @accessibility
8
14
# ### Improve discoverability with a heading and landmark
9
15
# Banners are made visually prominent with icons and colors to immediately draw attention.
Original file line number Diff line number Diff line change 1
1
import { controller , target } from '@github/catalyst'
2
2
3
+ declare global {
4
+ interface HTMLElementEventMap {
5
+ 'banner:dismiss' : CustomEvent < void >
6
+ }
7
+ }
8
+
3
9
@controller
4
10
class XBannerElement extends HTMLElement {
5
11
@target titleText : HTMLElement
6
12
7
13
dismiss ( ) {
8
- const parentElement = this . parentElement
9
- if ( ! parentElement ) return
10
-
11
14
if ( this . #dismissScheme === 'remove' ) {
15
+ const parentElement = this . parentElement
16
+ if ( ! parentElement ) return
17
+
12
18
parentElement . removeChild ( this )
13
19
} else {
14
20
this . hide ( )
15
21
}
22
+
23
+ this . dispatchEvent ( new CustomEvent ( 'banner:dismiss' ) )
16
24
}
17
25
18
26
show ( ) {
Original file line number Diff line number Diff line change 4
4
5
5
module Alpha
6
6
class IntegrationBannerTest < System ::TestCase
7
+ include Primer ::JsTestHelpers
8
+
7
9
def test_dismiss_button_remove
8
10
visit_preview ( :playground , dismiss_scheme : :remove )
9
11
assert_selector ( ".Banner" )
@@ -21,5 +23,21 @@ def test_dismiss_button_hide
21
23
22
24
assert_selector ( ".Banner" , visible : :hidden )
23
25
end
26
+
27
+ def test_dismiss_fires_event
28
+ visit_preview ( :playground , dismiss_scheme : :hide )
29
+
30
+ evaluate_multiline_script ( <<~JS )
31
+ window.bannerDismissed = false
32
+
33
+ document.querySelector('x-banner').addEventListener('banner:dismiss', () => {
34
+ window.bannerDismissed = true
35
+ })
36
+ JS
37
+
38
+ find ( ".Banner-close button" ) . click
39
+
40
+ assert page . evaluate_script ( "window.bannerDismissed" )
41
+ end
24
42
end
25
43
end
You can’t perform that action at this time.
0 commit comments