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

Version Path
css-zero-0.0.43 lib/generators/css_zero/add/templates/app/javascript/controllers/filter_controller.js
css-zero-0.0.42 lib/generators/css_zero/add/templates/app/javascript/controllers/filter_controller.js
css-zero-0.0.41 lib/generators/css_zero/add/templates/app/javascript/controllers/command_controller.js
css-zero-0.0.40 lib/generators/css_zero/add/templates/app/javascript/controllers/command_controller.js
css-zero-0.0.39 lib/generators/css_zero/add/templates/app/javascript/controllers/command_controller.js