2 class PermissionsTable {
5 this.container = this.$el;
7 // Handle toggle all event
8 for (const toggleAllElem of (this.$manyRefs.toggleAll || [])) {
9 toggleAllElem.addEventListener('click', this.toggleAllClick.bind(this));
12 // Handle toggle row event
13 for (const toggleRowElem of (this.$manyRefs.toggleRow || [])) {
14 toggleRowElem.addEventListener('click', this.toggleRowClick.bind(this));
17 // Handle toggle column event
18 for (const toggleColElem of (this.$manyRefs.toggleColumn || [])) {
19 toggleColElem.addEventListener('click', this.toggleColumnClick.bind(this));
23 toggleAllClick(event) {
24 event.preventDefault();
25 this.toggleAllInElement(this.container);
28 toggleRowClick(event) {
29 event.preventDefault();
30 this.toggleAllInElement(event.target.closest('tr'));
33 toggleColumnClick(event) {
34 event.preventDefault();
36 const tableCell = event.target.closest('th,td');
37 const colIndex = Array.from(tableCell.parentElement.children).indexOf(tableCell);
38 const tableRows = tableCell.closest('table').querySelectorAll('tr');
39 const inputsToToggle = [];
41 for (let row of tableRows) {
42 const targetCell = row.children[colIndex];
44 inputsToToggle.push(...targetCell.querySelectorAll('input[type=checkbox]'));
47 this.toggleAllInputs(inputsToToggle);
50 toggleAllInElement(domElem) {
51 const inputsToToggle = domElem.querySelectorAll('input[type=checkbox]');
52 this.toggleAllInputs(inputsToToggle);
55 toggleAllInputs(inputsToToggle) {
56 const currentState = inputsToToggle.length > 0 ? inputsToToggle[0].checked : false;
57 for (let checkbox of inputsToToggle) {
58 checkbox.checked = !currentState;
59 checkbox.dispatchEvent(new Event('change'));
65 export default PermissionsTable;