chore(check-all): implemented destroy in check-all

This commit is contained in:
Johannes Eder 2021-06-30 17:00:35 +02:00 committed by Sarah Vaupel
parent 4a63050334
commit c5760bb2eb
2 changed files with 34 additions and 6 deletions

View File

@ -2,6 +2,7 @@ const DEBUG_MODE = /localhost/.test(window.location.href) ? 0 : 0;
import { Utility } from '../../core/utility';
import { TableIndices } from '../../lib/table/table';
import { EventManager, EventWrapper, EVENT_TYPE } from '../../lib/event-manager/event-manager';
const CHECKBOX_SELECTOR = '[type="checkbox"]';
@ -13,6 +14,8 @@ const CHECK_ALL_INITIALIZED_CLASS = 'check-all--initialized';
export class CheckAll {
_element;
_eventManager;
_columns = new Array();
_checkAllColumns = new Array();
@ -25,6 +28,8 @@ export class CheckAll {
this._element = element;
this._eventManager = new EventManager();
if (this._element.classList.contains(CHECK_ALL_INITIALIZED_CLASS)) {
return false;
}
@ -42,6 +47,16 @@ export class CheckAll {
this._element.classList.add(CHECK_ALL_INITIALIZED_CLASS);
}
destroy() {
this._eventManager.removeAllEventListenersFromUtil();
this._checkAllColumns.forEach((column) => {
column._checkAllCheckBox.remove();
});
if(this._element.classList.contains(CHECK_ALL_INITIALIZED_CLASS))
this._element.classList.remove(CHECK_ALL_INITIALIZED_CLASS);
}
_gatherColumns() {
for (const rowIndex of Array(this._tableIndices.maxRow + 1).keys()) {
for (const colIndex of Array(this._tableIndices.maxCol + 1).keys()) {
@ -81,14 +96,17 @@ class CheckAllColumn {
_app;
_table;
_column;
_eventManager
_checkAllCheckbox;
_checkboxId = 'check-all-checkbox-' + Math.floor(Math.random() * 100000);
constructor(table, app, column) {
constructor(table, app, column, eventManager) {
this._column = column;
this._table = table;
this._app = app;
this._eventManager = eventManager;
const th = this._column.filter(element => element.tagName == 'TH')[0];
if (!th)
@ -102,7 +120,8 @@ class CheckAllColumn {
// set up new checkbox
this._app.utilRegistry.initAll(th);
this._checkAllCheckbox.addEventListener('input', this._onCheckAllCheckboxInput.bind(this));
const checkBoxInputEvent = new EventWrapper(EVENT_TYPE.INPUT, this._onCheckAllCheckboxInput.bind(this), this._checkAllCheckbox);
this._eventManager.registerNewListener(checkBoxInputEvent);
this._setupCheckboxListeners();
}
@ -113,9 +132,10 @@ class CheckAllColumn {
_setupCheckboxListeners() {
this._column
.flatMap(cell => cell.tagName == 'TH' ? new Array() : Array.from(cell.querySelectorAll(CHECKBOX_SELECTOR)))
.forEach(checkbox =>
checkbox.addEventListener('input', this._updateCheckAllCheckboxState.bind(this))
);
.forEach(checkbox => {
const checkBoxUpdateEvent = new EventWrapper(EVENT_TYPE.INPUT, this._updateCheckAllCheckboxState.bind(this), checkbox);
this._eventManager.registerNewListener(checkBoxUpdateEvent);
});
}
_updateCheckAllCheckboxState() {

View File

@ -1,4 +1,4 @@
import { CheckAll } from './check-all';
import { CheckAll, CHECK_ALL_INITIALIZED_CLASS } from './check-all';
const MOCK_APP = {
utilRegistry: {
@ -24,4 +24,12 @@ describe('CheckAll', () => {
new CheckAll();
}).toThrow();
});
it('should destroy CheckAll', () => {
checkAll.destroy();
expect(checkAll._eventManager._registeredListeners.length).toBe(0);
console.log(checkAll._element.classList);
expect(checkAll._element.classList).not.toEqual(jasmine.arrayContaining([CHECK_ALL_INITIALIZED_CLASS]));
});
});