2 class PermissionsTable {
5 this.container = this.$el;
6 this.cellSelector = this.$opts.cellSelector || 'td,th';
7 this.rowSelector = this.$opts.rowSelector || 'tr';
9 // Handle toggle all event
10 for (const toggleAllElem of (this.$manyRefs.toggleAll || [])) {
11 toggleAllElem.addEventListener('click', this.toggleAllClick.bind(this));
14 // Handle toggle row event
15 for (const toggleRowElem of (this.$manyRefs.toggleRow || [])) {
16 toggleRowElem.addEventListener('click', this.toggleRowClick.bind(this));
19 // Handle toggle column event
20 for (const toggleColElem of (this.$manyRefs.toggleColumn || [])) {
21 toggleColElem.addEventListener('click', this.toggleColumnClick.bind(this));
25 toggleAllClick(event) {
26 event.preventDefault();
27 this.toggleAllInElement(this.container);
30 toggleRowClick(event) {
31 event.preventDefault();
32 this.toggleAllInElement(event.target.closest(this.rowSelector));
35 toggleColumnClick(event) {
36 event.preventDefault();
38 const tableCell = event.target.closest(this.cellSelector);
39 const colIndex = Array.from(tableCell.parentElement.children).indexOf(tableCell);
40 const tableRows = this.container.querySelectorAll(this.rowSelector);
41 const inputsToToggle = [];
43 for (let row of tableRows) {
44 const targetCell = row.children[colIndex];
46 inputsToToggle.push(...targetCell.querySelectorAll('input[type=checkbox]'));
49 this.toggleAllInputs(inputsToToggle);
52 toggleAllInElement(domElem) {
53 const inputsToToggle = domElem.querySelectorAll('input[type=checkbox]');
54 this.toggleAllInputs(inputsToToggle);
57 toggleAllInputs(inputsToToggle) {
58 const currentState = inputsToToggle.length > 0 ? inputsToToggle[0].checked : false;
59 for (let checkbox of inputsToToggle) {
60 checkbox.checked = !currentState;
61 checkbox.dispatchEvent(new Event('change'));
67 export default PermissionsTable;