Sha256: e0de02e8f98249225a2ec1faa4cae7db4639737f6c61518b56c297eab7dc9c59

Contents?: true

Size: 1.34 KB

Versions: 20

Compression:

Stored size: 1.34 KB

Contents

import {controllerFactory} from '@utils/createController'
import {useIntersection} from 'stimulus-use'

export default class InputFilterController extends controllerFactory()({
  targets: {
    emptyRoot: null,
    input: HTMLInputElement,
    searchString: null,
  },
}) {
  private items: {el: HTMLElement; searchString: string}[]

  private handleNewQuery(query: string) {
    let foundSomething = false

    for (const {el, searchString} of this.items) {
      const contains = searchString.includes(query.trim().toLowerCase())

      if (!foundSomething && contains) foundSomething = true

      if (contains) {
        el.classList.remove('ariadne-hidden')
      } else {
        el.classList.add('ariadne-hidden')
      }
    }

    if (foundSomething) {
      this.emptyRootTarget.classList.add('ariadne-hidden')
    } else {
      this.emptyRootTarget.classList.remove('ariadne-hidden')
    }
  }

  connect() {
    this.items = this.searchStringTargets.map((el: HTMLElement) => {
      return {
        el,
        searchString: (el.textContent ?? '').trim().toLowerCase(),
      }
    })
    useIntersection(this)
  }

  appear() {
    this.reset()
  }

  handleInput() {
    if (this.hasSearchStringTarget) this.handleNewQuery(this.inputTarget.value)
  }

  reset() {
    this.handleNewQuery('')
    if (this.hasInputTarget) this.inputTarget.value = ''
  }
}

Version data entries

20 entries across 20 versions & 1 rubygems

Version Path
ariadne_view_components-0.0.94.6 app/components/ariadne/ui/list/component.ts
ariadne_view_components-0.0.94.5 app/components/ariadne/ui/list/component.ts
ariadne_view_components-0.0.94.4 app/components/ariadne/ui/list/component.ts
ariadne_view_components-0.0.94.3 app/components/ariadne/ui/list/component.ts
ariadne_view_components-0.0.94.2 app/components/ariadne/ui/list/component.ts
ariadne_view_components-0.0.94.1 app/components/ariadne/ui/list/component.ts
ariadne_view_components-0.0.94 app/components/ariadne/ui/list/component.ts
ariadne_view_components-0.0.93.2 app/components/ariadne/ui/list/component.ts
ariadne_view_components-0.0.93.1 app/components/ariadne/ui/list/component.ts
ariadne_view_components-0.0.93 app/components/ariadne/ui/list/component.ts
ariadne_view_components-0.0.92 app/components/ariadne/ui/list/component.ts
ariadne_view_components-0.0.91 app/components/ariadne/ui/list/component.ts
ariadne_view_components-0.0.90 app/components/ariadne/ui/list/component.ts
ariadne_view_components-0.0.89.1 app/components/ariadne/ui/list/component.ts
ariadne_view_components-0.0.89 app/components/ariadne/ui/list/component.ts
ariadne_view_components-0.0.88 app/components/ariadne/ui/list/component.ts
ariadne_view_components-0.0.87 app/components/ariadne/ui/list/component.ts
ariadne_view_components-0.0.86.9 app/components/ariadne/ui/list/component.ts
ariadne_view_components-0.0.86.8 app/components/ariadne/ui/list/component.ts
ariadne_view_components-0.0.86.7 app/components/ariadne/ui/list/component.ts