UNPKG

angular-location-selector

Version:

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

135 lines 18.7 kB
import { __decorate } from "tslib"; import { Component, ElementRef, EventEmitter, HostListener, Input, OnInit, Output } from '@angular/core'; var LocationMultiSelectorComponent = /** @class */ (function () { function LocationMultiSelectorComponent(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 = []; } LocationMultiSelectorComponent.prototype.ngOnInit = function () { this.onLocationsData.emit(this.locationHierachy); this.addExpandListItem(this.locationHierachy.locations); this.setDefaultValue(this.checkedKeys, this.locationHierachy.locations); }; LocationMultiSelectorComponent.prototype.onGlobalClick = function (event) { if (!this.elementRef.nativeElement.contains(event.target)) { // clicked outside => close dropdown list this.selectorOpened = false; } }; LocationMultiSelectorComponent.prototype.closeDropDown = function () { this.selectorOpened = false; }; LocationMultiSelectorComponent.prototype.onItemSelected = function (data) { this.selectorOpened = false; }; LocationMultiSelectorComponent.prototype.setDefaultValue = function (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); } } }; LocationMultiSelectorComponent.prototype.addExpandListItem = function (treeItem) { var _this = this; treeItem.forEach(function (item) { if (item.items && item.items.length > 0) { _this.expandedKeys.push(item.locationId); _this.addExpandListItem(item.items); } }); }; LocationMultiSelectorComponent.prototype.handleChange = function (data) { this.checkedKeys = data; var locationsFlatArray = this.locationHierachy.locationsFlatData; var selectedLocatonsArray = locationsFlatArray.filter(function (item) { return data.indexOf(item.locationId) !== -1; }); this.selectedLocations = selectedLocatonsArray; this.onChange.emit(this.selectedLocations); }; LocationMultiSelectorComponent.prototype.locationClick = function () { this.selectorOpened = !this.selectorOpened; }; LocationMultiSelectorComponent.prototype.onRemove = function (item) { var index = this.selectedLocations.findIndex(function (c) { return c.locationId === item.locationId; }); var checkedKeyIndex = this.checkedKeys.findIndex(function (k) { return k == item.locationId; }); this.checkedKeys.splice(checkedKeyIndex, 1); this.selectedLocations.splice(index, 1); this.onChange.emit(this.selectedLocations); }; LocationMultiSelectorComponent.ctorParameters = function () { return [ { 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); return LocationMultiSelectorComponent; }()); export { LocationMultiSelectorComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYXRpb24tbXVsdGktc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vYW5ndWxhci1sb2NhdGlvbi1zZWxlY3Rvci8iLCJzb3VyY2VzIjpbImxpYi9sb2NhdGlvbi1tdWx0aS1zZWxlY3Rvci9sb2NhdGlvbi1tdWx0aS1zZWxlY3Rvci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFXekc7SUF1QkUsd0NBQW9CLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFyQm5DLGlCQUFZLEdBQVUsRUFBRSxDQUFDO1FBQ3pCLG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBQzlCLHlCQUFvQixHQUFXLFFBQVEsQ0FBQztRQUN4Qyx1QkFBa0IsR0FBVyxDQUFDLENBQUM7UUFHL0IsMkJBQXNCLEdBQVksSUFBSSxDQUFDO1FBQ3ZDLG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBQ2hDLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBQ2pDLHlCQUFvQixHQUFZLEtBQUssQ0FBQztRQUNyQyxhQUFRLEdBQStDLElBQUksWUFBWSxFQUFFLENBQUM7UUFHM0UsU0FBSSxHQUFXLEVBQUUsQ0FBQztRQUVwQixnQkFBVyxHQUFVLEVBQUUsQ0FBQztRQUN0QixxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFFakMsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBeUIsQ0FBQztRQUN0RSxzQkFBaUIsR0FBaUMsRUFBRSxDQUFDO0lBRVAsQ0FBQztJQUUvQyxpREFBUSxHQUFSO1FBQ0UsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxnQkFBZ0Is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RDs7U0FFeEQsQ0FBQztPQUNXLDhCQUE4QixDQTBGMUM7SUFBRCxxQ0FBQztDQUFBLEFBMUZELElBMEZDO1NBMUZZLDhCQUE4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBMb2NhdGlvbk11bHRpU2VsZWN0b3JNb2RlbCB9IGZyb20gJy4uL21vZGVscy9sb2NhdGlvbi1tdWx0aS1zZWxlY3Rvci5tb2RlbCc7XHJcbmltcG9ydCB7IExvY2F0aW9uTXVsdGlTZWxlY3RvciB9IGZyb20gJy4uL21vZGVscy9sb2NhdGlvbi1zZWxlY3Rvci9sb2NhdGlvbi1tdWx0aS1zZWxlY3Rvci1tb2RlbCc7XHJcbmltcG9ydCB7IExvY2F0aW9uRHJvcERvd25Nb2RlbCB9IGZyb20gJy4uL21vZGVscy9sb2NhdGlvbnMtZHJvcC1kb3duLWxpc3QubW9kZWwnO1xyXG5pbXBvcnQgeyBMb2NhdGlvblNlbGVjdG9ySW5mbyB9IGZyb20gJy4uL21vZGVscy9sb2NhdGlvblNlbGVjdG9yTW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsb2NhdGlvbi1tdWx0aS1zZWxlY3RvcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2xvY2F0aW9uLW11bHRpLXNlbGVjdG9yLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9sb2NhdGlvbi1tdWx0aS1zZWxlY3Rvci5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMb2NhdGlvbk11bHRpU2VsZWN0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBwdWJsaWMgZXhwYW5kZWRLZXlzOiBhbnlbXSA9IFtdO1xyXG4gIHB1YmxpYyBzZWxlY3Rvck9wZW5lZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNlbGVjdGVkTG9jYXRpb25OYW1lOiBzdHJpbmcgPSBcIlNlbGVjdFwiO1xyXG4gIEBJbnB1dCgpIHNlbGVjdGVkTG9jYXRpb25JZDogbnVtYmVyID0gMDtcclxuICBASW5wdXQoKSBsYWJlbFRleHQ6IHN0cmluZztcclxuICBASW5wdXQoKSBob3ZlclRleHQ6IHN0cmluZztcclxuICBASW5wdXQoKSBpc0luY2x1ZGVGbG9hdExvY2F0aW9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBoaWRlQnJhbmNoTGVzczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGluY2x1ZGVJbmFjdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGlzRGlzYWJsZVBhcmVudENsaWNrOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQE91dHB1dCgpIG9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8TG9jYXRpb25NdWx0aVNlbGVjdG9yTW9kZWxbXT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQElucHV0KCkgcHVibGljIGxvY2F0aW9uSGllcmFjaHk6IExvY2F0aW9uTXVsdGlTZWxlY3RvcjtcclxuXHJcbiAgQElucHV0KCkgcGFnZTogc3RyaW5nID0gXCJcIjtcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBjaGVja2VkS2V5czogYW55W10gPSBbXTtcclxuICBASW5wdXQoKSBzZWxlY3RvckRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBPdXRwdXQoKSBvbkxvY2F0aW9uc0RhdGEgPSBuZXcgRXZlbnRFbWl0dGVyPExvY2F0aW9uTXVsdGlTZWxlY3Rvcj4oKTtcclxuICBzZWxlY3RlZExvY2F0aW9uczogTG9jYXRpb25NdWx0aVNlbGVjdG9yTW9kZWxbXSA9IFtdO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMub25Mb2NhdGlvbnNEYXRhLmVtaXQodGhpcy5sb2NhdGlvbkhpZXJhY2h5KTtcclxuICAgIHRoaXMuYWRkRXhwYW5kTGlzdEl0ZW0odGhpcy5sb2NhdGlvbkhpZXJhY2h5LmxvY2F0aW9ucyk7XHJcbiAgICB0aGlzLnNldERlZmF1bHRWYWx1ZSh0aGlzLmNoZWNrZWRLZXlzLCB0aGlzLmxvY2F0aW9uSGllcmFjaHkubG9jYXRpb25zKTtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50Om1vdXNlZG93bicsIFsnJGV2ZW50J10pXHJcbiAgb25HbG9iYWxDbGljayhldmVudCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XHJcbiAgICAgIC8vIGNsaWNrZWQgb3V0c2lkZSA9PiBjbG9zZSBkcm9wZG93biBsaXN0XHJcbiAgICAgIHRoaXMuc2VsZWN0b3JPcGVuZWQgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbG9zZURyb3BEb3duKCkge1xyXG4gICAgdGhpcy5zZWxlY3Rvck9wZW5lZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uSXRlbVNlbGVjdGVkKGRhdGE6IExvY2F0aW9uU2VsZWN0b3JJbmZvKSB7XHJcbiAgICB0aGlzLnNlbGVjdG9yT3BlbmVkID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0RGVmYXVsdFZhbHVlKGNoZWNrZWRLZXlzOiBudW1iZXJbXSwgaXRlbXM6IExvY2F0aW9uTXVsdGlTZWxlY3Rvck1vZGVsW10pIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKGNoZWNrZWRLZXlzLmluZGV4T2YoaXRlbXNbaV0ubG9jYXRpb25JZCkgPiAtMSkge1xyXG4gICAgICAgIGlmIChpdGVtc1tpXS5pc1NlbGVjdGFibGUpIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRMb2NhdGlvbnMucHVzaChpdGVtc1tpXSk7XHJcbiAgICAgICAgICB0aGlzLnNldERlZmF1bHRWYWx1ZShjaGVja2VkS2V5cywgaXRlbXNbaV0uaXRlbXMpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdFZhbHVlKGNoZWNrZWRLZXlzLCBpdGVtc1tpXS5pdGVtcylcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZGRFeHBhbmRMaXN0SXRlbSh0cmVlSXRlbTogTG9jYXRpb25Ecm9wRG93bk1vZGVsW10pIHtcclxuICAgIHRyZWVJdGVtLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgIGlmIChpdGVtLml0ZW1zICYmIGl0ZW0uaXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMuZXhwYW5kZWRLZXlzLnB1c2goaXRlbS5sb2NhdGlvbklkKTtcclxuICAgICAgICB0aGlzLmFkZEV4cGFuZExpc3RJdGVtKGl0ZW0uaXRlbXMpXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhbmRsZUNoYW5nZShkYXRhKSB7XHJcbiAgICB0aGlzLmNoZWNrZWRLZXlzID0gZGF0YTtcclxuICAgIGxldCBsb2NhdGlvbnNGbGF0QXJyYXkgPSB0aGlzLmxvY2F0aW9uSGllcmFjaHkubG9jYXRpb25zRmxhdERhdGE7XHJcbiAgICBsZXQgc2VsZWN0ZWRMb2NhdG9uc0FycmF5ID0gbG9jYXRpb25zRmxhdEFycmF5LmZpbHRlcihpdGVtID0+IGRhdGEuaW5kZXhPZihpdGVtLmxvY2F0aW9uSWQpICE9PSAtMSk7XHJcbiAgICB0aGlzLnNlbGVjdGVkTG9jYXRpb25zID0gc2VsZWN0ZWRMb2NhdG9uc0FycmF5O1xyXG4gICAgdGhpcy5vbkNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRMb2NhdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGxvY2F0aW9uQ2xpY2soKSB7XHJcbiAgICB0aGlzLnNlbGVjdG9yT3BlbmVkID0gIXRoaXMuc2VsZWN0b3JPcGVuZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25SZW1vdmUoaXRlbTogTG9jYXRpb25Ecm9wRG93bk1vZGVsKTogdm9pZCB7XHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRMb2NhdGlvbnMuZmluZEluZGV4KChjKSA9PiBjLmxvY2F0aW9uSWQgPT09IGl0ZW0ubG9jYXRpb25JZCk7XHJcbiAgICBjb25zdCBjaGVja2VkS2V5SW5kZXggPSB0aGlzLmNoZWNrZWRLZXlzLmZpbmRJbmRleChrID0+IGsgPT0gaXRlbS5sb2NhdGlvbklkKTtcclxuICAgIHRoaXMuY2hlY2tlZEtleXMuc3BsaWNlKGNoZWNrZWRLZXlJbmRleCwgMSk7XHJcbiAgICB0aGlzLnNlbGVjdGVkTG9jYXRpb25zLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICB0aGlzLm9uQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZExvY2F0aW9ucyk7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=