UNPKG

ngx-treeview-v2

Version:
158 lines 17.7 kB
import { isBoolean, isNil, isString } from 'lodash'; import { TreeviewHelper } from '../helpers/treeview-helper'; export class TreeviewItem { internalDisabled = false; internalChecked = true; internalCollapsed = false; internalChildren; text; value; 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 (!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() { let checkedItems = []; let uncheckedItems = []; if (isNil(this.internalChildren)) { if (this.internalChecked) { checkedItems.push(this); } else { uncheckedItems.push(this); } } else { const selection = TreeviewHelper.concatSelection(this.internalChildren, checkedItems, uncheckedItems); checkedItems = selection.checked; uncheckedItems = selection.unchecked; } return { checkedItems, uncheckedItems }; } correctChecked() { this.internalChecked = this.getCorrectChecked(); } getCorrectChecked() { let checked = null; if (!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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZXZpZXctaXRlbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10cmVldmlldy12Mi9zcmMvbGliL21vZGVscy90cmVldmlldy1pdGVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNwRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFnQjVELE1BQU0sT0FBTyxZQUFZO0lBQ2YsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO0lBQ3pCLGVBQWUsR0FBRyxJQUFJLENBQUM7SUFDdkIsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO0lBQzFCLGdCQUFnQixDQUFpQjtJQUN6QyxJQUFJLENBQVM7SUFDYixLQUFLLENBQU07SUFFWCxZQUFZLElBQWMsRUFBRSxrQkFBa0IsR0FBRyxLQUFLO1FBQ3BELElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1NBQ3pDO1FBQ0QsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztTQUN2QjthQUFNO1lBQ0wsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1NBQ3pEO1FBQ0QsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3hCLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUMzQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7U0FDN0I7UUFDRCxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDN0IsSUFBSSxDQUFDLFNBQVMs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Q0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDM0I7U0FDRjthQUFNO1lBQ0wsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBQ3RHLFlBQVksR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDO1lBQ2pDLGNBQWMsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDO1NBQ3RDO1FBRUQsT0FBTztZQUNMLFlBQVk7WUFDWixjQUFjO1NBQ2YsQ0FBQztJQUNKLENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUNsRCxDQUFDO0lBRU8saUJBQWlCO1FBQ3ZCLElBQUksT0FBTyxHQUFZLElBQUksQ0FBQztRQUM1QixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO1lBQ2pDLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO2dCQUN6QyxLQUFLLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2dCQUNsRCxJQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUU7b0JBQ3BCLE9BQU8sR0FBRyxLQUFLLENBQUMsZUFBZSxDQUFDO2lCQUNqQztxQkFBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLENBQUMsZUFBZSxFQUFFO29CQUM1QyxPQUFPLEdBQUcsU0FBUyxDQUFDO29CQUNwQixNQUFNO2lCQUNQO2FBQ0Y7U0FDRjthQUFNO1lBQ0wsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7U0FDeEI7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0Jvb2xlYW4sIGlzTmlsLCBpc1N0cmluZyB9IGZyb20gJ2xvZGFzaCc7XHJcbmltcG9ydCB7IFRyZWV2aWV3SGVscGVyIH0gZnJvbSAnLi4vaGVscGVycy90cmVldmlldy1oZWxwZXInO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBUcmVldmlld1NlbGVjdGlvbiB7XHJcbiAgY2hlY2tlZEl0ZW1zOiBUcmVldmlld0l0ZW1bXTtcclxuICB1bmNoZWNrZWRJdGVtczogVHJlZXZpZXdJdGVtW107XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVHJlZUl0ZW0ge1xyXG4gIHRleHQ6IHN0cmluZztcclxuICB2YWx1ZTogYW55O1xyXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcclxuICBjaGVja2VkPzogYm9vbGVhbjtcclxuICBjb2xsYXBzZWQ/OiBib29sZWFuO1xyXG4gIGNoaWxkcmVuPzogVHJlZUl0ZW1bXTtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFRyZWV2aWV3SXRlbSB7XHJcbiAgcHJpdmF0ZSBpbnRlcm5hbERpc2FibGVkID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBpbnRlcm5hbENoZWNrZWQgPSB0cnVlO1xyXG4gIHByaXZhdGUgaW50ZXJuYWxDb2xsYXBzZWQgPSBmYWxzZTtcclxuICBwcml2YXRlIGludGVybmFsQ2hpbGRyZW46IFRyZWV2aWV3SXRlbVtdO1xyXG4gIHRleHQ6IHN0cmluZztcclxuICB2YWx1ZTogYW55O1xyXG5cclxuICBjb25zdHJ1Y3RvcihpdGVtOiBUcmVlSXRlbSwgYXV0b0NvcnJlY3RDaGVja2VkID0gZmFsc2UpIHtcclxuICAgIGlmIChpc05pbChpdGVtKSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0l0ZW0gbXVzdCBiZSBkZWZpbmVkJyk7XHJcbiAgICB9XHJcbiAgICBpZiAoaXNTdHJpbmcoaXRlbS50ZXh0KSkge1xyXG4gICAgICB0aGlzLnRleHQgPSBpdGVtLnRleHQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0EgdGV4dCBvZiBpdGVtIG11c3QgYmUgc3RyaW5nIG9iamVjdCcpO1xyXG4gICAgfVxyXG4gICAgdGhpcy52YWx1ZSA9IGl0ZW0udmFsdWU7XHJcbiAgICBpZiAoaXNCb29sZWFuKGl0ZW0uY2hlY2tlZCkpIHtcclxuICAgICAgdGhpcy5jaGVja2VkID0gaXRlbS5jaGVja2VkO1xyXG4gICAgfVxyXG4gICAgaWYgKGlzQm9vbGVhbihpdGVtLmNvbGxhcHNlZCkpIHtcclxuICAgICAgdGhpcy5jb2xsYXBzZWQgPSBpdGVtLmNvbGxhcHNlZDtcclxuICAgIH1cclxuICAgIGlmIChpc0Jvb2xlYW4oaXRlbS5kaXNhYmxlZCkpIHtcclxuICAgICAgdGhpcy5kaXNhYmxlZCA9IGl0ZW0uZGlzYWJsZWQ7XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzTmlsKGl0ZW0uY2hpbGRyZW4pICYmIGl0ZW0uY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmNoaWxkcmVuID0gaXRlbS5jaGlsZHJlbi5tYXAoY2hpbGQgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkID09PSB0cnVlKSB7XHJcbiAgICAgICAgICBjaGlsZC5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbmV3IFRyZWV2aWV3SXRlbShjaGlsZCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChhdXRvQ29ycmVjdENoZWNrZWQpIHtcclxuICAgICAgdGhpcy5jb3JyZWN0Q2hlY2tlZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGNoZWNrZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5pbnRlcm5hbENoZWNrZWQ7XHJcbiAgfVxyXG5cclxuICBzZXQgY2hlY2tlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgaWYgKCF0aGlzLmludGVybmFsRGlzYWJsZWQpIHtcclxuICAgICAgaWYgKHRoaXMuaW50ZXJuYWxDaGVja2VkICE9PSB2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuaW50ZXJuYWxDaGVja2VkID0gdmFsdWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBpbmRldGVybWluYXRlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY2hlY2tlZCA9PT0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgc2V0Q2hlY2tlZFJlY3Vyc2l2ZSh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmludGVybmFsRGlzYWJsZWQpIHtcclxuICAgICAgdGhpcy5pbnRlcm5hbENoZWNrZWQgPSB2YWx1ZTtcclxuICAgICAgaWYgKCFpc05pbCh0aGlzLmludGVybmFsQ2hpbGRyZW4pKSB7XHJcbiAgICAgICAgdGhpcy5pbnRlcm5hbENoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4gY2hpbGQuc2V0Q2hlY2tlZFJlY3Vyc2l2ZSh2YWx1ZSkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5pbnRlcm5hbERpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5pbnRlcm5hbERpc2FibGVkICE9PSB2YWx1ZSkge1xyXG4gICAgICB0aGlzLmludGVybmFsRGlzYWJsZWQgPSB2YWx1ZTtcclxuICAgICAgaWYgKCFpc05pbCh0aGlzLmludGVybmFsQ2hpbGRyZW4pKSB7XHJcbiAgICAgICAgdGhpcy5pbnRlcm5hbENoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4gY2hpbGQuZGlzYWJsZWQgPSB2YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBjb2xsYXBzZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5pbnRlcm5hbENvbGxhcHNlZDtcclxuICB9XHJcblxyXG4gIHNldCBjb2xsYXBzZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLmludGVybmFsQ29sbGFwc2VkICE9PSB2YWx1ZSkge1xyXG4gICAgICB0aGlzLmludGVybmFsQ29sbGFwc2VkID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRDb2xsYXBzZWRSZWN1cnNpdmUodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuaW50ZXJuYWxDb2xsYXBzZWQgPSB2YWx1ZTtcclxuICAgIGlmICghaXNOaWwodGhpcy5pbnRlcm5hbENoaWxkcmVuKSkge1xyXG4gICAgICB0aGlzLmludGVybmFsQ2hpbGRyZW4uZm9yRWFjaChjaGlsZCA9PiBjaGlsZC5zZXRDb2xsYXBzZWRSZWN1cnNpdmUodmFsdWUpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBjaGlsZHJlbigpOiBUcmVldmlld0l0ZW1bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5pbnRlcm5hbENoaWxkcmVuO1xyXG4gIH1cclxuXHJcbiAgc2V0IGNoaWxkcmVuKHZhbHVlOiBUcmVldmlld0l0ZW1bXSkge1xyXG4gICAgaWYgKHRoaXMuaW50ZXJuYWxDaGlsZHJlbiAhPT0gdmFsdWUpIHtcclxuICAgICAgaWYgKCFpc05pbCh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaGlsZHJlbiBtdXN0IGJlIG5vdCBhbiBlbXB0eSBhcnJheScpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaW50ZXJuYWxDaGlsZHJlbiA9IHZhbHVlO1xyXG4gICAgICBpZiAoIWlzTmlsKHRoaXMuaW50ZXJuYWxDaGlsZHJlbikpIHtcclxuICAgICAgICBsZXQgY2hlY2tlZCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5pbnRlcm5hbENoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4ge1xyXG4gICAgICAgICAgaWYgKGNoZWNrZWQgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgY2hlY2tlZCA9IGNoaWxkLmNoZWNrZWQ7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoY2hpbGQuY2hlY2tlZCAhPT0gY2hlY2tlZCkge1xyXG4gICAgICAgICAgICAgIGNoZWNrZWQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5pbnRlcm5hbENoZWNrZWQgPSBjaGVja2VkO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRTZWxlY3Rpb24oKTogVHJlZXZpZXdTZWxlY3Rpb24ge1xyXG4gICAgbGV0IGNoZWNrZWRJdGVtczogVHJlZXZpZXdJdGVtW10gPSBbXTtcclxuICAgIGxldCB1bmNoZWNrZWRJdGVtczogVHJlZXZpZXdJdGVtW10gPSBbXTtcclxuICAgIGlmIChpc05pbCh0aGlzLmludGVybmFsQ2hpbGRyZW4pKSB7XHJcbiAgICAgIGlmICh0aGlzLmludGVybmFsQ2hlY2tlZCkge1xyXG4gICAgICAgIGNoZWNrZWRJdGVtcy5wdXNoKHRoaXMpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHVuY2hlY2tlZEl0ZW1zLnB1c2godGhpcyk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IFRyZWV2aWV3SGVscGVyLmNvbmNhdFNlbGVjdGlvbih0aGlzLmludGVybmFsQ2hpbGRyZW4sIGNoZWNrZWRJdGVtcywgdW5jaGVja2VkSXRlbXMpO1xyXG4gICAgICBjaGVja2VkSXRlbXMgPSBzZWxlY3Rpb24uY2hlY2tlZDtcclxuICAgICAgdW5jaGVja2VkSXRlbXMgPSBzZWxlY3Rpb24udW5jaGVja2VkO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGNoZWNrZWRJdGVtcyxcclxuICAgICAgdW5jaGVja2VkSXRlbXNcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBjb3JyZWN0Q2hlY2tlZCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaW50ZXJuYWxDaGVja2VkID0gdGhpcy5nZXRDb3JyZWN0Q2hlY2tlZCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRDb3JyZWN0Q2hlY2tlZCgpOiBib29sZWFuIHtcclxuICAgIGxldCBjaGVja2VkOiBib29sZWFuID0gbnVsbDtcclxuICAgIGlmICghaXNOaWwodGhpcy5pbnRlcm5hbENoaWxkcmVuKSkge1xyXG4gICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRoaXMuaW50ZXJuYWxDaGlsZHJlbikge1xyXG4gICAgICAgIGNoaWxkLmludGVybmFsQ2hlY2tlZCA9IGNoaWxkLmdldENvcnJlY3RDaGVja2VkKCk7XHJcbiAgICAgICAgaWYgKGNoZWNrZWQgPT09IG51bGwpIHtcclxuICAgICAgICAgIGNoZWNrZWQgPSBjaGlsZC5pbnRlcm5hbENoZWNrZWQ7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjaGVja2VkICE9PSBjaGlsZC5pbnRlcm5hbENoZWNrZWQpIHtcclxuICAgICAgICAgIGNoZWNrZWQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNoZWNrZWQgPSB0aGlzLmNoZWNrZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNoZWNrZWQ7XHJcbiAgfVxyXG59XHJcbiJdfQ==