UNPKG

angular-location-selector

Version:

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

130 lines 17.3 kB
import { __decorate } from "tslib"; import { Component, ElementRef, EventEmitter, HostListener, Input, OnInit, Output } from '@angular/core'; var LocationSingleSelectorComponent = /** @class */ (function () { function LocationSingleSelectorComponent(elementRef) { this.elementRef = elementRef; this.expandedKeys = []; this.selectorOpened = false; this.disableSelector = false; this.selectedLocationName = "Select"; this.selectedLocationId = 0; this.isIncludeFloatLocation = true; this.isDisableParentClick = false; this.page = ""; this.hideBranchLess = false; this.selectableTypes = []; // an array of location types to be made selectable this.selectorDisabled = false; this.onChange = new EventEmitter(); this.onLocationsData = new EventEmitter(); } LocationSingleSelectorComponent.prototype.ngOnInit = function () { var _this = this; this.onLocationsData.emit(this.locationHierachy); if (this.selectableTypes.length > 0) this.locationHierachy.locations[0] = this.makeSelectableByLocationType(this.locationHierachy.locations[0]); if (this.locationHierachy.locations.length > 0 && this.locationHierachy.locations[0].items == null) { this.disableSelector = true; this.selectedLocationName = "No branches available"; } else if (this.selectedLocationName == null && this.selectedLocationId != null) { // if a location name is not passed in as an input, we set it using the locationId this.selectedLocationName = this.locationHierachy.locationsFlatData.find(function (l) { return l.locationId == _this.selectedLocationId; }).locationName; } this.addExpandListItem(this.locationHierachy.locations); this.setDropDownState(); }; LocationSingleSelectorComponent.prototype.makeSelectableByLocationType = function (locations) { var _this = this; locations.isSelectable = this.selectableTypes.includes(locations.locationTypeId); if (locations.hasChild) { locations.items.forEach(function (i) { return _this.makeSelectableByLocationType(i); }); } return locations; }; LocationSingleSelectorComponent.prototype.setDropDownState = function () { this.disableSelector = this.selectorDisabled; }; LocationSingleSelectorComponent.prototype.onGlobalClick = function (event) { if (!this.elementRef.nativeElement.contains(event.target)) { // clicked outside => close dropdown list this.selectorOpened = false; } }; LocationSingleSelectorComponent.prototype.closeDropDown = function () { this.selectorOpened = false; }; LocationSingleSelectorComponent.prototype.onItemSelected = function (data) { this.selectorOpened = false; this.onChange.emit(data); this.selectedLocationName = data.locationName; }; LocationSingleSelectorComponent.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); } }); }; LocationSingleSelectorComponent.prototype.locationClick = function () { if (!this.selectorDisabled) { this.selectorOpened = !this.selectorOpened; } }; LocationSingleSelectorComponent.ctorParameters = function () { return [ { type: ElementRef } ]; }; __decorate([ Input() ], LocationSingleSelectorComponent.prototype, "selectedLocationName", void 0); __decorate([ Input() ], LocationSingleSelectorComponent.prototype, "selectedLocationId", void 0); __decorate([ Input() ], LocationSingleSelectorComponent.prototype, "labelText", void 0); __decorate([ Input() ], LocationSingleSelectorComponent.prototype, "hoverText", void 0); __decorate([ Input() ], LocationSingleSelectorComponent.prototype, "isIncludeFloatLocation", void 0); __decorate([ Input() ], LocationSingleSelectorComponent.prototype, "isDisableParentClick", void 0); __decorate([ Input() ], LocationSingleSelectorComponent.prototype, "page", void 0); __decorate([ Input() ], LocationSingleSelectorComponent.prototype, "hideBranchLess", void 0); __decorate([ Input() ], LocationSingleSelectorComponent.prototype, "selectableTypes", void 0); __decorate([ Input() ], LocationSingleSelectorComponent.prototype, "selectorDisabled", void 0); __decorate([ Output() ], LocationSingleSelectorComponent.prototype, "onChange", void 0); __decorate([ Output() ], LocationSingleSelectorComponent.prototype, "onLocationsData", void 0); __decorate([ Input() ], LocationSingleSelectorComponent.prototype, "locationHierachy", void 0); __decorate([ HostListener('document:mousedown', ['$event']) ], LocationSingleSelectorComponent.prototype, "onGlobalClick", null); LocationSingleSelectorComponent = __decorate([ Component({ selector: 'location-single-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()\" (click)=\"$event.stopPropagation()\" [title]=\"hoverText\">\r\n <div class=\"selected-location\">{{selectedLocationName}}</div>\r\n <div><em class=\"fas fa-chevron-down\"></em></div>\r\n </div>\r\n <div class=\"location-tree-wrapper p-2\" *ngIf=\"selectorOpened\" (click)=\"$event.stopPropagation()\">\r\n <location-single-selector-tree-view [locations]=\"locationHierachy.locations\" [expandedKeys]=\"expandedKeys\"\r\n [selectedLocationId]=\"selectedLocationId\" (closeEvent)=\"onItemSelected($event)\">\r\n </location-single-selector-tree-view>\r\n </div>\r\n </div>\r\n</div>", styles: [":host ::ng-deep .location-selector-form{cursor:pointer;display:block;width:300px;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:.9rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}:host ::ng-deep .location-selector-focus{color:#495057;background-color:#fff;outline:0;box-shadow:0 0 0 .2rem rgba(0,81,81,.1)}:host ::ng-deep .location-tree-wrapper{position:absolute;z-index:10}:host ::ng-deep .disableSelector{opacity:.6;cursor:default}.selected-location{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:350px}"] }) ], LocationSingleSelectorComponent); return LocationSingleSelectorComponent; }()); export { LocationSingleSelectorComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYXRpb24tc2luZ2xlLXNlbGVjdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2FuZ3VsYXItbG9jYXRpb24tc2VsZWN0b3IvIiwic291cmNlcyI6WyJsaWIvbG9jYXRpb24tc2luZ2xlLXNlbGVjdG9yL2xvY2F0aW9uLXNpbmdsZS1zZWxlY3Rvci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFZekc7SUEwQkUseUNBQW9CLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7UUF4Qm5DLGlCQUFZLEdBQVUsRUFBRSxDQUFDO1FBRXpCLG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBQ2hDLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBRS9CLHlCQUFvQixHQUFXLFFBQVEsQ0FBQztRQUN4Qyx1QkFBa0IsR0FBVyxDQUFDLENBQUM7UUFLL0IsMkJBQXNCLEdBQVksSUFBSSxDQUFDO1FBQ3ZDLHlCQUFvQixHQUFZLEtBQUssQ0FBQztRQUN0QyxTQUFJLEdBQVcsRUFBRSxDQUFDO1FBQ2xCLG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBRWhDLG9CQUFlLEdBQWEsRUFBRSxDQUFDLENBQUMsbURBQW1EO1FBQ25GLHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUVqQyxhQUFRLEdBQXVDLElBQUksWUFBWSxFQUFFLENBQUM7UUFDbEUsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBb0IsQ0FBQztJQUtqRSxDQUFDO0lBRUQsa0RBQVEsR0FBUjtRQUFBLGlCQWFDO1FBWkMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDakQsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDO1lB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QjtRQUNFLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDMUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7U0FDNUM7SUFDSCxDQUFDOztnQkE5RCtCLFVBQVU7O0lBbkJqQztRQUFSLEtBQUssRUFBRTtpRkFBeUM7SUFDeEM7UUFBUixLQUFLLEVBQUU7K0VBQWdDO0lBRS9CO1FBQVIsS0FBSyxFQUFFO3NFQUFtQjtJQUNsQjtRQUFSLEtBQUssRUFBRTtzRUFBbUI7SUFFbEI7UUFBUixLQUFLLEVBQUU7bUZBQXdDO0lBQ3ZDO1FBQVIsS0FBSyxFQUFFO2lGQUF1QztJQUN0QztRQUFSLEtBQUssRUFBRTtpRUFBbUI7SUFDbEI7UUFBUixLQUFLLEVBQUU7MkVBQWlDO0lBRWhDO1FBQVIsS0FBSyxFQUFFOzRFQUFnQztJQUMvQjtRQUFSLEtBQUssRUFBRTs2RUFBbUM7SUFFakM7UUFBVCxNQUFNLEVBQUU7cUVBQW1FO0lBQ2xFO1FBQVQsTUFBTSxFQUFFOzRFQUF3RDtJQUV4RDtRQUFSLEtBQUssRUFBRTs2RUFBMkM7SUFpQ25EO1FBREMsWUFBWSxDQUFDLG9CQUFvQixFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7d0VBTTlDO0lBOURVLCtCQUErQjtRQU4zQyxTQUFTLENBQUM7WUFDVCxRQUFRLEVBQUUsMEJBQTBCO1lBQ3BDLGdoQ0FBd0Q7O1NBRXpELENBQUM7T0FFVywrQkFBK0IsQ0EwRjNDO0lBQUQsc0NBQUM7Q0FBQSxBQTFGRCxJQTBGQztTQTFGWSwrQkFBK0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTG9jYXRpb25Ecm9wRG93bk1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL2xvY2F0aW9ucy1kcm9wLWRvd24tbGlzdC5tb2RlbCc7XHJcbmltcG9ydCB7IExvY2F0aW9uU2VsZWN0b3IgfSBmcm9tICcuLi9tb2RlbHMvbG9jYXRpb24tc2VsZWN0b3IvbG9jYXRpb24tc2VsZWN0b3ItbW9kZWwnO1xyXG5pbXBvcnQgeyBMb2NhdGlvblNlbGVjdG9ySXRlbSB9IGZyb20gJy4uL21vZGVscy9sb2NhdGlvbi1zZWxlY3Rvci9sb2NhdGlvbi1zZWxlY3Rvci1pdGVtLW1vZGVsJztcclxuaW1wb3J0IHsgTG9jYXRpb25TZWxlY3RvckluZm8gfSBmcm9tICcuLi9tb2RlbHMvbG9jYXRpb25TZWxlY3Rvck1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbG9jYXRpb24tc2luZ2xlLXNlbGVjdG9yJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbG9jYXRpb24tc2luZ2xlLXNlbGVjdG9yLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9sb2NhdGlvbi1zaW5nbGUtc2VsZWN0b3IuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIExvY2F0aW9uU2luZ2xlU2VsZWN0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBwdWJsaWMgZXhwYW5kZWRLZXlzOiBhbnlbXSA9IFtdO1xyXG5cclxuICBwdWJsaWMgc2VsZWN0b3JPcGVuZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgZGlzYWJsZVNlbGVjdG9yOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIHNlbGVjdGVkTG9jYXRpb25OYW1lOiBzdHJpbmcgPSBcIlNlbGVjdFwiO1xyXG4gIEBJbnB1dCgpIHNlbGVjdGVkTG9jYXRpb25JZDogbnVtYmVyID0gMDtcclxuXHJcbiAgQElucHV0KCkgbGFiZWxUZXh0OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgaG92ZXJUZXh0OiBzdHJpbmc7XHJcblxyXG4gIEBJbnB1dCgpIGlzSW5jbHVkZUZsb2F0TG9jYXRpb246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGlzRGlzYWJsZVBhcmVudENsaWNrOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcGFnZTogc3RyaW5nID0gXCJcIjtcclxuICBASW5wdXQoKSBoaWRlQnJhbmNoTGVzczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKSBzZWxlY3RhYmxlVHlwZXM6IG51bWJlcltdID0gW107IC8vIGFuIGFycmF5IG9mIGxvY2F0aW9uIHR5cGVzIHRvIGJlIG1hZGUgc2VsZWN0YWJsZVxyXG4gIEBJbnB1dCgpIHNlbGVjdG9yRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQE91dHB1dCgpIG9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8TG9jYXRpb25TZWxlY3RvckluZm8+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvbkxvY2F0aW9uc0RhdGEgPSBuZXcgRXZlbnRFbWl0dGVyPExvY2F0aW9uU2VsZWN0b3I+KCk7XHJcblxyXG4gIEBJbnB1dCgpIHB1YmxpYyBsb2NhdGlvbkhpZXJhY2h5OiBMb2NhdGlvblNlbGVjdG9yO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkxvY2F0aW9uc0RhdGEuZW1pdCh0aGlzLmxvY2F0aW9uSGllcmFjaHkpO1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0YWJsZVR5cGVzLmxlbmd0aCA+IDApXHJcbiAgICAgIHRoaXMubG9jYXRpb25IaWVyYWNoeS5sb2NhdGlvbnNbMF0gPSB0aGlzLm1ha2VTZWxlY3RhYmxlQnlMb2NhdGlvblR5cGUodGhpcy5sb2NhdGlvbkhpZXJhY2h5LmxvY2F0aW9uc1swXSk7XHJcbiAgICBpZiAodGhpcy5sb2NhdGlvbkhpZXJhY2h5LmxvY2F0aW9ucy5sZW5ndGggPiAwICYmIHRoaXMubG9jYXRpb25IaWVyYWNoeS5sb2NhdGlvbnNbMF0uaXRlbXMgPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLmRpc2FibGVTZWxlY3RvciA9IHRydWU7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRMb2NhdGlvbk5hbWUgPSBcIk5vIGJyYW5jaGVzIGF2YWlsYWJsZVwiO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkTG9jYXRpb25OYW1lID09IG51bGwgJiYgdGhpcy5zZWxlY3RlZExvY2F0aW9uSWQgIT0gbnVsbCkge1xyXG4gICAgICAvLyBpZiBhIGxvY2F0aW9uIG5hbWUgaXMgbm90IHBhc3NlZCBpbiBhcyBhbiBpbnB1dCwgd2Ugc2V0IGl0IHVzaW5nIHRoZSBsb2NhdGlvbklkXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRMb2NhdGlvbk5hbWUgPSB0aGlzLmxvY2F0aW9uSGllcmFjaHkubG9jYXRpb25zRmxhdERhdGEuZmluZChsID0+IGwubG9jYXRpb25JZCA9PSB0aGlzLnNlbGVjdGVkTG9jYXRpb25JZCkubG9jYXRpb25OYW1lO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hZGRFeHBhbmRMaXN0SXRlbSh0aGlzLmxvY2F0aW9uSGllcmFjaHkubG9jYXRpb25zKTtcclxuICAgIHRoaXMuc2V0RHJvcERvd25TdGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtYWtlU2VsZWN0YWJsZUJ5TG9jYXRpb25UeXBlKGxvY2F0aW9uczogTG9jYXRpb25TZWxlY3Rvckl0ZW0pIHtcclxuICAgIGxvY2F0aW9ucy5pc1NlbGVjdGFibGUgPSB0aGlzLnNlbGVjdGFibGVUeXBlcy5pbmNsdWRlcyhsb2NhdGlvbnMubG9jYXRpb25UeXBlSWQpO1xyXG4gICAgaWYgKGxvY2F0aW9ucy5oYXNDaGlsZCkge1xyXG4gICAgICBsb2NhdGlvbnMuaXRlbXMuZm9yRWFjaChpID0+IHRoaXMubWFrZVNlbGVjdGFibGVCeUxvY2F0aW9uVHlwZShpKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbG9jYXRpb25zO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXREcm9wRG93blN0YXRlKCkge1xyXG4gICAgdGhpcy5kaXNhYmxlU2VsZWN0b3IgPSB0aGlzLnNlbGVjdG9yRGlzYWJsZWQ7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDptb3VzZWRvd24nLCBbJyRldmVudCddKVxyXG4gIG9uR2xvYmFsQ2xpY2soZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcclxuICAgICAgLy8gY2xpY2tlZCBvdXRzaWRlID0+IGNsb3NlIGRyb3Bkb3duIGxpc3RcclxuICAgICAgdGhpcy5zZWxlY3Rvck9wZW5lZCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsb3NlRHJvcERvd24oKSB7XHJcbiAgICB0aGlzLnNlbGVjdG9yT3BlbmVkID0gZmFsc2U7XHJcblxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uSXRlbVNlbGVjdGVkKGRhdGE6IExvY2F0aW9uU2VsZWN0b3JJbmZvKSB7XHJcbiAgICB0aGlzLnNlbGVjdG9yT3BlbmVkID0gZmFsc2U7XHJcbiAgICB0aGlzLm9uQ2hhbmdlLmVtaXQoZGF0YSk7XHJcbiAgICB0aGlzLnNlbGVjdGVkTG9jYXRpb25OYW1lID0gZGF0YS5sb2NhdGlvbk5hbWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZEV4cGFuZExpc3RJdGVtKHRyZWVJdGVtOiBMb2NhdGlvbkRyb3BEb3duTW9kZWxbXSkge1xyXG4gICAgdHJlZUl0ZW0uZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgaWYgKGl0ZW0uaXRlbXMgJiYgaXRlbS5pdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5leHBhbmRlZEtleXMucHVzaChpdGVtLmxvY2F0aW9uSWQpO1xyXG4gICAgICAgIHRoaXMuYWRkRXhwYW5kTGlzdEl0ZW0oaXRlbS5pdGVtcylcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbG9jYXRpb25DbGljaygpIHtcclxuICAgIGlmICghdGhpcy5zZWxlY3RvckRpc2FibGVkKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0b3JPcGVuZWQgPSAhdGhpcy5zZWxlY3Rvck9wZW5lZDtcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcblxyXG4iXX0=