chore(check-all): implemented destroy in check-all
This commit is contained in:
parent
4a63050334
commit
c5760bb2eb
@ -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() {
|
||||
|
||||
@ -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]));
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user