UNPKG

angular-location-selector

Version:

![Logo](https://iili.io/HWfBDgV.png)

133 lines 17.7 kB
import { __decorate } from "tslib"; import { Component, ElementRef, EventEmitter, HostListener, Input, OnInit, Output } from '@angular/core'; let LocationMultiSelectorComponent = class LocationMultiSelectorComponent { constructor(elementRef) { this.elementRef = elementRef; this.expandedKeys = []; this.selectorOpened = false; this.selectedLocationName = "Select"; this.selectedLocationId = 0; this.isIncludeFloatLocation = true; this.hideBranchLess = false; this.includeInactive = false; this.isDisableParentClick = false; this.onChange = new EventEmitter(); this.page = ""; this.checkedKeys = []; this.selectorDisabled = false; this.onLocationsData = new EventEmitter(); this.selectedLocations = []; } ngOnInit() { this.onLocationsData.emit(this.locationHierachy); this.addExpandListItem(this.locationHierachy.locations); this.setDefaultValue(this.checkedKeys, this.locationHierachy.locations); } 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].locationId) > -1) { if (items[i].isSelectable) { this.selectedLocations.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.locationId); this.addExpandListItem(item.items); } }); } handleChange(data) { this.checkedKeys = data; let locationsFlatArray = this.locationHierachy.locationsFlatData; let selectedLocatonsArray = locationsFlatArray.filter(item => data.indexOf(item.locationId) !== -1); this.selectedLocations = selectedLocatonsArray; this.onChange.emit(this.selectedLocations); } locationClick() { this.selectorOpened = !this.selectorOpened; } onRemove(item) { const index = this.selectedLocations.findIndex((c) => c.locationId === item.locationId); const checkedKeyIndex = this.checkedKeys.findIndex(k => k == item.locationId); this.checkedKeys.splice(checkedKeyIndex, 1); this.selectedLocations.splice(index, 1); this.onChange.emit(this.selectedLocations); } }; LocationMultiSelectorComponent.ctorParameters = () => [ { type: ElementRef } ]; __decorate([ Input() ], LocationMultiSelectorComponent.prototype, "selectedLocationName", void 0); __decorate([ Input() ], LocationMultiSelectorComponent.prototype, "selectedLocationId", void 0); __decorate([ Input() ], LocationMultiSelectorComponent.prototype, "labelText", void 0); __decorate([ Input() ], LocationMultiSelectorComponent.prototype, "hoverText", void 0); __decorate([ Input() ], LocationMultiSelectorComponent.prototype, "isIncludeFloatLocation", void 0); __decorate([ Input() ], LocationMultiSelectorComponent.prototype, "hideBranchLess", void 0); __decorate([ Input() ], LocationMultiSelectorComponent.prototype, "includeInactive", void 0); __decorate([ Input() ], LocationMultiSelectorComponent.prototype, "isDisableParentClick", void 0); __decorate([ Output() ], LocationMultiSelectorComponent.prototype, "onChange", void 0); __decorate([ Input() ], LocationMultiSelectorComponent.prototype, "locationHierachy", void 0); __decorate([ Input() ], LocationMultiSelectorComponent.prototype, "page", void 0); __decorate([ Input() ], LocationMultiSelectorComponent.prototype, "checkedKeys", void 0); __decorate([ Input() ], LocationMultiSelectorComponent.prototype, "selectorDisabled", void 0); __decorate([ Output() ], LocationMultiSelectorComponent.prototype, "onLocationsData", void 0); __decorate([ HostListener('document:mousedown', ['$event']) ], LocationMultiSelectorComponent.prototype, "onGlobalClick", null); LocationMultiSelectorComponent = __decorate([ Component({ selector: 'location-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 && selectedLocations.length<1\">\r\n {{selectedLocationName}}\r\n </span>\r\n <span *ngIf=\"!selectorDisabled && selectedLocations.length<1\">\r\n Select\r\n </span>\r\n <kendo-chip *ngFor=\"let selectedLocation of selectedLocations.slice(0,3)\"\r\n [label]=\"selectedLocation.locationName\" removable=\"true\" removeIcon=\"k-icon k-i-close\"\r\n (remove)=\"onRemove(selectedLocation);\">\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=\"selectedLocations?.length >3\">+{{selectedLocations?.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 <location-multi-selector-tree-view [locations]=\"locationHierachy.locations\"\r\n [expandedKeys]=\"expandedKeys\" \r\n [selectedLocationId]=\"selectedLocationId\" [checkedKeys]=\"checkedKeys\" (onChange)=\"handleChange($event)\"\r\n (closeEvent)=\"onItemSelected($event)\">\r\n </location-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}"] }) ], LocationMultiSelectorComponent); export { LocationMultiSelectorComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYXRpb24tbXVsdGktc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vYW5ndWxhci1sb2NhdGlvbi1zZWxlY3Rvci8iLCJzb3VyY2VzIjpbImxpYi9sb2NhdGlvbi1tdWx0aS1zZWxlY3Rvci9sb2NhdGlvbi1tdWx0aS1zZWxlY3Rvci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFXekcsSUFBYSw4QkFBOEIsR0FBM0MsTUFBYSw4QkFBOEI7SUF1QnpDLFlBQW9CLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFyQm5DLGlCQUFZLEdBQVUsRUFBRSxDQUFDO1FBQ3pCLG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBQzlCLHlCQUFvQixHQUFXLFFBQVEsQ0FBQztRQUN4Qyx1QkFBa0IsR0FBVyxDQUFDLENBQUM7UUFHL0IsMkJBQXNCLEdBQVksSUFBSSxDQUFDO1FBQ3ZDLG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBQ2hDLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBQ2pDLHlCQUFvQixHQUFZLEtBQUssQ0FBQztRQUNyQyxhQUFRLEdBQStDLElBQUksWUFBWSxFQUFFLENBQUM7UUFHM0UsU0FBSSxHQUFXLEVBQUUsQ0FBQztRQUVwQixnQkFBVyxHQUFVLEVBQUUsQ0FBQztRQUN0QixxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFFakMsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBeUIsQ0FBQztRQUN0RSxzQkFBaUIsR0FBaUMsRUFBRSxDQUFDO0lBRVAsQ0FBQztJQUUvQyxRQUFRO1FBQ04sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLGlCQUFp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bnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IExvY2F0aW9uTXVsdGlTZWxlY3Rvck1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL2xvY2F0aW9uLW11bHRpLXNlbGVjdG9yLm1vZGVsJztcclxuaW1wb3J0IHsgTG9jYXRpb25NdWx0aVNlbGVjdG9yIH0gZnJvbSAnLi4vbW9kZWxzL2xvY2F0aW9uLXNlbGVjdG9yL2xvY2F0aW9uLW11bHRpLXNlbGVjdG9yLW1vZGVsJztcclxuaW1wb3J0IHsgTG9jYXRpb25Ecm9wRG93bk1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL2xvY2F0aW9ucy1kcm9wLWRvd24tbGlzdC5tb2RlbCc7XHJcbmltcG9ydCB7IExvY2F0aW9uU2VsZWN0b3JJbmZvIH0gZnJvbSAnLi4vbW9kZWxzL2xvY2F0aW9uU2VsZWN0b3JNb2RlbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xvY2F0aW9uLW11bHRpLXNlbGVjdG9yJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbG9jYXRpb24tbXVsdGktc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2xvY2F0aW9uLW11bHRpLXNlbGVjdG9yLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIExvY2F0aW9uTXVsdGlTZWxlY3RvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIHB1YmxpYyBleHBhbmRlZEtleXM6IGFueVtdID0gW107XHJcbiAgcHVibGljIHNlbGVjdG9yT3BlbmVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2VsZWN0ZWRMb2NhdGlvbk5hbWU6IHN0cmluZyA9IFwiU2VsZWN0XCI7XHJcbiAgQElucHV0KCkgc2VsZWN0ZWRMb2NhdGlvbklkOiBudW1iZXIgPSAwO1xyXG4gIEBJbnB1dCgpIGxhYmVsVGV4dDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGhvdmVyVGV4dDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGlzSW5jbHVkZUZsb2F0TG9jYXRpb246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGhpZGVCcmFuY2hMZXNzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgaW5jbHVkZUluYWN0aXZlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgaXNEaXNhYmxlUGFyZW50Q2xpY2s6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBAT3V0cHV0KCkgb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxMb2NhdGlvbk11bHRpU2VsZWN0b3JNb2RlbFtdPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBASW5wdXQoKSBwdWJsaWMgbG9jYXRpb25IaWVyYWNoeTogTG9jYXRpb25NdWx0aVNlbGVjdG9yO1xyXG5cclxuICBASW5wdXQoKSBwYWdlOiBzdHJpbmcgPSBcIlwiO1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGNoZWNrZWRLZXlzOiBhbnlbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIHNlbGVjdG9yRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQE91dHB1dCgpIG9uTG9jYXRpb25zRGF0YSA9IG5ldyBFdmVudEVtaXR0ZXI8TG9jYXRpb25NdWx0aVNlbGVjdG9yPigpO1xyXG4gIHNlbGVjdGVkTG9jYXRpb25zOiBMb2NhdGlvbk11bHRpU2VsZWN0b3JNb2RlbFtdID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZikgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkxvY2F0aW9uc0RhdGEuZW1pdCh0aGlzLmxvY2F0aW9uSGllcmFjaHkpO1xyXG4gICAgdGhpcy5hZGRFeHBhbmRMaXN0SXRlbSh0aGlzLmxvY2F0aW9uSGllcmFjaHkubG9jYXRpb25zKTtcclxuICAgIHRoaXMuc2V0RGVmYXVsdFZhbHVlKHRoaXMuY2hlY2tlZEtleXMsIHRoaXMubG9jYXRpb25IaWVyYWNoeS5sb2NhdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6bW91c2Vkb3duJywgWyckZXZlbnQnXSlcclxuICBvbkdsb2JhbENsaWNrKGV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcclxuICAgICAgLy8gY2xpY2tlZCBvdXRzaWRlID0+IGNsb3NlIGRyb3Bkb3duIGxpc3RcclxuICAgICAgdGhpcy5zZWxlY3Rvck9wZW5lZCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsb3NlRHJvcERvd24oKSB7XHJcbiAgICB0aGlzLnNlbGVjdG9yT3BlbmVkID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25JdGVtU2VsZWN0ZWQoZGF0YTogTG9jYXRpb25TZWxlY3RvckluZm8pIHtcclxuICAgIHRoaXMuc2VsZWN0b3JPcGVuZWQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXREZWZhdWx0VmFsdWUoY2hlY2tlZEtleXM6IG51bWJlcltdLCBpdGVtczogTG9jYXRpb25NdWx0aVNlbGVjdG9yTW9kZWxbXSkge1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoY2hlY2tlZEtleXMuaW5kZXhPZihpdGVtc1tpXS5sb2NhdGlvbklkKSA+IC0xKSB7XHJcbiAgICAgICAgaWYgKGl0ZW1zW2ldLmlzU2VsZWN0YWJsZSkge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZExvY2F0aW9ucy5wdXNoKGl0ZW1zW2ldKTtcclxuICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdFZhbHVlKGNoZWNrZWRLZXlzLCBpdGVtc1tpXS5pdGVtcylcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZXREZWZhdWx0VmFsdWUoY2hlY2tlZEtleXMsIGl0ZW1zW2ldLml0ZW1zKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZEV4cGFuZExpc3RJdGVtKHRyZWVJdGVtOiBMb2NhdGlvbkRyb3BEb3duTW9kZWxbXSkge1xyXG4gICAgdHJlZUl0ZW0uZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgaWYgKGl0ZW0uaXRlbXMgJiYgaXRlbS5pdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5leHBhbmRlZEtleXMucHVzaChpdGVtLmxvY2F0aW9uSWQpO1xyXG4gICAgICAgIHRoaXMuYWRkRXhwYW5kTGlzdEl0ZW0oaXRlbS5pdGVtcylcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlQ2hhbmdlKGRhdGEpIHtcclxuICAgIHRoaXMuY2hlY2tlZEtleXMgPSBkYXRhO1xyXG4gICAgbGV0IGxvY2F0aW9uc0ZsYXRBcnJheSA9IHRoaXMubG9jYXRpb25IaWVyYWNoeS5sb2NhdGlvbnNGbGF0RGF0YTtcclxuICAgIGxldCBzZWxlY3RlZExvY2F0b25zQXJyYXkgPSBsb2NhdGlvbnNGbGF0QXJyYXkuZmlsdGVyKGl0ZW0gPT4gZGF0YS5pbmRleE9mKGl0ZW0ubG9jYXRpb25JZCkgIT09IC0xKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRMb2NhdGlvbnMgPSBzZWxlY3RlZExvY2F0b25zQXJyYXk7XHJcbiAgICB0aGlzLm9uQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZExvY2F0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbG9jYXRpb25DbGljaygpIHtcclxuICAgIHRoaXMuc2VsZWN0b3JPcGVuZWQgPSAhdGhpcy5zZWxlY3Rvck9wZW5lZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvblJlbW92ZShpdGVtOiBMb2NhdGlvbkRyb3BEb3duTW9kZWwpOiB2b2lkIHtcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zZWxlY3RlZExvY2F0aW9ucy5maW5kSW5kZXgoKGMpID0+IGMubG9jYXRpb25JZCA9PT0gaXRlbS5sb2NhdGlvbklkKTtcclxuICAgIGNvbnN0IGNoZWNrZWRLZXlJbmRleCA9IHRoaXMuY2hlY2tlZEtleXMuZmluZEluZGV4KGsgPT4gayA9PSBpdGVtLmxvY2F0aW9uSWQpO1xyXG4gICAgdGhpcy5jaGVja2VkS2V5cy5zcGxpY2UoY2hlY2tlZEtleUluZGV4LCAxKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRMb2NhdGlvbnMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIHRoaXMub25DaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkTG9jYXRpb25zKTtcclxuICB9XHJcblxyXG59XHJcbiJdfQ==