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

133 lines 17.2 kB
import { __decorate } from "tslib"; import { Component, ElementRef, EventEmitter, HostListener, Input, OnInit, Output } from '@angular/core'; var MultiSelectorComponent = /** @class */ (function () { function MultiSelectorComponent(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 = []; } MultiSelectorComponent.prototype.ngOnInit = function () { this.onData.emit(this.dataHierarchy); this.addExpandListItem(this.dataHierarchy.data); this.setDefaultValue(this.checkedKeys, this.dataHierarchy.data); }; MultiSelectorComponent.prototype.onGlobalClick = function (event) { if (!this.elementRef.nativeElement.contains(event.target)) { // clicked outside => close dropdown list this.selectorOpened = false; } }; MultiSelectorComponent.prototype.closeDropDown = function () { this.selectorOpened = false; }; MultiSelectorComponent.prototype.onItemSelected = function (data) { this.selectorOpened = false; }; MultiSelectorComponent.prototype.setDefaultValue = function (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); } } }; MultiSelectorComponent.prototype.addExpandListItem = function (treeItem) { var _this = this; treeItem.forEach(function (item) { if (item.items && item.items.length > 0) { _this.expandedKeys.push(item.id); _this.addExpandListItem(item.items); } }); }; MultiSelectorComponent.prototype.handleChange = function (data) { this.checkedKeys = data; var locationsFlatArray = this.dataHierarchy.flatData; var selectedLocatonsArray = locationsFlatArray.filter(function (item) { return data.indexOf(item.id) !== -1; }); this.selectedItems = selectedLocatonsArray; this.onChange.emit(this.selectedItems); }; MultiSelectorComponent.prototype.locationClick = function () { this.selectorOpened = !this.selectorOpened; }; MultiSelectorComponent.prototype.onRemove = function (item) { var index = this.selectedItems.findIndex(function (c) { return c.id === item.id; }); var checkedKeyIndex = this.checkedKeys.findIndex(function (k) { return k == item.id; }); this.checkedKeys.splice(checkedKeyIndex, 1); this.selectedItems.splice(index, 1); this.onChange.emit(this.selectedItems); }; MultiSelectorComponent.ctorParameters = function () { return [ { 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); return MultiSelectorComponent; }()); export { MultiSelectorComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vYW5ndWxhci1jdXN0b20tc2VsZWN0b3IvIiwic291cmNlcyI6WyJsaWIvbXVsdGktc2VsZWN0b3IvbXVsdGktc2VsZWN0b3IuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBUXpHO0lBb0JFLGdDQUFvQixVQUFzQjtRQUF0QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBbEJuQyxpQkFBWSxHQUFVLEVBQUUsQ0FBQztRQUN6QixtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUM5QixpQkFBWSxHQUFXLFFBQVEsQ0FBQztRQUNoQyxlQUFVLEdBQVcsQ0FBQyxDQUFDO1FBR3ZCLDJCQUFzQixHQUFZLElBQUksQ0FBQztRQUN2QyxvQkFBZSxHQUFZLEtBQUssQ0FBQztRQUNqQyxtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUV6QixnQkFBVyxHQUFVLEVBQUUsQ0FBQztRQUMvQixxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFHakMsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO1FBQzNDLGFBQVEsR0FBNkIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNsRSxrQkFBYSxHQUFlLEVBQUUsQ0FBQztJQUVlLENBQUM7SUFFL0MseUNBQVEsR0FBUjtRQUNFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENB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bGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE11bHRpU2VsZWN0b3IgfSBmcm9tICcuLi9tb2RlbHMvc2VsZWN0b3IvbXVsdGktc2VsZWN0b3ItbW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdtdWx0aS1zZWxlY3RvcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL211bHRpLXNlbGVjdG9yLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9tdWx0aS1zZWxlY3Rvci5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNdWx0aVNlbGVjdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgcHVibGljIGV4cGFuZGVkS2V5czogYW55W10gPSBbXTtcclxuICBwdWJsaWMgc2VsZWN0b3JPcGVuZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzZWxlY3RlZE5hbWU6IHN0cmluZyA9IFwiU2VsZWN0XCI7XHJcbiAgQElucHV0KCkgc2VsZWN0ZWRJZDogbnVtYmVyID0gMDtcclxuICBASW5wdXQoKSBsYWJlbFRleHQ6IHN0cmluZztcclxuICBASW5wdXQoKSBob3ZlclRleHQ6IHN0cmluZztcclxuICBASW5wdXQoKSBpc0luY2x1ZGVGbG9hdExvY2F0aW9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBpbmNsdWRlSW5hY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBlbmFibGVBbGxOb2RlczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBkYXRhSGllcmFyY2h5OiBNdWx0aVNlbGVjdG9yO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBjaGVja2VkS2V5czogYW55W10gPSBbXTtcclxuICBASW5wdXQoKSBzZWxlY3RvckRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZGlzcGxheU5hbWU6IHN0cmluZztcclxuICBASW5wdXQoKSBzZWFyY2hLZXk6IHN0cmluZztcclxuICBAT3V0cHV0KCkgb25EYXRhID0gbmV3IEV2ZW50RW1pdHRlcjxNdWx0aVNlbGVjdG9yPigpO1xyXG4gIEBPdXRwdXQoKSBvbkNoYW5nZTogRXZlbnRFbWl0dGVyPEFycmF5PGFueT4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIHNlbGVjdGVkSXRlbXM6IEFycmF5PGFueT4gPSBbXTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLm9uRGF0YS5lbWl0KHRoaXMuZGF0YUhpZXJhcmNoeSk7XHJcbiAgICB0aGlzLmFkZEV4cGFuZExpc3RJdGVtKHRoaXMuZGF0YUhpZXJhcmNoeS5kYXRhKTtcclxuICAgIHRoaXMuc2V0RGVmYXVsdFZhbHVlKHRoaXMuY2hlY2tlZEtleXMsIHRoaXMuZGF0YUhpZXJhcmNoeS5kYXRhKTtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50Om1vdXNlZG93bicsIFsnJGV2ZW50J10pXHJcbiAgb25HbG9iYWxDbGljayhldmVudDogRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xyXG4gICAgICAvLyBjbGlja2VkIG91dHNpZGUgPT4gY2xvc2UgZHJvcGRvd24gbGlzdFxyXG4gICAgICB0aGlzLnNlbGVjdG9yT3BlbmVkID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xvc2VEcm9wRG93bigpIHtcclxuICAgIHRoaXMuc2VsZWN0b3JPcGVuZWQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkl0ZW1TZWxlY3RlZChkYXRhOiBhbnkpIHtcclxuICAgIHRoaXMuc2VsZWN0b3JPcGVuZWQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXREZWZhdWx0VmFsdWUoY2hlY2tlZEtleXM6IG51bWJlcltdLCBpdGVtczogQXJyYXk8YW55Pikge1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoY2hlY2tlZEtleXMuaW5kZXhPZihpdGVtc1tpXS5pZCkgPiAtMSkge1xyXG4gICAgICAgIGlmIChpdGVtc1tpXS5pc1NlbGVjdGFibGUpIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5wdXNoKGl0ZW1zW2ldKTtcclxuICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdFZhbHVlKGNoZWNrZWRLZXlzLCBpdGVtc1tpXS5pdGVtcylcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZXREZWZhdWx0VmFsdWUoY2hlY2tlZEtleXMsIGl0ZW1zW2ldLml0ZW1zKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZEV4cGFuZExpc3RJdGVtKHRyZWVJdGVtOiBBcnJheTxhbnk+KSB7XHJcbiAgICB0cmVlSXRlbS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICBpZiAoaXRlbS5pdGVtcyAmJiBpdGVtLml0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLmV4cGFuZGVkS2V5cy5wdXNoKGl0ZW0uaWQpO1xyXG4gICAgICAgIHRoaXMuYWRkRXhwYW5kTGlzdEl0ZW0oaXRlbS5pdGVtcylcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlQ2hhbmdlKGRhdGE6IGFueSkge1xyXG4gICAgdGhpcy5jaGVja2VkS2V5cyA9IGRhdGE7XHJcbiAgICBsZXQgbG9jYXRpb25zRmxhdEFycmF5ID0gdGhpcy5kYXRhSGllcmFyY2h5LmZsYXREYXRhO1xyXG4gICAgbGV0IHNlbGVjdGVkTG9jYXRvbnNBcnJheSA9IGxvY2F0aW9uc0ZsYXRBcnJheS5maWx0ZXIoaXRlbSA9PiBkYXRhLmluZGV4T2YoaXRlbS5pZCkgIT09IC0xKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHNlbGVjdGVkTG9jYXRvbnNBcnJheTtcclxuICAgIHRoaXMub25DaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkSXRlbXMpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGxvY2F0aW9uQ2xpY2soKSB7XHJcbiAgICB0aGlzLnNlbGVjdG9yT3BlbmVkID0gIXRoaXMuc2VsZWN0b3JPcGVuZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25SZW1vdmUoaXRlbTogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRJdGVtcy5maW5kSW5kZXgoKGMpID0+IGMuaWQgPT09IGl0ZW0uaWQpO1xyXG4gICAgY29uc3QgY2hlY2tlZEtleUluZGV4ID0gdGhpcy5jaGVja2VkS2V5cy5maW5kSW5kZXgoayA9PiBrID09IGl0ZW0uaWQpO1xyXG4gICAgdGhpcy5jaGVja2VkS2V5cy5zcGxpY2UoY2hlY2tlZEtleUluZGV4LCAxKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgdGhpcy5vbkNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRJdGVtcyk7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=