Skip to content

Commit 8f06f7a

Browse files
authoredAug 19, 2024··
[SelectPanel] Include value in activation events (#3009)
1 parent 9210d06 commit 8f06f7a

File tree

4 files changed

+43
-2
lines changed

4 files changed

+43
-2
lines changed
 

‎.changeset/chatty-jokes-walk.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@primer/view-components': minor
3+
---
4+
5+
Include value in event metadata when SelectPanel items are activated

‎app/components/primer/alpha/select_panel_element.ts

+10-2
Original file line numberDiff line numberDiff line change
@@ -867,8 +867,12 @@ export class SelectPanelElement extends HTMLElement {
867867
const activationSuccess = this.dispatchEvent(
868868
new CustomEvent('beforeItemActivated', {
869869
bubbles: true,
870-
detail: {item, checked},
871870
cancelable: true,
871+
detail: {
872+
item,
873+
checked,
874+
value: this.#getItemContent(item)?.getAttribute('data-value'),
875+
},
872876
}),
873877
)
874878

@@ -909,7 +913,11 @@ export class SelectPanelElement extends HTMLElement {
909913
this.dispatchEvent(
910914
new CustomEvent('itemActivated', {
911915
bubbles: true,
912-
detail: {item, checked},
916+
detail: {
917+
item,
918+
checked,
919+
value: this.#getItemContent(item)?.getAttribute('data-value'),
920+
},
913921
}),
914922
)
915923
}
+2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
export type ItemActivatedEvent = {
22
item: Element
33
checked: boolean
4+
value: string | null
45
}
56

67
declare global {
78
interface HTMLElementEventMap {
89
itemActivated: CustomEvent<ItemActivatedEvent>
10+
beforeItemActivated: CustomEvent<ItemActivatedEvent>
911
}
1012
}

‎test/system/alpha/select_panel_test.rb

+26
Original file line numberDiff line numberDiff line change
@@ -718,16 +718,41 @@ def test_uncheck_item_via_js_api
718718
refute_selector "li[data-item-id=item1] [aria-selected=true]"
719719
end
720720

721+
def test_fires_event_before_activation
722+
visit_preview(:single_select)
723+
724+
evaluate_multiline_script(<<~JS)
725+
window.activatedItemText = null
726+
window.activatedItemChecked = false
727+
window.activatedItemValue = null
728+
729+
document.querySelector('select-panel').addEventListener('beforeItemActivated', (event) => {
730+
window.activatedItemText = event.detail.item.innerText
731+
window.activatedItemChecked = event.detail.checked
732+
window.activatedItemValue = event.detail.value
733+
})
734+
JS
735+
736+
click_on_invoker_button
737+
click_on_first_item
738+
739+
assert page.evaluate_script("window.activatedItemChecked")
740+
assert_equal "Item 1", page.evaluate_script("window.activatedItemText")
741+
assert_equal "1", page.evaluate_script("window.activatedItemValue")
742+
end
743+
721744
def test_fires_event_on_activation
722745
visit_preview(:single_select)
723746

724747
evaluate_multiline_script(<<~JS)
725748
window.activatedItemText = null
726749
window.activatedItemChecked = false
750+
window.activatedItemValue = null
727751
728752
document.querySelector('select-panel').addEventListener('itemActivated', (event) => {
729753
window.activatedItemText = event.detail.item.innerText
730754
window.activatedItemChecked = event.detail.checked
755+
window.activatedItemValue = event.detail.value
731756
})
732757
JS
733758

@@ -736,6 +761,7 @@ def test_fires_event_on_activation
736761

737762
assert page.evaluate_script("window.activatedItemChecked")
738763
assert_equal "Item 1", page.evaluate_script("window.activatedItemText")
764+
assert_equal "1", page.evaluate_script("window.activatedItemValue")
739765
end
740766

741767
def test_cancelling_before_item_activated_event_prevents_selection

0 commit comments

Comments
 (0)
Please sign in to comment.