@soy-andrey-semyonov/ngx-treeview
Version:
An Angular treeview component with checkbox upgraded with angular 16
161 lines • 19.2 kB
JavaScript
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=