angular-location-selector
Version:

126 lines • 16.3 kB
JavaScript
import { __decorate } from "tslib";
import { Component, ElementRef, EventEmitter, HostListener, Input, OnInit, Output } from '@angular/core';
let LocationSingleSelectorComponent = class LocationSingleSelectorComponent {
constructor(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();
}
ngOnInit() {
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(l => l.locationId == this.selectedLocationId).locationName;
}
this.addExpandListItem(this.locationHierachy.locations);
this.setDropDownState();
}
makeSelectableByLocationType(locations) {
locations.isSelectable = this.selectableTypes.includes(locations.locationTypeId);
if (locations.hasChild) {
locations.items.forEach(i => this.makeSelectableByLocationType(i));
}
return locations;
}
setDropDownState() {
this.disableSelector = this.selectorDisabled;
}
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;
this.onChange.emit(data);
this.selectedLocationName = data.locationName;
}
addExpandListItem(treeItem) {
treeItem.forEach(item => {
if (item.items && item.items.length > 0) {
this.expandedKeys.push(item.locationId);
this.addExpandListItem(item.items);
}
});
}
locationClick() {
if (!this.selectorDisabled) {
this.selectorOpened = !this.selectorOpened;
}
}
};
LocationSingleSelectorComponent.ctorParameters = () => [
{ 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);
export { LocationSingleSelectorComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYXRpb24tc2luZ2xlLXNlbGVjdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2FuZ3VsYXItbG9jYXRpb24tc2VsZWN0b3IvIiwic291cmNlcyI6WyJsaWIvbG9jYXRpb24tc2luZ2xlLXNlbGVjdG9yL2xvY2F0aW9uLXNpbmdsZS1zZWxlY3Rvci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFZekcsSUFBYSwrQkFBK0IsR0FBNUMsTUFBYSwrQkFBK0I7SUEwQjFDLFlBQW9CLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7UUF4Qm5DLGlCQUFZLEdBQVUsRUFBRSxDQUFDO1FBRXpCLG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBQ2hDLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBRS9CLHlCQUFvQixHQUFXLFFBQVEsQ0FBQztRQUN4Qyx1QkFBa0IsR0FBVyxDQUFDLENBQUM7UUFLL0IsMkJBQXNCLEdBQVksSUFBSSxDQUFDO1FBQ3ZDLHlCQUFvQixHQUFZLEtBQUssQ0FBQztRQUN0QyxTQUFJLEdBQVcsRUFBRSxDQUFDO1FBQ2xCLG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBRWhDLG9CQUFlLEdBQWEsRUFBRSxDQUFDLENBQUMsbURBQW1EO1FBQ25GLHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUVqQyxhQUFRLEdBQXVDLElBQUksWUFBWSxFQUFFLENBQUM7UUFDbEUsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBb0IsQ0FBQztJQUtqRSxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2pELElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFN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SSxDQUFDLGNBQWMsQ0FBQztTQUM1QztJQUNILENBQUM7Q0FFRixDQUFBOztZQWhFaUMsVUFBVTs7QUFuQmpDO0lBQVIsS0FBSyxFQUFFOzZFQUF5QztBQUN4QztJQUFSLEtBQUssRUFBRTsyRUFBZ0M7QUFFL0I7SUFBUixLQUFLLEVBQUU7a0VBQW1CO0FBQ2xCO0lBQVIsS0FBSyxFQUFFO2tFQUFtQjtBQUVsQjtJQUFSLEtBQUssRUFBRTsrRUFBd0M7QUFDdkM7SUFBUixLQUFLLEVBQUU7NkVBQXVDO0FBQ3RDO0lBQVIsS0FBSyxFQUFFOzZEQUFtQjtBQUNsQjtJQUFSLEtBQUssRUFBRTt1RUFBaUM7QUFFaEM7SUFBUixLQUFLLEVBQUU7d0VBQWdDO0FBQy9CO0lBQVIsS0FBSyxFQUFFO3lFQUFtQztBQUVqQztJQUFULE1BQU0sRUFBRTtpRUFBbUU7QUFDbEU7SUFBVCxNQUFNLEVBQUU7d0VBQXdEO0FBRXhEO0lBQVIsS0FBSyxFQUFFO3lFQUEyQztBQWlDbkQ7SUFEQyxZQUFZLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztvRUFNOUM7QUE5RFUsK0JBQStCO0lBTjNDLFNBQVMsQ0FBQztRQUNULFFBQVEsRUFBRSwwQkFBMEI7UUFDcEMsZ2hDQUF3RDs7S0FFekQsQ0FBQztHQUVXLCtCQUErQixDQTBGM0M7U0ExRlksK0JBQStCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IExvY2F0aW9uRHJvcERvd25Nb2RlbCB9IGZyb20gJy4uL21vZGVscy9sb2NhdGlvbnMtZHJvcC1kb3duLWxpc3QubW9kZWwnO1xyXG5pbXBvcnQgeyBMb2NhdGlvblNlbGVjdG9yIH0gZnJvbSAnLi4vbW9kZWxzL2xvY2F0aW9uLXNlbGVjdG9yL2xvY2F0aW9uLXNlbGVjdG9yLW1vZGVsJztcclxuaW1wb3J0IHsgTG9jYXRpb25TZWxlY3Rvckl0ZW0gfSBmcm9tICcuLi9tb2RlbHMvbG9jYXRpb24tc2VsZWN0b3IvbG9jYXRpb24tc2VsZWN0b3ItaXRlbS1tb2RlbCc7XHJcbmltcG9ydCB7IExvY2F0aW9uU2VsZWN0b3JJbmZvIH0gZnJvbSAnLi4vbW9kZWxzL2xvY2F0aW9uU2VsZWN0b3JNb2RlbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xvY2F0aW9uLXNpbmdsZS1zZWxlY3RvcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2xvY2F0aW9uLXNpbmdsZS1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbG9jYXRpb24tc2luZ2xlLXNlbGVjdG9yLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBMb2NhdGlvblNpbmdsZVNlbGVjdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgcHVibGljIGV4cGFuZGVkS2V5czogYW55W10gPSBbXTtcclxuXHJcbiAgcHVibGljIHNlbGVjdG9yT3BlbmVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGRpc2FibGVTZWxlY3RvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKSBzZWxlY3RlZExvY2F0aW9uTmFtZTogc3RyaW5nID0gXCJTZWxlY3RcIjtcclxuICBASW5wdXQoKSBzZWxlY3RlZExvY2F0aW9uSWQ6IG51bWJlciA9IDA7XHJcblxyXG4gIEBJbnB1dCgpIGxhYmVsVGV4dDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGhvdmVyVGV4dDogc3RyaW5nO1xyXG5cclxuICBASW5wdXQoKSBpc0luY2x1ZGVGbG9hdExvY2F0aW9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBpc0Rpc2FibGVQYXJlbnRDbGljazogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHBhZ2U6IHN0cmluZyA9IFwiXCI7XHJcbiAgQElucHV0KCkgaGlkZUJyYW5jaExlc3M6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgc2VsZWN0YWJsZVR5cGVzOiBudW1iZXJbXSA9IFtdOyAvLyBhbiBhcnJheSBvZiBsb2NhdGlvbiB0eXBlcyB0byBiZSBtYWRlIHNlbGVjdGFibGVcclxuICBASW5wdXQoKSBzZWxlY3RvckRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBPdXRwdXQoKSBvbkNoYW5nZTogRXZlbnRFbWl0dGVyPExvY2F0aW9uU2VsZWN0b3JJbmZvPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25Mb2NhdGlvbnNEYXRhID0gbmV3IEV2ZW50RW1pdHRlcjxMb2NhdGlvblNlbGVjdG9yPigpO1xyXG5cclxuICBASW5wdXQoKSBwdWJsaWMgbG9jYXRpb25IaWVyYWNoeTogTG9jYXRpb25TZWxlY3RvcjtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMub25Mb2NhdGlvbnNEYXRhLmVtaXQodGhpcy5sb2NhdGlvbkhpZXJhY2h5KTtcclxuICAgIGlmICh0aGlzLnNlbGVjdGFibGVUeXBlcy5sZW5ndGggPiAwKVxyXG4gICAgICB0aGlzLmxvY2F0aW9uSGllcmFjaHkubG9jYXRpb25zWzBdID0gdGhpcy5tYWtlU2VsZWN0YWJsZUJ5TG9jYXRpb25UeXBlKHRoaXMubG9jYXRpb25IaWVyYWNoeS5sb2NhdGlvbnNbMF0pO1xyXG4gICAgaWYgKHRoaXMubG9jYXRpb25IaWVyYWNoeS5sb2NhdGlvbnMubGVuZ3RoID4gMCAmJiB0aGlzLmxvY2F0aW9uSGllcmFjaHkubG9jYXRpb25zWzBdLml0ZW1zID09IG51bGwpIHtcclxuICAgICAgdGhpcy5kaXNhYmxlU2VsZWN0b3IgPSB0cnVlO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkTG9jYXRpb25OYW1lID0gXCJObyBicmFuY2hlcyBhdmFpbGFibGVcIjtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZExvY2F0aW9uTmFtZSA9PSBudWxsICYmIHRoaXMuc2VsZWN0ZWRMb2NhdGlvbklkICE9IG51bGwpIHtcclxuICAgICAgLy8gaWYgYSBsb2NhdGlvbiBuYW1lIGlzIG5vdCBwYXNzZWQgaW4gYXMgYW4gaW5wdXQsIHdlIHNldCBpdCB1c2luZyB0aGUgbG9jYXRpb25JZFxyXG4gICAgICB0aGlzLnNlbGVjdGVkTG9jYXRpb25OYW1lID0gdGhpcy5sb2NhdGlvbkhpZXJhY2h5LmxvY2F0aW9uc0ZsYXREYXRhLmZpbmQobCA9PiBsLmxvY2F0aW9uSWQgPT0gdGhpcy5zZWxlY3RlZExvY2F0aW9uSWQpLmxvY2F0aW9uTmFtZTtcclxuICAgIH1cclxuICAgIHRoaXMuYWRkRXhwYW5kTGlzdEl0ZW0odGhpcy5sb2NhdGlvbkhpZXJhY2h5LmxvY2F0aW9ucyk7XHJcbiAgICB0aGlzLnNldERyb3BEb3duU3RhdGUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbWFrZVNlbGVjdGFibGVCeUxvY2F0aW9uVHlwZShsb2NhdGlvbnM6IExvY2F0aW9uU2VsZWN0b3JJdGVtKSB7XHJcbiAgICBsb2NhdGlvbnMuaXNTZWxlY3RhYmxlID0gdGhpcy5zZWxlY3RhYmxlVHlwZXMuaW5jbHVkZXMobG9jYXRpb25zLmxvY2F0aW9uVHlwZUlkKTtcclxuICAgIGlmIChsb2NhdGlvbnMuaGFzQ2hpbGQpIHtcclxuICAgICAgbG9jYXRpb25zLml0ZW1zLmZvckVhY2goaSA9PiB0aGlzLm1ha2VTZWxlY3RhYmxlQnlMb2NhdGlvblR5cGUoaSkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxvY2F0aW9ucztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0RHJvcERvd25TdGF0ZSgpIHtcclxuICAgIHRoaXMuZGlzYWJsZVNlbGVjdG9yID0gdGhpcy5zZWxlY3RvckRpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6bW91c2Vkb3duJywgWyckZXZlbnQnXSlcclxuICBvbkdsb2JhbENsaWNrKGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XHJcbiAgICAgIC8vIGNsaWNrZWQgb3V0c2lkZSA9PiBjbG9zZSBkcm9wZG93biBsaXN0XHJcbiAgICAgIHRoaXMuc2VsZWN0b3JPcGVuZWQgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbG9zZURyb3BEb3duKCkge1xyXG4gICAgdGhpcy5zZWxlY3Rvck9wZW5lZCA9IGZhbHNlO1xyXG5cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkl0ZW1TZWxlY3RlZChkYXRhOiBMb2NhdGlvblNlbGVjdG9ySW5mbykge1xyXG4gICAgdGhpcy5zZWxlY3Rvck9wZW5lZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5vbkNoYW5nZS5lbWl0KGRhdGEpO1xyXG4gICAgdGhpcy5zZWxlY3RlZExvY2F0aW9uTmFtZSA9IGRhdGEubG9jYXRpb25OYW1lO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZGRFeHBhbmRMaXN0SXRlbSh0cmVlSXRlbTogTG9jYXRpb25Ecm9wRG93bk1vZGVsW10pIHtcclxuICAgIHRyZWVJdGVtLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgIGlmIChpdGVtLml0ZW1zICYmIGl0ZW0uaXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMuZXhwYW5kZWRLZXlzLnB1c2goaXRlbS5sb2NhdGlvbklkKTtcclxuICAgICAgICB0aGlzLmFkZEV4cGFuZExpc3RJdGVtKGl0ZW0uaXRlbXMpXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGxvY2F0aW9uQ2xpY2soKSB7XHJcbiAgICBpZiAoIXRoaXMuc2VsZWN0b3JEaXNhYmxlZCkge1xyXG4gICAgICB0aGlzLnNlbGVjdG9yT3BlbmVkID0gIXRoaXMuc2VsZWN0b3JPcGVuZWQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxufVxyXG5cclxuIl19