angular-custom-selector
Version:
```bash NOTE*** This library was generated using Angular CLI version 9.0.0. Therefore, it is recommended that you use a compatible version of Angular to ensure proper functionality ```
142 lines • 17.4 kB
JavaScript
import { __decorate } from "tslib";
import { ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output, SimpleChanges } from '@angular/core';
var MultiSelectorTreeViewComponent = /** @class */ (function () {
function MultiSelectorTreeViewComponent(cdRef) {
this.cdRef = cdRef;
this.isDisableParent = false;
this.closeEvent = new EventEmitter();
this.onChange = new EventEmitter();
this.enableAllNodes = false;
this.searchKey = "name";
this.checkedKeys = [];
}
MultiSelectorTreeViewComponent.prototype.ngOnChanges = function (changes) {
this.checkDefaultValue(changes.checkedKeys.currentValue, this.data);
};
MultiSelectorTreeViewComponent.prototype.ngOnInit = function () {
this.checkDefaultValue(this.checkedKeys, this.data);
this.onChange.emit(this.checkedKeys);
if (this.enableAllNodes) {
this.enableAll(this.data);
}
};
MultiSelectorTreeViewComponent.prototype.ngAfterContentInit = function () {
this.addExpandListItem(this.data);
};
MultiSelectorTreeViewComponent.prototype.ngAfterViewInit = function () {
this.cdRef.detectChanges();
};
MultiSelectorTreeViewComponent.prototype.checkDefaultValue = function (checkedKeys, items) {
for (var i = 0; i < items.length; i++) {
if (checkedKeys.indexOf(items[i].id) > -1) {
if (items[i].isSelectable) {
items[i].isSelected = true;
this.checkDefaultValue(checkedKeys, items[i].items);
}
else {
items[i].isSelected = false;
}
}
else {
items[i].isSelected = false;
this.checkDefaultValue(checkedKeys, items[i].items);
}
}
};
MultiSelectorTreeViewComponent.prototype.handleCheck = function (dataItem) {
dataItem.isSelected = !dataItem.isSelected;
this.handleChildCheck(dataItem.items, dataItem.isSelected);
this.checkedKeys = [];
this.checkedKeys = this.getCheckedKeys(this.data, this.checkedKeys);
this.onChange.emit(this.checkedKeys);
};
MultiSelectorTreeViewComponent.prototype.handleChildCheck = function (childItems, isSelected) {
for (var i = 0; i < childItems.length; i++) {
if (childItems[i].isSelectable) {
childItems[i].isSelected = isSelected;
this.handleChildCheck(childItems[i].items, isSelected);
}
else {
this.handleChildCheck(childItems[i].items, isSelected);
}
}
};
MultiSelectorTreeViewComponent.prototype.enableAll = function (data) {
var _this = this;
data.map(function (item) {
item.isSelectable = true;
_this.enableAll(item.items);
});
};
MultiSelectorTreeViewComponent.prototype.unCheckAll = function (items) {
for (var i = 0; i < items.length; i++) {
if (items[i].isSelectable) {
items[i].isSelected = false;
this.unCheckAll(items[i].items);
}
}
};
MultiSelectorTreeViewComponent.prototype.getCheckedKeys = function (items, keys) {
for (var i = 0; i < items.length; i++) {
if (items[i].isSelected) {
keys.push(items[i].id);
}
keys = this.getCheckedKeys(items[i].items, keys);
}
return keys;
};
MultiSelectorTreeViewComponent.prototype.showClick = function (dataItem) {
this.closeEvent.emit(dataItem);
};
MultiSelectorTreeViewComponent.prototype.addExpandListItem = function (treeItem) {
var _this = this;
treeItem.forEach(function (item) {
if (item.hasChild) {
_this.addExpandListItem(item.items);
}
});
};
MultiSelectorTreeViewComponent.ctorParameters = function () { return [
{ type: ChangeDetectorRef }
]; };
__decorate([
Input()
], MultiSelectorTreeViewComponent.prototype, "expandedKeys", void 0);
__decorate([
Input()
], MultiSelectorTreeViewComponent.prototype, "selectedId", void 0);
__decorate([
Input()
], MultiSelectorTreeViewComponent.prototype, "isDisableParent", void 0);
__decorate([
Input()
], MultiSelectorTreeViewComponent.prototype, "data", void 0);
__decorate([
Output()
], MultiSelectorTreeViewComponent.prototype, "closeEvent", void 0);
__decorate([
Output()
], MultiSelectorTreeViewComponent.prototype, "onChange", void 0);
__decorate([
Input()
], MultiSelectorTreeViewComponent.prototype, "displayName", void 0);
__decorate([
Input()
], MultiSelectorTreeViewComponent.prototype, "enableAllNodes", void 0);
__decorate([
Input()
], MultiSelectorTreeViewComponent.prototype, "searchKey", void 0);
__decorate([
Input()
], MultiSelectorTreeViewComponent.prototype, "checkedKeys", void 0);
MultiSelectorTreeViewComponent = __decorate([
Component({
selector: 'multi-selector-tree-view',
template: "<kendo-treeview [nodes]=\"data\" textField={{searchKey}} childrenField=\"items\" \r\n[(expandedKeys)]=\"expandedKeys\" expandBy=\"id\" \r\n[filterable]=\"true\" \r\n filterInputPlaceholder=\"Search\" kendoTreeViewExpandable \r\n kendoTreeViewHierarchyBinding>\r\n <ng-template kendoTreeViewNodeTemplate let-dataItem>\r\n <input [(ngModel)]=\"dataItem.isSelected\" (click)=\"handleCheck(dataItem)\" [disabled]=\"!dataItem.isSelectable\" class=\"k-checkbox\" type=\"checkbox\"\r\n kendoCheckBox /><span class=\"selectoritem\" (click)=\"handleCheck(dataItem)\" [ngClass]=\"{'disableNode': dataItem.isSelectable === false,'itemactive' : selectedId == dataItem.id}\"> \r\n {{ dataItem[displayName] }} \r\n </span> \r\n </ng-template>\r\n</kendo-treeview>\r\n",
styles: [":host ::ng-deep .k-checkbox{border-color:#000}:host ::ng-deep .k-textbox{width:100%;margin-bottom:8px}:host ::ng-deep .k-in.k-state-focused{box-shadow:none!important}:host ::ng-deep .selectoritem:hover{background-color:#005151;border-radius:3px;color:#fff;font-weight:500;cursor:default}:host ::ng-deep .k-treeview .k-icon{font-size:20px}:host ::ng-deep .k-treeview .k-in{padding:0;width:100%}:host ::ng-deep .selectoritem{padding:5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:100%}:host ::ng-deep .disableNode{opacity:.6;pointer-events:none}:host ::ng-deep .itemactive{color:#005151;font-weight:500}"]
})
], MultiSelectorTreeViewComponent);
return MultiSelectorTreeViewComponent;
}());
export { MultiSelectorTreeViewComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktc2VsZWN0b3ItdHJlZS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2FuZ3VsYXItY3VzdG9tLXNlbGVjdG9yLyIsInNvdXJjZXMiOlsibGliL211bHRpLXNlbGVjdG9yL211bHRpLXNlbGVjdG9yLXRyZWUtdmlldy9tdWx0aS1zZWxlY3Rvci10cmVlLXZpZXcuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFNakg7SUFpQkUsd0NBQW9CLEtBQXdCO1FBQXhCLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBYm5DLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBRWhDLGVBQVUsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUN4RCxhQUFRLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFbEQsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFDaEMsY0FBUyxHQUFXLE1BQU0sQ0FBQztRQUNwQixnQkFBVyxHQUFVLEVBQUUsQ0FBQztJQU1RLENBQUM7SUFKakQsb0RBQVcsR0FBWCxVQUFZLE9BQXNCO1FBQ2hDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUlNLGlEQUFRLEdBQWY7UUFDRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3JDLElBQUcsSUFBSSxDQUFDLGNBQWMsRUFBQztZQUNyQixJQUFJLENBQUMsU0FBUyxDQUFDLElB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Qzs7Z0JBMUYwQixpQkFBaUI7O0lBZm5DO1FBQVIsS0FBSyxFQUFFO3dFQUFxQjtJQUNwQjtRQUFSLEtBQUssRUFBRTtzRUFBb0I7SUFDbkI7UUFBUixLQUFLLEVBQUU7MkVBQWtDO0lBQ2pDO1FBQVIsS0FBSyxFQUFFO2dFQUFrQjtJQUNoQjtRQUFULE1BQU0sRUFBRTtzRUFBeUQ7SUFDeEQ7UUFBVCxNQUFNLEVBQUU7b0VBQWtEO0lBQ2xEO1FBQVIsS0FBSyxFQUFFO3VFQUFxQjtJQUNwQjtRQUFSLEtBQUssRUFBRTswRUFBaUM7SUFDaEM7UUFBUixLQUFLLEVBQUU7cUVBQTRCO0lBQzNCO1FBQVIsS0FBSyxFQUFFO3VFQUFnQztJQVg3Qiw4QkFBOEI7UUFMMUMsU0FBUyxDQUFDO1lBQ1QsUUFBUSxFQUFFLDBCQUEwQjtZQUNwQyw2ekJBQXdEOztTQUV6RCxDQUFDO09BQ1csOEJBQThCLENBNkcxQztJQUFELHFDQUFDO0NBQUEsQUE3R0QsSUE2R0M7U0E3R1ksOEJBQThCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdtdWx0aS1zZWxlY3Rvci10cmVlLXZpZXcnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9tdWx0aS1zZWxlY3Rvci10cmVlLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL211bHRpLXNlbGVjdG9yLXRyZWUtdmlldy5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNdWx0aVNlbGVjdG9yVHJlZVZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBASW5wdXQoKSBleHBhbmRlZEtleXM6IGFueVtdO1xyXG4gIEBJbnB1dCgpIHNlbGVjdGVkSWQ6IG51bWJlcjtcclxuICBASW5wdXQoKSBpc0Rpc2FibGVQYXJlbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBkYXRhOiBBcnJheTxhbnk+O1xyXG4gIEBPdXRwdXQoKSBjbG9zZUV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBvbkNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQElucHV0KCkgZGlzcGxheU5hbWU6IHN0cmluZztcclxuICBASW5wdXQoKSBlbmFibGVBbGxOb2RlczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNlYXJjaEtleTogc3RyaW5nID0gXCJuYW1lXCI7XHJcbiAgQElucHV0KCkgcHVibGljIGNoZWNrZWRLZXlzOiBhbnlbXSA9IFtdO1xyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICB0aGlzLmNoZWNrRGVmYXVsdFZhbHVlKGNoYW5nZXMuY2hlY2tlZEtleXMuY3VycmVudFZhbHVlLCB0aGlzLmRhdGEpO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHsgfVxyXG5cclxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNoZWNrRGVmYXVsdFZhbHVlKHRoaXMuY2hlY2tlZEtleXMsIHRoaXMuZGF0YSk7XHJcbiAgICB0aGlzLm9uQ2hhbmdlLmVtaXQodGhpcy5jaGVja2VkS2V5cyk7XHJcbiAgICBpZih0aGlzLmVuYWJsZUFsbE5vZGVzKXtcclxuICAgICAgdGhpcy5lbmFibGVBbGwodGhpcy5kYXRhKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcclxuICAgIHRoaXMuYWRkRXhwYW5kTGlzdEl0ZW0odGhpcy5kYXRhKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNoZWNrRGVmYXVsdFZhbHVlKGNoZWNrZWRLZXlzOiBudW1iZXJbXSwgaXRlbXM6IEFycmF5PGFueT4pIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKGNoZWNrZWRLZXlzLmluZGV4T2YoaXRlbXNbaV0uaWQpID4gLTEpIHtcclxuICAgICAgICBpZiAoaXRlbXNbaV0uaXNTZWxlY3RhYmxlKSB7XHJcbiAgICAgICAgICBpdGVtc1tpXS5pc1NlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuY2hlY2tEZWZhdWx0VmFsdWUoY2hlY2tlZEtleXMsIGl0ZW1zW2ldLml0ZW1zKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaXRlbXNbaV0uaXNTZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBpdGVtc1tpXS5pc1NlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jaGVja0RlZmF1bHRWYWx1ZShjaGVja2VkS2V5cywgaXRlbXNbaV0uaXRlbXMpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVDaGVjayhkYXRhSXRlbTogYW55KSB7XHJcbiAgICBkYXRhSXRlbS5pc1NlbGVjdGVkID0gIWRhdGFJdGVtLmlzU2VsZWN0ZWQ7XHJcbiAgICB0aGlzLmhhbmRsZUNoaWxkQ2hlY2soZGF0YUl0ZW0uaXRlbXMsIGRhdGFJdGVtLmlzU2VsZWN0ZWQpO1xyXG4gICAgdGhpcy5jaGVja2VkS2V5cyA9IFtdO1xyXG4gICAgdGhpcy5jaGVja2VkS2V5cyA9IHRoaXMuZ2V0Q2hlY2tlZEtleXModGhpcy5kYXRhLCB0aGlzLmNoZWNrZWRLZXlzKTtcclxuICAgIHRoaXMub25DaGFuZ2UuZW1pdCh0aGlzLmNoZWNrZWRLZXlzKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVDaGlsZENoZWNrKGNoaWxkSXRlbXM6IEFycmF5PGFueT4sIGlzU2VsZWN0ZWQ6IGJvb2xlYW4pIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRJdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoY2hpbGRJdGVtc1tpXS5pc1NlbGVjdGFibGUpIHtcclxuICAgICAgICBjaGlsZEl0ZW1zW2ldLmlzU2VsZWN0ZWQgPSBpc1NlbGVjdGVkO1xyXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hpbGRDaGVjayhjaGlsZEl0ZW1zW2ldLml0ZW1zLCBpc1NlbGVjdGVkKTtcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVDaGlsZENoZWNrKGNoaWxkSXRlbXNbaV0uaXRlbXMsIGlzU2VsZWN0ZWQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZW5hYmxlQWxsKGRhdGE6IEFycmF5PGFueT4pe1xyXG4gICAgZGF0YS5tYXAoaXRlbT0+IHtcclxuICAgICAgaXRlbS5pc1NlbGVjdGFibGUgPSB0cnVlO1xyXG4gICAgICB0aGlzLmVuYWJsZUFsbChpdGVtLml0ZW1zKTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdW5DaGVja0FsbChpdGVtczogQXJyYXk8YW55Pikge1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoaXRlbXNbaV0uaXNTZWxlY3RhYmxlKSB7XHJcbiAgICAgICAgaXRlbXNbaV0uaXNTZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudW5DaGVja0FsbChpdGVtc1tpXS5pdGVtcyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRDaGVja2VkS2V5cyhpdGVtczogQXJyYXk8YW55Piwga2V5czogbnVtYmVyW10pOiBudW1iZXJbXSB7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChpdGVtc1tpXS5pc1NlbGVjdGVkKSB7XHJcbiAgICAgICAga2V5cy5wdXNoKGl0ZW1zW2ldLmlkKTtcclxuICAgICAgfVxyXG4gICAgICBrZXlzID0gdGhpcy5nZXRDaGVja2VkS2V5cyhpdGVtc1tpXS5pdGVtcywga2V5cyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ga2V5cztcclxuICB9XHJcblxyXG4gIHNob3dDbGljayhkYXRhSXRlbTogYW55KSB7XHJcbiAgICB0aGlzLmNsb3NlRXZlbnQuZW1pdChkYXRhSXRlbSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZEV4cGFuZExpc3RJdGVtKHRyZWVJdGVtOiBBcnJheTxhbnk+KSB7XHJcbiAgICB0cmVlSXRlbS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICBpZiAoaXRlbS5oYXNDaGlsZCkge1xyXG4gICAgICAgIHRoaXMuYWRkRXhwYW5kTGlzdEl0ZW0oaXRlbS5pdGVtcylcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=