gamma-app-controller 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -0
- package/esm2020/gamma-app-controller.mjs +2 -0
- package/esm2020/lib/application-controller/app.http.service.mjs +24 -0
- package/esm2020/lib/application-controller/application-content.service.mjs +482 -0
- package/esm2020/lib/application-controller/application-controller.module.mjs +324 -0
- package/esm2020/lib/application-controller/application-dataset-call.service.mjs +321 -0
- package/esm2020/lib/application-controller/application-dataset-component/application-dataset/application-dataset.component.mjs +390 -0
- package/esm2020/lib/application-controller/application-dataset-component/create-dataset/create-dataset.component.mjs +349 -0
- package/esm2020/lib/application-controller/application-dataset-component/create-dataset-json/create-dataset-json.component.mjs +148 -0
- package/esm2020/lib/application-controller/application-dataset-component/create-dataset-sql/create-dataset-sql.component.mjs +167 -0
- package/esm2020/lib/application-controller/application-dataset-component/create-dataset-sql/sqlFormatter.mjs +17 -0
- package/esm2020/lib/application-controller/application-dataset-component/dataset-mongo/dataset-mongo.component.mjs +57 -0
- package/esm2020/lib/application-controller/application-dataset-component/dataset-query-bulder/dataset-query-bulder.component.mjs +409 -0
- package/esm2020/lib/application-controller/application-dataset-component/dataset-rest-api/dataset-rest-api.component.mjs +61 -0
- package/esm2020/lib/application-controller/application-filter/application-filter.component.mjs +186 -0
- package/esm2020/lib/application-controller/application-view-components/application-views/application-views.component.mjs +134 -0
- package/esm2020/lib/application-controller/application-view-components/create-comp-view/create-comp-view.component.mjs +559 -0
- package/esm2020/lib/application-controller/common-header/common-header.component.mjs +33 -0
- package/esm2020/lib/application-controller/common.mjs +1207 -0
- package/esm2020/lib/application-controller/environment.mjs +26 -0
- package/esm2020/lib/application-controller/kpi-comon-service.mjs +537 -0
- package/esm2020/lib/application-controller/kpi-service.mjs +108 -0
- package/esm2020/lib/application-controller/loading/loading.component.mjs +16 -0
- package/esm2020/lib/application-controller/loading/loadingModule.mjs +28 -0
- package/esm2020/lib/application-controller/moment-helper.mjs +4 -0
- package/esm2020/lib/application-controller/page-controller/page-config/page-config.component.mjs +977 -0
- package/esm2020/lib/application-controller/page-controller/page-controller/page-controller.component.mjs +172 -0
- package/esm2020/lib/application-controller/page-templates/cdr-config/cdr-config.component.mjs +227 -0
- package/esm2020/lib/application-controller/page-templates/dynamic-route-service.mjs +22 -0
- package/esm2020/lib/application-controller/shared/advanced-component/advance-widget-header-filter/advance-widget-header-filter.component.mjs +118 -0
- package/esm2020/lib/application-controller/shared/advanced-component/app-advance-header/app-header.component.mjs +181 -0
- package/esm2020/lib/application-controller/shared/advanced-component/gamm-single-number-card/gamm-single-number-card.component.mjs +71 -0
- package/esm2020/lib/application-controller/shared/advanced-component/gamma-advance-chart/gamma-advance-chart.component.mjs +266 -0
- package/esm2020/lib/application-controller/shared/advanced-component/gamma-advance-operator-table/gamma-advance-operator-table.component.mjs +159 -0
- package/esm2020/lib/application-controller/shared/advanced-component/gamma-table-clumn-bar-chart/gamma-table-clumn-bar-chart.component.mjs +144 -0
- package/esm2020/lib/application-controller/shared/advanced-component/gamma-table-with-percentage/contentSafeHtml.mjs +20 -0
- package/esm2020/lib/application-controller/shared/advanced-component/gamma-table-with-percentage/gamma-table-with-percentage.component.mjs +168 -0
- package/esm2020/lib/application-controller/shared/advanced-component/gamma-today-previous/gamma-today-previous.component.mjs +74 -0
- package/esm2020/lib/application-controller/shared/advanced-component/google-geo-map/google-geo-map.component.mjs +118 -0
- package/esm2020/lib/application-controller/shared/api.service.mjs +117 -0
- package/esm2020/lib/application-controller/shared/app-title/app-title.component.mjs +67 -0
- package/esm2020/lib/application-controller/shared/gamam-widget/gamam-widget.component.mjs +37 -0
- package/esm2020/lib/application-controller/shared/gamma-advance-filter/gamma-advance-filter.component.mjs +229 -0
- package/esm2020/lib/application-controller/shared/gamma-bread-crumbs/bread-crumbs.component.mjs +144 -0
- package/esm2020/lib/application-controller/shared/kpi-comon-service.mjs +537 -0
- package/esm2020/lib/application-controller/shared/loader/loader.component.mjs +14 -0
- package/esm2020/lib/application-controller/shared/loading/loading.component.mjs +16 -0
- package/esm2020/lib/application-controller/shared/loading/loadingModule.mjs +28 -0
- package/esm2020/lib/application-controller/shared/safeHtmlPipe.mjs +20 -0
- package/esm2020/lib/application-controller/support-components/dash-chart/dash-chart.component.mjs +294 -0
- package/esm2020/lib/application-controller/support-components/dash-table/dash-table.component.mjs +287 -0
- package/esm2020/lib/application-controller/support-components/geo-map/geo-map.component.mjs +255 -0
- package/esm2020/lib/application-controller/support-components/table-with-bar/table-with-bar.component.mjs +269 -0
- package/esm2020/lib/gamma-app-controller.component.mjs +16 -0
- package/esm2020/lib/gamma-app-controller.module.mjs +43 -0
- package/esm2020/lib/gamma-app-controller.service.mjs +20 -0
- package/esm2020/lib/icons.module.mjs +23 -0
- package/esm2020/public-api.mjs +49 -0
- package/fesm2015/gamma-app-controller.mjs +10250 -0
- package/fesm2015/gamma-app-controller.mjs.map +1 -0
- package/fesm2020/gamma-app-controller.mjs +10248 -0
- package/fesm2020/gamma-app-controller.mjs.map +1 -0
- package/index.d.ts +2 -0
- package/lib/application-controller/app.http.service.d.ts +15 -0
- package/lib/application-controller/application-content.service.d.ts +79 -0
- package/lib/application-controller/application-controller.module.d.ts +51 -0
- package/lib/application-controller/application-dataset-call.service.d.ts +20 -0
- package/lib/application-controller/application-dataset-component/application-dataset/application-dataset.component.d.ts +55 -0
- package/lib/application-controller/application-dataset-component/create-dataset/create-dataset.component.d.ts +121 -0
- package/lib/application-controller/application-dataset-component/create-dataset-json/create-dataset-json.component.d.ts +38 -0
- package/lib/application-controller/application-dataset-component/create-dataset-sql/create-dataset-sql.component.d.ts +42 -0
- package/lib/application-controller/application-dataset-component/create-dataset-sql/sqlFormatter.d.ts +7 -0
- package/lib/application-controller/application-dataset-component/dataset-mongo/dataset-mongo.component.d.ts +21 -0
- package/lib/application-controller/application-dataset-component/dataset-query-bulder/dataset-query-bulder.component.d.ts +62 -0
- package/lib/application-controller/application-dataset-component/dataset-rest-api/dataset-rest-api.component.d.ts +22 -0
- package/lib/application-controller/application-filter/application-filter.component.d.ts +36 -0
- package/lib/application-controller/application-view-components/application-views/application-views.component.d.ts +47 -0
- package/lib/application-controller/application-view-components/create-comp-view/create-comp-view.component.d.ts +73 -0
- package/lib/application-controller/common-header/common-header.component.d.ts +15 -0
- package/lib/application-controller/common.d.ts +148 -0
- package/lib/application-controller/environment.d.ts +25 -0
- package/lib/application-controller/kpi-comon-service.d.ts +14 -0
- package/lib/application-controller/kpi-service.d.ts +6 -0
- package/lib/application-controller/loading/loading.component.d.ts +9 -0
- package/lib/application-controller/loading/loadingModule.d.ts +10 -0
- package/lib/application-controller/moment-helper.d.ts +3 -0
- package/lib/application-controller/page-controller/page-config/page-config.component.d.ts +188 -0
- package/lib/application-controller/page-controller/page-controller/page-controller.component.d.ts +47 -0
- package/lib/application-controller/page-templates/cdr-config/cdr-config.component.d.ts +44 -0
- package/lib/application-controller/page-templates/dynamic-route-service.d.ts +8 -0
- package/lib/application-controller/shared/advanced-component/advance-widget-header-filter/advance-widget-header-filter.component.d.ts +33 -0
- package/lib/application-controller/shared/advanced-component/app-advance-header/app-header.component.d.ts +43 -0
- package/lib/application-controller/shared/advanced-component/gamm-single-number-card/gamm-single-number-card.component.d.ts +20 -0
- package/lib/application-controller/shared/advanced-component/gamma-advance-chart/gamma-advance-chart.component.d.ts +51 -0
- package/lib/application-controller/shared/advanced-component/gamma-advance-operator-table/gamma-advance-operator-table.component.d.ts +32 -0
- package/lib/application-controller/shared/advanced-component/gamma-table-clumn-bar-chart/gamma-table-clumn-bar-chart.component.d.ts +31 -0
- package/lib/application-controller/shared/advanced-component/gamma-table-with-percentage/contentSafeHtml.d.ts +10 -0
- package/lib/application-controller/shared/advanced-component/gamma-table-with-percentage/gamma-table-with-percentage.component.d.ts +26 -0
- package/lib/application-controller/shared/advanced-component/gamma-today-previous/gamma-today-previous.component.d.ts +21 -0
- package/lib/application-controller/shared/advanced-component/google-geo-map/google-geo-map.component.d.ts +29 -0
- package/lib/application-controller/shared/api.service.d.ts +26 -0
- package/lib/application-controller/shared/app-title/app-title.component.d.ts +28 -0
- package/lib/application-controller/shared/gamam-widget/gamam-widget.component.d.ts +20 -0
- package/lib/application-controller/shared/gamma-advance-filter/gamma-advance-filter.component.d.ts +45 -0
- package/lib/application-controller/shared/gamma-bread-crumbs/bread-crumbs.component.d.ts +32 -0
- package/lib/application-controller/shared/kpi-comon-service.d.ts +14 -0
- package/lib/application-controller/shared/loader/loader.component.d.ts +8 -0
- package/lib/application-controller/shared/loading/loading.component.d.ts +9 -0
- package/lib/application-controller/shared/loading/loadingModule.d.ts +10 -0
- package/lib/application-controller/shared/safeHtmlPipe.d.ts +10 -0
- package/lib/application-controller/support-components/dash-chart/dash-chart.component.d.ts +83 -0
- package/lib/application-controller/support-components/dash-table/dash-table.component.d.ts +67 -0
- package/lib/application-controller/support-components/geo-map/geo-map.component.d.ts +70 -0
- package/lib/application-controller/support-components/table-with-bar/table-with-bar.component.d.ts +70 -0
- package/lib/gamma-app-controller.component.d.ts +5 -0
- package/lib/gamma-app-controller.module.d.ts +10 -0
- package/lib/gamma-app-controller.service.d.ts +7 -0
- package/lib/icons.module.d.ts +11 -0
- package/package.json +33 -0
- package/public-api.d.ts +48 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "../../common";
|
|
4
|
+
import * as i2 from "@angular/common";
|
|
5
|
+
import * as i3 from "devextreme-angular/core";
|
|
6
|
+
import * as i4 from "devextreme-angular/ui/popup";
|
|
7
|
+
export class AppTitleComponent {
|
|
8
|
+
constructor(commonService) {
|
|
9
|
+
this.commonService = commonService;
|
|
10
|
+
this.title = undefined;
|
|
11
|
+
this.multiple = false;
|
|
12
|
+
this.icon = false;
|
|
13
|
+
this.onOperatorClick = new EventEmitter();
|
|
14
|
+
this.isSearchModal = false;
|
|
15
|
+
}
|
|
16
|
+
set operators(value) {
|
|
17
|
+
if (value === undefined || value.length === 0) {
|
|
18
|
+
this.isOperatorsvisible = false;
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
this.operatorsDatasource = value.operators;
|
|
23
|
+
this.operator_display = value.display;
|
|
24
|
+
this.fixoperationValue = value.filterOperatorData;
|
|
25
|
+
this.isOperatorsvisible = true;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
ngOnInit() {
|
|
29
|
+
}
|
|
30
|
+
getCapitalize(item) {
|
|
31
|
+
return this.commonService.convertToSpaceSeparatedCapitalized(item);
|
|
32
|
+
}
|
|
33
|
+
getOperator(item) {
|
|
34
|
+
this.onOperatorClick.emit(item);
|
|
35
|
+
}
|
|
36
|
+
openSearchFilter() {
|
|
37
|
+
this.isSearchModal = true;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
AppTitleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: AppTitleComponent, deps: [{ token: i1.CommonService }], target: i0.ɵɵFactoryTarget.Component });
|
|
41
|
+
AppTitleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: AppTitleComponent, selector: "app-title", inputs: { title: "title", multiple: "multiple", isFilterDisplay: "isFilterDisplay", icon: "icon", iconName: "iconName", displayType: "displayType", keyToPass: "keyToPass", fixOperationLevles: "fixOperationLevles", operators: "operators" }, outputs: { onOperatorClick: "onOperatorClick" }, ngImport: i0, template: "<div class=\"p-4 rounded-t-lg shadow-md dark:bg-gray-800 mx-2 mt-2 bg-sky-900\" *ngIf=\"displayType == 'chart'\">\n <h5 class=\"text-md font-bold tracking-tight text-white dark:border-b dark:pb-2 dark:border-gray-700 \">\n <i class=\"{{iconName}}\" *ngIf=\"icon\"></i> {{title}}\n </h5>\n</div>\n\n<!-- <app-card-header [title]=\"'Administration Highlights'\"></app-card-header>\n<div class=\"flex bg-white dark:bg-gray-800 p-4 rounded-b-lg mx-2 mb-2 \">\n</div> -->\n\n<div class=\"p-4 rounded-t-lg shadow-md dark:bg-gray-800 mx-2 mt-2 bg-sky-900\" *ngIf=\"displayType !== 'chart'\">\n <div class=\"flex justify-between dark:border-b\">\n <div class=\"flex items-center float-start\">\n <h5 class=\"text-md font-bold tracking-tight text-white dark:pb-2\">\n <i class=\"{{iconName}}\" *ngIf=\"icon\"></i> {{title}}\n </h5>\n </div>\n <div class=\"flex items-center float-end mb-2\" *ngIf=\"operator_display\">\n <!-- <div class=\"{{commonService.btn_primary_sm}} cursor-pointer\" (click)=\"getOperator(item)\">Advance Search</div> -->\n <ng-container *ngIf=\"isFilterDisplay\">\n <div class=\"{{commonService.badge_primary_sm}} cursor-pointer\" (click)=\"openSearchFilter()\">Search Filter</div>\n </ng-container>\n <ng-container *ngFor=\"let item of operatorsDatasource\">\n <div class=\"{{commonService.badge_primary_sm}} cursor-pointer\" (click)=\"getOperator(item)\">\n {{getCapitalize(item)}}\n </div>\n </ng-container>\n </div>\n </div>\n</div>\n\n\n\n<dx-popup [(visible)]=\"isSearchModal\" [closeOnOutsideClick]=\"true\" [dragEnabled]=\"false\" [height]=\"'32rem'\"\n [showTitle]=\"true\" [width]=\"1100\" class=\"popup \" title=\"Search\">\n <div *dxTemplate=\"let data of 'content' \">\n <!-- <app-gamma-filter-component [operators]=\"operatorsDatasource\"\n [fixOperationLevles]=\"fixoperationValue\"></app-gamma-filter-component> -->\n\n </div>\n</dx-popup>", styles: [""], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }, { kind: "component", type: i4.DxPopupComponent, selector: "dx-popup", inputs: ["accessKey", "animation", "closeOnOutsideClick", "container", "contentTemplate", "copyRootClassesToWrapper", "deferRendering", "disabled", "dragAndResizeArea", "dragEnabled", "dragOutsideBoundary", "elementAttr", "focusStateEnabled", "fullScreen", "height", "hideOnOutsideClick", "hideOnParentScroll", "hint", "hoverStateEnabled", "maxHeight", "maxWidth", "minHeight", "minWidth", "position", "resizeEnabled", "restorePosition", "rtlEnabled", "shading", "shadingColor", "showCloseButton", "showTitle", "tabIndex", "title", "titleTemplate", "toolbarItems", "visible", "width", "wrapperAttr"], outputs: ["onContentReady", "onDisposing", "onHidden", "onHiding", "onInitialized", "onOptionChanged", "onResize", "onResizeEnd", "onResizeStart", "onShowing", "onShown", "onTitleRendered", "accessKeyChange", "animationChange", "closeOnOutsideClickChange", "containerChange", "contentTemplateChange", "copyRootClassesToWrapperChange", "deferRenderingChange", "disabledChange", "dragAndResizeAreaChange", "dragEnabledChange", "dragOutsideBoundaryChange", "elementAttrChange", "focusStateEnabledChange", "fullScreenChange", "heightChange", "hideOnOutsideClickChange", "hideOnParentScrollChange", "hintChange", "hoverStateEnabledChange", "maxHeightChange", "maxWidthChange", "minHeightChange", "minWidthChange", "positionChange", "resizeEnabledChange", "restorePositionChange", "rtlEnabledChange", "shadingChange", "shadingColorChange", "showCloseButtonChange", "showTitleChange", "tabIndexChange", "titleChange", "titleTemplateChange", "toolbarItemsChange", "visibleChange", "widthChange", "wrapperAttrChange"] }] });
|
|
42
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: AppTitleComponent, decorators: [{
|
|
43
|
+
type: Component,
|
|
44
|
+
args: [{ selector: 'app-title', template: "<div class=\"p-4 rounded-t-lg shadow-md dark:bg-gray-800 mx-2 mt-2 bg-sky-900\" *ngIf=\"displayType == 'chart'\">\n <h5 class=\"text-md font-bold tracking-tight text-white dark:border-b dark:pb-2 dark:border-gray-700 \">\n <i class=\"{{iconName}}\" *ngIf=\"icon\"></i> {{title}}\n </h5>\n</div>\n\n<!-- <app-card-header [title]=\"'Administration Highlights'\"></app-card-header>\n<div class=\"flex bg-white dark:bg-gray-800 p-4 rounded-b-lg mx-2 mb-2 \">\n</div> -->\n\n<div class=\"p-4 rounded-t-lg shadow-md dark:bg-gray-800 mx-2 mt-2 bg-sky-900\" *ngIf=\"displayType !== 'chart'\">\n <div class=\"flex justify-between dark:border-b\">\n <div class=\"flex items-center float-start\">\n <h5 class=\"text-md font-bold tracking-tight text-white dark:pb-2\">\n <i class=\"{{iconName}}\" *ngIf=\"icon\"></i> {{title}}\n </h5>\n </div>\n <div class=\"flex items-center float-end mb-2\" *ngIf=\"operator_display\">\n <!-- <div class=\"{{commonService.btn_primary_sm}} cursor-pointer\" (click)=\"getOperator(item)\">Advance Search</div> -->\n <ng-container *ngIf=\"isFilterDisplay\">\n <div class=\"{{commonService.badge_primary_sm}} cursor-pointer\" (click)=\"openSearchFilter()\">Search Filter</div>\n </ng-container>\n <ng-container *ngFor=\"let item of operatorsDatasource\">\n <div class=\"{{commonService.badge_primary_sm}} cursor-pointer\" (click)=\"getOperator(item)\">\n {{getCapitalize(item)}}\n </div>\n </ng-container>\n </div>\n </div>\n</div>\n\n\n\n<dx-popup [(visible)]=\"isSearchModal\" [closeOnOutsideClick]=\"true\" [dragEnabled]=\"false\" [height]=\"'32rem'\"\n [showTitle]=\"true\" [width]=\"1100\" class=\"popup \" title=\"Search\">\n <div *dxTemplate=\"let data of 'content' \">\n <!-- <app-gamma-filter-component [operators]=\"operatorsDatasource\"\n [fixOperationLevles]=\"fixoperationValue\"></app-gamma-filter-component> -->\n\n </div>\n</dx-popup>" }]
|
|
45
|
+
}], ctorParameters: function () { return [{ type: i1.CommonService }]; }, propDecorators: { title: [{
|
|
46
|
+
type: Input
|
|
47
|
+
}], multiple: [{
|
|
48
|
+
type: Input
|
|
49
|
+
}], isFilterDisplay: [{
|
|
50
|
+
type: Input
|
|
51
|
+
}], icon: [{
|
|
52
|
+
type: Input
|
|
53
|
+
}], iconName: [{
|
|
54
|
+
type: Input
|
|
55
|
+
}], displayType: [{
|
|
56
|
+
type: Input
|
|
57
|
+
}], keyToPass: [{
|
|
58
|
+
type: Input
|
|
59
|
+
}], fixOperationLevles: [{
|
|
60
|
+
type: Input
|
|
61
|
+
}], onOperatorClick: [{
|
|
62
|
+
type: Output
|
|
63
|
+
}], operators: [{
|
|
64
|
+
type: Input,
|
|
65
|
+
args: ['operators']
|
|
66
|
+
}] } });
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXRpdGxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dhbW1hLWFwcC1jb250cm9sbGVyL3NyYy9saWIvYXBwbGljYXRpb24tY29udHJvbGxlci9zaGFyZWQvYXBwLXRpdGxlL2FwcC10aXRsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvc2hhcmVkL2FwcC10aXRsZS9hcHAtdGl0bGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBeUIsTUFBTSxlQUFlLENBQUM7Ozs7OztBQVF0RyxNQUFNLE9BQU8saUJBQWlCO0lBd0M1QixZQUNTLGFBQTRCO1FBQTVCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBdEM1QixVQUFLLEdBQUcsU0FBUyxDQUFDO1FBQ2xCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFFMUIsU0FBSSxHQUFZLEtBQUssQ0FBQztRQU1kLG9CQUFlLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFLekUsa0JBQWEsR0FBWSxLQUFLLENBQUM7SUE0Qi9CLENBQUM7SUExQkQsSUFDSSxTQUFTLENBQUMsS0FBSztRQUNqQixJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDN0MsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztZQUNoQyxPQUFPO1NBQ1I7YUFBTTtZQUNMLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO1lBQzNDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFBO1lBQ3JDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUMsa0JBQWtCLENBQUE7WUFNakQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztTQUVoQztJQUVILENBQUM7SUFVRCxRQUFRO0lBQ1IsQ0FBQztJQXlCRCxhQUFhLENBQUMsSUFBWTtRQUN4QixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsa0NBQWtDLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDcEUsQ0FBQztJQUdELFdBQVcsQ0FBQyxJQUFJO1FBQ2QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELGdCQUFnQjtRQUNkLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQzVCLENBQUM7OzhHQXBGVSxpQkFBaUI7a0dBQWpCLGlCQUFpQixrVkNSOUIsbThEQXdDVzsyRkRoQ0UsaUJBQWlCO2tCQUw3QixTQUFTOytCQUNFLFdBQVc7b0dBT1osS0FBSztzQkFBYixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUVXLGVBQWU7c0JBQS9CLE1BQU07Z0JBUUgsU0FBUztzQkFEWixLQUFLO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBSZW5kZXJlcjIsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21tb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtdGl0bGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vYXBwLXRpdGxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYXBwLXRpdGxlLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQXBwVGl0bGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBpc09wZXJhdG9yc3Zpc2libGU6IGJvb2xlYW47XG5cbiAgQElucHV0KCkgdGl0bGUgPSB1bmRlZmluZWQ7XG4gIEBJbnB1dCgpIG11bHRpcGxlOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGlzRmlsdGVyRGlzcGxheTogYm9vbGVhbjtcbiAgQElucHV0KCkgaWNvbjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBpY29uTmFtZTtcbiAgQElucHV0KCkgZGlzcGxheVR5cGU6IHN0cmluZztcbiAgQElucHV0KCkga2V5VG9QYXNzOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGZpeE9wZXJhdGlvbkxldmxlczogc3RyaW5nO1xuXG4gIEBPdXRwdXQoKSBwdWJsaWMgb25PcGVyYXRvckNsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBvcGVyYXRvcnNEYXRhc291cmNlO1xuICBvcGVyYXRvcl9kaXNwbGF5O1xuICBmaXhvcGVyYXRpb25WYWx1ZTtcbiAgaXNTZWFyY2hNb2RhbDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgnb3BlcmF0b3JzJylcbiAgc2V0IG9wZXJhdG9ycyh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5pc09wZXJhdG9yc3Zpc2libGUgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcGVyYXRvcnNEYXRhc291cmNlID0gdmFsdWUub3BlcmF0b3JzO1xuICAgICAgdGhpcy5vcGVyYXRvcl9kaXNwbGF5ID0gdmFsdWUuZGlzcGxheVxuICAgICAgdGhpcy5maXhvcGVyYXRpb25WYWx1ZSA9IHZhbHVlLmZpbHRlck9wZXJhdG9yRGF0YVxuICAgICAgLy8gdGhpcy5vcGVyYXRvcnNEYXRhc291cmNlID0gdmFsdWUuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgLy8gICBjb25zdCBrZXlzVG9SZW1vdmUgPSBPYmplY3Qua2V5cyhpdGVtKS5maWx0ZXIoa2V5ID0+IHRoaXMua2V5VG9QYXNzLmluY2x1ZGVzKGtleSkpO1xuICAgICAgLy8gICByZXR1cm4ga2V5c1RvUmVtb3ZlLmxlbmd0aCA9PT0gMDtcbiAgICAgIC8vIH0pO1xuXG4gICAgICB0aGlzLmlzT3BlcmF0b3JzdmlzaWJsZSA9IHRydWU7XG5cbiAgICB9XG5cbiAgfVxuXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGNvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2VcbiAgKSB7XG4gICAgLy8gY29uc29sZS5sb2codGhpcy50aXRsZSk7XG5cbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICB9XG5cbiAgLy8gZ2V0T2JqZWN0S2V5cyhvYmo6IGFueSk6IHN0cmluZ1tdIHtcbiAgLy8gICBsZXQga2V5cyA9ICBPYmplY3Qua2V5cyhvYmopO1xuICAvLyAgIGNvbnN0IGZpbHRlcmVkQXJyYXkgPSBrZXlzLmZpbHRlcihpdGVtID0+ICF0aGlzLmtleVRvUGFzcy5pbmNsdWRlcyhpdGVtKSk7XG5cbiAgLy8gICByZXR1cm4gZmlsdGVyZWRBcnJheTtcbiAgLy8gfVxuXG4gIC8vIGdldE9iamVjdEtleXMob2JqKSB7XG4gIC8vICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuXG4gIC8vICAgY29uc3QgZmlsdGVyZWRBcnJheSA9IGtleXMuZmlsdGVyKGl0ZW0gPT4gIXRoaXMua2V5VG9QYXNzLmluY2x1ZGVzKGl0ZW0pKTtcblxuICAvLyAgIC8vIENoZWNrIGlmIGFueSBrZXkncyB2YWx1ZSBpcyBudWxsXG4gIC8vICAgZm9yIChsZXQga2V5IG9mIGtleXMpIHtcbiAgLy8gICAgIGlmIChvYmpba2V5XSA9PT0gbnVsbCkge1xuICAvLyAgICAgICByZXR1cm4gZmlsdGVyZWRBcnJheTsgIC8vIFJldHVybiB0aGUgZmlsdGVyZWQgYXJyYXkgaWYgYW55IGtleSdzIHZhbHVlIGlzIG51bGxcbiAgLy8gICAgIH1cbiAgLy8gICB9XG5cbiAgLy8gICByZXR1cm4gW107ICAvLyBSZXR1cm4gZmFsc2UgaWYgbm8ga2V5J3MgdmFsdWUgaXMgbnVsbFxuICAvLyB9XG5cblxuICBnZXRDYXBpdGFsaXplKGl0ZW06IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmNvbW1vblNlcnZpY2UuY29udmVydFRvU3BhY2VTZXBhcmF0ZWRDYXBpdGFsaXplZChpdGVtKVxuICB9XG5cblxuICBnZXRPcGVyYXRvcihpdGVtKSB7XG4gICAgdGhpcy5vbk9wZXJhdG9yQ2xpY2suZW1pdChpdGVtKTtcbiAgfVxuXG4gIG9wZW5TZWFyY2hGaWx0ZXIoKSB7XG4gICAgdGhpcy5pc1NlYXJjaE1vZGFsID0gdHJ1ZTtcbiAgfVxuXG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJwLTQgcm91bmRlZC10LWxnIHNoYWRvdy1tZCBkYXJrOmJnLWdyYXktODAwICBteC0yIG10LTIgYmctc2t5LTkwMFwiICpuZ0lmPVwiZGlzcGxheVR5cGUgPT0gJ2NoYXJ0J1wiPlxuICA8aDUgY2xhc3M9XCJ0ZXh0LW1kIGZvbnQtYm9sZCB0cmFja2luZy10aWdodCB0ZXh0LXdoaXRlIGRhcms6Ym9yZGVyLWIgZGFyazpwYi0yIGRhcms6Ym9yZGVyLWdyYXktNzAwIFwiPlxuICAgIDxpIGNsYXNzPVwie3tpY29uTmFtZX19XCIgKm5nSWY9XCJpY29uXCI+PC9pPiAmbmJzcDt7e3RpdGxlfX1cbiAgPC9oNT5cbjwvZGl2PlxuXG48IS0tIDxhcHAtY2FyZC1oZWFkZXIgW3RpdGxlXT1cIidBZG1pbmlzdHJhdGlvbiBIaWdobGlnaHRzJ1wiPjwvYXBwLWNhcmQtaGVhZGVyPlxuPGRpdiBjbGFzcz1cImZsZXggYmctd2hpdGUgZGFyazpiZy1ncmF5LTgwMCBwLTQgcm91bmRlZC1iLWxnIG14LTIgbWItMiBcIj5cbjwvZGl2PiAtLT5cblxuPGRpdiBjbGFzcz1cInAtNCByb3VuZGVkLXQtbGcgc2hhZG93LW1kIGRhcms6YmctZ3JheS04MDAgIG14LTIgbXQtMiBiZy1za3ktOTAwXCIgKm5nSWY9XCJkaXNwbGF5VHlwZSAhPT0gJ2NoYXJ0J1wiPlxuICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gZGFyazpib3JkZXItYlwiPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBmbG9hdC1zdGFydFwiPlxuICAgICAgPGg1IGNsYXNzPVwidGV4dC1tZCBmb250LWJvbGQgdHJhY2tpbmctdGlnaHQgdGV4dC13aGl0ZSBkYXJrOnBiLTJcIj5cbiAgICAgICAgPGkgY2xhc3M9XCJ7e2ljb25OYW1lfX1cIiAqbmdJZj1cImljb25cIj48L2k+ICZuYnNwO3t7dGl0bGV9fVxuICAgICAgPC9oNT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZmxvYXQtZW5kIG1iLTJcIiAqbmdJZj1cIm9wZXJhdG9yX2Rpc3BsYXlcIj5cbiAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5fcHJpbWFyeV9zbX19IGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cImdldE9wZXJhdG9yKGl0ZW0pXCI+QWR2YW5jZSBTZWFyY2g8L2Rpdj4gLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNGaWx0ZXJEaXNwbGF5XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYmFkZ2VfcHJpbWFyeV9zbX19IGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIm9wZW5TZWFyY2hGaWx0ZXIoKVwiPlNlYXJjaCBGaWx0ZXI8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBvcGVyYXRvcnNEYXRhc291cmNlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYmFkZ2VfcHJpbWFyeV9zbX19IGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cImdldE9wZXJhdG9yKGl0ZW0pXCI+XG4gICAgICAgICAge3tnZXRDYXBpdGFsaXplKGl0ZW0pfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuXG5cbjxkeC1wb3B1cCBbKHZpc2libGUpXT1cImlzU2VhcmNoTW9kYWxcIiBbY2xvc2VPbk91dHNpZGVDbGlja109XCJ0cnVlXCIgW2RyYWdFbmFibGVkXT1cImZhbHNlXCIgW2hlaWdodF09XCInMzJyZW0nXCJcbiAgW3Nob3dUaXRsZV09XCJ0cnVlXCIgW3dpZHRoXT1cIjExMDBcIiBjbGFzcz1cInBvcHVwIFwiIHRpdGxlPVwiU2VhcmNoXCI+XG4gIDxkaXYgKmR4VGVtcGxhdGU9XCJsZXQgZGF0YSBvZiAnY29udGVudCcgXCI+XG4gICAgPCEtLSA8YXBwLWdhbW1hLWZpbHRlci1jb21wb25lbnQgW29wZXJhdG9yc109XCJvcGVyYXRvcnNEYXRhc291cmNlXCJcbiAgICAgIFtmaXhPcGVyYXRpb25MZXZsZXNdPVwiZml4b3BlcmF0aW9uVmFsdWVcIj48L2FwcC1nYW1tYS1maWx0ZXItY29tcG9uZW50PiAtLT5cblxuICA8L2Rpdj5cbjwvZHgtcG9wdXA+Il19
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "../../common";
|
|
4
|
+
import * as i2 from "ngx-toastr";
|
|
5
|
+
import * as i3 from "../api.service";
|
|
6
|
+
import * as i4 from "../kpi-comon-service";
|
|
7
|
+
import * as i5 from "@angular/common";
|
|
8
|
+
import * as i6 from "../loader/loader.component";
|
|
9
|
+
export class GamamWidgetComponent {
|
|
10
|
+
constructor(commonService, toastr, service, kpiService) {
|
|
11
|
+
this.commonService = commonService;
|
|
12
|
+
this.toastr = toastr;
|
|
13
|
+
this.service = service;
|
|
14
|
+
this.kpiService = kpiService;
|
|
15
|
+
this.isLoader = true;
|
|
16
|
+
}
|
|
17
|
+
set widgetConfigSource(value) {
|
|
18
|
+
if (value === undefined || value.length === 0) {
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
this.page_config = value;
|
|
22
|
+
this.isLoader = false;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
ngOnInit() {
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
GamamWidgetComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: GamamWidgetComponent, deps: [{ token: i1.CommonService }, { token: i2.ToastrService }, { token: i3.KpiApiService }, { token: i4.kpicommonService }], target: i0.ɵɵFactoryTarget.Component });
|
|
29
|
+
GamamWidgetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: GamamWidgetComponent, selector: "app-gamam-widget", inputs: { widgetConfigSource: "widgetConfigSource" }, ngImport: i0, template: "<div class=\"w-full my-1\">\n <div class=\"block mx-1 rounded-lg shadow-lg bg-white border border-gray-200 rounded-lg shadow-md\n dark:bg-gray-800 dark:border-gray-700 max-w-sm\">\n <div\n class=\"py-3 px-6 bg-white border border-gray-200 rounded-lg shadow-md dark:bg-gray-800 dark:border-gray-700\">\n <div class=\"flex justify-between\">\n <div class=\"flex items-center float-start\">\n {{page_config.title}}\n </div>\n <div class=\"flex items-center float-end\">\n <i class=\"{{page_config.icon}}\"></i>\n </div>\n\n </div>\n </div>\n <app-loader *ngIf=\"isLoader\"></app-loader>\n\n <div class=\"p-2\" *ngIf=\"!isLoader\">\n <div class=\"flex flex-row items-center justify-center m-0\">\n <div class=\"w-full px-2 \">\n <div class=\"flex justify-center items-center text-4xl font-bold text-{{page_config.color}} p-2\">\n {{page_config.count}}\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>", styles: [""], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.LoaderComponent, selector: "app-loader" }] });
|
|
30
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: GamamWidgetComponent, decorators: [{
|
|
31
|
+
type: Component,
|
|
32
|
+
args: [{ selector: 'app-gamam-widget', template: "<div class=\"w-full my-1\">\n <div class=\"block mx-1 rounded-lg shadow-lg bg-white border border-gray-200 rounded-lg shadow-md\n dark:bg-gray-800 dark:border-gray-700 max-w-sm\">\n <div\n class=\"py-3 px-6 bg-white border border-gray-200 rounded-lg shadow-md dark:bg-gray-800 dark:border-gray-700\">\n <div class=\"flex justify-between\">\n <div class=\"flex items-center float-start\">\n {{page_config.title}}\n </div>\n <div class=\"flex items-center float-end\">\n <i class=\"{{page_config.icon}}\"></i>\n </div>\n\n </div>\n </div>\n <app-loader *ngIf=\"isLoader\"></app-loader>\n\n <div class=\"p-2\" *ngIf=\"!isLoader\">\n <div class=\"flex flex-row items-center justify-center m-0\">\n <div class=\"w-full px-2 \">\n <div class=\"flex justify-center items-center text-4xl font-bold text-{{page_config.color}} p-2\">\n {{page_config.count}}\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>" }]
|
|
33
|
+
}], ctorParameters: function () { return [{ type: i1.CommonService }, { type: i2.ToastrService }, { type: i3.KpiApiService }, { type: i4.kpicommonService }]; }, propDecorators: { widgetConfigSource: [{
|
|
34
|
+
type: Input,
|
|
35
|
+
args: ['widgetConfigSource']
|
|
36
|
+
}] } });
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FtYW0td2lkZ2V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dhbW1hLWFwcC1jb250cm9sbGVyL3NyYy9saWIvYXBwbGljYXRpb24tY29udHJvbGxlci9zaGFyZWQvZ2FtYW0td2lkZ2V0L2dhbWFtLXdpZGdldC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvc2hhcmVkL2dhbWFtLXdpZGdldC9nYW1hbS13aWRnZXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7O0FBV3pELE1BQU0sT0FBTyxvQkFBb0I7SUFNL0IsWUFDUyxhQUE0QixFQUMzQixNQUFxQixFQUNyQixPQUFzQixFQUN0QixVQUE0QjtRQUg3QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUMzQixXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3JCLFlBQU8sR0FBUCxPQUFPLENBQWU7UUFDdEIsZUFBVSxHQUFWLFVBQVUsQ0FBa0I7UUFOdEMsYUFBUSxHQUFZLElBQUksQ0FBQztJQU9yQixDQUFDO0lBRUwsSUFDSSxrQkFBa0IsQ0FBQyxLQUFLO1FBSTFCLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtTQUU5QzthQUFNO1lBQ0wsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7WUFDekIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7U0FXdkI7SUFFSCxDQUFDO0lBRUQsUUFBUTtJQUNSLENBQUM7O2lIQXRDVSxvQkFBb0I7cUdBQXBCLG9CQUFvQiw4R0NYakMsbXJDQTJCTTsyRkRoQk8sb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLGtCQUFrQjsyTEFrQnhCLGtCQUFrQjtzQkFEckIsS0FBSzt1QkFBQyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRvYXN0clNlcnZpY2UgfSBmcm9tICduZ3gtdG9hc3RyJztcbmltcG9ydCB7IEtwaUFwaVNlcnZpY2UgfSBmcm9tICcuLi9hcGkuc2VydmljZSc7XG5pbXBvcnQgeyBrcGljb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4va3BpLWNvbW9uLXNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbW1vbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1nYW1hbS13aWRnZXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZ2FtYW0td2lkZ2V0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZ2FtYW0td2lkZ2V0LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgR2FtYW1XaWRnZXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIHN1YnNjcmliZXJfY291bnQ7XG4gIHBhZ2VfY29uZmlnO1xuICBpc0xvYWRlcjogYm9vbGVhbiA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGNvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0b2FzdHI6IFRvYXN0clNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzZXJ2aWNlOiBLcGlBcGlTZXJ2aWNlLFxuICAgIHByaXZhdGUga3BpU2VydmljZToga3BpY29tbW9uU2VydmljZVxuICApIHsgfVxuXG4gIEBJbnB1dCgnd2lkZ2V0Q29uZmlnU291cmNlJylcbiAgc2V0IHdpZGdldENvbmZpZ1NvdXJjZSh2YWx1ZSkge1xuXG4gICAgLy8gY29uc29sZS5sb2codmFsdWUpO1xuICAgIC8vIGNvbnNvbGUubG9nKHZhbHVlKTtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZS5sZW5ndGggPT09IDApIHtcblxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBhZ2VfY29uZmlnID0gdmFsdWU7XG4gICAgICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG5cbiAgICAgIC8vIHRoaXMuc2VydmljZS5nZXRVbmlxdWVEYXRhKHZhbHVlLmtwaUNvbmZpZy5hcGkpLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XG4gICAgICAvLyAgIHRoaXMuc3Vic2NyaWJlcl9jb3VudCA9IHRoaXMuY29tbW9uU2VydmljZS5yZWZvcm1hdE51bWJlcldpdGhUaG91c2FuZFNlcGFyYXRvclYyKGRhdGEsIDApO1xuICAgICAgLy8gICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAvLyB9LCBlcnJvciA9PiB7XG4gICAgICAvLyAgIHRoaXMudG9hc3RyLmVycm9yKCdVbmV4cGVjdGVkIFNlcnZlciBFeGNlcHRpb24uIFBsZWFzZSBjb250YWN0IFN5c3RlbSBBZG1pbi4nLCAnVW5pcXVlIFN1YnNjcmliZXInKTtcbiAgICAgIC8vIH0pXG5cbiAgICAgIC8vIHRoaXMudG9hc3RyLmVycm9yKCdVbmV4cGVjdGVkIFNlcnZlciBFeGNlcHRpb24uIFBsZWFzZSBjb250YWN0IFN5c3RlbSBBZG1pbi4nLCAnZXJyb3InKTtcblxuICAgIH1cblxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gIH1cblxufVxuIiwiPGRpdiBjbGFzcz1cInctZnVsbCBteS0xXCI+XG4gICAgPGRpdiBjbGFzcz1cImJsb2NrIG14LTEgcm91bmRlZC1sZyBzaGFkb3ctbGcgYmctd2hpdGUgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCByb3VuZGVkLWxnIHNoYWRvdy1tZFxuICAgICAgICAgICAgICAgICBkYXJrOmJnLWdyYXktODAwIGRhcms6Ym9yZGVyLWdyYXktNzAwIG1heC13LXNtXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwicHktMyBweC02IGJnLXdoaXRlIGJvcmRlciBib3JkZXItZ3JheS0yMDAgcm91bmRlZC1sZyBzaGFkb3ctbWQgZGFyazpiZy1ncmF5LTgwMCBkYXJrOmJvcmRlci1ncmF5LTcwMFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGZsb2F0LXN0YXJ0XCI+XG4gICAgICAgICAgICAgICAgICAgIHt7cGFnZV9jb25maWcudGl0bGV9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBmbG9hdC1lbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJ7e3BhZ2VfY29uZmlnLmljb259fVwiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8YXBwLWxvYWRlciAqbmdJZj1cImlzTG9hZGVyXCI+PC9hcHAtbG9hZGVyPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwLTJcIiAqbmdJZj1cIiFpc0xvYWRlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIG0tMFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgcHgtMiBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIHRleHQtNHhsIGZvbnQtYm9sZCB0ZXh0LXt7cGFnZV9jb25maWcuY29sb3J9fSBwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7cGFnZV9jb25maWcuY291bnR9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PiJdfQ==
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
import { Component, Input, EventEmitter, Output, ViewChild, HostListener } from '@angular/core';
|
|
2
|
+
import moment from './../../moment-helper';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "../../application-content.service";
|
|
5
|
+
import * as i2 from "../kpi-comon-service";
|
|
6
|
+
import * as i3 from "ngx-toastr";
|
|
7
|
+
import * as i4 from "../../common";
|
|
8
|
+
import * as i5 from "@angular/common";
|
|
9
|
+
import * as i6 from "devextreme-angular/ui/date-box";
|
|
10
|
+
import * as i7 from "devextreme-angular/ui/select-box";
|
|
11
|
+
import * as i8 from "devextreme-angular/ui/tag-box";
|
|
12
|
+
import * as i9 from "devextreme-angular/ui/text-box";
|
|
13
|
+
import * as i10 from "@angular/forms";
|
|
14
|
+
import * as i11 from "../loader/loader.component";
|
|
15
|
+
export class GammaAdvanceFilterComponent {
|
|
16
|
+
constructor(service, kpiService, toastr, commonService) {
|
|
17
|
+
this.service = service;
|
|
18
|
+
this.kpiService = kpiService;
|
|
19
|
+
this.toastr = toastr;
|
|
20
|
+
this.commonService = commonService;
|
|
21
|
+
this.filterDataObject = new EventEmitter();
|
|
22
|
+
this.quickDateSelector = false;
|
|
23
|
+
this.isLoader = true;
|
|
24
|
+
this.ranges = [
|
|
25
|
+
{ name: "Today", value: [moment(), moment()] },
|
|
26
|
+
{ name: "Yesterday", value: [moment().subtract(1, 'days'), moment().subtract(1, 'days')] },
|
|
27
|
+
{ name: "Last 7 Days", value: [moment().subtract(7, 'days'), moment().subtract(1, 'days')] },
|
|
28
|
+
{ name: "Last 15 Days", value: [moment().subtract(15, 'days'), moment().subtract(1, 'days')] },
|
|
29
|
+
{ name: 'This Month', value: [moment().startOf('month'), moment().endOf('month')] },
|
|
30
|
+
{ name: 'Last 1 Month', value: [moment().subtract(30, 'days'), moment()] },
|
|
31
|
+
{ name: 'Last 3 Month', value: [moment().subtract(91, 'days'), moment()] },
|
|
32
|
+
{ name: 'Last 6 Month', value: [moment().subtract(182, 'days'), moment()] },
|
|
33
|
+
{ name: 'Last 1 Year', value: [moment().subtract(365, 'days'), moment()] }
|
|
34
|
+
];
|
|
35
|
+
}
|
|
36
|
+
set filterOperatorData(value) {
|
|
37
|
+
if (value === undefined || value.length === 0) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
this.kpiFilterData = [];
|
|
42
|
+
this.kpiFilterData = value;
|
|
43
|
+
this.kpiFilterData.forEach(item => {
|
|
44
|
+
if (item.hasOwnProperty('momentFormate')) {
|
|
45
|
+
item.momentFormat = item.momentFormate;
|
|
46
|
+
delete item.momentFormate;
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
this.processFilterForData();
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
ngOnInit() {
|
|
53
|
+
this.defaultEndDate = moment().subtract('1', 'days').format('YYYY-MM-DD');
|
|
54
|
+
this.defaultStartDate = moment(this.defaultEndDate).subtract('5', 'days').format('YYYY-MM-DD');
|
|
55
|
+
}
|
|
56
|
+
async processFilterForData() {
|
|
57
|
+
for (const filter of this.kpiFilterData) {
|
|
58
|
+
this.isLoader = true;
|
|
59
|
+
const startDateFilter = this.kpiFilterData.find(filter => filter.apiName === 'startDate' && (filter.display !== undefined ? filter.display : true));
|
|
60
|
+
const endDateFilter = this.kpiFilterData.find(filter => filter.apiName === 'endDate' && (filter.display !== undefined ? filter.display : true));
|
|
61
|
+
if (startDateFilter && endDateFilter) {
|
|
62
|
+
this.quickDateSelector = true;
|
|
63
|
+
}
|
|
64
|
+
try {
|
|
65
|
+
if (filter.apiName !== 'startDate' && filter.apiName !== 'endDate') {
|
|
66
|
+
if (filter.apiName.includes('/reference/')) {
|
|
67
|
+
const data = await this.service.getFilterDataByDrillDown(filter.apiName).toPromise();
|
|
68
|
+
filter['filterDataSource'] = data;
|
|
69
|
+
if (filter.defaultFilterType == "dynamic" && filter.defaultFilterValue !== "") {
|
|
70
|
+
filter['filterDataSourceValue'] = this.parseContentValue(filter.defaultFilterValue);
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
filter['filterDataSourceValue'] = "";
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
filter['filterDataSource'] = [];
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
else if (filter.filterType == 'date' || filter.filterType == 'datetime') {
|
|
81
|
+
if (filter.display == undefined) {
|
|
82
|
+
filter.display = true;
|
|
83
|
+
}
|
|
84
|
+
if (filter.defaultFilterType == "dynamic" && filter.momentFunction !== "" && filter.defaultFilterValue !== "" && filter.momentFormat !== "") {
|
|
85
|
+
if (filter.apiName == "startDate") {
|
|
86
|
+
let [count, unit] = filter.defaultFilterValue.split(',');
|
|
87
|
+
filter['filterDataSourceValue'] = moment()[filter.momentFunction](parseInt(count), unit).format(filter.momentFormat);
|
|
88
|
+
}
|
|
89
|
+
if (filter.apiName == "endDate") {
|
|
90
|
+
let [count, unit] = filter.defaultFilterValue.split(',');
|
|
91
|
+
filter['filterDataSourceValue'] = moment()[filter.momentFunction](parseInt(count), unit).format(filter.momentFormat);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
catch (err) {
|
|
97
|
+
this.toastr.error("Unexpected Server Exception. Please contact System Admin.", filter.type);
|
|
98
|
+
}
|
|
99
|
+
finally {
|
|
100
|
+
this.isLoader = false;
|
|
101
|
+
console.log(this.kpiFilterData);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
parseContentValue(contentvalue) {
|
|
106
|
+
return contentvalue.split(',').map(item => item.trim());
|
|
107
|
+
}
|
|
108
|
+
getIsMsisdn(context) {
|
|
109
|
+
let key = context.toLowerCase();
|
|
110
|
+
if (key.includes('msisdn')) {
|
|
111
|
+
return true;
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
startDateChange(e) {
|
|
118
|
+
this.defaultStartDate = e.value;
|
|
119
|
+
}
|
|
120
|
+
endDateChange(e) {
|
|
121
|
+
this.defaultEndDate = e.value;
|
|
122
|
+
}
|
|
123
|
+
searchByFilter() {
|
|
124
|
+
let apiJsonObject = {};
|
|
125
|
+
let operationFilter = {};
|
|
126
|
+
this.kpiFilterData.forEach(element => {
|
|
127
|
+
if (element.filterType == 'date' || element.filterType == 'datetime') {
|
|
128
|
+
apiJsonObject[element.apiName] = moment(element.filterDataSourceValue).format(element.momentFormat);
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
if ((typeof element.filterDataSourceValue === "string" && element.filterDataSourceValue !== "") ||
|
|
132
|
+
(Array.isArray(element.filterDataSourceValue) && element.filterDataSourceValue.length > 0)) {
|
|
133
|
+
if (element.operatorName !== "") {
|
|
134
|
+
if (element.filterType == "content") {
|
|
135
|
+
operationFilter[element.operatorName] = element.filterDataSourceValue;
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
operationFilter[element.operatorName] = Array.isArray(element.filterDataSourceValue) ? element.filterDataSourceValue : [element.filterDataSourceValue];
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
apiJsonObject[element.apiName] = element.filterDataSourceValue;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
apiJsonObject['operationFilter'] = operationFilter;
|
|
148
|
+
console.log(apiJsonObject);
|
|
149
|
+
this.filterDataObject.emit(apiJsonObject);
|
|
150
|
+
}
|
|
151
|
+
reseteFilter() {
|
|
152
|
+
this.defaultEndDate = this.filterEndDate;
|
|
153
|
+
this.defaultStartDate = this.filterStartDate;
|
|
154
|
+
this.kpiFilterData.forEach(element => {
|
|
155
|
+
element['filterDataSourceValue'] = "";
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
getDrildownDimentions(apiName) {
|
|
159
|
+
let dimentions = {
|
|
160
|
+
"/api/v1/reference/getServedTypes": "srvType",
|
|
161
|
+
"/api/v1/reference/getOutRoamingServedTypes": "srvType",
|
|
162
|
+
"/api/v1/reference/getMSCDirections": "direction",
|
|
163
|
+
"/api/v1/reference/getCBSVoiceDirections": "direction",
|
|
164
|
+
"/api/v1/reference/getCBSmsDirections": "direction",
|
|
165
|
+
"/api/v1/reference/getCBSGprsDirections": "direction",
|
|
166
|
+
"/api/v1/reference/getNetworkTypeKeys": "nw_call_type",
|
|
167
|
+
"/api/v1/reference/getGGSNRatingGroups": "ratingGroup",
|
|
168
|
+
"/api/v1/reference/getGGSNAccessPointNames": "apn",
|
|
169
|
+
"/api/v1/reference/getMainAccountBalanceTypes": "balanceTypeId",
|
|
170
|
+
"/api/v1/reference/getDialDigitCountries": "other_party_iso"
|
|
171
|
+
};
|
|
172
|
+
return dimentions[apiName];
|
|
173
|
+
}
|
|
174
|
+
getCapitalize(item) {
|
|
175
|
+
return this.commonService.convertToSpaceSeparatedCapitalized(item);
|
|
176
|
+
}
|
|
177
|
+
getQuickDateClick(item) {
|
|
178
|
+
let startDate = item.value[0];
|
|
179
|
+
let endDate = item.value[1];
|
|
180
|
+
for (const filter of this.kpiFilterData) {
|
|
181
|
+
if (filter.filterType == 'date' || filter.filterType == 'datetime') {
|
|
182
|
+
if (filter.apiName == "startDate") {
|
|
183
|
+
filter['filterDataSourceValue'] = moment(startDate).format(filter.momentFormat);
|
|
184
|
+
}
|
|
185
|
+
if (filter.apiName == "endDate") {
|
|
186
|
+
filter['filterDataSourceValue'] = moment(endDate).format(filter.momentFormat);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
onDocumentClick(event) {
|
|
192
|
+
if (this.isDatesDropDown) {
|
|
193
|
+
const menuElement = this.menuIcon.nativeElement;
|
|
194
|
+
if (!menuElement.contains(event.target)) {
|
|
195
|
+
if (event.target['innerText'] !== "Quick Dates") {
|
|
196
|
+
this.isDatesDropDown = false;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
GammaAdvanceFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: GammaAdvanceFilterComponent, deps: [{ token: i1.ApplicationContentService }, { token: i2.kpicommonService }, { token: i3.ToastrService }, { token: i4.CommonService }], target: i0.ɵɵFactoryTarget.Component });
|
|
203
|
+
GammaAdvanceFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: GammaAdvanceFilterComponent, selector: "app-gamma-advance-filter", inputs: { kpiId: "kpiId", filterStartDate: "filterStartDate", filterEndDate: "filterEndDate", browser_api_config: "browser_api_config", isButtonDesiable: "isButtonDesiable", filterOperatorData: "filterOperatorData" }, outputs: { filterDataObject: "filterDataObject" }, host: { listeners: { "document:click": "onDocumentClick($event)" } }, viewQueries: [{ propertyName: "menuIcon", first: true, predicate: ["menuIcon"], descendants: true }], ngImport: i0, template: "<app-loader *ngIf=\"isLoader\"></app-loader>\n\n\n<ng-container *ngIf=\"!isLoader\">\n <div class=\"flex flex-col border-b\">\n <div class=\"flex flex-row justify-end mb-4\" *ngIf=\"quickDateSelector\">\n <div class=\"w-1/4\">\n <dx-select-box [dataSource]=\"ranges\" valueExpr=\"value\" displayExpr=\"name\"\n (onValueChanged)=\"getQuickDateClick($event)\" placeholder=\"Quick Dates\">\n </dx-select-box>\n </div>\n </div>\n\n <ng-container *ngFor=\"let filter of kpiFilterData\">\n\n <div class=\"flex flex-row justify-between\">\n <ng-container *ngIf=\"filter.filterType == 'date'\">\n <ng-container *ngIf=\"filter.display\">\n <div class=\"mb-2\">{{getCapitalize(filter.label)}}</div>\n <div class=\"mb-2\">\n <div class=\"w-80\">\n <dx-date-box (onValueChanged)=\"startDateChange($event)\" displayFormat=\"yyyy-MM-dd\"\n type=\"{{filter.filterType}}\" [(ngModel)]=\"filter.filterDataSourceValue\">\n </dx-date-box>\n </div>\n </div>\n </ng-container>\n\n\n </ng-container>\n <ng-container *ngIf=\"filter.filterType == 'datetime'\">\n <div class=\"mb-2\">{{getCapitalize(filter.label)}}</div>\n <div class=\"mb-2\">\n <div class=\"w-80\">\n <dx-date-box (onValueChanged)=\"startDateChange($event)\" displayFormat=\"yyyy-MM-dd HH:mm:ss\"\n type=\"{{filter.filterType}}\" [(ngModel)]=\"filter.filterDataSourceValue\">\n </dx-date-box>\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"filter.filterType !== 'date' && filter.filterType !== 'datetime'\">\n <div class=\"mb-2\">\n {{getCapitalize(filter.label)}}\n </div>\n <div class=\"mb-2\">\n <ng-container *ngIf=\"filter.filterType == 'multiple'\">\n <div class=\"w-80\">\n <dx-tag-box [dataSource]=\"filter.filterDataSource\" valueExpr=\"value\" displayExpr=\"name\"\n [searchEnabled]=\"true\" [multiline]=\"true\" [maxDisplayedTags]=\"6\"\n [(ngModel)]=\"filter.filterDataSourceValue\" [showSelectionControls]=\"true\"\n [searchEnabled]=\"true\">\n </dx-tag-box>\n </div>\n </ng-container>\n <ng-container *ngIf=\"filter.filterType == 'single'\">\n <div class=\"w-80\">\n <dx-select-box [items]=\"filter.filterDataSource\"\n [(ngModel)]=\"filter.filterDataSourceValue\" displayExpr=\"name\"\n valueExpr=\"value\"></dx-select-box>\n </div>\n </ng-container>\n <ng-container *ngIf=\"filter.filterType == 'content'\">\n <div class=\"w-80\">\n <dx-text-box [(ngModel)]=\"filter.filterDataSourceValue\"></dx-text-box>\n </div>\n </ng-container>\n </div>\n </ng-container>\n </div>\n </ng-container>\n </div>\n <div class=\"flex flex-row justify-end pl-3\">\n\n\n <button class=\"{{commonService.BtnLightWhite}} cursor-pointer mt-2\" (click)=\"reseteFilter()\">Reset</button>\n <button class=\"{{commonService.btnPrimaryBlue}} cursor-pointer mt-2\" (click)=\"searchByFilter()\"\n *ngIf=\"isButtonDesiable\">Search</button>\n </div>\n</ng-container>", styles: ["::ng-deep .dx-timeview{width:250px!important}::ng-deep .dx-timeview-field .dx-numberbox{width:70px!important}::ng-deep .dx-timeview-format12{width:70px!important}::ng-deep .dx-numberbox-spin-container{width:18px!important}::ng-deep .dx-texteditor{margin-bottom:10px}.floating-menu{position:absolute;display:none;background:white;border:1px solid #ccc;box-shadow:0 4px 8px #0000001a;z-index:1000;min-width:150px}.floating-menu.show{display:block;z-index:99999}.floating-menu ul{list-style:none;padding:0;margin:0}.floating-menu ul li{padding:10px;cursor:pointer}.floating-menu ul li:hover{background:#f0f0f0}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.DxDateBoxComponent, selector: "dx-date-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "adaptivityEnabled", "applyButtonText", "applyValueMode", "buttons", "calendarOptions", "cancelButtonText", "dateOutOfRangeMessage", "dateSerializationFormat", "deferRendering", "disabled", "disabledDates", "displayFormat", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "interval", "invalidDateMessage", "isValid", "label", "labelMode", "max", "maxLength", "min", "name", "opened", "openOnFieldClick", "pickerType", "placeholder", "readOnly", "rtlEnabled", "showAnalogClock", "showClearButton", "showDropDownButton", "spellcheck", "stylingMode", "tabIndex", "text", "type", "useMaskBehavior", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onClosed", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOpened", "onOptionChanged", "onPaste", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "adaptivityEnabledChange", "applyButtonTextChange", "applyValueModeChange", "buttonsChange", "calendarOptionsChange", "cancelButtonTextChange", "dateOutOfRangeMessageChange", "dateSerializationFormatChange", "deferRenderingChange", "disabledChange", "disabledDatesChange", "displayFormatChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "intervalChange", "invalidDateMessageChange", "isValidChange", "labelChange", "labelModeChange", "maxChange", "maxLengthChange", "minChange", "nameChange", "openedChange", "openOnFieldClickChange", "pickerTypeChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showAnalogClockChange", "showClearButtonChange", "showDropDownButtonChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "typeChange", "useMaskBehaviorChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i7.DxSelectBoxComponent, selector: "dx-select-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "buttons", "dataSource", "deferRendering", "disabled", "displayExpr", "displayValue", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "fieldTemplate", "focusStateEnabled", "grouped", "groupTemplate", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "items", "itemTemplate", "label", "labelMode", "maxLength", "minSearchLength", "name", "noDataText", "opened", "openOnFieldClick", "placeholder", "readOnly", "rtlEnabled", "searchEnabled", "searchExpr", "searchMode", "searchTimeout", "selectedItem", "showClearButton", "showDataBeforeSearch", "showDropDownButton", "showSelectionControls", "spellcheck", "stylingMode", "tabIndex", "text", "useItemTextAsTitle", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "valueChangeEvent", "valueExpr", "visible", "width", "wrapItemText"], outputs: ["onChange", "onClosed", "onContentReady", "onCopy", "onCustomItemCreating", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onItemClick", "onKeyDown", "onKeyUp", "onOpened", "onOptionChanged", "onPaste", "onSelectionChanged", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "dataSourceChange", "deferRenderingChange", "disabledChange", "displayExprChange", "displayValueChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "fieldTemplateChange", "focusStateEnabledChange", "groupedChange", "groupTemplateChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "itemsChange", "itemTemplateChange", "labelChange", "labelModeChange", "maxLengthChange", "minSearchLengthChange", "nameChange", "noDataTextChange", "openedChange", "openOnFieldClickChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "searchEnabledChange", "searchExprChange", "searchModeChange", "searchTimeoutChange", "selectedItemChange", "showClearButtonChange", "showDataBeforeSearchChange", "showDropDownButtonChange", "showSelectionControlsChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useItemTextAsTitleChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "valueExprChange", "visibleChange", "widthChange", "wrapItemTextChange", "onBlur"] }, { kind: "component", type: i8.DxTagBoxComponent, selector: "dx-tag-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "applyValueMode", "buttons", "dataSource", "deferRendering", "disabled", "displayExpr", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "fieldTemplate", "focusStateEnabled", "grouped", "groupTemplate", "height", "hideSelectedItems", "hint", "hoverStateEnabled", "inputAttr", "isValid", "items", "itemTemplate", "label", "labelMode", "maxDisplayedTags", "maxFilterQueryLength", "maxLength", "minSearchLength", "multiline", "name", "noDataText", "opened", "openOnFieldClick", "placeholder", "readOnly", "rtlEnabled", "searchEnabled", "searchExpr", "searchMode", "searchTimeout", "selectAllMode", "selectAllText", "selectedItems", "showClearButton", "showDataBeforeSearch", "showDropDownButton", "showMultiTagOnly", "showSelectionControls", "stylingMode", "tabIndex", "tagTemplate", "text", "useItemTextAsTitle", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "valueExpr", "visible", "width", "wrapItemText"], outputs: ["onChange", "onClosed", "onContentReady", "onCustomItemCreating", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onItemClick", "onKeyDown", "onKeyUp", "onMultiTagPreparing", "onOpened", "onOptionChanged", "onSelectAllValueChanged", "onSelectionChanged", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "applyValueModeChange", "buttonsChange", "dataSourceChange", "deferRenderingChange", "disabledChange", "displayExprChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "fieldTemplateChange", "focusStateEnabledChange", "groupedChange", "groupTemplateChange", "heightChange", "hideSelectedItemsChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "itemsChange", "itemTemplateChange", "labelChange", "labelModeChange", "maxDisplayedTagsChange", "maxFilterQueryLengthChange", "maxLengthChange", "minSearchLengthChange", "multilineChange", "nameChange", "noDataTextChange", "openedChange", "openOnFieldClickChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "searchEnabledChange", "searchExprChange", "searchModeChange", "searchTimeoutChange", "selectAllModeChange", "selectAllTextChange", "selectedItemsChange", "showClearButtonChange", "showDataBeforeSearchChange", "showDropDownButtonChange", "showMultiTagOnlyChange", "showSelectionControlsChange", "stylingModeChange", "tabIndexChange", "tagTemplateChange", "textChange", "useItemTextAsTitleChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "valueExprChange", "visibleChange", "widthChange", "wrapItemTextChange", "onBlur"] }, { kind: "component", type: i9.DxTextBoxComponent, selector: "dx-text-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "label", "labelMode", "mask", "maskChar", "maskInvalidMessage", "maskRules", "maxLength", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showMaskMode", "spellcheck", "stylingMode", "tabIndex", "text", "useMaskedValue", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "labelChange", "labelModeChange", "maskChange", "maskCharChange", "maskInvalidMessageChange", "maskRulesChange", "maxLengthChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showMaskModeChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useMaskedValueChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "directive", type: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i10.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i11.LoaderComponent, selector: "app-loader" }] });
|
|
204
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: GammaAdvanceFilterComponent, decorators: [{
|
|
205
|
+
type: Component,
|
|
206
|
+
args: [{ selector: 'app-gamma-advance-filter', template: "<app-loader *ngIf=\"isLoader\"></app-loader>\n\n\n<ng-container *ngIf=\"!isLoader\">\n <div class=\"flex flex-col border-b\">\n <div class=\"flex flex-row justify-end mb-4\" *ngIf=\"quickDateSelector\">\n <div class=\"w-1/4\">\n <dx-select-box [dataSource]=\"ranges\" valueExpr=\"value\" displayExpr=\"name\"\n (onValueChanged)=\"getQuickDateClick($event)\" placeholder=\"Quick Dates\">\n </dx-select-box>\n </div>\n </div>\n\n <ng-container *ngFor=\"let filter of kpiFilterData\">\n\n <div class=\"flex flex-row justify-between\">\n <ng-container *ngIf=\"filter.filterType == 'date'\">\n <ng-container *ngIf=\"filter.display\">\n <div class=\"mb-2\">{{getCapitalize(filter.label)}}</div>\n <div class=\"mb-2\">\n <div class=\"w-80\">\n <dx-date-box (onValueChanged)=\"startDateChange($event)\" displayFormat=\"yyyy-MM-dd\"\n type=\"{{filter.filterType}}\" [(ngModel)]=\"filter.filterDataSourceValue\">\n </dx-date-box>\n </div>\n </div>\n </ng-container>\n\n\n </ng-container>\n <ng-container *ngIf=\"filter.filterType == 'datetime'\">\n <div class=\"mb-2\">{{getCapitalize(filter.label)}}</div>\n <div class=\"mb-2\">\n <div class=\"w-80\">\n <dx-date-box (onValueChanged)=\"startDateChange($event)\" displayFormat=\"yyyy-MM-dd HH:mm:ss\"\n type=\"{{filter.filterType}}\" [(ngModel)]=\"filter.filterDataSourceValue\">\n </dx-date-box>\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"filter.filterType !== 'date' && filter.filterType !== 'datetime'\">\n <div class=\"mb-2\">\n {{getCapitalize(filter.label)}}\n </div>\n <div class=\"mb-2\">\n <ng-container *ngIf=\"filter.filterType == 'multiple'\">\n <div class=\"w-80\">\n <dx-tag-box [dataSource]=\"filter.filterDataSource\" valueExpr=\"value\" displayExpr=\"name\"\n [searchEnabled]=\"true\" [multiline]=\"true\" [maxDisplayedTags]=\"6\"\n [(ngModel)]=\"filter.filterDataSourceValue\" [showSelectionControls]=\"true\"\n [searchEnabled]=\"true\">\n </dx-tag-box>\n </div>\n </ng-container>\n <ng-container *ngIf=\"filter.filterType == 'single'\">\n <div class=\"w-80\">\n <dx-select-box [items]=\"filter.filterDataSource\"\n [(ngModel)]=\"filter.filterDataSourceValue\" displayExpr=\"name\"\n valueExpr=\"value\"></dx-select-box>\n </div>\n </ng-container>\n <ng-container *ngIf=\"filter.filterType == 'content'\">\n <div class=\"w-80\">\n <dx-text-box [(ngModel)]=\"filter.filterDataSourceValue\"></dx-text-box>\n </div>\n </ng-container>\n </div>\n </ng-container>\n </div>\n </ng-container>\n </div>\n <div class=\"flex flex-row justify-end pl-3\">\n\n\n <button class=\"{{commonService.BtnLightWhite}} cursor-pointer mt-2\" (click)=\"reseteFilter()\">Reset</button>\n <button class=\"{{commonService.btnPrimaryBlue}} cursor-pointer mt-2\" (click)=\"searchByFilter()\"\n *ngIf=\"isButtonDesiable\">Search</button>\n </div>\n</ng-container>", styles: ["::ng-deep .dx-timeview{width:250px!important}::ng-deep .dx-timeview-field .dx-numberbox{width:70px!important}::ng-deep .dx-timeview-format12{width:70px!important}::ng-deep .dx-numberbox-spin-container{width:18px!important}::ng-deep .dx-texteditor{margin-bottom:10px}.floating-menu{position:absolute;display:none;background:white;border:1px solid #ccc;box-shadow:0 4px 8px #0000001a;z-index:1000;min-width:150px}.floating-menu.show{display:block;z-index:99999}.floating-menu ul{list-style:none;padding:0;margin:0}.floating-menu ul li{padding:10px;cursor:pointer}.floating-menu ul li:hover{background:#f0f0f0}\n"] }]
|
|
207
|
+
}], ctorParameters: function () { return [{ type: i1.ApplicationContentService }, { type: i2.kpicommonService }, { type: i3.ToastrService }, { type: i4.CommonService }]; }, propDecorators: { kpiId: [{
|
|
208
|
+
type: Input
|
|
209
|
+
}], filterStartDate: [{
|
|
210
|
+
type: Input
|
|
211
|
+
}], filterEndDate: [{
|
|
212
|
+
type: Input
|
|
213
|
+
}], browser_api_config: [{
|
|
214
|
+
type: Input
|
|
215
|
+
}], isButtonDesiable: [{
|
|
216
|
+
type: Input
|
|
217
|
+
}], filterDataObject: [{
|
|
218
|
+
type: Output
|
|
219
|
+
}], menuIcon: [{
|
|
220
|
+
type: ViewChild,
|
|
221
|
+
args: ['menuIcon', { static: false }]
|
|
222
|
+
}], filterOperatorData: [{
|
|
223
|
+
type: Input,
|
|
224
|
+
args: ['filterOperatorData']
|
|
225
|
+
}], onDocumentClick: [{
|
|
226
|
+
type: HostListener,
|
|
227
|
+
args: ['document:click', ['$event']]
|
|
228
|
+
}] } });
|
|
229
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FtbWEtYWR2YW5jZS1maWx0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2FtbWEtYXBwLWNvbnRyb2xsZXIvc3JjL2xpYi9hcHBsaWNhdGlvbi1jb250cm9sbGVyL3NoYXJlZC9nYW1tYS1hZHZhbmNlLWZpbHRlci9nYW1tYS1hZHZhbmNlLWZpbHRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvc2hhcmVkL2dhbW1hLWFkdmFuY2UtZmlsdGVyL2dhbW1hLWFkdmFuY2UtZmlsdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQWMsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVwSCxPQUFPLE1BQU0sTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7Ozs7Ozs7OztBQVUzQyxNQUFNLE9BQU8sMkJBQTJCO0lBZ0R0QyxZQUNVLE9BQWtDLEVBQ2xDLFVBQTRCLEVBQzVCLE1BQXFCLEVBQ3RCLGFBQTRCO1FBSDNCLFlBQU8sR0FBUCxPQUFPLENBQTJCO1FBQ2xDLGVBQVUsR0FBVixVQUFVLENBQWtCO1FBQzVCLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDdEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUE5Q3BCLHFCQUFnQixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBSTFFLHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQU1uQyxhQUFRLEdBQUcsSUFBSSxDQUFDO1FBRWhCLFdBQU0sR0FBRztZQUNQLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFO1lBQzlDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRTtZQUMxRixFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUU7WUFDNUYsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFO1lBQzlGLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUU7WUFDbkYsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRTtZQUMxRSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFO1lBQzFFLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FB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dkIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ1csZ0JBQWdCO3NCQUFoQyxNQUFNO2dCQUNtQyxRQUFRO3NCQUFqRCxTQUFTO3VCQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBd0JwQyxrQkFBa0I7c0JBRHJCLEtBQUs7dUJBQUMsb0JBQW9CO2dCQXFNM0IsZUFBZTtzQkFEZCxZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBFdmVudEVtaXR0ZXIsIE91dHB1dCwgRWxlbWVudFJlZiwgVmlld0NoaWxkLCBIb3N0TGlzdGVuZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRvYXN0clNlcnZpY2UgfSBmcm9tICduZ3gtdG9hc3RyJztcbmltcG9ydCBtb21lbnQgZnJvbSAnLi8uLi8uLi9tb21lbnQtaGVscGVyJztcbmltcG9ydCB7IGtwaWNvbW1vblNlcnZpY2UgfSBmcm9tICcuLi9rcGktY29tb24tc2VydmljZSc7XG5pbXBvcnQgeyBBcHBsaWNhdGlvbkNvbnRlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBwbGljYXRpb24tY29udGVudC5zZXJ2aWNlJztcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21tb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZ2FtbWEtYWR2YW5jZS1maWx0ZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZ2FtbWEtYWR2YW5jZS1maWx0ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9nYW1tYS1hZHZhbmNlLWZpbHRlci5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEdhbW1hQWR2YW5jZUZpbHRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGtwaUlkOiBhbnk7XG4gIEBJbnB1dCgpIGZpbHRlclN0YXJ0RGF0ZTogYW55O1xuICBASW5wdXQoKSBmaWx0ZXJFbmREYXRlOiBhbnk7XG4gIEBJbnB1dCgpIGJyb3dzZXJfYXBpX2NvbmZpZzogYW55O1xuICBASW5wdXQoKSBpc0J1dHRvbkRlc2lhYmxlOiBib29sZWFuO1xuICBAT3V0cHV0KCkgcHVibGljIGZpbHRlckRhdGFPYmplY3Q6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAVmlld0NoaWxkKCdtZW51SWNvbicsIHsgc3RhdGljOiBmYWxzZSB9KSBtZW51SWNvbjogRWxlbWVudFJlZjtcblxuICBpc0RhdGVzRHJvcERvd246IGJvb2xlYW47XG4gIHF1aWNrRGF0ZVNlbGVjdG9yOiBib29sZWFuID0gZmFsc2U7XG4gIGtwaUZpbHRlckRhdGE6IGFueTtcbiAgLy8gc3RhcnRfZGF0ZSA9IG1vbWVudCgpLnN1YnRyYWN0KDUsICdkYXlzJykuZm9ybWF0KCdZWVlZLU1NLUREJyk7XG4gIC8vIGVuZF9kYXRlID0gbW9tZW50KCkuZm9ybWF0KCdZWVlZLU1NLUREJyk7XG4gIGRlZmF1bHRTdGFydERhdGU6IGFueTtcbiAgZGVmYXVsdEVuZERhdGU6IGFueTtcbiAgaXNMb2FkZXIgPSB0cnVlO1xuXG4gIHJhbmdlcyA9IFtcbiAgICB7IG5hbWU6IFwiVG9kYXlcIiwgdmFsdWU6IFttb21lbnQoKSwgbW9tZW50KCldIH0sXG4gICAgeyBuYW1lOiBcIlllc3RlcmRheVwiLCB2YWx1ZTogW21vbWVudCgpLnN1YnRyYWN0KDEsICdkYXlzJyksIG1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXlzJyldIH0sXG4gICAgeyBuYW1lOiBcIkxhc3QgNyBEYXlzXCIsIHZhbHVlOiBbbW9tZW50KCkuc3VidHJhY3QoNywgJ2RheXMnKSwgbW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheXMnKV0gfSxcbiAgICB7IG5hbWU6IFwiTGFzdCAxNSBEYXlzXCIsIHZhbHVlOiBbbW9tZW50KCkuc3VidHJhY3QoMTUsICdkYXlzJyksIG1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXlzJyldIH0sXG4gICAgeyBuYW1lOiAnVGhpcyBNb250aCcsIHZhbHVlOiBbbW9tZW50KCkuc3RhcnRPZignbW9udGgnKSwgbW9tZW50KCkuZW5kT2YoJ21vbnRoJyldIH0sXG4gICAgeyBuYW1lOiAnTGFzdCAxIE1vbnRoJywgdmFsdWU6IFttb21lbnQoKS5zdWJ0cmFjdCgzMCwgJ2RheXMnKSwgbW9tZW50KCldIH0sXG4gICAgeyBuYW1lOiAnTGFzdCAzIE1vbnRoJywgdmFsdWU6IFttb21lbnQoKS5zdWJ0cmFjdCg5MSwgJ2RheXMnKSwgbW9tZW50KCldIH0sXG4gICAgeyBuYW1lOiAnTGFzdCA2IE1vbnRoJywgdmFsdWU6IFttb21lbnQoKS5zdWJ0cmFjdCgxODIsICdkYXlzJyksIG1vbWVudCgpXSB9LFxuICAgIHsgbmFtZTogJ0xhc3QgMSBZZWFyJywgdmFsdWU6IFttb21lbnQoKS5zdWJ0cmFjdCgzNjUsICdkYXlzJyksIG1vbWVudCgpXSB9XG4gIF1cblxuICBASW5wdXQoJ2ZpbHRlck9wZXJhdG9yRGF0YScpXG4gIHNldCBmaWx0ZXJPcGVyYXRvckRhdGEodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuXG4gICAgICB0aGlzLmtwaUZpbHRlckRhdGEgPSBbXTtcbiAgICAgIHRoaXMua3BpRmlsdGVyRGF0YSA9IHZhbHVlO1xuICAgICAgdGhpcy5rcGlGaWx0ZXJEYXRhLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIGlmIChpdGVtLmhhc093blByb3BlcnR5KCdtb21lbnRGb3JtYXRlJykpIHtcbiAgICAgICAgICBpdGVtLm1vbWVudEZvcm1hdCA9IGl0ZW0ubW9tZW50Rm9ybWF0ZTtcbiAgICAgICAgICBkZWxldGUgaXRlbS5tb21lbnRGb3JtYXRlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMucHJvY2Vzc0ZpbHRlckZvckRhdGEoKTtcbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHNlcnZpY2U6IEFwcGxpY2F0aW9uQ29udGVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBrcGlTZXJ2aWNlOiBrcGljb21tb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgdG9hc3RyOiBUb2FzdHJTZXJ2aWNlLFxuICAgIHB1YmxpYyBjb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlXG4gICkgeyB9XG5cblxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZGVmYXVsdEVuZERhdGUgPSBtb21lbnQoKS5zdWJ0cmFjdCgnMScsICdkYXlzJykuZm9ybWF0KCdZWVlZLU1NLUREJyk7XG4gICAgdGhpcy5kZWZhdWx0U3RhcnREYXRlID0gbW9tZW50KHRoaXMuZGVmYXVsdEVuZERhdGUpLnN1YnRyYWN0KCc1JywgJ2RheXMnKS5mb3JtYXQoJ1lZWVktTU0tREQnKTtcblxuXG4gIH1cblxuXG4gIGFzeW5jIHByb2Nlc3NGaWx0ZXJGb3JEYXRhKCkge1xuICAgIGZvciAoY29uc3QgZmlsdGVyIG9mIHRoaXMua3BpRmlsdGVyRGF0YSkge1xuXG4gICAgICB0aGlzLmlzTG9hZGVyID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHN0YXJ0RGF0ZUZpbHRlciA9IHRoaXMua3BpRmlsdGVyRGF0YS5maW5kKGZpbHRlciA9PiBmaWx0ZXIuYXBpTmFtZSA9PT0gJ3N0YXJ0RGF0ZScgJiYgKGZpbHRlci5kaXNwbGF5ICE9PSB1bmRlZmluZWQgPyBmaWx0ZXIuZGlzcGxheSA6IHRydWUpKTtcbiAgICAgIGNvbnN0IGVuZERhdGVGaWx0ZXIgPSB0aGlzLmtwaUZpbHRlckRhdGEuZmluZChmaWx0ZXIgPT4gZmlsdGVyLmFwaU5hbWUgPT09ICdlbmREYXRlJyAmJiAoZmlsdGVyLmRpc3BsYXkgIT09IHVuZGVmaW5lZCA/IGZpbHRlci5kaXNwbGF5IDogdHJ1ZSkpO1xuICAgICAgaWYgKHN0YXJ0RGF0ZUZpbHRlciAmJiBlbmREYXRlRmlsdGVyKSB7XG4gICAgICAgIHRoaXMucXVpY2tEYXRlU2VsZWN0b3IgPSB0cnVlO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGZpbHRlci5hcGlOYW1lICE9PSAnc3RhcnREYXRlJyAmJiBmaWx0ZXIuYXBpTmFtZSAhPT0gJ2VuZERhdGUnKSB7XG4gICAgICAgICAgaWYgKGZpbHRlci5hcGlOYW1lLmluY2x1ZGVzKCcvcmVmZXJlbmNlLycpKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5zZXJ2aWNlLmdldEZpbHRlckRhdGFCeURyaWxsRG93bihmaWx0ZXIuYXBpTmFtZSkudG9Qcm9taXNlKCk7XG5cbiAgICAgICAgICAgIGZpbHRlclsnZmlsdGVyRGF0YVNvdXJjZSddID0gZGF0YTtcbiAgICAgICAgICAgIGlmIChmaWx0ZXIuZGVmYXVsdEZpbHRlclR5cGUgPT0gXCJkeW5hbWljXCIgJiYgZmlsdGVyLmRlZmF1bHRGaWx0ZXJWYWx1ZSAhPT0gXCJcIikge1xuICAgICAgICAgICAgICBmaWx0ZXJbJ2ZpbHRlckRhdGFTb3VyY2VWYWx1ZSddID0gdGhpcy5wYXJzZUNvbnRlbnRWYWx1ZShmaWx0ZXIuZGVmYXVsdEZpbHRlclZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGZpbHRlclsnZmlsdGVyRGF0YVNvdXJjZVZhbHVlJ10gPSBcIlwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmaWx0ZXJbJ2ZpbHRlckRhdGFTb3VyY2UnXSA9IFtdO1xuICAgICAgICAgIH1cblxuICAgICAgICB9IGVsc2UgaWYgKGZpbHRlci5maWx0ZXJUeXBlID09ICdkYXRlJyB8fCBmaWx0ZXIuZmlsdGVyVHlwZSA9PSAnZGF0ZXRpbWUnKSB7XG4gICAgICAgICAgaWYgKGZpbHRlci5kaXNwbGF5ID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZmlsdGVyLmRpc3BsYXkgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZmlsdGVyLmRlZmF1bHRGaWx0ZXJUeXBlID09IFwiZHluYW1pY1wiICYmIGZpbHRlci5tb21lbnRGdW5jdGlvbiAhPT0gXCJcIiAmJiBmaWx0ZXIuZGVmYXVsdEZpbHRlclZhbHVlICE9PSBcIlwiICYmIGZpbHRlci5tb21lbnRGb3JtYXQgIT09IFwiXCIpIHtcbiAgICAgICAgICAgIGlmIChmaWx0ZXIuYXBpTmFtZSA9PSBcInN0YXJ0RGF0ZVwiKSB7XG4gICAgICAgICAgICAgIGxldCBbY291bnQsIHVuaXRdID0gZmlsdGVyLmRlZmF1bHRGaWx0ZXJWYWx1ZS5zcGxpdCgnLCcpO1xuICAgICAgICAgICAgICBmaWx0ZXJbJ2ZpbHRlckRhdGFTb3VyY2VWYWx1ZSddID0gbW9tZW50KClbZmlsdGVyLm1vbWVudEZ1bmN0aW9uXShwYXJzZUludChjb3VudCksIHVuaXQpLmZvcm1hdChmaWx0ZXIubW9tZW50Rm9ybWF0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmaWx0ZXIuYXBpTmFtZSA9PSBcImVuZERhdGVcIikge1xuICAgICAgICAgICAgICBsZXQgW2NvdW50LCB1bml0XSA9IGZpbHRlci5kZWZhdWx0RmlsdGVyVmFsdWUuc3BsaXQoJywnKTtcbiAgICAgICAgICAgICAgZmlsdGVyWydmaWx0ZXJEYXRhU291cmNlVmFsdWUnXSA9IG1vbWVudCgpW2ZpbHRlci5tb21lbnRGdW5jdGlvbl0ocGFyc2VJbnQoY291bnQpLCB1bml0KS5mb3JtYXQoZmlsdGVyLm1vbWVudEZvcm1hdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKFwiVW5leHBlY3RlZCBTZXJ2ZXIgRXhjZXB0aW9uLiBQbGVhc2UgY29udGFjdCBTeXN0ZW0gQWRtaW4uXCIsIGZpbHRlci50eXBlKVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmtwaUZpbHRlckRhdGEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHBhcnNlQ29udGVudFZhbHVlKGNvbnRlbnR2YWx1ZSkge1xuICAgIHJldHVybiBjb250ZW50dmFsdWUuc3BsaXQoJywnKS5tYXAoaXRlbSA9PiBpdGVtLnRyaW0oKSk7XG4gIH1cblxuXG4gIGdldElzTXNpc2RuKGNvbnRleHQpIHtcbiAgICBsZXQga2V5ID0gY29udGV4dC50b0xvd2VyQ2FzZSgpXG4gICAgaWYgKGtleS5pbmNsdWRlcygnbXNpc2RuJykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgc3RhcnREYXRlQ2hhbmdlKGUpIHtcbiAgICB0aGlzLmRlZmF1bHRTdGFydERhdGUgPSBlLnZhbHVlO1xuICB9XG4gIGVuZERhdGVDaGFuZ2UoZSkge1xuICAgIHRoaXMuZGVmYXVsdEVuZERhdGUgPSBlLnZhbHVlO1xuICB9XG5cbiAgc2VhcmNoQnlGaWx0ZXIoKSB7XG5cbiAgICBsZXQgYXBpSnNvbk9iamVjdDogYW55ID0ge307XG4gICAgbGV0IG9wZXJhdGlvbkZpbHRlcjogYW55ID0ge307XG4gICAgdGhpcy5rcGlGaWx0ZXJEYXRhLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICBpZiAoZWxlbWVudC5maWx0ZXJUeXBlID09ICdkYXRlJyB8fCBlbGVtZW50LmZpbHRlclR5cGUgPT0gJ2RhdGV0aW1lJykge1xuICAgICAgICBhcGlKc29uT2JqZWN0W2VsZW1lbnQuYXBpTmFtZV0gPSBtb21lbnQoZWxlbWVudC5maWx0ZXJEYXRhU291cmNlVmFsdWUpLmZvcm1hdChlbGVtZW50Lm1vbWVudEZvcm1hdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKHR5cGVvZiBlbGVtZW50LmZpbHRlckRhdGFTb3VyY2VWYWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiBlbGVtZW50LmZpbHRlckRhdGFTb3VyY2VWYWx1ZSAhPT0gXCJcIikgfHxcbiAgICAgICAgICAoQXJyYXkuaXNBcnJheShlbGVtZW50LmZpbHRlckRhdGFTb3VyY2VWYWx1ZSkgJiYgZWxlbWVudC5maWx0ZXJEYXRhU291cmNlVmFsdWUubGVuZ3RoID4gMClcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKGVsZW1lbnQub3BlcmF0b3JOYW1lICE9PSBcIlwiKSB7XG4gICAgICAgICAgICBpZiAoZWxlbWVudC5maWx0ZXJUeXBlID09IFwiY29udGVudFwiKSB7XG4gICAgICAgICAgICAgIG9wZXJhdGlvbkZpbHRlcltlbGVtZW50Lm9wZXJhdG9yTmFtZV0gPSBlbGVtZW50LmZpbHRlckRhdGFTb3VyY2VWYWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG9wZXJhdGlvbkZpbHRlcltlbGVtZW50Lm9wZXJhdG9yTmFtZV0gPSBBcnJheS5pc0FycmF5KGVsZW1lbnQuZmlsdGVyRGF0YVNvdXJjZVZhbHVlKSA/IGVsZW1lbnQuZmlsdGVyRGF0YVNvdXJjZVZhbHVlIDogW2VsZW1lbnQuZmlsdGVyRGF0YVNvdXJjZVZhbHVlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXBpSnNvbk9iamVjdFtlbGVtZW50LmFwaU5hbWVdID0gZWxlbWVudC5maWx0ZXJEYXRhU291cmNlVmFsdWU7XG5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgIH0pO1xuXG4gICAgYXBpSnNvbk9iamVjdFsnb3BlcmF0aW9uRmlsdGVyJ10gPSBvcGVyYXRpb25GaWx0ZXI7XG4gICAgLy8gbGV0IGZpbHRlcl9jb25maWcgPSB7XG4gICAgLy8gICBzdGFydERhdGU6IHRoaXMuZGVmYXVsdFN0YXJ0RGF0ZSxcbiAgICAvLyAgIGVuZERhdGU6IHRoaXMuZGVmYXVsdEVuZERhdGUsXG4gICAgLy8gICBvcGVyYXRpb25GaWx0ZXI6IGFwaUpzb25PYmplY3RcbiAgICAvLyB9XG4gICAgLy8gdGhpcy5pc0J1dHRvbkRlc2lhYmxlID0gZmFsc2U7XG5cbiAgICBjb25zb2xlLmxvZyhhcGlKc29uT2JqZWN0KTtcbiAgICB0aGlzLmZpbHRlckRhdGFPYmplY3QuZW1pdChhcGlKc29uT2JqZWN0KTtcblxuICB9XG5cblxuXG4gIHJlc2V0ZUZpbHRlcigpIHtcbiAgICB0aGlzLmRlZmF1bHRFbmREYXRlID0gdGhpcy5maWx0ZXJFbmREYXRlO1xuICAgIHRoaXMuZGVmYXVsdFN0YXJ0RGF0ZSA9IHRoaXMuZmlsdGVyU3RhcnREYXRlO1xuICAgIHRoaXMua3BpRmlsdGVyRGF0YS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgZWxlbWVudFsnZmlsdGVyRGF0YVNvdXJjZVZhbHVlJ10gPSBcIlwiXG4gICAgfSk7XG4gIH1cblxuXG4gIGdldERyaWxkb3duRGltZW50aW9ucyhhcGlOYW1lKSB7XG4gICAgbGV0IGRpbWVudGlvbnMgPSB7XG4gICAgICBcIi9hcGkvdjEvcmVmZXJlbmNlL2dldFNlcnZlZFR5cGVzXCI6IFwic3J2VHlwZVwiLFxuICAgICAgXCIvYXBpL3YxL3JlZmVyZW5jZS9nZXRPdXRSb2FtaW5nU2VydmVkVHlwZXNcIjogXCJzcnZUeXBlXCIsXG4gICAgICBcIi9hcGkvdjEvcmVmZXJlbmNlL2dldE1TQ0RpcmVjdGlvbnNcIjogXCJkaXJlY3Rpb25cIixcbiAgICAgIFwiL2FwaS92MS9yZWZlcmVuY2UvZ2V0Q0JTVm9pY2VEaXJlY3Rpb25zXCI6IFwiZGlyZWN0aW9uXCIsXG4gICAgICBcIi9hcGkvdjEvcmVmZXJlbmNlL2dldENCU21zRGlyZWN0aW9uc1wiOiBcImRpcmVjdGlvblwiLFxuICAgICAgXCIvYXBpL3YxL3JlZmVyZW5jZS9nZXRDQlNHcHJzRGlyZWN0aW9uc1wiOiBcImRpcmVjdGlvblwiLFxuICAgICAgXCIvYXBpL3YxL3JlZmVyZW5jZS9nZXROZXR3b3JrVHlwZUtleXNcIjogXCJud19jYWxsX3R5cGVcIixcbiAgICAgIFwiL2FwaS92MS9yZWZlcmVuY2UvZ2V0R0dTTlJhdGluZ0dyb3Vwc1wiOiBcInJhdGluZ0dyb3VwXCIsXG4gICAgICBcIi9hcGkvdjEvcmVmZXJlbmNlL2dldEdHU05BY2Nlc3NQb2ludE5hbWVzXCI6IFwiYXBuXCIsXG4gICAgICBcIi9hcGkvdjEvcmVmZXJlbmNlL2dldE1haW5BY2NvdW50QmFsYW5jZVR5cGVzXCI6IFwiYmFsYW5jZVR5cGVJZFwiLFxuICAgICAgXCIvYXBpL3YxL3JlZmVyZW5jZS9nZXREaWFsRGlnaXRDb3VudHJpZXNcIjogXCJvdGhlcl9wYXJ0eV9pc29cIlxuICAgIH1cbiAgICByZXR1cm4gZGltZW50aW9uc1thcGlOYW1lXTtcbiAgfVxuICBnZXRDYXBpdGFsaXplKGl0ZW06IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmNvbW1vblNlcnZpY2UuY29udmVydFRvU3BhY2VTZXBhcmF0ZWRDYXBpdGFsaXplZChpdGVtKVxuICB9XG5cblxuXG4gIGdldFF1aWNrRGF0ZUNsaWNrKGl0ZW0pIHtcbiAgICBsZXQgc3RhcnREYXRlID0gaXRlbS52YWx1ZVswXTtcbiAgICBsZXQgZW5kRGF0ZSA9IGl0ZW0udmFsdWVbMV07XG5cbiAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiB0aGlzLmtwaUZpbHRlckRhdGEpIHtcbiAgICAgIGlmIChmaWx0ZXIuZmlsdGVyVHlwZSA9PSAnZGF0ZScgfHwgZmlsdGVyLmZpbHRlclR5cGUgPT0gJ2RhdGV0aW1lJykge1xuICAgICAgICBpZiAoZmlsdGVyLmFwaU5hbWUgPT0gXCJzdGFydERhdGVcIikge1xuICAgICAgICAgIGZpbHRlclsnZmlsdGVyRGF0YVNvdXJjZVZhbHVlJ10gPSBtb21lbnQoc3RhcnREYXRlKS5mb3JtYXQoZmlsdGVyLm1vbWVudEZvcm1hdCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlci5hcGlOYW1lID09IFwiZW5kRGF0ZVwiKSB7XG4gICAgICAgICAgZmlsdGVyWydmaWx0ZXJEYXRhU291cmNlVmFsdWUnXSA9IG1vbWVudChlbmREYXRlKS5mb3JtYXQoZmlsdGVyLm1vbWVudEZvcm1hdCk7XG4gICAgICAgIH1cblxuICAgICAgfVxuICAgIH1cblxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxuICBvbkRvY3VtZW50Q2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcblxuICAgIGlmICh0aGlzLmlzRGF0ZXNEcm9wRG93bikge1xuICAgICAgY29uc3QgbWVudUVsZW1lbnQgPSB0aGlzLm1lbnVJY29uLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBpZiAoIW1lbnVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgaWYgKGV2ZW50LnRhcmdldFsnaW5uZXJUZXh0J10gIT09IFwiUXVpY2sgRGF0ZXNcIikge1xuICAgICAgICAgIHRoaXMuaXNEYXRlc0Ryb3BEb3duID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgfVxuICAgIH1cbiAgfVxuXG5cbn1cbiIsIjxhcHAtbG9hZGVyICpuZ0lmPVwiaXNMb2FkZXJcIj48L2FwcC1sb2FkZXI+XG5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0xvYWRlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGJvcmRlci1iXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktZW5kIG1iLTRcIiAqbmdJZj1cInF1aWNrRGF0ZVNlbGVjdG9yXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xLzRcIj5cbiAgICAgICAgICAgICAgICA8ZHgtc2VsZWN0LWJveCBbZGF0YVNvdXJjZV09XCJyYW5nZXNcIiB2YWx1ZUV4cHI9XCJ2YWx1ZVwiIGRpc3BsYXlFeHByPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIChvblZhbHVlQ2hhbmdlZCk9XCJnZXRRdWlja0RhdGVDbGljaygkZXZlbnQpXCIgcGxhY2Vob2xkZXI9XCJRdWljayBEYXRlc1wiPlxuICAgICAgICAgICAgICAgIDwvZHgtc2VsZWN0LWJveD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaWx0ZXIgb2Yga3BpRmlsdGVyRGF0YVwiPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyLmZpbHRlclR5cGUgPT0gJ2RhdGUnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXIuZGlzcGxheVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTJcIj57e2dldENhcGl0YWxpemUoZmlsdGVyLmxhYmVsKX19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTgwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC1kYXRlLWJveCAob25WYWx1ZUNoYW5nZWQpPVwic3RhcnREYXRlQ2hhbmdlKCRldmVudClcIiBkaXNwbGF5Rm9ybWF0PVwieXl5eS1NTS1kZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwie3tmaWx0ZXIuZmlsdGVyVHlwZX19XCIgWyhuZ01vZGVsKV09XCJmaWx0ZXIuZmlsdGVyRGF0YVNvdXJjZVZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZHgtZGF0ZS1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cblxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXIuZmlsdGVyVHlwZSA9PSAnZGF0ZXRpbWUnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0yXCI+e3tnZXRDYXBpdGFsaXplKGZpbHRlci5sYWJlbCl9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctODBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtZGF0ZS1ib3ggKG9uVmFsdWVDaGFuZ2VkKT1cInN0YXJ0RGF0ZUNoYW5nZSgkZXZlbnQpXCIgZGlzcGxheUZvcm1hdD1cInl5eXktTU0tZGQgSEg6bW06c3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwie3tmaWx0ZXIuZmlsdGVyVHlwZX19XCIgWyhuZ01vZGVsKV09XCJmaWx0ZXIuZmlsdGVyRGF0YVNvdXJjZVZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9keC1kYXRlLWJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyLmZpbHRlclR5cGUgIT09ICdkYXRlJyAmJiBmaWx0ZXIuZmlsdGVyVHlwZSAhPT0gJ2RhdGV0aW1lJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3tnZXRDYXBpdGFsaXplKGZpbHRlci5sYWJlbCl9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXIuZmlsdGVyVHlwZSA9PSAnbXVsdGlwbGUnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctODBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXRhZy1ib3ggW2RhdGFTb3VyY2VdPVwiZmlsdGVyLmZpbHRlckRhdGFTb3VyY2VcIiB2YWx1ZUV4cHI9XCJ2YWx1ZVwiIGRpc3BsYXlFeHByPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoRW5hYmxlZF09XCJ0cnVlXCIgW211bHRpbGluZV09XCJ0cnVlXCIgW21heERpc3BsYXllZFRhZ3NdPVwiNlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpbHRlci5maWx0ZXJEYXRhU291cmNlVmFsdWVcIiBbc2hvd1NlbGVjdGlvbkNvbnRyb2xzXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaEVuYWJsZWRdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2R4LXRhZy1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXIuZmlsdGVyVHlwZSA9PSAnc2luZ2xlJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTgwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC1zZWxlY3QtYm94IFtpdGVtc109XCJmaWx0ZXIuZmlsdGVyRGF0YVNvdXJjZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpbHRlci5maWx0ZXJEYXRhU291cmNlVmFsdWVcIiBkaXNwbGF5RXhwcj1cIm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVFeHByPVwidmFsdWVcIj48L2R4LXNlbGVjdC1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXIuZmlsdGVyVHlwZSA9PSAnY29udGVudCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy04MFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3ggWyhuZ01vZGVsKV09XCJmaWx0ZXIuZmlsdGVyRGF0YVNvdXJjZVZhbHVlXCI+PC9keC10ZXh0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWVuZCBwbC0zXCI+XG5cblxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLkJ0bkxpZ2h0V2hpdGV9fSBjdXJzb3ItcG9pbnRlciBtdC0yXCIgKGNsaWNrKT1cInJlc2V0ZUZpbHRlcigpXCI+UmVzZXQ8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5QcmltYXJ5Qmx1ZX19IGN1cnNvci1wb2ludGVyIG10LTJcIiAoY2xpY2spPVwic2VhcmNoQnlGaWx0ZXIoKVwiXG4gICAgICAgICAgICAqbmdJZj1cImlzQnV0dG9uRGVzaWFibGVcIj5TZWFyY2g8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPiJdfQ==
|