UNPKG

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
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