Sha256: 0d02e63f5c549de64f6b9e7087308963c4d76c0e197bfea3677f027740ce620c
Contents?: true
Size: 985 Bytes
Versions: 5
Compression:
Stored size: 985 Bytes
Contents
import { Controller } from "@hotwired/stimulus" import { debounce } from "helpers/timing_helpers" export default class extends Controller { static targets = [ "list" ] static classes = [ "active", "selected" ] initialize() { this.filter = debounce(this.filter.bind(this), 300) } filter(event) { this.#reset() if (event.target.value != "") { this.#selectMatches(event.target.value) this.#activate() } else { this.#deactivate() } } #activate() { this.listTarget.classList.add(this.activeClass) } #deactivate() { this.listTarget.classList.remove(this.activeClass) } #selectMatches(value) { this.listTarget.querySelectorAll(`[data-value*=${value.toLowerCase()}]`).forEach((element) => { element.classList.add(this.selectedClass) }) } #reset() { this.listTarget.querySelectorAll(`.${this.selectedClass}`).forEach((element) => { element.classList.remove(this.selectedClass) }) } }
Version data entries
5 entries across 5 versions & 1 rubygems