36 lines
854 B
JavaScript
36 lines
854 B
JavaScript
import { Controller } from '@hotwired/stimulus'
|
|
import { useClickOutside } from 'stimulus-use'
|
|
|
|
export default class extends Controller {
|
|
|
|
static targets = [ 'label', 'dropdown', 'choice' ]
|
|
static values = { placeholder: String }
|
|
|
|
connect() {
|
|
this.update()
|
|
useClickOutside(this)
|
|
}
|
|
|
|
toggle() {
|
|
this.dropdownTarget.classList.toggle('hidden')
|
|
}
|
|
|
|
update() {
|
|
let labels = []
|
|
|
|
this.choiceTargets.forEach((choice) => {
|
|
if (choice.checked) {
|
|
labels.push(choice.dataset.label)
|
|
}
|
|
this.labelTarget.innerText = labels.join(', ')
|
|
})
|
|
|
|
if (0 === labels.length) {
|
|
this.labelTarget.innerText = this.placeholderValue
|
|
}
|
|
}
|
|
|
|
clickOutside(e) {
|
|
this.dropdownTarget.classList.toggle('hidden', true)
|
|
}
|
|
} |