Files
once-campfire/app/javascript/lib/autocomplete/custom_elements/suggestion_select.js
Kevin McConnell df76a227dc Hello world
First open source release of Campfire 🎉
2025-08-21 09:31:59 +01:00

45 lines
1.0 KiB
JavaScript

export default class extends HTMLElement {
connectedCallback() {
if (!this.hasAttribute("role")) this.setAttribute("role", "listbox")
}
get optionElements() {
return this.querySelectorAll("suggestion-option")
}
get selectedIndex() {
const selected = this.querySelector("suggestion-option[selected]")
return selected?.index
}
set selectedIndex(value) {
const optionElements = this.optionElements
const optionCount = optionElements.length
if (!optionElements.length) return
Array.from(optionElements).forEach(option => {
option.selected = false
})
if (value === null || typeof value === "undefined") return
const index = Math.max(0, Math.min(optionCount - 1, parseInt(value, 10)))
optionElements[index].selected = true
}
get selectedOption() {
return this.optionElements[this.selectedIndex]
}
set selectedOption(option) {
if (option.selectElement === this) {
this.selectedIndex = option.index
}
}
get value() {
return this.selectedOption?.value
}
}