UNPKG

@soy-andrey-semyonov/ngx-treeview

Version:

An Angular treeview component with checkbox upgraded with angular 16

161 lines 19.2 kB
import { isBoolean, isNil, isString } from 'lodash-es'; import { TreeviewHelper } from '../helpers/treeview-helper'; export class TreeviewItem { internalDisabled = false; internalChecked = true; internalCollapsed = false; internalChildren; text; value; parentCount = 0; constructor(item, autoCorrectChecked = false) { if (isNil(item)) { throw new Error('Item must be defined'); } if (isString(item.text)) { this.text = item.text; } else { throw new Error('A text of item must be string object'); } this.value = item.value; if (isBoolean(item.checked)) { this.checked = item.checked; } if (isBoolean(item.collapsed)) { this.collapsed = item.collapsed; } if (isBoolean(item.disabled)) { this.disabled = item.disabled; } if (item.parentCount) this.parentCount = item.parentCount; if (!isNil(item.children) && item.children.length > 0) { this.children = item.children.map((child) => { if (this.disabled === true) { child.disabled = true; } return new TreeviewItem(child); }); } if (autoCorrectChecked) { this.correctChecked(); } } get checked() { return this.internalChecked; } set checked(value) { if (!this.internalDisabled) { if (this.internalChecked !== value) { this.internalChecked = value; } } } get indeterminate() { return this.checked === undefined; } setCheckedRecursive(value) { if (!this.internalDisabled) { this.internalChecked = value; if (!isNil(this.internalChildren)) { this.internalChildren.forEach((child) => child.setCheckedRecursive(value)); } } } get disabled() { return this.internalDisabled; } set disabled(value) { if (this.internalDisabled !== value) { this.internalDisabled = value; if (!isNil(this.internalChildren)) { this.internalChildren.forEach((child) => (child.disabled = value)); } } } get collapsed() { return this.internalCollapsed; } set collapsed(value) { if (this.internalCollapsed !== value) { this.internalCollapsed = value; } } setCollapsedRecursive(value) { this.internalCollapsed = value; if (!isNil(this.internalChildren)) { this.internalChildren.forEach((child) => child.setCollapsedRecursive(value)); } } get children() { return this.internalChildren; } set children(value) { if (this.internalChildren !== value) { if (!isNil(value) && value.length === 0) { throw new Error('Children must be not an empty array'); } this.internalChildren = value; if (!isNil(this.internalChildren)) { let checked = null; this.internalChildren.forEach((child) => { if (checked === null) { checked = child.checked; } else { if (child.checked !== checked) { checked = undefined; return; } } }); this.internalChecked = checked; } } } getSelection(decoupleChildFromParent = false) { let checkedItems = []; let uncheckedItems = []; if (decoupleChildFromParent || isNil(this.internalChildren)) { if (this.internalChecked) { checkedItems.push(this); } else { uncheckedItems.push(this); } } if (!isNil(this.internalChildren)) { const selection = TreeviewHelper.concatSelection(this.internalChildren, checkedItems, uncheckedItems, decoupleChildFromParent); checkedItems = selection.checked; uncheckedItems = selection.unchecked; } return { checkedItems, uncheckedItems, }; } correctChecked(decoupleChildFromParent = false) { this.internalChecked = this.getCorrectChecked(decoupleChildFromParent); } getCorrectChecked(decoupleChildFromParent = false) { let checked = null; if (!decoupleChildFromParent && !isNil(this.internalChildren)) { for (const child of this.internalChildren) { child.internalChecked = child.getCorrectChecked(); if (checked === null) { checked = child.internalChecked; } else if (checked !== child.internalChecked) { checked = undefined; break; } } } else { checked = this.checked; } return checked; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZXZpZXctaXRlbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10cmVldmlldy9zcmMvbGliL21vZGVscy90cmVldmlldy1pdGVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFpQjVELE1BQU0sT0FBTyxZQUFZO0lBQ2YsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO0lBQ3pCLGVBQWUsR0FBRyxJQUFJLENBQUM7SUFDdkIsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO0lBQzFCLGdCQUFnQixDQUFpQjtJQUN6QyxJQUFJLENBQVM7SUFDYixLQUFLLENBQU07SUFDWCxXQUFXLEdBQUcsQ0FBQyxDQUFDO0lBRWhCLFlBQVksSUFBYyxFQUFFLGtCQUFrQixHQUFHLEtBQUs7UUFDcEQsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDZixNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7U0FDekM7UUFDRCxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdkIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1NBQ3ZCO2FBQU07WUFDTCxNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7U0FDekQ7UUFDRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDeEIsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQzNCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUM3QjtRQUNELElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFB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QUM7aUJBQ2pDO3FCQUFNLElBQUksT0FBTyxLQUFLLEtBQUssQ0FBQyxlQUFlLEVBQUU7b0JBQzVDLE9BQU8sR0FBRyxTQUFTLENBQUM7b0JBQ3BCLE1BQU07aUJBQ1A7YUFDRjtTQUNGO2FBQU07WUFDTCxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUN4QjtRQUVELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzQm9vbGVhbiwgaXNOaWwsIGlzU3RyaW5nIH0gZnJvbSAnbG9kYXNoLWVzJztcclxuaW1wb3J0IHsgVHJlZXZpZXdIZWxwZXIgfSBmcm9tICcuLi9oZWxwZXJzL3RyZWV2aWV3LWhlbHBlcic7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFRyZWV2aWV3U2VsZWN0aW9uIHtcclxuICBjaGVja2VkSXRlbXM6IFRyZWV2aWV3SXRlbVtdO1xyXG4gIHVuY2hlY2tlZEl0ZW1zOiBUcmVldmlld0l0ZW1bXTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBUcmVlSXRlbSB7XHJcbiAgdGV4dDogc3RyaW5nO1xyXG4gIHZhbHVlOiBhbnk7XHJcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xyXG4gIGNoZWNrZWQ/OiBib29sZWFuO1xyXG4gIGNvbGxhcHNlZD86IGJvb2xlYW47XHJcbiAgY2hpbGRyZW4/OiBUcmVlSXRlbVtdO1xyXG4gIHBhcmVudENvdW50PzogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVHJlZXZpZXdJdGVtIHtcclxuICBwcml2YXRlIGludGVybmFsRGlzYWJsZWQgPSBmYWxzZTtcclxuICBwcml2YXRlIGludGVybmFsQ2hlY2tlZCA9IHRydWU7XHJcbiAgcHJpdmF0ZSBpbnRlcm5hbENvbGxhcHNlZCA9IGZhbHNlO1xyXG4gIHByaXZhdGUgaW50ZXJuYWxDaGlsZHJlbjogVHJlZXZpZXdJdGVtW107XHJcbiAgdGV4dDogc3RyaW5nO1xyXG4gIHZhbHVlOiBhbnk7XHJcbiAgcGFyZW50Q291bnQgPSAwO1xyXG5cclxuICBjb25zdHJ1Y3RvcihpdGVtOiBUcmVlSXRlbSwgYXV0b0NvcnJlY3RDaGVja2VkID0gZmFsc2UpIHtcclxuICAgIGlmIChpc05pbChpdGVtKSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0l0ZW0gbXVzdCBiZSBkZWZpbmVkJyk7XHJcbiAgICB9XHJcbiAgICBpZiAoaXNTdHJpbmcoaXRlbS50ZXh0KSkge1xyXG4gICAgICB0aGlzLnRleHQgPSBpdGVtLnRleHQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0EgdGV4dCBvZiBpdGVtIG11c3QgYmUgc3RyaW5nIG9iamVjdCcpO1xyXG4gICAgfVxyXG4gICAgdGhpcy52YWx1ZSA9IGl0ZW0udmFsdWU7XHJcbiAgICBpZiAoaXNCb29sZWFuKGl0ZW0uY2hlY2tlZCkpIHtcclxuICAgICAgdGhpcy5jaGVja2VkID0gaXRlbS5jaGVja2VkO1xyXG4gICAgfVxyXG4gICAgaWYgKGlzQm9vbGVhbihpdGVtLmNvbGxhcHNlZCkpIHtcclxuICAgICAgdGhpcy5jb2xsYXBzZWQgPSBpdGVtLmNvbGxhcHNlZDtcclxuICAgIH1cclxuICAgIGlmIChpc0Jvb2xlYW4oaXRlbS5kaXNhYmxlZCkpIHtcclxuICAgICAgdGhpcy5kaXNhYmxlZCA9IGl0ZW0uZGlzYWJsZWQ7XHJcbiAgICB9XHJcbiAgICBpZiAoaXRlbS5wYXJlbnRDb3VudCkgdGhpcy5wYXJlbnRDb3VudCA9IGl0ZW0ucGFyZW50Q291bnQ7XHJcblxyXG4gICAgaWYgKCFpc05pbChpdGVtLmNoaWxkcmVuKSAmJiBpdGVtLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5jaGlsZHJlbiA9IGl0ZW0uY2hpbGRyZW4ubWFwKChjaGlsZCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkID09PSB0cnVlKSB7XHJcbiAgICAgICAgICBjaGlsZC5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbmV3IFRyZWV2aWV3SXRlbShjaGlsZCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChhdXRvQ29ycmVjdENoZWNrZWQpIHtcclxuICAgICAgdGhpcy5jb3JyZWN0Q2hlY2tlZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGNoZWNrZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5pbnRlcm5hbENoZWNrZWQ7XHJcbiAgfVxyXG5cclxuICBzZXQgY2hlY2tlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgaWYgKCF0aGlzLmludGVybmFsRGlzYWJsZWQpIHtcclxuICAgICAgaWYgKHRoaXMuaW50ZXJuYWxDaGVja2VkICE9PSB2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuaW50ZXJuYWxDaGVja2VkID0gdmFsdWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBpbmRldGVybWluYXRlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY2hlY2tlZCA9PT0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgc2V0Q2hlY2tlZFJlY3Vyc2l2ZSh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmludGVybmFsRGlzYWJsZWQpIHtcclxuICAgICAgdGhpcy5pbnRlcm5hbENoZWNrZWQgPSB2YWx1ZTtcclxuICAgICAgaWYgKCFpc05pbCh0aGlzLmludGVybmFsQ2hpbGRyZW4pKSB7XHJcbiAgICAgICAgdGhpcy5pbnRlcm5hbENoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PlxyXG4gICAgICAgICAgY2hpbGQuc2V0Q2hlY2tlZFJlY3Vyc2l2ZSh2YWx1ZSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5pbnRlcm5hbERpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5pbnRlcm5hbERpc2FibGVkICE9PSB2YWx1ZSkge1xyXG4gICAgICB0aGlzLmludGVybmFsRGlzYWJsZWQgPSB2YWx1ZTtcclxuICAgICAgaWYgKCFpc05pbCh0aGlzLmludGVybmFsQ2hpbGRyZW4pKSB7XHJcbiAgICAgICAgdGhpcy5pbnRlcm5hbENoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiAoY2hpbGQuZGlzYWJsZWQgPSB2YWx1ZSkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgY29sbGFwc2VkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxDb2xsYXBzZWQ7XHJcbiAgfVxyXG5cclxuICBzZXQgY29sbGFwc2VkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5pbnRlcm5hbENvbGxhcHNlZCAhPT0gdmFsdWUpIHtcclxuICAgICAgdGhpcy5pbnRlcm5hbENvbGxhcHNlZCA9IHZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0Q29sbGFwc2VkUmVjdXJzaXZlKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmludGVybmFsQ29sbGFwc2VkID0gdmFsdWU7XHJcbiAgICBpZiAoIWlzTmlsKHRoaXMuaW50ZXJuYWxDaGlsZHJlbikpIHtcclxuICAgICAgdGhpcy5pbnRlcm5hbENoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PlxyXG4gICAgICAgIGNoaWxkLnNldENvbGxhcHNlZFJlY3Vyc2l2ZSh2YWx1ZSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBjaGlsZHJlbigpOiBUcmVldmlld0l0ZW1bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5pbnRlcm5hbENoaWxkcmVuO1xyXG4gIH1cclxuXHJcbiAgc2V0IGNoaWxkcmVuKHZhbHVlOiBUcmVldmlld0l0ZW1bXSkge1xyXG4gICAgaWYgKHRoaXMuaW50ZXJuYWxDaGlsZHJlbiAhPT0gdmFsdWUpIHtcclxuICAgICAgaWYgKCFpc05pbCh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaGlsZHJlbiBtdXN0IGJlIG5vdCBhbiBlbXB0eSBhcnJheScpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaW50ZXJuYWxDaGlsZHJlbiA9IHZhbHVlO1xyXG4gICAgICBpZiAoIWlzTmlsKHRoaXMuaW50ZXJuYWxDaGlsZHJlbikpIHtcclxuICAgICAgICBsZXQgY2hlY2tlZCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5pbnRlcm5hbENoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiB7XHJcbiAgICAgICAgICBpZiAoY2hlY2tlZCA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICBjaGVja2VkID0gY2hpbGQuY2hlY2tlZDtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChjaGlsZC5jaGVja2VkICE9PSBjaGVja2VkKSB7XHJcbiAgICAgICAgICAgICAgY2hlY2tlZCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmludGVybmFsQ2hlY2tlZCA9IGNoZWNrZWQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFNlbGVjdGlvbihkZWNvdXBsZUNoaWxkRnJvbVBhcmVudCA9IGZhbHNlKTogVHJlZXZpZXdTZWxlY3Rpb24ge1xyXG4gICAgbGV0IGNoZWNrZWRJdGVtczogVHJlZXZpZXdJdGVtW10gPSBbXTtcclxuICAgIGxldCB1bmNoZWNrZWRJdGVtczogVHJlZXZpZXdJdGVtW10gPSBbXTtcclxuICAgIGlmIChkZWNvdXBsZUNoaWxkRnJvbVBhcmVudCB8fCBpc05pbCh0aGlzLmludGVybmFsQ2hpbGRyZW4pKSB7XHJcbiAgICAgIGlmICh0aGlzLmludGVybmFsQ2hlY2tlZCkge1xyXG4gICAgICAgIGNoZWNrZWRJdGVtcy5wdXNoKHRoaXMpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHVuY2hlY2tlZEl0ZW1zLnB1c2godGhpcyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWlzTmlsKHRoaXMuaW50ZXJuYWxDaGlsZHJlbikpIHtcclxuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gVHJlZXZpZXdIZWxwZXIuY29uY2F0U2VsZWN0aW9uKFxyXG4gICAgICAgIHRoaXMuaW50ZXJuYWxDaGlsZHJlbixcclxuICAgICAgICBjaGVja2VkSXRlbXMsXHJcbiAgICAgICAgdW5jaGVja2VkSXRlbXMsXHJcbiAgICAgICAgZGVjb3VwbGVDaGlsZEZyb21QYXJlbnRcclxuICAgICAgKTtcclxuICAgICAgY2hlY2tlZEl0ZW1zID0gc2VsZWN0aW9uLmNoZWNrZWQ7XHJcbiAgICAgIHVuY2hlY2tlZEl0ZW1zID0gc2VsZWN0aW9uLnVuY2hlY2tlZDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBjaGVja2VkSXRlbXMsXHJcbiAgICAgIHVuY2hlY2tlZEl0ZW1zLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGNvcnJlY3RDaGVja2VkKGRlY291cGxlQ2hpbGRGcm9tUGFyZW50ID0gZmFsc2UpOiB2b2lkIHtcclxuICAgIHRoaXMuaW50ZXJuYWxDaGVja2VkID0gdGhpcy5nZXRDb3JyZWN0Q2hlY2tlZChkZWNvdXBsZUNoaWxkRnJvbVBhcmVudCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldENvcnJlY3RDaGVja2VkKGRlY291cGxlQ2hpbGRGcm9tUGFyZW50ID0gZmFsc2UpOiBib29sZWFuIHtcclxuICAgIGxldCBjaGVja2VkOiBib29sZWFuID0gbnVsbDtcclxuICAgIGlmICghZGVjb3VwbGVDaGlsZEZyb21QYXJlbnQgJiYgIWlzTmlsKHRoaXMuaW50ZXJuYWxDaGlsZHJlbikpIHtcclxuICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiB0aGlzLmludGVybmFsQ2hpbGRyZW4pIHtcclxuICAgICAgICBjaGlsZC5pbnRlcm5hbENoZWNrZWQgPSBjaGlsZC5nZXRDb3JyZWN0Q2hlY2tlZCgpO1xyXG4gICAgICAgIGlmIChjaGVja2VkID09PSBudWxsKSB7XHJcbiAgICAgICAgICBjaGVja2VkID0gY2hpbGQuaW50ZXJuYWxDaGVja2VkO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY2hlY2tlZCAhPT0gY2hpbGQuaW50ZXJuYWxDaGVja2VkKSB7XHJcbiAgICAgICAgICBjaGVja2VkID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjaGVja2VkID0gdGhpcy5jaGVja2VkO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjaGVja2VkO1xyXG4gIH1cclxufVxyXG4iXX0=