Toggle selected item with space

This commit is contained in:
Jorge Manrubia
2025-06-03 06:05:15 +02:00
parent 2c75c9e746
commit e33dd22fad
@@ -25,7 +25,8 @@ export default class extends Controller {
}
navigate(event) {
this.#keyHandlers[event.key]?.call(this, event)
const key = event.key === " " ? "Space" : event.key
this.#keyHandlers[key]?.call(this, event)
}
select({ target }) {
@@ -92,7 +93,7 @@ export default class extends Controller {
event.preventDefault()
}
#triggerActionOnCurrentItem(event) {
#clickCurrentItem(event) {
if (this.actionableItemsValue && this.currentItem && this.#visibleItems.length) {
const clickableElement = this.currentItem.querySelector("a,button") || this.currentItem
clickableElement.click()
@@ -100,6 +101,15 @@ export default class extends Controller {
}
}
#toggleCurrentItem(event) {
if (this.actionableItemsValue && this.currentItem && this.#visibleItems.length) {
const toggleable = this.currentItem.querySelector("input[type=checkbox]")
toggleable.checked = !toggleable.checked
toggleable.dispatchEvent(new Event('change', { bubbles: true }))
event.preventDefault()
}
}
#keyHandlers = {
ArrowDown(event) {
this.#handleArrowKey(event, this.#selectNext.bind(this))
@@ -114,7 +124,10 @@ export default class extends Controller {
this.#handleArrowKey(event, this.#selectPrevious.bind(this))
},
Enter(event) {
this.#triggerActionOnCurrentItem(event)
this.#clickCurrentItem(event)
},
Space(event) {
this.#toggleCurrentItem(event)
}
}
}