Sha256: 98523e7bdce04ceb784cd69f6a4d98e474352041cf035e3ee2b25ea42854e4fa

Contents?: true

Size: 1.06 KB

Versions: 1

Compression:

Stored size: 1.06 KB

Contents

import ApplicationController from './application_controller'

export default class extends ApplicationController {
  static targets = ['checkbox', 'selectAll']

  toggle () {
    this.updateSelectAllState()
  }

  toggleAll () {
    const isChecked = this.selectAllTarget.checked

    this.checkboxTargets.forEach((checkbox) => {
      checkbox.checked = isChecked
    })
  }

  updateSelectAllState () {
    const checked = this.checked
    const checkboxes = this.checkboxTargets

    if (checked.length === checkboxes.length) {
      // All checked
      this.selectAllTarget.indeterminate = false
      this.selectAllTarget.checked = true
    } else if (checked.length == 0) {
      // None checked
      this.selectAllTarget.indeterminate = false
      this.selectAllTarget.checked = false
    } else {
      // Some checked
      this.selectAllTarget.indeterminate = true
    }
  }

  get checked () {
    return this.checkboxTargets.filter((checkbox) => checkbox.checked)
  }

  get unchecked () {
    return this.checkboxTargets.filter((checkbox) => !checkbox.checked)
  }
}

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
trestle-0.10.0.pre frontend/js/controllers/checkbox_select_controller.js