Sha256: dcb8c29d4b7489c354e1306886e7384346d89ee564f90d00546c2ad331b42553

Contents?: true

Size: 1.92 KB

Versions: 22

Compression:

Stored size: 1.92 KB

Contents

import { Controller } from '@hotwired/stimulus'

export default class extends Controller {
  static targets = ['itemCheckbox', 'checkbox', 'selectAllOverlay', 'unselectedMessage', 'selectedMessage']

  static values = {
    pageCount: Number,
    selectedAll: Boolean,
    selectedAllQuery: String,
  }

  connect() {
    this.resourceName = this.element.dataset.resourceName
  }

  toggle(event) {
    const checked = !!event.target.checked
    document.querySelectorAll(`[data-controller="item-selector"][data-resource-name="${this.resourceName}"] input[type=checkbox]`)
      .forEach((checkbox) => checkbox.checked !== checked && checkbox.click())

    // Only run "all matching" if there are more pages available
    if (this.pageCountValue > 1) {
      this.selectAllOverlay(checked)

      // When de-selecting everything, ensure the selectAll toggle is false and hide overlay.
      if (!checked) {
        this.resetUnselected()
      }
    }
  }

  selectRow() {
    let allSelected = true
    // eslint-disable-next-line no-return-assign
    this.itemCheckboxTargets.forEach((checkbox) => allSelected = allSelected && checkbox.checked)
    this.checkboxTarget.checked = allSelected

    // Only run "all matching" if there are more pages available
    if (this.pageCountValue > 1) {
      this.selectAllOverlay(allSelected)
      this.resetUnselected()
    }
  }

  selectAll(event) {
    event.preventDefault()

    this.selectedAllValue = !this.selectedAllValue
    this.unselectedMessageTarget.classList.toggle('hidden')
    this.selectedMessageTarget.classList.toggle('hidden')
  }

  resetUnselected() {
    this.selectedAllValue = false
    this.unselectedMessageTarget.classList.remove('hidden')
    this.selectedMessageTarget.classList.add('hidden')
  }

  selectAllOverlay(show) {
    if (show) {
      this.selectAllOverlayTarget.classList.remove('hidden')
    } else {
      this.selectAllOverlayTarget.classList.add('hidden')
    }
  }
}

Version data entries

22 entries across 22 versions & 1 rubygems

Version Path
avo-2.21.1.pre.issue1450 app/javascript/js/controllers/item_select_all_controller.js
avo-2.21.1.pre.issue1444 app/javascript/js/controllers/item_select_all_controller.js
avo-2.20.0 app/javascript/js/controllers/item_select_all_controller.js
avo-2.19.0 app/javascript/js/controllers/item_select_all_controller.js
avo-2.18.1 app/javascript/js/controllers/item_select_all_controller.js
avo-2.18.1.pre.1.eagerloaddirs app/javascript/js/controllers/item_select_all_controller.js
avo-2.18.0 app/javascript/js/controllers/item_select_all_controller.js
avo-2.17.1.pre.5.stackedlayout app/javascript/js/controllers/item_select_all_controller.js
avo-2.17.1.pre.4.issue.1342 app/javascript/js/controllers/item_select_all_controller.js
avo-2.17.1.pre.3 app/javascript/js/controllers/item_select_all_controller.js
avo-2.17.1.pre.2.customauthorizationclients app/javascript/js/controllers/item_select_all_controller.js
avo-2.17.1.pre.1.zeitwerk.eager.load.dir app/javascript/js/controllers/item_select_all_controller.js
avo-2.17.0 app/javascript/js/controllers/item_select_all_controller.js
avo-2.16.1.pre.1.nativefields app/javascript/js/controllers/item_select_all_controller.js
avo-2.16.0 app/javascript/js/controllers/item_select_all_controller.js
avo-2.15.3 app/javascript/js/controllers/item_select_all_controller.js
avo-2.15.3.pre.1.data.attrs.to.sidebar.items app/javascript/js/controllers/item_select_all_controller.js
avo-2.15.2 app/javascript/js/controllers/item_select_all_controller.js
avo-2.15.2.pre.1 app/javascript/js/controllers/item_select_all_controller.js
avo-2.15.1 app/javascript/js/controllers/item_select_all_controller.js