import $ from "jquery"; class IHKCheckboxGroup { constructor(wrapper) { this.wrapper = wrapper.addClass('initiated'); this.label = wrapper.find('label.acc'); this.toggle = this.label.find('a'); this.checkbox = this.label.prev('input[type="checkbox"]'); this.subs = wrapper.find('.checkbox-wrapper'); this.initToggle(); this.initChangeListener(); } initChangeListener() { this.checkbox.on('change', (e) => { const isChecked = $(e.currentTarget).removeClass('half-checked').prop('checked'); this.subs.find('input[type="checkbox"]').prop('checked', isChecked); }) this.subs.find('input[type="checkbox"]').on('change', () => { this.checkSelection(); }) this.checkSelection(); } initToggle() { this.toggle.on('click', (e) => { e.preventDefault(); e.stopPropagation(); this.label.toggleClass('open'); this.subs.stop().slideToggle(300, 'swing'); }) } checkSelection() { const checked = this.subs.find('input[type="checkbox"]:checked').length; const unchecked = this.subs.find('input[type="checkbox"]:not(:checked)').length; if (checked === 0) { this.checkbox.prop('checked', false).removeClass('half-checked'); } else if (unchecked === 0) { this.checkbox.prop('checked', true).removeClass('half-checked'); } else { this.checkbox.prop('checked', false).addClass('half-checked'); } } } export default IHKCheckboxGroup; $('body').on('ihk-init dynamic-component-loaded gfi-dynamic-init', function () { $('.checkbox-group:not(.initiated)').each(() => { new IHKCheckboxGroup($(this)); }); });