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 ```
131 lines • 16.3 kB
JavaScript
import { __decorate } from "tslib";
import { Component, ElementRef, EventEmitter, HostListener, Input, OnInit, Output } from '@angular/core';
let MultiSelectorComponent = class MultiSelectorComponent {
constructor(elementRef) {
this.elementRef = elementRef;
this.expandedKeys = [];
this.selectorOpened = false;
this.selectedName = "Select";
this.selectedId = 0;
this.isIncludeFloatLocation = true;
this.includeInactive = false;
this.enableAllNodes = false;
this.checkedKeys = [];
this.selectorDisabled = false;
this.onData = new EventEmitter();
this.onChange = new EventEmitter();
this.selectedItems = [];
}
ngOnInit() {
this.onData.emit(this.dataHierarchy);
this.addExpandListItem(this.dataHierarchy.data);
this.setDefaultValue(this.checkedKeys, this.dataHierarchy.data);
}
onGlobalClick(event) {
if (!this.elementRef.nativeElement.contains(event.target)) {
// clicked outside => close dropdown list
this.selectorOpened = false;
}
}
closeDropDown() {
this.selectorOpened = false;
}
onItemSelected(data) {
this.selectorOpened = false;
}
setDefaultValue(checkedKeys, items) {
for (var i = 0; i < items.length; i++) {
if (checkedKeys.indexOf(items[i].id) > -1) {
if (items[i].isSelectable) {
this.selectedItems.push(items[i]);
this.setDefaultValue(checkedKeys, items[i].items);
}
}
else {
this.setDefaultValue(checkedKeys, items[i].items);
}
}
}
addExpandListItem(treeItem) {
treeItem.forEach(item => {
if (item.items && item.items.length > 0) {
this.expandedKeys.push(item.id);
this.addExpandListItem(item.items);
}
});
}
handleChange(data) {
this.checkedKeys = data;
let locationsFlatArray = this.dataHierarchy.flatData;
let selectedLocatonsArray = locationsFlatArray.filter(item => data.indexOf(item.id) !== -1);
this.selectedItems = selectedLocatonsArray;
this.onChange.emit(this.selectedItems);
}
locationClick() {
this.selectorOpened = !this.selectorOpened;
}
onRemove(item) {
const index = this.selectedItems.findIndex((c) => c.id === item.id);
const checkedKeyIndex = this.checkedKeys.findIndex(k => k == item.id);
this.checkedKeys.splice(checkedKeyIndex, 1);
this.selectedItems.splice(index, 1);
this.onChange.emit(this.selectedItems);
}
};
MultiSelectorComponent.ctorParameters = () => [
{ type: ElementRef }
];
__decorate([
Input()
], MultiSelectorComponent.prototype, "selectedName", void 0);
__decorate([
Input()
], MultiSelectorComponent.prototype, "selectedId", void 0);
__decorate([
Input()
], MultiSelectorComponent.prototype, "labelText", void 0);
__decorate([
Input()
], MultiSelectorComponent.prototype, "hoverText", void 0);
__decorate([
Input()
], MultiSelectorComponent.prototype, "isIncludeFloatLocation", void 0);
__decorate([
Input()
], MultiSelectorComponent.prototype, "includeInactive", void 0);
__decorate([
Input()
], MultiSelectorComponent.prototype, "enableAllNodes", void 0);
__decorate([
Input()
], MultiSelectorComponent.prototype, "dataHierarchy", void 0);
__decorate([
Input()
], MultiSelectorComponent.prototype, "checkedKeys", void 0);
__decorate([
Input()
], MultiSelectorComponent.prototype, "selectorDisabled", void 0);
__decorate([
Input()
], MultiSelectorComponent.prototype, "displayName", void 0);
__decorate([
Input()
], MultiSelectorComponent.prototype, "searchKey", void 0);
__decorate([
Output()
], MultiSelectorComponent.prototype, "onData", void 0);
__decorate([
Output()
], MultiSelectorComponent.prototype, "onChange", void 0);
__decorate([
HostListener('document:mousedown', ['$event'])
], MultiSelectorComponent.prototype, "onGlobalClick", null);
MultiSelectorComponent = __decorate([
Component({
selector: 'multi-selector',
template: "<div class=\"row align-items-center\" (click)=\"closeDropDown()\">\r\n <div class=\"col-md-12\">\r\n <label *ngIf=\"labelText?.length > 0\">{{labelText}}</label>\r\n\r\n <div #menu class=\"d-flex justify-content-between location-selector-form\"\r\n [ngClass]=\"{'disableSelector':selectorDisabled,'location-selector-focus' : selectorOpened}\" id=\"ddlLocationy\"\r\n (click)=\"locationClick()\" [title]=\"hoverText\" (click)=\"$event.stopPropagation()\">\r\n <div >\r\n <span *ngIf=\"selectorDisabled && selectedItems.length<1\">\r\n {{selectedName}}\r\n </span>\r\n <span *ngIf=\"!selectorDisabled && selectedItems.length<1\">\r\n Select\r\n </span>\r\n\r\n <kendo-chip *ngFor=\"let selectedItem of selectedItems.slice(0,3)\"\r\n [label]=\"selectedItem[displayName]\" removable=\"true\" removeIcon=\"k-icon k-i-close\"\r\n (remove)=\"onRemove(selectedItem);\">\r\n </kendo-chip>\r\n </div>\r\n <div class=\"d-flex flex-column align-items-center ml-1\">\r\n <em class=\"fas fa-chevron-down\"></em>\r\n <span *ngIf=\"selectedItems?.length >3\">+{{selectedItems?.length-3}}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"location-tree-wrapper p-2\" *ngIf=\"selectorOpened\" (click)=\"$event.stopPropagation()\">\r\n <multi-selector-tree-view [data]=\"dataHierarchy.data\" [enableAllNodes]=\"enableAllNodes\"\r\n [expandedKeys]=\"expandedKeys\" [displayName]=\"displayName\" \r\n [selectedId]=\"selectedId\" [checkedKeys]=\"checkedKeys\" (onChange)=\"handleChange($event)\"\r\n (closeEvent)=\"onItemSelected($event)\" [searchKey]=\"searchKey\" >\r\n </multi-selector-tree-view>\r\n </div>\r\n </div>\r\n</div>",
styles: [":host ::ng-deep .location-selector-form{align-items:center;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;color:#495057;cursor:pointer;display:block;font-size:.9rem;height:auto;font-weight:400;line-height:1.5;padding:.2rem .4rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:300px}:host ::ng-deep .location-selector-focus{background-color:#fff;box-shadow:0 0 0 .2rem rgba(0,81,81,.1);color:#495057;outline:0}:host ::ng-deep .location-tree-wrapper{position:absolute;z-index:10}:host ::ng-deep .disableSelector{opacity:.6;pointer-events:none}.k-chip{color:#fff;margin:2px;background-color:#005151;float:left;border-radius:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:120px}.k-chip:last-child{max-width:230px}"]
})
], MultiSelectorComponent);
export { MultiSelectorComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vYW5ndWxhci1jdXN0b20tc2VsZWN0b3IvIiwic291cmNlcyI6WyJsaWIvbXVsdGktc2VsZWN0b3IvbXVsdGktc2VsZWN0b3IuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBUXpHLElBQWEsc0JBQXNCLEdBQW5DLE1BQWEsc0JBQXNCO0lBb0JqQyxZQUFvQixVQUFzQjtRQUF0QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBbEJuQyxpQkFBWSxHQUFVLEVBQUUsQ0FBQztRQUN6QixtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUM5QixpQkFBWSxHQUFXLFFBQVEsQ0FBQztRQUNoQyxlQUFVLEdBQVcsQ0FBQyxDQUFDO1FBR3ZCLDJCQUFzQixHQUFZLElBQUksQ0FBQztRQUN2QyxvQkFBZSxHQUFZLEtBQUssQ0FBQztRQUNqQyxtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUV6QixnQkFBVyxHQUFVLEVBQUUsQ0FBQztRQUMvQixxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFHakMsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO1FBQzNDLGFBQVEsR0FBNkIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNsRSxrQkFBYSxHQUFlLEVBQUUsQ0FBQztJQUVlLENBQUM7SUFFL0MsUUFBUTtRQUNOLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFB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QUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN6QyxDQUFDO0NBRUYsQ0FBQTs7WUFuRWlDLFVBQVU7O0FBaEJqQztJQUFSLEtBQUssRUFBRTs0REFBaUM7QUFDaEM7SUFBUixLQUFLLEVBQUU7MERBQXdCO0FBQ3ZCO0lBQVIsS0FBSyxFQUFFO3lEQUFtQjtBQUNsQjtJQUFSLEtBQUssRUFBRTt5REFBbUI7QUFDbEI7SUFBUixLQUFLLEVBQUU7c0VBQXdDO0FBQ3ZDO0lBQVIsS0FBSyxFQUFFOytEQUFrQztBQUNqQztJQUFSLEtBQUssRUFBRTs4REFBaUM7QUFDaEM7SUFBUixLQUFLLEVBQUU7NkRBQXFDO0FBQ3BDO0lBQVIsS0FBSyxFQUFFOzJEQUFnQztBQUMvQjtJQUFSLEtBQUssRUFBRTtnRUFBbUM7QUFDbEM7SUFBUixLQUFLLEVBQUU7MkRBQXFCO0FBQ3BCO0lBQVIsS0FBSyxFQUFFO3lEQUFtQjtBQUNqQjtJQUFULE1BQU0sRUFBRTtzREFBNEM7QUFDM0M7SUFBVCxNQUFNLEVBQUU7d0RBQXlEO0FBWWxFO0lBREMsWUFBWSxDQUFDLG9CQUFvQixFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7MkRBTTlDO0FBbENVLHNCQUFzQjtJQUxsQyxTQUFTLENBQUM7UUFDVCxRQUFRLEVBQUUsZ0JBQWdCO1FBQzFCLHd3REFBOEM7O0tBRS9DLENBQUM7R0FDVyxzQkFBc0IsQ0F1RmxDO1NBdkZZLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNdWx0aVNlbGVjdG9yIH0gZnJvbSAnLi4vbW9kZWxzL3NlbGVjdG9yL211bHRpLXNlbGVjdG9yLW1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbXVsdGktc2VsZWN0b3InLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9tdWx0aS1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbXVsdGktc2VsZWN0b3IuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTXVsdGlTZWxlY3RvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIHB1YmxpYyBleHBhbmRlZEtleXM6IGFueVtdID0gW107XHJcbiAgcHVibGljIHNlbGVjdG9yT3BlbmVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2VsZWN0ZWROYW1lOiBzdHJpbmcgPSBcIlNlbGVjdFwiO1xyXG4gIEBJbnB1dCgpIHNlbGVjdGVkSWQ6IG51bWJlciA9IDA7XHJcbiAgQElucHV0KCkgbGFiZWxUZXh0OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgaG92ZXJUZXh0OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgaXNJbmNsdWRlRmxvYXRMb2NhdGlvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgaW5jbHVkZUluYWN0aXZlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZW5hYmxlQWxsTm9kZXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBwdWJsaWMgZGF0YUhpZXJhcmNoeTogTXVsdGlTZWxlY3RvcjtcclxuICBASW5wdXQoKSBwdWJsaWMgY2hlY2tlZEtleXM6IGFueVtdID0gW107XHJcbiAgQElucHV0KCkgc2VsZWN0b3JEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGRpc3BsYXlOYW1lOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgc2VhcmNoS2V5OiBzdHJpbmc7XHJcbiAgQE91dHB1dCgpIG9uRGF0YSA9IG5ldyBFdmVudEVtaXR0ZXI8TXVsdGlTZWxlY3Rvcj4oKTtcclxuICBAT3V0cHV0KCkgb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxBcnJheTxhbnk+PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBzZWxlY3RlZEl0ZW1zOiBBcnJheTxhbnk+ID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZikgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkRhdGEuZW1pdCh0aGlzLmRhdGFIaWVyYXJjaHkpO1xyXG4gICAgdGhpcy5hZGRFeHBhbmRMaXN0SXRlbSh0aGlzLmRhdGFIaWVyYXJjaHkuZGF0YSk7XHJcbiAgICB0aGlzLnNldERlZmF1bHRWYWx1ZSh0aGlzLmNoZWNrZWRLZXlzLCB0aGlzLmRhdGFIaWVyYXJjaHkuZGF0YSk7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDptb3VzZWRvd24nLCBbJyRldmVudCddKVxyXG4gIG9uR2xvYmFsQ2xpY2soZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcclxuICAgICAgLy8gY2xpY2tlZCBvdXRzaWRlID0+IGNsb3NlIGRyb3Bkb3duIGxpc3RcclxuICAgICAgdGhpcy5zZWxlY3Rvck9wZW5lZCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsb3NlRHJvcERvd24oKSB7XHJcbiAgICB0aGlzLnNlbGVjdG9yT3BlbmVkID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25JdGVtU2VsZWN0ZWQoZGF0YTogYW55KSB7XHJcbiAgICB0aGlzLnNlbGVjdG9yT3BlbmVkID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0RGVmYXVsdFZhbHVlKGNoZWNrZWRLZXlzOiBudW1iZXJbXSwgaXRlbXM6IEFycmF5PGFueT4pIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKGNoZWNrZWRLZXlzLmluZGV4T2YoaXRlbXNbaV0uaWQpID4gLTEpIHtcclxuICAgICAgICBpZiAoaXRlbXNbaV0uaXNTZWxlY3RhYmxlKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaChpdGVtc1tpXSk7XHJcbiAgICAgICAgICB0aGlzLnNldERlZmF1bHRWYWx1ZShjaGVja2VkS2V5cywgaXRlbXNbaV0uaXRlbXMpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdFZhbHVlKGNoZWNrZWRLZXlzLCBpdGVtc1tpXS5pdGVtcylcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZGRFeHBhbmRMaXN0SXRlbSh0cmVlSXRlbTogQXJyYXk8YW55Pikge1xyXG4gICAgdHJlZUl0ZW0uZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgaWYgKGl0ZW0uaXRlbXMgJiYgaXRlbS5pdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5leHBhbmRlZEtleXMucHVzaChpdGVtLmlkKTtcclxuICAgICAgICB0aGlzLmFkZEV4cGFuZExpc3RJdGVtKGl0ZW0uaXRlbXMpXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhbmRsZUNoYW5nZShkYXRhOiBhbnkpIHtcclxuICAgIHRoaXMuY2hlY2tlZEtleXMgPSBkYXRhO1xyXG4gICAgbGV0IGxvY2F0aW9uc0ZsYXRBcnJheSA9IHRoaXMuZGF0YUhpZXJhcmNoeS5mbGF0RGF0YTtcclxuICAgIGxldCBzZWxlY3RlZExvY2F0b25zQXJyYXkgPSBsb2NhdGlvbnNGbGF0QXJyYXkuZmlsdGVyKGl0ZW0gPT4gZGF0YS5pbmRleE9mKGl0ZW0uaWQpICE9PSAtMSk7XHJcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBzZWxlY3RlZExvY2F0b25zQXJyYXk7XHJcbiAgICB0aGlzLm9uQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZEl0ZW1zKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBsb2NhdGlvbkNsaWNrKCkge1xyXG4gICAgdGhpcy5zZWxlY3Rvck9wZW5lZCA9ICF0aGlzLnNlbGVjdG9yT3BlbmVkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uUmVtb3ZlKGl0ZW06IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnNlbGVjdGVkSXRlbXMuZmluZEluZGV4KChjKSA9PiBjLmlkID09PSBpdGVtLmlkKTtcclxuICAgIGNvbnN0IGNoZWNrZWRLZXlJbmRleCA9IHRoaXMuY2hlY2tlZEtleXMuZmluZEluZGV4KGsgPT4gayA9PSBpdGVtLmlkKTtcclxuICAgIHRoaXMuY2hlY2tlZEtleXMuc3BsaWNlKGNoZWNrZWRLZXlJbmRleCwgMSk7XHJcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIHRoaXMub25DaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkSXRlbXMpO1xyXG4gIH1cclxuXHJcbn1cclxuIl19