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,168 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import moment from './../../../moment-helper';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "../../../common";
|
|
5
|
+
import * as i2 from "ngx-toastr";
|
|
6
|
+
import * as i3 from "@angular/common";
|
|
7
|
+
import * as i4 from "devextreme-angular/core";
|
|
8
|
+
import * as i5 from "devextreme-angular/ui/nested";
|
|
9
|
+
import * as i6 from "devextreme-angular/ui/data-grid";
|
|
10
|
+
import * as i7 from "../../loader/loader.component";
|
|
11
|
+
import * as i8 from "./contentSafeHtml";
|
|
12
|
+
export class GammaTableWithPercentageComponent {
|
|
13
|
+
constructor(commonService, toastr) {
|
|
14
|
+
this.commonService = commonService;
|
|
15
|
+
this.toastr = toastr;
|
|
16
|
+
this.data = [
|
|
17
|
+
{
|
|
18
|
+
eventType: "Voice",
|
|
19
|
+
access_cost_sar: 767.7730000000023,
|
|
20
|
+
event_type: '1',
|
|
21
|
+
ict_cost_sar: 7232,
|
|
22
|
+
margin_sar: 2445.7730000000023,
|
|
23
|
+
revenue: 5232
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
eventType: "SMS",
|
|
27
|
+
access_cost_sar: 345.7730000000023,
|
|
28
|
+
event_type: '2',
|
|
29
|
+
ict_cost_sar: 35654,
|
|
30
|
+
margin_sar: 2445.7730000000023,
|
|
31
|
+
revenue: 55654
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
eventType: "GPRS",
|
|
35
|
+
access_cost_sar: 567.7730000000023,
|
|
36
|
+
event_type: '3',
|
|
37
|
+
ict_cost_sar: 89387,
|
|
38
|
+
margin_sar: 5445.7730000000023,
|
|
39
|
+
revenue: 99387
|
|
40
|
+
}
|
|
41
|
+
];
|
|
42
|
+
this.tableDataSource = [];
|
|
43
|
+
}
|
|
44
|
+
set chartDataSource(value) {
|
|
45
|
+
if (value === undefined || value.length === 0) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
this.isLoader = true;
|
|
50
|
+
if (value.kpiConfig.dataSource && value.kpiConfig.dataSource.length !== 0) {
|
|
51
|
+
const sortedData = value.kpiConfig.dataSource.sort((a, b) => {
|
|
52
|
+
return moment(b.recordDate, "YYYY-MM-DD").diff(moment(a.recordDate, "YYYY-MM-DD"));
|
|
53
|
+
});
|
|
54
|
+
value.kpiConfig.dataSource.forEach(item => item.recordDate = new Date(item.recordDate));
|
|
55
|
+
value.kpiConfig.dataSource.sort((a, b) => b.recordDate - a.recordDate);
|
|
56
|
+
const uniqueEvents = new Map();
|
|
57
|
+
value.kpiConfig.dataSource.forEach(item => {
|
|
58
|
+
if (!uniqueEvents.has(item.eventTypeKey)) {
|
|
59
|
+
uniqueEvents.set(item.eventTypeKey, item);
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
const result = Array.from(uniqueEvents.values());
|
|
63
|
+
this.loadDailyMscVoiceTable(result);
|
|
64
|
+
this.isLoader = false;
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
ngOnInit() {
|
|
71
|
+
}
|
|
72
|
+
loadDailyMscVoiceTable(data) {
|
|
73
|
+
this.tableDataSource = [];
|
|
74
|
+
let dataset = [];
|
|
75
|
+
let column1Name = 'access_cost_sar';
|
|
76
|
+
let column2Name = 'ict_cost_sar';
|
|
77
|
+
let column3Name = 'margin_sar';
|
|
78
|
+
let column4Name = 'revenue';
|
|
79
|
+
let revenueArr = [], interConnectArr = [], accessCostArr = [], marginArr = [];
|
|
80
|
+
for (const [i, v] of Object.entries(data)) {
|
|
81
|
+
if (v[column1Name] == undefined) {
|
|
82
|
+
v[column1Name] = 0;
|
|
83
|
+
}
|
|
84
|
+
if (v[column2Name] == undefined) {
|
|
85
|
+
v[column2Name] = 0;
|
|
86
|
+
}
|
|
87
|
+
if (v[column3Name] == undefined) {
|
|
88
|
+
v[column3Name] = 0;
|
|
89
|
+
}
|
|
90
|
+
if (v[column4Name] == undefined) {
|
|
91
|
+
v[column4Name] = 0;
|
|
92
|
+
}
|
|
93
|
+
accessCostArr.push(v[column1Name]);
|
|
94
|
+
interConnectArr.push(v[column2Name]);
|
|
95
|
+
marginArr.push(v[column3Name]);
|
|
96
|
+
revenueArr.push(v[column4Name]);
|
|
97
|
+
}
|
|
98
|
+
let maxAccessCostVal = Math.max.apply(Math, accessCostArr);
|
|
99
|
+
let minAccessCostVal = Math.min.apply(Math, accessCostArr);
|
|
100
|
+
let maxinterConnectVal = Math.max.apply(Math, interConnectArr);
|
|
101
|
+
let mininterConnectVal = Math.min.apply(Math, interConnectArr);
|
|
102
|
+
let maxmarginVal = Math.max.apply(Math, marginArr);
|
|
103
|
+
let minmarginVal = Math.min.apply(Math, marginArr);
|
|
104
|
+
let maxRevenueVal = Math.max.apply(Math, revenueArr);
|
|
105
|
+
let minRevenueVal = Math.min.apply(Math, revenueArr);
|
|
106
|
+
for (const [i, v] of Object.entries(data)) {
|
|
107
|
+
let r = [];
|
|
108
|
+
let accessCostValue, interConnectValue, marginValue, revenueValue;
|
|
109
|
+
if (v[column1Name] > 0) {
|
|
110
|
+
accessCostValue = this.commonService.scaleNumber(parseFloat(v[column1Name]), maxAccessCostVal, minAccessCostVal, 10, 75);
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
accessCostValue = 0;
|
|
114
|
+
}
|
|
115
|
+
if (v[column2Name] > 0) {
|
|
116
|
+
interConnectValue = this.commonService.scaleNumber(parseFloat(v[column2Name]), maxinterConnectVal, mininterConnectVal, 10, 75);
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
interConnectValue = 0;
|
|
120
|
+
}
|
|
121
|
+
if (v[column3Name] > 0) {
|
|
122
|
+
marginValue = this.commonService.scaleNumber(parseFloat(v[column3Name]), maxmarginVal, minmarginVal, 10, 75);
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
marginValue = 0;
|
|
126
|
+
}
|
|
127
|
+
if (v[column4Name] > 0) {
|
|
128
|
+
revenueValue = this.commonService.scaleNumber(parseFloat(v[column4Name]), maxRevenueVal, minRevenueVal, 10, 75);
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
revenueValue = 0;
|
|
132
|
+
}
|
|
133
|
+
let accessCostBar = this.commonService.createHtml(accessCostValue, this.commonService.reformatNumberWithThousandSeparator(v[column1Name]), '#002E70');
|
|
134
|
+
let interconnectBar = this.commonService.createHtml(interConnectValue, this.commonService.reformatNumberWithThousandSeparator(v[column2Name]), '#F46604');
|
|
135
|
+
let marginBar = this.commonService.createHtml(marginValue, this.commonService.reformatNumberWithThousandSeparator(v[column3Name]), '#3d8706');
|
|
136
|
+
let revenueBar = this.commonService.createHtml(revenueValue, this.commonService.reformatNumberWithThousandSeparator(v[column4Name]), '#ffac42');
|
|
137
|
+
let node = {
|
|
138
|
+
'eventType': this.getEventTypeName(v['eventTypeKey']),
|
|
139
|
+
'access_cost_sar': accessCostBar,
|
|
140
|
+
'margin_sar': marginBar,
|
|
141
|
+
'ict_cost_sar': interconnectBar,
|
|
142
|
+
'revenue': revenueBar,
|
|
143
|
+
};
|
|
144
|
+
this.tableDataSource.push(node);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
getEventTypeName(key) {
|
|
148
|
+
if (key == "1") {
|
|
149
|
+
return "Voice";
|
|
150
|
+
}
|
|
151
|
+
else if (key == "2") {
|
|
152
|
+
return "SMS";
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
return "GPRS";
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
GammaTableWithPercentageComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: GammaTableWithPercentageComponent, deps: [{ token: i1.CommonService }, { token: i2.ToastrService }], target: i0.ɵɵFactoryTarget.Component });
|
|
160
|
+
GammaTableWithPercentageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: GammaTableWithPercentageComponent, selector: "app-gamma-table-with-percentage", inputs: { chartDataSource: "chartDataSource" }, ngImport: i0, template: "<div class=\"mx-2\">\n <ng-container *ngIf=\"isLoader\">\n <app-loader></app-loader>\n </ng-container>\n <ng-container *ngIf=\"!isLoader\">\n <dx-data-grid [columnAutoWidth]=\"true\" [dataSource]=\"tableDataSource\" [selectedRowKeys]=\"[]\"\n [showBorders]=\"true\" [showRowLines]=\"true\" id=\"gridContainer\" [height]=\"370\">\n <dxo-search-panel [highlightCaseSensitive]=\"true\" [visible]=\"true\"></dxo-search-panel>\n <dxo-export [enabled]=\"true\"></dxo-export>\n <dxo-paging [pageSize]=\"7\"></dxo-paging>\n <dxo-pager [showInfo]=\"true\" [showPageSizeSelector]=\"false\">\n </dxo-pager>\n <dxo-selection mode=\"single\"></dxo-selection>\n <dxi-column dataField=\"eventType\"></dxi-column>\n <dxi-column dataField=\"access_cost_sar\" cellTemplate=\"cellTemplate1\"></dxi-column>\n <dxi-column dataField=\"margin_sar\" cellTemplate=\"cellTemplate2\"></dxi-column>\n <dxi-column dataField=\"ict_cost_sar\" cellTemplate=\"cellTemplate3\"></dxi-column>\n <dxi-column dataField=\"revenue\" cellTemplate=\"cellTemplate4\"></dxi-column>\n\n\n <div *dxTemplate=\"let data of 'cellTemplate1'\">\n <div [innerHTML]=\"data.value | contentSafeHtml\"></div>\n </div>\n <div *dxTemplate=\"let data of 'cellTemplate2'\">\n <div [innerHTML]=\"data.value | contentSafeHtml\"></div>\n </div>\n <div *dxTemplate=\"let data of 'cellTemplate3'\">\n <div [innerHTML]=\"data.value | contentSafeHtml\"></div>\n </div>\n <div *dxTemplate=\"let data of 'cellTemplate4'\">\n <div [innerHTML]=\"data.value | contentSafeHtml\"></div>\n </div>\n\n </dx-data-grid>\n </ng-container>\n\n</div>", styles: [""], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }, { kind: "component", type: i5.DxoExportComponent, selector: "dxo-export", inputs: ["backgroundColor", "enabled", "fileName", "formats", "margin", "printingEnabled", "proxyUrl", "svgToCanvas", "allowExportSelectedData", "customizeExcelCell", "excelFilterEnabled", "excelWrapTextEnabled", "ignoreExcelErrors", "texts"] }, { kind: "component", type: i6.DxDataGridComponent, selector: "dx-data-grid", inputs: ["accessKey", "activeStateEnabled", "allowColumnReordering", "allowColumnResizing", "autoNavigateToFocusedRow", "cacheEnabled", "cellHintEnabled", "columnAutoWidth", "columnChooser", "columnFixing", "columnHidingEnabled", "columnMinWidth", "columnResizingMode", "columns", "columnWidth", "customizeColumns", "customizeExportData", "dataRowTemplate", "dataSource", "dateSerializationFormat", "disabled", "editing", "elementAttr", "errorRowEnabled", "export", "filterBuilder", "filterBuilderPopup", "filterPanel", "filterRow", "filterSyncEnabled", "filterValue", "focusedColumnIndex", "focusedRowEnabled", "focusedRowIndex", "focusedRowKey", "focusStateEnabled", "grouping", "groupPanel", "headerFilter", "height", "highlightChanges", "hint", "hoverStateEnabled", "keyboardNavigation", "keyExpr", "loadPanel", "masterDetail", "noDataText", "pager", "paging", "remoteOperations", "renderAsync", "repaintChangesOnly", "rowAlternationEnabled", "rowDragging", "rowTemplate", "rtlEnabled", "scrolling", "searchPanel", "selectedRowKeys", "selection", "selectionFilter", "showBorders", "showColumnHeaders", "showColumnLines", "showRowLines", "sortByGroupSummaryInfo", "sorting", "stateStoring", "summary", "syncLookupFilterValues", "tabIndex", "toolbar", "twoWayBindingEnabled", "visible", "width", "wordWrapEnabled"], outputs: ["onAdaptiveDetailRowPreparing", "onCellClick", "onCellDblClick", "onCellHoverChanged", "onCellPrepared", "onContentReady", "onContextMenuPreparing", "onDataErrorOccurred", "onDisposing", "onEditCanceled", "onEditCanceling", "onEditingStart", "onEditorPrepared", "onEditorPreparing", "onExported", "onExporting", "onFileSaving", "onFocusedCellChanged", "onFocusedCellChanging", "onFocusedRowChanged", "onFocusedRowChanging", "onInitialized", "onInitNewRow", "onKeyDown", "onOptionChanged", "onRowClick", "onRowCollapsed", "onRowCollapsing", "onRowDblClick", "onRowExpanded", "onRowExpanding", "onRowInserted", "onRowInserting", "onRowPrepared", "onRowRemoved", "onRowRemoving", "onRowUpdated", "onRowUpdating", "onRowValidating", "onSaved", "onSaving", "onSelectionChanged", "onToolbarPreparing", "accessKeyChange", "activeStateEnabledChange", "allowColumnReorderingChange", "allowColumnResizingChange", "autoNavigateToFocusedRowChange", "cacheEnabledChange", "cellHintEnabledChange", "columnAutoWidthChange", "columnChooserChange", "columnFixingChange", "columnHidingEnabledChange", "columnMinWidthChange", "columnResizingModeChange", "columnsChange", "columnWidthChange", "customizeColumnsChange", "customizeExportDataChange", "dataRowTemplateChange", "dataSourceChange", "dateSerializationFormatChange", "disabledChange", "editingChange", "elementAttrChange", "errorRowEnabledChange", "exportChange", "filterBuilderChange", "filterBuilderPopupChange", "filterPanelChange", "filterRowChange", "filterSyncEnabledChange", "filterValueChange", "focusedColumnIndexChange", "focusedRowEnabledChange", "focusedRowIndexChange", "focusedRowKeyChange", "focusStateEnabledChange", "groupingChange", "groupPanelChange", "headerFilterChange", "heightChange", "highlightChangesChange", "hintChange", "hoverStateEnabledChange", "keyboardNavigationChange", "keyExprChange", "loadPanelChange", "masterDetailChange", "noDataTextChange", "pagerChange", "pagingChange", "remoteOperationsChange", "renderAsyncChange", "repaintChangesOnlyChange", "rowAlternationEnabledChange", "rowDraggingChange", "rowTemplateChange", "rtlEnabledChange", "scrollingChange", "searchPanelChange", "selectedRowKeysChange", "selectionChange", "selectionFilterChange", "showBordersChange", "showColumnHeadersChange", "showColumnLinesChange", "showRowLinesChange", "sortByGroupSummaryInfoChange", "sortingChange", "stateStoringChange", "summaryChange", "syncLookupFilterValuesChange", "tabIndexChange", "toolbarChange", "twoWayBindingEnabledChange", "visibleChange", "widthChange", "wordWrapEnabledChange"] }, { kind: "component", type: i5.DxiColumnComponent, selector: "dxi-column", inputs: ["alignment", "allowEditing", "allowExporting", "allowFiltering", "allowFixing", "allowGrouping", "allowHeaderFiltering", "allowHiding", "allowReordering", "allowResizing", "allowSearch", "allowSorting", "autoExpandGroup", "buttons", "calculateCellValue", "calculateDisplayValue", "calculateFilterExpression", "calculateGroupValue", "calculateSortValue", "caption", "cellTemplate", "columns", "cssClass", "customizeText", "dataField", "dataType", "editCellTemplate", "editorOptions", "encodeHtml", "falseText", "filterOperations", "filterType", "filterValue", "filterValues", "fixed", "fixedPosition", "format", "formItem", "groupCellTemplate", "groupIndex", "headerCellTemplate", "headerFilter", "hidingPriority", "isBand", "lookup", "minWidth", "name", "ownerBand", "renderAsync", "selectedFilterOperation", "setCellValue", "showEditorAlways", "showInColumnChooser", "showWhenGrouped", "sortIndex", "sortingMethod", "sortOrder", "trueText", "type", "validationRules", "visible", "visibleIndex", "width"], outputs: ["filterValueChange", "filterValuesChange", "groupIndexChange", "selectedFilterOperationChange", "sortIndexChange", "sortOrderChange", "visibleChange", "visibleIndexChange"] }, { kind: "component", type: i5.DxoPagerComponent, selector: "dxo-pager", inputs: ["allowedPageSizes", "displayMode", "infoText", "showInfo", "showNavigationButtons", "showPageSizeSelector", "visible"] }, { kind: "component", type: i5.DxoPagingComponent, selector: "dxo-paging", inputs: ["enabled", "pageIndex", "pageSize"], outputs: ["pageIndexChange", "pageSizeChange"] }, { kind: "component", type: i5.DxoSearchPanelComponent, selector: "dxo-search-panel", inputs: ["highlightCaseSensitive", "highlightSearchText", "placeholder", "searchVisibleColumnsOnly", "text", "visible", "width"], outputs: ["textChange"] }, { kind: "component", type: i5.DxoSelectionComponent, selector: "dxo-selection", inputs: ["allowSelectAll", "deferred", "mode", "selectAllMode", "showCheckBoxesMode", "recursive"] }, { kind: "component", type: i7.LoaderComponent, selector: "app-loader" }, { kind: "pipe", type: i8.contentSafeHtml, name: "contentSafeHtml" }] });
|
|
161
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: GammaTableWithPercentageComponent, decorators: [{
|
|
162
|
+
type: Component,
|
|
163
|
+
args: [{ selector: 'app-gamma-table-with-percentage', template: "<div class=\"mx-2\">\n <ng-container *ngIf=\"isLoader\">\n <app-loader></app-loader>\n </ng-container>\n <ng-container *ngIf=\"!isLoader\">\n <dx-data-grid [columnAutoWidth]=\"true\" [dataSource]=\"tableDataSource\" [selectedRowKeys]=\"[]\"\n [showBorders]=\"true\" [showRowLines]=\"true\" id=\"gridContainer\" [height]=\"370\">\n <dxo-search-panel [highlightCaseSensitive]=\"true\" [visible]=\"true\"></dxo-search-panel>\n <dxo-export [enabled]=\"true\"></dxo-export>\n <dxo-paging [pageSize]=\"7\"></dxo-paging>\n <dxo-pager [showInfo]=\"true\" [showPageSizeSelector]=\"false\">\n </dxo-pager>\n <dxo-selection mode=\"single\"></dxo-selection>\n <dxi-column dataField=\"eventType\"></dxi-column>\n <dxi-column dataField=\"access_cost_sar\" cellTemplate=\"cellTemplate1\"></dxi-column>\n <dxi-column dataField=\"margin_sar\" cellTemplate=\"cellTemplate2\"></dxi-column>\n <dxi-column dataField=\"ict_cost_sar\" cellTemplate=\"cellTemplate3\"></dxi-column>\n <dxi-column dataField=\"revenue\" cellTemplate=\"cellTemplate4\"></dxi-column>\n\n\n <div *dxTemplate=\"let data of 'cellTemplate1'\">\n <div [innerHTML]=\"data.value | contentSafeHtml\"></div>\n </div>\n <div *dxTemplate=\"let data of 'cellTemplate2'\">\n <div [innerHTML]=\"data.value | contentSafeHtml\"></div>\n </div>\n <div *dxTemplate=\"let data of 'cellTemplate3'\">\n <div [innerHTML]=\"data.value | contentSafeHtml\"></div>\n </div>\n <div *dxTemplate=\"let data of 'cellTemplate4'\">\n <div [innerHTML]=\"data.value | contentSafeHtml\"></div>\n </div>\n\n </dx-data-grid>\n </ng-container>\n\n</div>" }]
|
|
164
|
+
}], ctorParameters: function () { return [{ type: i1.CommonService }, { type: i2.ToastrService }]; }, propDecorators: { chartDataSource: [{
|
|
165
|
+
type: Input,
|
|
166
|
+
args: ['chartDataSource']
|
|
167
|
+
}] } });
|
|
168
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FtbWEtdGFibGUtd2l0aC1wZXJjZW50YWdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dhbW1hLWFwcC1jb250cm9sbGVyL3NyYy9saWIvYXBwbGljYXRpb24tY29udHJvbGxlci9zaGFyZWQvYWR2YW5jZWQtY29tcG9uZW50L2dhbW1hLXRhYmxlLXdpdGgtcGVyY2VudGFnZS9nYW1tYS10YWJsZS13aXRoLXBlcmNlbnRhZ2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2FtbWEtYXBwLWNvbnRyb2xsZXIvc3JjL2xpYi9hcHBsaWNhdGlvbi1jb250cm9sbGVyL3NoYXJlZC9hZHZhbmNlZC1jb21wb25lbnQvZ2FtbWEtdGFibGUtd2l0aC1wZXJjZW50YWdlL2dhbW1hLXRhYmxlLXdpdGgtcGVyY2VudGFnZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUV6RCxPQUFPLE1BQU0sTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7OztBQVE5QyxNQUFNLE9BQU8saUNBQWlDO0lBeUU1QyxZQUNTLGFBQTRCLEVBQzNCLE1BQXFCO1FBRHRCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzNCLFdBQU0sR0FBTixNQUFNLENBQWU7UUExRS9CLFNBQUksR0FBRztZQUNMO2dCQUNFLFNBQVMsRUFBRSxPQUFPO2dCQUNsQixlQUFlLEVBQUUsaUJBQWlCO2dCQUNsQyxVQUFVLEVBQUUsR0FBRztnQkFDZixZQUFZLEVBQUUsSUFBSTtnQkFDbEIsVUFBVSxFQUFFLGtCQUFrQjtnQkFDOUIsT0FBTyxFQUFFLElBQUk7YUFFZDtZQUNEO2dCQUNFLFNBQVMsRUFBRSxLQUFLO2dCQUNoQixlQUFlLEVBQUUsaUJBQWlCO2dCQUNsQyxVQUFV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QUMsV0FBVyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUM5SSxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUVoSixJQUFJLElBQUksR0FBRztnQkFDVCxXQUFXLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDckQsaUJBQWlCLEVBQUUsYUFBYTtnQkFDaEMsWUFBWSxFQUFFLFNBQVM7Z0JBQ3ZCLGNBQWMsRUFBRSxlQUFlO2dCQUMvQixTQUFTLEVBQUUsVUFBVTthQUN0QixDQUFDO1lBRUYsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDakM7SUFFSCxDQUFDO0lBR0QsZ0JBQWdCLENBQUMsR0FBRztRQUVsQixJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUU7WUFDZCxPQUFPLE9BQU8sQ0FBQTtTQUNmO2FBQU0sSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFO1lBQ3JCLE9BQU8sS0FBSyxDQUFBO1NBQ2I7YUFBTTtZQUNMLE9BQU8sTUFBTSxDQUFBO1NBQ2Q7SUFDSCxDQUFDOzs4SEE5S1UsaUNBQWlDO2tIQUFqQyxpQ0FBaUMsdUhDVjlDLDQxREFvQ007MkZEMUJPLGlDQUFpQztrQkFMN0MsU0FBUzsrQkFDRSxpQ0FBaUM7Z0lBc0N2QyxlQUFlO3NCQURsQixLQUFLO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVG9hc3RyU2VydmljZSB9IGZyb20gJ25neC10b2FzdHInO1xuaW1wb3J0IG1vbWVudCBmcm9tICcuLy4uLy4uLy4uL21vbWVudC1oZWxwZXInO1xuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvbW1vbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1nYW1tYS10YWJsZS13aXRoLXBlcmNlbnRhZ2UnLFxuICB0ZW1wbGF0ZVVybDogJy4vZ2FtbWEtdGFibGUtd2l0aC1wZXJjZW50YWdlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZ2FtbWEtdGFibGUtd2l0aC1wZXJjZW50YWdlLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgR2FtbWFUYWJsZVdpdGhQZXJjZW50YWdlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgZGF0YSA9IFtcbiAgICB7XG4gICAgICBldmVudFR5cGU6IFwiVm9pY2VcIixcbiAgICAgIGFjY2Vzc19jb3N0X3NhcjogNzY3Ljc3MzAwMDAwMDAwMjMsXG4gICAgICBldmVudF90eXBlOiAnMScsXG4gICAgICBpY3RfY29zdF9zYXI6IDcyMzIsXG4gICAgICBtYXJnaW5fc2FyOiAyNDQ1Ljc3MzAwMDAwMDAwMjMsXG4gICAgICByZXZlbnVlOiA1MjMyXG5cbiAgICB9LFxuICAgIHtcbiAgICAgIGV2ZW50VHlwZTogXCJTTVNcIixcbiAgICAgIGFjY2Vzc19jb3N0X3NhcjogMzQ1Ljc3MzAwMDAwMDAwMjMsXG4gICAgICBldmVudF90eXBlOiAnMicsXG4gICAgICBpY3RfY29zdF9zYXI6IDM1NjU0LFxuICAgICAgbWFyZ2luX3NhcjogMjQ0NS43NzMwMDAwMDAwMDIzLFxuICAgICAgcmV2ZW51ZTogNTU2NTRcblxuICAgIH0sXG4gICAge1xuICAgICAgZXZlbnRUeXBlOiBcIkdQUlNcIixcbiAgICAgIGFjY2Vzc19jb3N0X3NhcjogNTY3Ljc3MzAwMDAwMDAwMjMsXG4gICAgICBldmVudF90eXBlOiAnMycsXG4gICAgICBpY3RfY29zdF9zYXI6IDg5Mzg3LFxuICAgICAgbWFyZ2luX3NhcjogNTQ0NS43NzMwMDAwMDAwMDIzLFxuICAgICAgcmV2ZW51ZTogOTkzODdcblxuICAgIH1cbiAgXVxuXG4gIGlzTG9hZGVyOiBib29sZWFuXG4gIGN1cnJlbnREYXRlRGF0YVxuICBASW5wdXQoJ2NoYXJ0RGF0YVNvdXJjZScpXG4gIHNldCBjaGFydERhdGFTb3VyY2UodmFsdWUpIHtcbiAgICAvLyBjb25zb2xlLmxvZyh2YWx1ZSk7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNMb2FkZXIgPSB0cnVlO1xuXG4gICAgICAvLyB0aGlzLmtleVRvcGFzcyA9IHZhbHVlLmtwaUNvbmZpZy5rZXlUb1Bhc3M7XG4gICAgICBpZiAodmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UgJiYgdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIGNvbnN0IHNvcnRlZERhdGEgPSB2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIG1vbWVudChiLnJlY29yZERhdGUsIFwiWVlZWS1NTS1ERFwiKS5kaWZmKG1vbWVudChhLnJlY29yZERhdGUsIFwiWVlZWS1NTS1ERFwiKSk7XG4gICAgICAgIH0pO1xuICAgICAgICB2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW0gPT4gaXRlbS5yZWNvcmREYXRlID0gbmV3IERhdGUoaXRlbS5yZWNvcmREYXRlKSk7XG4gICAgICAgIHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlLnNvcnQoKGEsIGIpID0+IGIucmVjb3JkRGF0ZSAtIGEucmVjb3JkRGF0ZSk7XG5cbiAgICAgICAgLy8gQ3JlYXRlIGEgbWFwIHRvIHN0b3JlIHRoZSBtb3N0IHJlY2VudCBlbnRyeSBmb3IgZWFjaCB1bmlxdWUgZXZlbnRUeXBlS2V5XG4gICAgICAgIGNvbnN0IHVuaXF1ZUV2ZW50cyA9IG5ldyBNYXAoKTtcblxuICAgICAgICB2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgIGlmICghdW5pcXVlRXZlbnRzLmhhcyhpdGVtLmV2ZW50VHlwZUtleSkpIHtcbiAgICAgICAgICAgIHVuaXF1ZUV2ZW50cy5zZXQoaXRlbS5ldmVudFR5cGVLZXksIGl0ZW0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gQ29udmVydCB0aGUgbWFwIHZhbHVlcyB0byBhbiBhcnJheVxuICAgICAgICBjb25zdCByZXN1bHQgPSBBcnJheS5mcm9tKHVuaXF1ZUV2ZW50cy52YWx1ZXMoKSk7XG4gICAgICAgIC8vIFN0ZXAgMjogR2V0IHRoZSBtb3N0IHJlY2VudCBhbmQgcHJldmlvdXMgZGF0ZXNcbiAgICAgICAgdGhpcy5sb2FkRGFpbHlNc2NWb2ljZVRhYmxlKHJlc3VsdClcblxuICAgICAgICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuXG4gICAgICB9XG5cbiAgICB9XG4gIH1cblxuXG4gIHRhYmxlRGF0YVNvdXJjZTogYW55ID0gW107XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBjb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgdG9hc3RyOiBUb2FzdHJTZXJ2aWNlXG4gICkgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gdGhpcy5sb2FkRGFpbHlNc2NWb2ljZVRhYmxlKHRoaXMuZGF0YSlcbiAgfVxuXG4gIGxvYWREYWlseU1zY1ZvaWNlVGFibGUoZGF0YSkge1xuXG4gICAgdGhpcy50YWJsZURhdGFTb3VyY2UgPSBbXTtcblxuXG4gICAgbGV0IGRhdGFzZXQgPSBbXTtcbiAgICBsZXQgY29sdW1uMU5hbWUgPSAnYWNjZXNzX2Nvc3Rfc2FyJztcbiAgICBsZXQgY29sdW1uMk5hbWUgPSAnaWN0X2Nvc3Rfc2FyJztcbiAgICBsZXQgY29sdW1uM05hbWUgPSAnbWFyZ2luX3Nhcic7XG4gICAgbGV0IGNvbHVtbjROYW1lID0gJ3JldmVudWUnO1xuICAgIGxldCByZXZlbnVlQXJyID0gW10sIGludGVyQ29ubmVjdEFyciA9IFtdLCBhY2Nlc3NDb3N0QXJyID0gW10sIG1hcmdpbkFyciA9IFtdO1xuICAgIGZvciAoY29uc3QgW2ksIHZdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGEpKSB7XG4gICAgICBpZiAodltjb2x1bW4xTmFtZV0gPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZbY29sdW1uMU5hbWVdID0gMDtcbiAgICAgIH1cbiAgICAgIGlmICh2W2NvbHVtbjJOYW1lXSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdltjb2x1bW4yTmFtZV0gPSAwO1xuICAgICAgfVxuICAgICAgaWYgKHZbY29sdW1uM05hbWVdID09IHVuZGVmaW5lZCkge1xuICAgICAgICB2W2NvbHVtbjNOYW1lXSA9IDA7XG4gICAgICB9XG4gICAgICBpZiAodltjb2x1bW40TmFtZV0gPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZbY29sdW1uNE5hbWVdID0gMDtcbiAgICAgIH1cbiAgICAgIGFjY2Vzc0Nvc3RBcnIucHVzaCh2W2NvbHVtbjFOYW1lXSk7XG4gICAgICBpbnRlckNvbm5lY3RBcnIucHVzaCh2W2NvbHVtbjJOYW1lXSk7XG4gICAgICBtYXJnaW5BcnIucHVzaCh2W2NvbHVtbjNOYW1lXSk7XG4gICAgICByZXZlbnVlQXJyLnB1c2godltjb2x1bW40TmFtZV0pO1xuICAgIH1cbiAgICBsZXQgbWF4QWNjZXNzQ29zdFZhbCA9IE1hdGgubWF4LmFwcGx5KE1hdGgsIGFjY2Vzc0Nvc3RBcnIpO1xuICAgIGxldCBtaW5BY2Nlc3NDb3N0VmFsID0gTWF0aC5taW4uYXBwbHkoTWF0aCwgYWNjZXNzQ29zdEFycik7XG4gICAgbGV0IG1heGludGVyQ29ubmVjdFZhbCA9IE1hdGgubWF4LmFwcGx5KE1hdGgsIGludGVyQ29ubmVjdEFycik7XG4gICAgbGV0IG1pbmludGVyQ29ubmVjdFZhbCA9IE1hdGgubWluLmFwcGx5KE1hdGgsIGludGVyQ29ubmVjdEFycik7XG4gICAgbGV0IG1heG1hcmdpblZhbCA9IE1hdGgubWF4LmFwcGx5KE1hdGgsIG1hcmdpbkFycik7XG4gICAgbGV0IG1pbm1hcmdpblZhbCA9IE1hdGgubWluLmFwcGx5KE1hdGgsIG1hcmdpbkFycik7XG4gICAgbGV0IG1heFJldmVudWVWYWwgPSBNYXRoLm1heC5hcHBseShNYXRoLCByZXZlbnVlQXJyKTtcbiAgICBsZXQgbWluUmV2ZW51ZVZhbCA9IE1hdGgubWluLmFwcGx5KE1hdGgsIHJldmVudWVBcnIpO1xuXG5cbiAgICBmb3IgKGNvbnN0IFtpLCB2XSBvZiBPYmplY3QuZW50cmllcyhkYXRhKSkge1xuICAgICAgbGV0IHIgPSBbXTtcbiAgICAgIGxldCBhY2Nlc3NDb3N0VmFsdWUsIGludGVyQ29ubmVjdFZhbHVlLCBtYXJnaW5WYWx1ZSwgcmV2ZW51ZVZhbHVlO1xuXG4gICAgICBpZiAodltjb2x1bW4xTmFtZV0gPiAwKSB7XG4gICAgICAgIGFjY2Vzc0Nvc3RWYWx1ZSA9IHRoaXMuY29tbW9uU2VydmljZS5zY2FsZU51bWJlcihwYXJzZUZsb2F0KHZbY29sdW1uMU5hbWVdKSwgbWF4QWNjZXNzQ29zdFZhbCwgbWluQWNjZXNzQ29zdFZhbCwgMTAsIDc1KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFjY2Vzc0Nvc3RWYWx1ZSA9IDA7XG4gICAgICB9XG4gICAgICBpZiAodltjb2x1bW4yTmFtZV0gPiAwKSB7XG4gICAgICAgIGludGVyQ29ubmVjdFZhbHVlID0gdGhpcy5jb21tb25TZXJ2aWNlLnNjYWxlTnVtYmVyKHBhcnNlRmxvYXQodltjb2x1bW4yTmFtZV0pLCBtYXhpbnRlckNvbm5lY3RWYWwsIG1pbmludGVyQ29ubmVjdFZhbCwgMTAsIDc1KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGludGVyQ29ubmVjdFZhbHVlID0gMDtcbiAgICAgIH1cbiAgICAgIGlmICh2W2NvbHVtbjNOYW1lXSA+IDApIHtcbiAgICAgICAgbWFyZ2luVmFsdWUgPSB0aGlzLmNvbW1vblNlcnZpY2Uuc2NhbGVOdW1iZXIocGFyc2VGbG9hdCh2W2NvbHVtbjNOYW1lXSksIG1heG1hcmdpblZhbCwgbWlubWFyZ2luVmFsLCAxMCwgNzUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWFyZ2luVmFsdWUgPSAwO1xuICAgICAgfVxuICAgICAgaWYgKHZbY29sdW1uNE5hbWVdID4gMCkge1xuICAgICAgICByZXZlbnVlVmFsdWUgPSB0aGlzLmNvbW1vblNlcnZpY2Uuc2NhbGVOdW1iZXIocGFyc2VGbG9hdCh2W2NvbHVtbjROYW1lXSksIG1heFJldmVudWVWYWwsIG1pblJldmVudWVWYWwsIDEwLCA3NSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXZlbnVlVmFsdWUgPSAwO1xuICAgICAgfVxuXG4gICAgICBsZXQgYWNjZXNzQ29zdEJhciA9IHRoaXMuY29tbW9uU2VydmljZS5jcmVhdGVIdG1sKGFjY2Vzc0Nvc3RWYWx1ZSwgdGhpcy5jb21tb25TZXJ2aWNlLnJlZm9ybWF0TnVtYmVyV2l0aFRob3VzYW5kU2VwYXJhdG9yKHZbY29sdW1uMU5hbWVdKSwgJyMwMDJFNzAnKTtcbiAgICAgIGxldCBpbnRlcmNvbm5lY3RCYXIgPSB0aGlzLmNvbW1vblNlcnZpY2UuY3JlYXRlSHRtbChpbnRlckNvbm5lY3RWYWx1ZSwgdGhpcy5jb21tb25TZXJ2aWNlLnJlZm9ybWF0TnVtYmVyV2l0aFRob3VzYW5kU2VwYXJhdG9yKHZbY29sdW1uMk5hbWVdKSwgJyNGNDY2MDQnKTtcbiAgICAgIGxldCBtYXJnaW5CYXIgPSB0aGlzLmNvbW1vblNlcnZpY2UuY3JlYXRlSHRtbChtYXJnaW5WYWx1ZSwgdGhpcy5jb21tb25TZXJ2aWNlLnJlZm9ybWF0TnVtYmVyV2l0aFRob3VzYW5kU2VwYXJhdG9yKHZbY29sdW1uM05hbWVdKSwgJyMzZDg3MDYnKTtcbiAgICAgIGxldCByZXZlbnVlQmFyID0gdGhpcy5jb21tb25TZXJ2aWNlLmNyZWF0ZUh0bWwocmV2ZW51ZVZhbHVlLCB0aGlzLmNvbW1vblNlcnZpY2UucmVmb3JtYXROdW1iZXJXaXRoVGhvdXNhbmRTZXBhcmF0b3Iodltjb2x1bW40TmFtZV0pLCAnI2ZmYWM0MicpO1xuXG4gICAgICBsZXQgbm9kZSA9IHtcbiAgICAgICAgJ2V2ZW50VHlwZSc6IHRoaXMuZ2V0RXZlbnRUeXBlTmFtZSh2WydldmVudFR5cGVLZXknXSksXG4gICAgICAgICdhY2Nlc3NfY29zdF9zYXInOiBhY2Nlc3NDb3N0QmFyLFxuICAgICAgICAnbWFyZ2luX3Nhcic6IG1hcmdpbkJhcixcbiAgICAgICAgJ2ljdF9jb3N0X3Nhcic6IGludGVyY29ubmVjdEJhcixcbiAgICAgICAgJ3JldmVudWUnOiByZXZlbnVlQmFyLFxuICAgICAgfTtcblxuICAgICAgdGhpcy50YWJsZURhdGFTb3VyY2UucHVzaChub2RlKTtcbiAgICB9XG5cbiAgfVxuXG5cbiAgZ2V0RXZlbnRUeXBlTmFtZShrZXkpIHtcblxuICAgIGlmIChrZXkgPT0gXCIxXCIpIHtcbiAgICAgIHJldHVybiBcIlZvaWNlXCJcbiAgICB9IGVsc2UgaWYgKGtleSA9PSBcIjJcIikge1xuICAgICAgcmV0dXJuIFwiU01TXCJcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFwiR1BSU1wiXG4gICAgfVxuICB9XG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJteC0yXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzTG9hZGVyXCI+XG4gICAgICAgIDxhcHAtbG9hZGVyPjwvYXBwLWxvYWRlcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzTG9hZGVyXCI+XG4gICAgICAgIDxkeC1kYXRhLWdyaWQgW2NvbHVtbkF1dG9XaWR0aF09XCJ0cnVlXCIgW2RhdGFTb3VyY2VdPVwidGFibGVEYXRhU291cmNlXCIgW3NlbGVjdGVkUm93S2V5c109XCJbXVwiXG4gICAgICAgICAgICBbc2hvd0JvcmRlcnNdPVwidHJ1ZVwiIFtzaG93Um93TGluZXNdPVwidHJ1ZVwiIGlkPVwiZ3JpZENvbnRhaW5lclwiIFtoZWlnaHRdPVwiMzcwXCI+XG4gICAgICAgICAgICA8ZHhvLXNlYXJjaC1wYW5lbCBbaGlnaGxpZ2h0Q2FzZVNlbnNpdGl2ZV09XCJ0cnVlXCIgW3Zpc2libGVdPVwidHJ1ZVwiPjwvZHhvLXNlYXJjaC1wYW5lbD5cbiAgICAgICAgICAgIDxkeG8tZXhwb3J0IFtlbmFibGVkXT1cInRydWVcIj48L2R4by1leHBvcnQ+XG4gICAgICAgICAgICA8ZHhvLXBhZ2luZyBbcGFnZVNpemVdPVwiN1wiPjwvZHhvLXBhZ2luZz5cbiAgICAgICAgICAgIDxkeG8tcGFnZXIgW3Nob3dJbmZvXT1cInRydWVcIiBbc2hvd1BhZ2VTaXplU2VsZWN0b3JdPVwiZmFsc2VcIj5cbiAgICAgICAgICAgIDwvZHhvLXBhZ2VyPlxuICAgICAgICAgICAgPGR4by1zZWxlY3Rpb24gbW9kZT1cInNpbmdsZVwiPjwvZHhvLXNlbGVjdGlvbj5cbiAgICAgICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cImV2ZW50VHlwZVwiPjwvZHhpLWNvbHVtbj5cbiAgICAgICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cImFjY2Vzc19jb3N0X3NhclwiIGNlbGxUZW1wbGF0ZT1cImNlbGxUZW1wbGF0ZTFcIj48L2R4aS1jb2x1bW4+XG4gICAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJtYXJnaW5fc2FyXCIgY2VsbFRlbXBsYXRlPVwiY2VsbFRlbXBsYXRlMlwiPjwvZHhpLWNvbHVtbj5cbiAgICAgICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cImljdF9jb3N0X3NhclwiIGNlbGxUZW1wbGF0ZT1cImNlbGxUZW1wbGF0ZTNcIj48L2R4aS1jb2x1bW4+XG4gICAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJyZXZlbnVlXCIgY2VsbFRlbXBsYXRlPVwiY2VsbFRlbXBsYXRlNFwiPjwvZHhpLWNvbHVtbj5cblxuXG4gICAgICAgICAgICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IGRhdGEgb2YgJ2NlbGxUZW1wbGF0ZTEnXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBbaW5uZXJIVE1MXT1cImRhdGEudmFsdWUgfCBjb250ZW50U2FmZUh0bWxcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAqZHhUZW1wbGF0ZT1cImxldCBkYXRhIG9mICdjZWxsVGVtcGxhdGUyJ1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgW2lubmVySFRNTF09XCJkYXRhLnZhbHVlIHwgY29udGVudFNhZmVIdG1sXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgKmR4VGVtcGxhdGU9XCJsZXQgZGF0YSBvZiAnY2VsbFRlbXBsYXRlMydcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IFtpbm5lckhUTUxdPVwiZGF0YS52YWx1ZSB8IGNvbnRlbnRTYWZlSHRtbFwiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IGRhdGEgb2YgJ2NlbGxUZW1wbGF0ZTQnXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBbaW5uZXJIVE1MXT1cImRhdGEudmFsdWUgfCBjb250ZW50U2FmZUh0bWxcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwvZHgtZGF0YS1ncmlkPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG48L2Rpdj4iXX0=
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import moment from './../../../moment-helper';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "../../../common";
|
|
5
|
+
import * as i2 from "@angular/common";
|
|
6
|
+
import * as i3 from "../../loader/loader.component";
|
|
7
|
+
export class GammaTodayPreviousComponent {
|
|
8
|
+
constructor(cdr, commonService) {
|
|
9
|
+
this.cdr = cdr;
|
|
10
|
+
this.commonService = commonService;
|
|
11
|
+
}
|
|
12
|
+
set chartDataSource(value) {
|
|
13
|
+
this.objectdataSource = value;
|
|
14
|
+
if (this.objectdataSource === undefined || this.objectdataSource.length === 0) {
|
|
15
|
+
this.isChartvisible = false;
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
this.isLoader = true;
|
|
20
|
+
if (value.kpiConfig.dataSource && value.kpiConfig.dataSource.length !== 0) {
|
|
21
|
+
this.page_config = value;
|
|
22
|
+
const sortedData = value.kpiConfig.dataSource.sort((a, b) => {
|
|
23
|
+
return moment(b.recordDate, "YYYY-MM-DD").diff(moment(a.recordDate, "YYYY-MM-DD"));
|
|
24
|
+
});
|
|
25
|
+
this.currentDateData = sortedData[0];
|
|
26
|
+
this.prevousDaysData = sortedData[1];
|
|
27
|
+
let calValue = Math.abs((parseInt(this.getDynamicValue(this.currentDateData)) - parseInt(this.getDynamicValue(this.prevousDaysData))) / parseInt(this.getDynamicValue(this.currentDateData)));
|
|
28
|
+
this.calculatedValue = this.commonService.reformatNumberWithThousandSeparatorV4(calValue, 3);
|
|
29
|
+
this.isLoader = false;
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
ngOnInit() {
|
|
36
|
+
}
|
|
37
|
+
getDynamicValue(data) {
|
|
38
|
+
const keys = Object.keys(data);
|
|
39
|
+
const dynamicKey = keys.find(key => !key.toLowerCase().includes('date'));
|
|
40
|
+
if (dynamicKey) {
|
|
41
|
+
let value = data[dynamicKey];
|
|
42
|
+
const numericValue = Number(value);
|
|
43
|
+
if (!isNaN(numericValue)) {
|
|
44
|
+
return this.commonService.abbreviateNumber(numericValue);
|
|
45
|
+
}
|
|
46
|
+
return value;
|
|
47
|
+
}
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
formatNumber(value) {
|
|
51
|
+
if (value >= 1e9) {
|
|
52
|
+
return (value / 1e9).toFixed(1) + 'B';
|
|
53
|
+
}
|
|
54
|
+
else if (value >= 1e6) {
|
|
55
|
+
return (value / 1e6).toFixed(1) + 'M';
|
|
56
|
+
}
|
|
57
|
+
else if (value >= 1e3) {
|
|
58
|
+
return (value / 1e3).toFixed(1) + 'K';
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
return value.toString();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
GammaTodayPreviousComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: GammaTodayPreviousComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.CommonService }], target: i0.ɵɵFactoryTarget.Component });
|
|
66
|
+
GammaTodayPreviousComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: GammaTodayPreviousComponent, selector: "app-gamma-today-previous", inputs: { chartDataSource: "chartDataSource" }, ngImport: i0, template: "<div class=\"flex justify-center items-start bg-gray-800 p-3 mx-2 text-center\">\n <ng-container *ngIf=\"isLoader\">\n <app-loader></app-loader>\n </ng-container>\n <ng-container *ngIf=\"!isLoader\">\n <div class=\"w-full\">\n <div class=\"text-teal-400 text-5xl font-semibold\">{{ getDynamicValue(currentDateData) }}</div>\n <div class=\"text-gray-400 text-sm font-light m-2\">\n Prevous: {{ getDynamicValue(prevousDaysData) }}\n <span class=\"text-teal-400\">({{calculatedValue}}%)</span>\n </div>\n </div>\n\n </ng-container>\n\n</div>", styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.LoaderComponent, selector: "app-loader" }] });
|
|
67
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: GammaTodayPreviousComponent, decorators: [{
|
|
68
|
+
type: Component,
|
|
69
|
+
args: [{ selector: 'app-gamma-today-previous', template: "<div class=\"flex justify-center items-start bg-gray-800 p-3 mx-2 text-center\">\n <ng-container *ngIf=\"isLoader\">\n <app-loader></app-loader>\n </ng-container>\n <ng-container *ngIf=\"!isLoader\">\n <div class=\"w-full\">\n <div class=\"text-teal-400 text-5xl font-semibold\">{{ getDynamicValue(currentDateData) }}</div>\n <div class=\"text-gray-400 text-sm font-light m-2\">\n Prevous: {{ getDynamicValue(prevousDaysData) }}\n <span class=\"text-teal-400\">({{calculatedValue}}%)</span>\n </div>\n </div>\n\n </ng-container>\n\n</div>" }]
|
|
70
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.CommonService }]; }, propDecorators: { chartDataSource: [{
|
|
71
|
+
type: Input,
|
|
72
|
+
args: ['chartDataSource']
|
|
73
|
+
}] } });
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FtbWEtdG9kYXktcHJldmlvdXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2FtbWEtYXBwLWNvbnRyb2xsZXIvc3JjL2xpYi9hcHBsaWNhdGlvbi1jb250cm9sbGVyL3NoYXJlZC9hZHZhbmNlZC1jb21wb25lbnQvZ2FtbWEtdG9kYXktcHJldmlvdXMvZ2FtbWEtdG9kYXktcHJldmlvdXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2FtbWEtYXBwLWNvbnRyb2xsZXIvc3JjL2xpYi9hcHBsaWNhdGlvbi1jb250cm9sbGVyL3NoYXJlZC9hZHZhbmNlZC1jb21wb25lbnQvZ2FtbWEtdG9kYXktcHJldmlvdXMvZ2FtbWEtdG9kYXktcHJldmlvdXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzVFLE9BQU8sTUFBTSxNQUFNLDBCQUEwQixDQUFDOzs7OztBQVE5QyxNQUFNLE9BQU8sMkJBQTJCO0lBU3RDLFlBQ1UsR0FBc0IsRUFDdkIsYUFBNEI7UUFEM0IsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdkIsa0JBQWEsR0FBYixhQUFhLENBQWU7SUFDakMsQ0FBQztJQUVMLElBQ0ksZUFBZSxDQUFDLEtBQUs7UUFDdkIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUU5QixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDN0UsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7WUFDNUIsT0FBTztTQUNSO2FBQU07WUFDTCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUVyQixJQUFJ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O2tCQUx2QyxTQUFTOytCQUNFLDBCQUEwQjtvSUFtQmhDLGVBQWU7c0JBRGxCLEtBQUs7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IG1vbWVudCBmcm9tICcuLy4uLy4uLy4uL21vbWVudC1oZWxwZXInO1xuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvbW1vbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1nYW1tYS10b2RheS1wcmV2aW91cycsXG4gIHRlbXBsYXRlVXJsOiAnLi9nYW1tYS10b2RheS1wcmV2aW91cy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2dhbW1hLXRvZGF5LXByZXZpb3VzLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgR2FtbWFUb2RheVByZXZpb3VzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgLy8gY2hhcnRfYXR0ci5sZWdlbmRbMF1cbiAgb2JqZWN0ZGF0YVNvdXJjZTogYW55O1xuICBpc0NoYXJ0dmlzaWJsZTogYm9vbGVhbjtcbiAgaXNMb2FkZXI6IGJvb2xlYW47XG4gIHBhZ2VfY29uZmlnOiBhbnk7XG4gIGN1cnJlbnREYXRlRGF0YTogYW55O1xuICBwcmV2b3VzRGF5c0RhdGE6IGFueTtcbiAgY2FsY3VsYXRlZFZhbHVlOiBhbnk7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwdWJsaWMgY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZVxuICApIHsgfVxuXG4gIEBJbnB1dCgnY2hhcnREYXRhU291cmNlJylcbiAgc2V0IGNoYXJ0RGF0YVNvdXJjZSh2YWx1ZSkge1xuICAgIHRoaXMub2JqZWN0ZGF0YVNvdXJjZSA9IHZhbHVlO1xuICAgIC8vIGNvbnNvbGUubG9nKHZhbHVlKTtcbiAgICBpZiAodGhpcy5vYmplY3RkYXRhU291cmNlID09PSB1bmRlZmluZWQgfHwgdGhpcy5vYmplY3RkYXRhU291cmNlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5pc0NoYXJ0dmlzaWJsZSA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzTG9hZGVyID0gdHJ1ZTtcbiAgICAgIC8vIHRoaXMua2V5VG9wYXNzID0gdmFsdWUua3BpQ29uZmlnLmtleVRvUGFzcztcbiAgICAgIGlmICh2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZSAmJiB2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZS5sZW5ndGggIT09IDApIHtcbiAgICAgICAgdGhpcy5wYWdlX2NvbmZpZyA9IHZhbHVlO1xuICAgICAgICBjb25zdCBzb3J0ZWREYXRhID0gdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2Uuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgIHJldHVybiBtb21lbnQoYi5yZWNvcmREYXRlLCBcIllZWVktTU0tRERcIikuZGlmZihtb21lbnQoYS5yZWNvcmREYXRlLCBcIllZWVktTU0tRERcIikpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBTdGVwIDI6IEdldCB0aGUgbW9zdCByZWNlbnQgYW5kIHByZXZpb3VzIGRhdGVzXG4gICAgICAgIHRoaXMuY3VycmVudERhdGVEYXRhID0gc29ydGVkRGF0YVswXTtcbiAgICAgICAgdGhpcy5wcmV2b3VzRGF5c0RhdGEgPSBzb3J0ZWREYXRhWzFdO1xuICAgICAgICBsZXQgY2FsVmFsdWUgPSBNYXRoLmFicygocGFyc2VJbnQodGhpcy5nZXREeW5hbWljVmFsdWUodGhpcy5jdXJyZW50RGF0ZURhdGEpKSAtIHBhcnNlSW50KHRoaXMuZ2V0RHluYW1pY1ZhbHVlKHRoaXMucHJldm91c0RheXNEYXRhKSkpIC8gcGFyc2VJbnQodGhpcy5nZXREeW5hbWljVmFsdWUodGhpcy5jdXJyZW50RGF0ZURhdGEpKSk7XG4gICAgICAgIHRoaXMuY2FsY3VsYXRlZFZhbHVlID0gdGhpcy5jb21tb25TZXJ2aWNlLnJlZm9ybWF0TnVtYmVyV2l0aFRob3VzYW5kU2VwYXJhdG9yVjQoY2FsVmFsdWUsIDMpXG4gICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG5cbiAgICAgIH1cblxuICAgIH1cbiAgfVxuXG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gIH1cblxuICBnZXREeW5hbWljVmFsdWUoZGF0YTogYW55KTogbnVtYmVyIHwgc3RyaW5nIHwgYW55IHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZGF0YSk7XG4gICAgY29uc3QgZHluYW1pY0tleSA9IGtleXMuZmluZChrZXkgPT4gIWtleS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdkYXRlJykpO1xuICAgIGlmIChkeW5hbWljS2V5KSB7XG4gICAgICBsZXQgdmFsdWUgPSBkYXRhW2R5bmFtaWNLZXldO1xuICAgICAgY29uc3QgbnVtZXJpY1ZhbHVlID0gTnVtYmVyKHZhbHVlKTtcbiAgICAgIGlmICghaXNOYU4obnVtZXJpY1ZhbHVlKSkge1xuICAgICAgICAvLyBsZXQgY2FsX251bWJlciA9IE1hdGguYWJzKG51bWVyaWNWYWx1ZSlcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tbW9uU2VydmljZS5hYmJyZXZpYXRlTnVtYmVyKG51bWVyaWNWYWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGZvcm1hdE51bWJlcih2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA+PSAxZTkpIHtcbiAgICAgIHJldHVybiAodmFsdWUgLyAxZTkpLnRvRml4ZWQoMSkgKyAnQic7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA+PSAxZTYpIHtcbiAgICAgIHJldHVybiAodmFsdWUgLyAxZTYpLnRvRml4ZWQoMSkgKyAnTSc7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA+PSAxZTMpIHtcbiAgICAgIHJldHVybiAodmFsdWUgLyAxZTMpLnRvRml4ZWQoMSkgKyAnSyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtc3RhcnQgYmctZ3JheS04MDAgcC0zIG14LTIgdGV4dC1jZW50ZXJcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNMb2FkZXJcIj5cbiAgICAgICAgPGFwcC1sb2FkZXI+PC9hcHAtbG9hZGVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNMb2FkZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtdGVhbC00MDAgdGV4dC01eGwgZm9udC1zZW1pYm9sZFwiPnt7IGdldER5bmFtaWNWYWx1ZShjdXJyZW50RGF0ZURhdGEpIH19PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1ncmF5LTQwMCB0ZXh0LXNtIGZvbnQtbGlnaHQgbS0yXCI+XG4gICAgICAgICAgICAgICAgUHJldm91czoge3sgZ2V0RHluYW1pY1ZhbHVlKHByZXZvdXNEYXlzRGF0YSkgfX1cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtdGVhbC00MDBcIj4oe3tjYWxjdWxhdGVkVmFsdWV9fSUpPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgPC9uZy1jb250YWluZXI+XG5cbjwvZGl2PiJdfQ==
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output, ViewChild, } 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 "../../loader/loader.component";
|
|
6
|
+
export class GoogleGeoMapComponent {
|
|
7
|
+
constructor(commonService) {
|
|
8
|
+
this.commonService = commonService;
|
|
9
|
+
this.getTableConfigOutPut = new EventEmitter();
|
|
10
|
+
this.oRowClick = new EventEmitter();
|
|
11
|
+
this.onrightClickContextSelection = new EventEmitter();
|
|
12
|
+
this.rightClickEnable = true;
|
|
13
|
+
}
|
|
14
|
+
set chartDataSource(value) {
|
|
15
|
+
console.log(value, 'chartDataSource for geo chart');
|
|
16
|
+
if (value === undefined || value.length === 0) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
this.isLoader = true;
|
|
21
|
+
this.page_config = value;
|
|
22
|
+
this.page_parms = value.titleParams;
|
|
23
|
+
if (value.kpiConfig.dataSource && value.kpiConfig.dataSource.length !== 0) {
|
|
24
|
+
if (value.kpiConfig.formate == "monthly") {
|
|
25
|
+
this.tootTipColumn = value.kpiConfig.dataConfig.chart_config;
|
|
26
|
+
let data = value.kpiConfig.dataSource;
|
|
27
|
+
this.chartHeight = `${value.kpiConfig.dataConfig.size}px`;
|
|
28
|
+
this.chartType = value.kpiConfig.dataConfig.chartType;
|
|
29
|
+
this.bacgroundColor =
|
|
30
|
+
value.kpiConfig.dataConfig.backgroundColor;
|
|
31
|
+
this.mapColors = value.kpiConfig.dataConfig.colors;
|
|
32
|
+
const formattedData = [
|
|
33
|
+
[
|
|
34
|
+
value.kpiConfig.dataConfig["argumentField"],
|
|
35
|
+
value.kpiConfig.dataConfig["chartValueField"],
|
|
36
|
+
{ type: 'string', role: 'tooltip', 'p': { 'html': true } }
|
|
37
|
+
],
|
|
38
|
+
].concat(data.map((item) => {
|
|
39
|
+
const tooltip = this.getTooltip(item);
|
|
40
|
+
return [
|
|
41
|
+
item[value.kpiConfig.dataConfig["argumentField"]],
|
|
42
|
+
item[value.kpiConfig.dataConfig["chartValueField"]],
|
|
43
|
+
tooltip
|
|
44
|
+
];
|
|
45
|
+
}));
|
|
46
|
+
this.charData = formattedData;
|
|
47
|
+
setTimeout(() => {
|
|
48
|
+
this.isLoader = false;
|
|
49
|
+
this.loadGoogleCharts();
|
|
50
|
+
}, 200);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
ngOnInit() { }
|
|
56
|
+
ngAfterViewInit() {
|
|
57
|
+
}
|
|
58
|
+
loadGoogleCharts() {
|
|
59
|
+
google.charts.load("current", {
|
|
60
|
+
packages: [this.chartType],
|
|
61
|
+
});
|
|
62
|
+
google.charts.setOnLoadCallback(this.drawChart.bind(this));
|
|
63
|
+
}
|
|
64
|
+
drawChart() {
|
|
65
|
+
const data = google.visualization.arrayToDataTable(this.charData);
|
|
66
|
+
const options = {
|
|
67
|
+
backgroundColor: this.bacgroundColor,
|
|
68
|
+
tooltip: { isHtml: true },
|
|
69
|
+
colorAxis: { colors: this.mapColors }
|
|
70
|
+
};
|
|
71
|
+
const chart = new google.visualization.GeoChart(this.inRoamerGeoChart.nativeElement);
|
|
72
|
+
this.inRoamerGeoChart.nativeElement.style.height = '250px';
|
|
73
|
+
chart.draw(data, options);
|
|
74
|
+
}
|
|
75
|
+
getTooltip(data) {
|
|
76
|
+
let toolTipData = "";
|
|
77
|
+
this.tootTipColumn.forEach((element) => {
|
|
78
|
+
if (typeof data[element.dataField] === 'number') {
|
|
79
|
+
toolTipData +=
|
|
80
|
+
"<div class='inline'><b>" +
|
|
81
|
+
element.caption +
|
|
82
|
+
":</b></div> " +
|
|
83
|
+
this.commonService.roundOffTillTwo(data[element.dataField], 2) +
|
|
84
|
+
"<br />";
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
toolTipData +=
|
|
88
|
+
"<div class='inline'><b>" +
|
|
89
|
+
element.caption +
|
|
90
|
+
":</b></div> " +
|
|
91
|
+
data[element.dataField] +
|
|
92
|
+
"<br />";
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
return toolTipData;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
GoogleGeoMapComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: GoogleGeoMapComponent, deps: [{ token: i1.CommonService }], target: i0.ɵɵFactoryTarget.Component });
|
|
99
|
+
GoogleGeoMapComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: GoogleGeoMapComponent, selector: "app-google-geo-map", inputs: { rightClickEnable: "rightClickEnable", chartDataSource: "chartDataSource" }, outputs: { getTableConfigOutPut: "getTableConfigOutPut", oRowClick: "oRowClick", onrightClickContextSelection: "onrightClickContextSelection" }, viewQueries: [{ propertyName: "inRoamerGeoChart", first: true, predicate: ["inRommerGeoChart"], descendants: true }], ngImport: i0, template: "\n<div class=\"mx-2 bg-gray-800\">\n <ng-container *ngIf=\"isLoader\">\n <div class=\"flex justify-center items-start bg-gray-800 p-2\">\n <app-loader></app-loader>\n </div>\n </ng-container>\n\n <div class=\"mx-2 pb-2\">\n\n <ng-container>\n <div id=\"regions_div\" #inRommerGeoChart style=\"width: 100%\" ></div> \n </ng-container>\n \n \n\n </div>\n\n\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.LoaderComponent, selector: "app-loader" }] });
|
|
100
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: GoogleGeoMapComponent, decorators: [{
|
|
101
|
+
type: Component,
|
|
102
|
+
args: [{ selector: 'app-google-geo-map', template: "\n<div class=\"mx-2 bg-gray-800\">\n <ng-container *ngIf=\"isLoader\">\n <div class=\"flex justify-center items-start bg-gray-800 p-2\">\n <app-loader></app-loader>\n </div>\n </ng-container>\n\n <div class=\"mx-2 pb-2\">\n\n <ng-container>\n <div id=\"regions_div\" #inRommerGeoChart style=\"width: 100%\" ></div> \n </ng-container>\n \n \n\n </div>\n\n\n</div>\n" }]
|
|
103
|
+
}], ctorParameters: function () { return [{ type: i1.CommonService }]; }, propDecorators: { inRoamerGeoChart: [{
|
|
104
|
+
type: ViewChild,
|
|
105
|
+
args: ["inRommerGeoChart"]
|
|
106
|
+
}], getTableConfigOutPut: [{
|
|
107
|
+
type: Output
|
|
108
|
+
}], oRowClick: [{
|
|
109
|
+
type: Output
|
|
110
|
+
}], onrightClickContextSelection: [{
|
|
111
|
+
type: Output
|
|
112
|
+
}], rightClickEnable: [{
|
|
113
|
+
type: Input
|
|
114
|
+
}], chartDataSource: [{
|
|
115
|
+
type: Input,
|
|
116
|
+
args: ["chartDataSource"]
|
|
117
|
+
}] } });
|
|
118
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29vZ2xlLWdlby1tYXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2FtbWEtYXBwLWNvbnRyb2xsZXIvc3JjL2xpYi9hcHBsaWNhdGlvbi1jb250cm9sbGVyL3NoYXJlZC9hZHZhbmNlZC1jb21wb25lbnQvZ29vZ2xlLWdlby1tYXAvZ29vZ2xlLWdlby1tYXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2FtbWEtYXBwLWNvbnRyb2xsZXIvc3JjL2xpYi9hcHBsaWNhdGlvbi1jb250cm9sbGVyL3NoYXJlZC9hZHZhbmNlZC1jb21wb25lbnQvZ29vZ2xlLWdlby1tYXAvZ29vZ2xlLWdlby1tYXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7Ozs7O0FBU3ZCLE1BQU0sT0FBTyxxQkFBcUI7SUFxRWhDLFlBQW1CLGFBQTRCO1FBQTVCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBN0Q5Qix5QkFBb0IsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM3RCxjQUFTLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDbEQsaUNBQTRCLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDN0UscUJBQWdCLEdBQVksSUFBSSxDQUFDO0lBMERTLENBQUM7SUF0RHBELElBQ0ksZUFBZSxDQUFDLEtBQUs7UUFDdkIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsK0JBQStCLENBQUMsQ0FBQztRQUNwRCxJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDN0MsT0FBTztTQUNSO2FBQU07WUFFTCxJQUFJLENBQUMs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QkFPWixvQkFBb0I7c0JBQXBDLE1BQU07Z0JBQ1UsU0FBUztzQkFBekIsTUFBTTtnQkFDVSw0QkFBNEI7c0JBQTVDLE1BQU07Z0JBQ0UsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUtGLGVBQWU7c0JBRGxCLEtBQUs7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9jb21tb25cIjtcbmRlY2xhcmUgdmFyIGdvb2dsZTogYW55O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZ29vZ2xlLWdlby1tYXAnLFxuICB0ZW1wbGF0ZVVybDogJy4vZ29vZ2xlLWdlby1tYXAuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9nb29nbGUtZ2VvLW1hcC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEdvb2dsZUdlb01hcENvbXBvbmVudCB7XG4gIEBWaWV3Q2hpbGQoXCJpblJvbW1lckdlb0NoYXJ0XCIpIGluUm9hbWVyR2VvQ2hhcnQ6IEVsZW1lbnRSZWY7XG4gIGNoYXJEYXRhOiBhbnk7XG4gIGNoYXJ0SGVpZ2h0OiBhbnk7XG4gIGJhY2dyb3VuZENvbG9yOiBhbnk7XG4gIG1hcENvbG9yczogYW55O1xuICBjaGFydFR5cGU6IGFueTtcbiAgdG9vdFRpcENvbHVtbjogYW55O1xuICBAT3V0cHV0KCkgcHVibGljIGdldFRhYmxlQ29uZmlnT3V0UHV0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHB1YmxpYyBvUm93Q2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcHVibGljIG9ucmlnaHRDbGlja0NvbnRleHRTZWxlY3Rpb246IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBASW5wdXQoKSByaWdodENsaWNrRW5hYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgaXNMb2FkZXI6IGJvb2xlYW47XG4gIHBhZ2VfY29uZmlnOiBhbnk7XG4gIHBhZ2VfcGFybXM6IGFueTtcbiAgQElucHV0KFwiY2hhcnREYXRhU291cmNlXCIpXG4gIHNldCBjaGFydERhdGFTb3VyY2UodmFsdWUpIHtcbiAgICBjb25zb2xlLmxvZyh2YWx1ZSwgJ2NoYXJ0RGF0YVNvdXJjZSBmb3IgZ2VvIGNoYXJ0Jyk7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcblxuICAgICAgdGhpcy5pc0xvYWRlciA9IHRydWU7XG4gICAgICB0aGlzLnBhZ2VfY29uZmlnID0gdmFsdWU7XG4gICAgICB0aGlzLnBhZ2VfcGFybXMgPSB2YWx1ZS50aXRsZVBhcmFtcztcbiAgICAgIC8vIHRoaXMuaW5Sb2FtZXJHZW9DaGFydC5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICcnO1xuICAgICAgaWYgKHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlICYmIHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICBpZiAodmFsdWUua3BpQ29uZmlnLmZvcm1hdGUgPT0gXCJtb250aGx5XCIpIHtcbiAgICAgICAgICB0aGlzLnRvb3RUaXBDb2x1bW4gPSB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5jaGFydF9jb25maWc7XG4gICAgICAgICAgbGV0IGRhdGEgPSB2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZTtcbiAgICAgICAgICB0aGlzLmNoYXJ0SGVpZ2h0ID0gYCR7dmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcuc2l6ZX1weGA7XG4gICAgICAgICAgdGhpcy5jaGFydFR5cGUgPSB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5jaGFydFR5cGU7XG4gICAgICAgICAgdGhpcy5iYWNncm91bmRDb2xvciA9XG4gICAgICAgICAgICB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5iYWNrZ3JvdW5kQ29sb3I7XG4gICAgICAgICAgdGhpcy5tYXBDb2xvcnMgPSB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5jb2xvcnM7XG4gICAgICAgICAgLy8gbGV0IGNvbmZpZyA9IHZhbHVlLmNoYXJ0Q29uZmlnO1xuICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZERhdGEgPSBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnW1wiYXJndW1lbnRGaWVsZFwiXSxcbiAgICAgICAgICAgICAgdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWdbXCJjaGFydFZhbHVlRmllbGRcIl0sXG4gICAgICAgICAgICAgIHsgdHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJywgJ3AnOiB7ICdodG1sJzogdHJ1ZSB9IH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgXS5jb25jYXQoXG4gICAgICAgICAgICBkYXRhLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCB0b29sdGlwID0gdGhpcy5nZXRUb29sdGlwKGl0ZW0pO1xuICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIGl0ZW1bdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWdbXCJhcmd1bWVudEZpZWxkXCJdXSxcbiAgICAgICAgICAgICAgICBpdGVtW3ZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnW1wiY2hhcnRWYWx1ZUZpZWxkXCJdXSxcbiAgICAgICAgICAgICAgICB0b29sdGlwXG4gICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coZm9ybWF0dGVkRGF0YSk7XG4gICAgICAgICAgdGhpcy5jaGFyRGF0YSA9IGZvcm1hdHRlZERhdGE7XG4gICAgICAgICAgLy8gdGhpcy5sb2FkR29vZ2xlQ2hhcnRzKCk7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmxvYWRHb29nbGVDaGFydHMoKTtcbiAgICAgICAgICB9LCAyMDApO1xuXG4gICAgICAgIH1cblxuICAgICAgfVxuXG5cbiAgICB9XG5cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBjb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHsgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAvLyB0aGlzLmxvYWRHb29nbGVDaGFydHMoKTtcbiAgfVxuXG4gIGxvYWRHb29nbGVDaGFydHMoKSB7XG4gICAgZ29vZ2xlLmNoYXJ0cy5sb2FkKFwiY3VycmVudFwiLCB7XG4gICAgICBwYWNrYWdlczogW3RoaXMuY2hhcnRUeXBlXSxcbiAgICB9KTtcbiAgICBnb29nbGUuY2hhcnRzLnNldE9uTG9hZENhbGxiYWNrKHRoaXMuZHJhd0NoYXJ0LmJpbmQodGhpcykpO1xuICB9XG5cbiAgZHJhd0NoYXJ0KCkge1xuICAgIGNvbnN0IGRhdGEgPSBnb29nbGUudmlzdWFsaXphdGlvbi5hcnJheVRvRGF0YVRhYmxlKHRoaXMuY2hhckRhdGEpO1xuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhpcy5iYWNncm91bmRDb2xvcixcbiAgICAgIHRvb2x0aXA6IHsgaXNIdG1sOiB0cnVlIH0sXG4gICAgICBjb2xvckF4aXM6IHsgY29sb3JzOiB0aGlzLm1hcENvbG9ycyB9XG4gICAgfTtcblxuICAgIGNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkdlb0NoYXJ0KFxuICAgICAgdGhpcy5pblJvYW1lckdlb0NoYXJ0Lm5hdGl2ZUVsZW1lbnRcbiAgICApO1xuICAgIHRoaXMuaW5Sb2FtZXJHZW9DaGFydC5uYXRpdmVFbGVtZW50LnN0eWxlLmhlaWdodCA9ICcyNTBweCc7XG4gICAgY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTtcbiAgfVxuXG4gIGdldFRvb2x0aXAoZGF0YSkge1xuICAgIC8vIGRlYnVnZ2VyXG4gICAgbGV0IHRvb2xUaXBEYXRhID0gXCJcIjtcbiAgICB0aGlzLnRvb3RUaXBDb2x1bW4uZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBkYXRhW2VsZW1lbnQuZGF0YUZpZWxkXSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgdG9vbFRpcERhdGEgKz1cbiAgICAgICAgICBcIjxkaXYgY2xhc3M9J2lubGluZSc+PGI+XCIgK1xuICAgICAgICAgIGVsZW1lbnQuY2FwdGlvbiArXG4gICAgICAgICAgXCI6PC9iPjwvZGl2PiBcIiArXG4gICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlLnJvdW5kT2ZmVGlsbFR3byhkYXRhW2VsZW1lbnQuZGF0YUZpZWxkXSwgMikgK1xuICAgICAgICAgIFwiPGJyIC8+XCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b29sVGlwRGF0YSArPVxuICAgICAgICAgIFwiPGRpdiBjbGFzcz0naW5saW5lJz48Yj5cIiArXG4gICAgICAgICAgZWxlbWVudC5jYXB0aW9uICtcbiAgICAgICAgICBcIjo8L2I+PC9kaXY+IFwiICtcbiAgICAgICAgICBkYXRhW2VsZW1lbnQuZGF0YUZpZWxkXSArXG4gICAgICAgICAgXCI8YnIgLz5cIjtcbiAgICAgIH1cblxuXG4gICAgfSk7XG4gICAgLy8gY29uc29sZS5sb2codG9vbFRpcERhdGEpO1xuICAgIHJldHVybiB0b29sVGlwRGF0YTtcbiAgfVxufVxuIiwiXG48ZGl2IGNsYXNzPVwibXgtMiBiZy1ncmF5LTgwMFwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0xvYWRlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1zdGFydCBiZy1ncmF5LTgwMCBwLTJcIj5cbiAgICAgICAgICAgIDxhcHAtbG9hZGVyPjwvYXBwLWxvYWRlcj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8ZGl2IGNsYXNzPVwibXgtMiBwYi0yXCI+XG5cbiAgICAgIDxuZy1jb250YWluZXI+XG4gICAgICAgIDxkaXYgaWQ9XCJyZWdpb25zX2RpdlwiICNpblJvbW1lckdlb0NoYXJ0IHN0eWxlPVwid2lkdGg6IDEwMCVcIiA+PC9kaXY+ICAgIFxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICBcbiAgICAgICBcblxuICAgIDwvZGl2PlxuXG5cbjwvZGl2PlxuIl19
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject, catchError, map } from 'rxjs';
|
|
3
|
+
import { AppHttpService } from '../app.http.service';
|
|
4
|
+
import { environment } from '../environment';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/common/http";
|
|
7
|
+
export class KpiApiService extends AppHttpService {
|
|
8
|
+
constructor(httpClient) {
|
|
9
|
+
super(httpClient);
|
|
10
|
+
this.httpClient = httpClient;
|
|
11
|
+
this.kpiFilter = new BehaviorSubject([]);
|
|
12
|
+
this.userkpiFilter$ = this.kpiFilter.asObservable();
|
|
13
|
+
}
|
|
14
|
+
getFilterForKpi(pins) {
|
|
15
|
+
this.kpiFilter.next(pins);
|
|
16
|
+
}
|
|
17
|
+
getCurrentKpiFilterValue() {
|
|
18
|
+
return this.kpiFilter.getValue();
|
|
19
|
+
}
|
|
20
|
+
getData(body, requestID) {
|
|
21
|
+
return this.http
|
|
22
|
+
.post(environment.appUrl + environment.apiVersion + requestID, JSON.stringify(body), this.options)
|
|
23
|
+
.pipe(map((response) => {
|
|
24
|
+
return response;
|
|
25
|
+
}), catchError(this.handleError));
|
|
26
|
+
}
|
|
27
|
+
getDataByAPI(requestID, body) {
|
|
28
|
+
return this.http
|
|
29
|
+
.post(environment.appUrl + environment.apiVersion + requestID, JSON.stringify(body), this.options)
|
|
30
|
+
.pipe(map((response) => {
|
|
31
|
+
return response;
|
|
32
|
+
}), catchError(this.handleError));
|
|
33
|
+
}
|
|
34
|
+
getUniqueData(api) {
|
|
35
|
+
return this.http
|
|
36
|
+
.get(environment.appUrl + environment.apiVersion + api, { withCredentials: true })
|
|
37
|
+
.pipe(map((response) => {
|
|
38
|
+
return response;
|
|
39
|
+
}), catchError(this.handleError));
|
|
40
|
+
}
|
|
41
|
+
getCdrData(api, url) {
|
|
42
|
+
return this.http
|
|
43
|
+
.get(environment.appUrl + environment.apiVersion + api + '?' + url)
|
|
44
|
+
.pipe(map((response) => {
|
|
45
|
+
return response;
|
|
46
|
+
}), catchError(this.handleError));
|
|
47
|
+
}
|
|
48
|
+
getMapData(body, requestID) {
|
|
49
|
+
const apiUrl = environment.gatewayUrl + environment.appName + '/assets/api-data/mapjson.json';
|
|
50
|
+
return this.http
|
|
51
|
+
.get(apiUrl, { withCredentials: true })
|
|
52
|
+
.pipe(map((response) => {
|
|
53
|
+
return response;
|
|
54
|
+
}), catchError(this.handleError));
|
|
55
|
+
}
|
|
56
|
+
getfilterData() {
|
|
57
|
+
return this.http
|
|
58
|
+
.get("/assets/api-data/filter-direction.json")
|
|
59
|
+
.pipe(map((response) => {
|
|
60
|
+
return response;
|
|
61
|
+
}), catchError(this.handleError));
|
|
62
|
+
}
|
|
63
|
+
getSrvTypeDataSource() {
|
|
64
|
+
const apiUrl = environment.appUrl + environment.apiVersion + '/kpi/srv-params';
|
|
65
|
+
return this.http
|
|
66
|
+
.get(apiUrl, { withCredentials: true })
|
|
67
|
+
.pipe(map((response) => {
|
|
68
|
+
return response;
|
|
69
|
+
}), catchError(this.handleError));
|
|
70
|
+
}
|
|
71
|
+
pagintedActivityLogs(parms, api) {
|
|
72
|
+
const apiUrl = environment.appUrl + environment.apiVersion + api;
|
|
73
|
+
return this.http
|
|
74
|
+
.post(apiUrl, JSON.stringify(parms), this.options)
|
|
75
|
+
.pipe(map((response) => {
|
|
76
|
+
return response;
|
|
77
|
+
}), catchError(this.handleError));
|
|
78
|
+
}
|
|
79
|
+
getApiData() {
|
|
80
|
+
const apiUrl = '/assets/api-data/api-service.json';
|
|
81
|
+
return this.http
|
|
82
|
+
.get(apiUrl, { withCredentials: true })
|
|
83
|
+
.pipe(map((response) => {
|
|
84
|
+
return response;
|
|
85
|
+
}), catchError(this.handleError));
|
|
86
|
+
}
|
|
87
|
+
getKpiBrowserConfigById(id) {
|
|
88
|
+
const apiUrl = environment.appUrl + environment.apiVersion + '/kpi-config/getKpiBrowserConfigById?id=' + id;
|
|
89
|
+
return this.http
|
|
90
|
+
.get(apiUrl, { withCredentials: true })
|
|
91
|
+
.pipe(map((response) => {
|
|
92
|
+
return response;
|
|
93
|
+
}), catchError(this.handleError));
|
|
94
|
+
}
|
|
95
|
+
getAppPageDetailConfig(pageId) {
|
|
96
|
+
return this.http
|
|
97
|
+
.get(environment.appUrl + environment.apiVersion + '/kpi-config/getAppPageDetailConfig?pageConfigId=' + pageId, this.options)
|
|
98
|
+
.pipe(map((response) => {
|
|
99
|
+
return response;
|
|
100
|
+
}), catchError(this.handleError));
|
|
101
|
+
}
|
|
102
|
+
getDashBoardJson() {
|
|
103
|
+
const apiUrl = environment.gatewayUrl + environment.appName + '/assets/api-data/dashboard.json';
|
|
104
|
+
return this.http.get(apiUrl, { withCredentials: true }).pipe(map((response) => {
|
|
105
|
+
return response;
|
|
106
|
+
}), catchError(this.handleError));
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
KpiApiService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: KpiApiService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
110
|
+
KpiApiService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: KpiApiService, providedIn: 'root' });
|
|
111
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: KpiApiService, decorators: [{
|
|
112
|
+
type: Injectable,
|
|
113
|
+
args: [{
|
|
114
|
+
providedIn: 'root'
|
|
115
|
+
}]
|
|
116
|
+
}], ctorParameters: function () { return [{ type: i1.HttpClient }]; } });
|
|
117
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvc2hhcmVkL2FwaS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUEwQixNQUFNLE1BQU0sQ0FBQztBQUNoRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFLN0MsTUFBTSxPQUFPLGFBQWMsU0FBUSxjQUFjO0lBRy9DLFlBQW9CLFVBQXNCO1FBQ3hDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQURDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFJbEMsY0FBUyxHQUFHLElBQUksZUFBZSxDQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ2pELG1CQUFjLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUgvQyxDQUFDO0lBS0QsZUFBZSxDQUFDLElBQVM7UUFDdkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVELHdCQUF3QjtRQUN0QixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUztRQUNyQixPQUFPLElBQUksQ0FBQyxJQUFJO2FBQ2IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDLFVBQVUsR0FBRyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDO2FBQ2pHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFrQixFQUFPLEVBQUU7WUFDcEMsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQyxDQUFDLEVBQ0EsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFDRCxZQUFZLENBQUMsU0FBUyxFQUFFLElBQUk7UUFDMUIsT0FBTyxJQUFJLENBQUMsSUFBSTthQUNiLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQyxVQUFVLEdBQUcsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQzthQUNqRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBa0IsRUFBTyxFQUFFO1lBQ3BDLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxFQUNBLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsYUFBYSxDQUFDLEdBQUc7UUFDZixPQUFPLElBQUksQ0FBQyxJQUFJO2FBQ2IsR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDLFVBQVUsR0FBRyxHQUFHLEVBQUUsRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLENBQUM7YUFDakYsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQWtCLEVBQU8sRUFBRTtZQUNwQyxPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDLENBQUMsRUFDQSxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELFVBQVUsQ0FBQyxHQUFHLEVBQUUsR0FBRztRQUNqQixPQUFPLElBQUksQ0FBQyxJQUFJO2FBQ2IsR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDLFVBQVUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQzthQUNsRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBa0IsRUFBTyxFQUFFO1lBQ3BDLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxFQUNBLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsVUFBVSxDQUFDLElBQUksRUFBRSxTQUFTO1FBRXhCLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFDLE9BQU8sR0FBRywrQkFBK0IsQ0FBQztRQUU5RixPQUFPLElBQUksQ0FBQyxJQUFJO2FBQ2IsR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsQ0FBQzthQUN0QyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBYSxFQUFPLEVBQUU7WUFDL0IsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQyxDQUFDLEVBQ0EsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxhQUFhO1FBQ1gsT0FBTyxJQUFJLENBQUMsSUFBSTthQUNiLEdBQUcsQ0FBQyx3Q0FBd0MsQ0FBQzthQUU3QyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBa0IsRUFBTyxFQUFFO1lBQ3BDLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxFQUNBLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBQ0Qsb0JBQW9CO1FBQ2xCLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQztRQUUvRSxPQUFPLElBQUksQ0FBQyxJQUFJO2FBQ2IsR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsQ0FBQzthQUV0QyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBa0IsRUFBTyxFQUFFO1lBQ3BDLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxFQUNBLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBQ0Qsb0JBQW9CLENBQUMsS0FBSyxFQUFFLEdBQUc7UUFDN0IsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztRQUNqRSxPQUFPLElBQUksQ0FBQyxJQUFJO2FBQ2IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUM7YUFDakQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQWtCLEVBQU8sRUFBRTtZQUNwQyxPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDLENBQUMsRUFDQSxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELFVBQVU7UUFFUixNQUFNLE1BQU0sR0FBRyxtQ0FBbUMsQ0FBQztRQUNuRCxPQUFPLElBQUksQ0FBQyxJQUFJO2FBQ2IsR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsQ0FBQzthQUN0QyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBa0IsRUFBRSxFQUFFO1lBQy9CLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUV0QyxDQUFDO0lBRUQsdUJBQXVCLENBQUMsRUFBRTtRQUN4QixNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQyxVQUFVLEdBQUcseUNBQXlDLEdBQUcsRUFBRSxDQUFDO1FBQzVHLE9BQU8sSUFBSSxDQUFDLElBQUk7YUFDYixHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxDQUFDO2FBQ3RDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFrQixFQUFFLEVBQUU7WUFDL0IsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBRXRDLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxNQUFNO1FBQzNCLE9BQU8sSUFBSSxDQUFDLElBQUk7YUFDYixHQUFHLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsVUFBVSxHQUFHLGtEQUFrRCxHQUFHLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDO2FBQzVILElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFrQixFQUFPLEVBQUU7WUFDcEMsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQyxDQUFDLEVBQ0EsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxnQkFBZ0I7UUFFZCxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsVUFBVSxHQUFHLFdBQVcsQ0FBQyxPQUFPLEdBQUcsaUNBQWlDLENBQUM7UUFDaEcsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQzFELEdBQUcsQ0FBQyxDQUFDLFFBQWtCLEVBQUUsRUFBRTtZQUN6QixPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUM3QixDQUFDO0lBQ0osQ0FBQzs7MEdBdElVLGFBQWE7OEdBQWIsYUFBYSxjQUZaLE1BQU07MkZBRVAsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjYXRjaEVycm9yLCBtYXAsIE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFwcEh0dHBTZXJ2aWNlIH0gZnJvbSAnLi4vYXBwLmh0dHAuc2VydmljZSc7XG5pbXBvcnQgeyBlbnZpcm9ubWVudCB9IGZyb20gJy4uL2Vudmlyb25tZW50JztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgS3BpQXBpU2VydmljZSBleHRlbmRzIEFwcEh0dHBTZXJ2aWNlIHtcblxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cENsaWVudDogSHR0cENsaWVudCkge1xuICAgIHN1cGVyKGh0dHBDbGllbnQpXG4gIH1cblxuICBwcml2YXRlIGtwaUZpbHRlciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihbXSk7XG4gIHVzZXJrcGlGaWx0ZXIkID0gdGhpcy5rcGlGaWx0ZXIuYXNPYnNlcnZhYmxlKCk7XG5cbiAgZ2V0RmlsdGVyRm9yS3BpKHBpbnM6IGFueSkge1xuICAgIHRoaXMua3BpRmlsdGVyLm5leHQocGlucyk7XG4gIH1cblxuICBnZXRDdXJyZW50S3BpRmlsdGVyVmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMua3BpRmlsdGVyLmdldFZhbHVlKCk7XG4gIH1cblxuICBnZXREYXRhKGJvZHksIHJlcXVlc3RJRCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3QoZW52aXJvbm1lbnQuYXBwVXJsICsgZW52aXJvbm1lbnQuYXBpVmVyc2lvbiArIHJlcXVlc3RJRCwgSlNPTi5zdHJpbmdpZnkoYm9keSksIHRoaXMub3B0aW9ucylcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IFJlc3BvbnNlKTogYW55ID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcikpO1xuICB9XG4gIGdldERhdGFCeUFQSShyZXF1ZXN0SUQsIGJvZHkpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0KGVudmlyb25tZW50LmFwcFVybCArIGVudmlyb25tZW50LmFwaVZlcnNpb24gKyByZXF1ZXN0SUQsIEpTT04uc3RyaW5naWZ5KGJvZHkpLCB0aGlzLm9wdGlvbnMpXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBSZXNwb25zZSk6IGFueSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpKTtcbiAgfVxuXG4gIGdldFVuaXF1ZURhdGEoYXBpKTogT2JzZXJ2YWJsZTxSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQoZW52aXJvbm1lbnQuYXBwVXJsICsgZW52aXJvbm1lbnQuYXBpVmVyc2lvbiArIGFwaSwgeyB3aXRoQ3JlZGVudGlhbHM6IHRydWUgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IFJlc3BvbnNlKTogYW55ID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcikpO1xuICB9XG5cbiAgZ2V0Q2RyRGF0YShhcGksIHVybCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldChlbnZpcm9ubWVudC5hcHBVcmwgKyBlbnZpcm9ubWVudC5hcGlWZXJzaW9uICsgYXBpICsgJz8nICsgdXJsKVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogUmVzcG9uc2UpOiBhbnkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKSk7XG4gIH1cblxuICBnZXRNYXBEYXRhKGJvZHksIHJlcXVlc3RJRCk6IGFueSB7XG4gICAgLy8gY29uc3QgYXBpVXJsID0gJy9hc3NldHMvYXBpLWRhdGEvbWFwanNvbi5qc29uJztcbiAgICBjb25zdCBhcGlVcmwgPSBlbnZpcm9ubWVudC5nYXRld2F5VXJsICsgZW52aXJvbm1lbnQuYXBwTmFtZSArICcvYXNzZXRzL2FwaS1kYXRhL21hcGpzb24uanNvbic7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0KGFwaVVybCwgeyB3aXRoQ3JlZGVudGlhbHM6IHRydWUgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IGFueSk6IGFueSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpKTtcbiAgfVxuXG4gIGdldGZpbHRlckRhdGEoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0KFwiL2Fzc2V0cy9hcGktZGF0YS9maWx0ZXItZGlyZWN0aW9uLmpzb25cIilcbiAgICAgIC8vIC5nZXQoZW52aXJvbm1lbnQuYXBwVXJsICsgZW52aXJvbm1lbnQuYXBpVmVyc2lvbiArIGFwaSArICc/JysgdXJsIClcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IFJlc3BvbnNlKTogYW55ID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcikpO1xuICB9XG4gIGdldFNydlR5cGVEYXRhU291cmNlKCk6IGFueSB7XG4gICAgY29uc3QgYXBpVXJsID0gZW52aXJvbm1lbnQuYXBwVXJsICsgZW52aXJvbm1lbnQuYXBpVmVyc2lvbiArICcva3BpL3Nydi1wYXJhbXMnO1xuICAgIC8vIGNvbnN0IGFwaVVybCA9IGVudmlyb25tZW50LmdhdGV3YXlVcmwgKyBlbnZpcm9ubWVudC5hcHBOYW1lICsgJy9hc3NldHMvYXBpLWRhdGEvc3J2X3R5cGVfcGFyYW1zLmpzb24nO1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQoYXBpVXJsLCB7IHdpdGhDcmVkZW50aWFsczogdHJ1ZSB9KVxuICAgICAgLy8gLmdldChlbnZpcm9ubWVudC5hcHBVcmwgKyBlbnZpcm9ubWVudC5hcGlWZXJzaW9uICsgYXBpICsgJz8nKyB1cmwgKVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogUmVzcG9uc2UpOiBhbnkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKSk7XG4gIH1cbiAgcGFnaW50ZWRBY3Rpdml0eUxvZ3MocGFybXMsIGFwaSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgYXBpVXJsID0gZW52aXJvbm1lbnQuYXBwVXJsICsgZW52aXJvbm1lbnQuYXBpVmVyc2lvbiArIGFwaTtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucG9zdChhcGlVcmwsIEpTT04uc3RyaW5naWZ5KHBhcm1zKSwgdGhpcy5vcHRpb25zKVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogUmVzcG9uc2UpOiBhbnkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKSk7XG4gIH1cblxuICBnZXRBcGlEYXRhKCk6IGFueSB7XG4gICAgLy8gY29uc3QgYXBpVXJsID0gZW52aXJvbm1lbnQuYXBwVXJsICsgZW52aXJvbm1lbnQuYXBpVmVyc2lvbiArICcvYXBwLXNldHRpbmcvZ2V0SW50ZWdyYXRlZEFwcHMnO1xuICAgIGNvbnN0IGFwaVVybCA9ICcvYXNzZXRzL2FwaS1kYXRhL2FwaS1zZXJ2aWNlLmpzb24nO1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQoYXBpVXJsLCB7IHdpdGhDcmVkZW50aWFsczogdHJ1ZSB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogUmVzcG9uc2UpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgfSksIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcikpO1xuXG4gIH1cblxuICBnZXRLcGlCcm93c2VyQ29uZmlnQnlJZChpZCk6IGFueSB7XG4gICAgY29uc3QgYXBpVXJsID0gZW52aXJvbm1lbnQuYXBwVXJsICsgZW52aXJvbm1lbnQuYXBpVmVyc2lvbiArICcva3BpLWNvbmZpZy9nZXRLcGlCcm93c2VyQ29uZmlnQnlJZD9pZD0nICsgaWQ7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldChhcGlVcmwsIHsgd2l0aENyZWRlbnRpYWxzOiB0cnVlIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlOiBSZXNwb25zZSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICB9KSwgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKSk7XG5cbiAgfVxuXG4gIGdldEFwcFBhZ2VEZXRhaWxDb25maWcocGFnZUlkKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0KGVudmlyb25tZW50LmFwcFVybCArIGVudmlyb25tZW50LmFwaVZlcnNpb24gKyAnL2twaS1jb25maWcvZ2V0QXBwUGFnZURldGFpbENvbmZpZz9wYWdlQ29uZmlnSWQ9JyArIHBhZ2VJZCwgdGhpcy5vcHRpb25zKVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZTogUmVzcG9uc2UpOiBhbnkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKSk7XG4gIH1cblxuICBnZXREYXNoQm9hcmRKc29uKCk6IGFueSB7XG4gICAgLy8gY29uc3QgYXBpVXJsID0gJy9hc3NldHMvYXBpLWRhdGEvZGFzaGJvYXJkLmpzb24nO1xuICAgIGNvbnN0IGFwaVVybCA9IGVudmlyb25tZW50LmdhdGV3YXlVcmwgKyBlbnZpcm9ubWVudC5hcHBOYW1lICsgJy9hc3NldHMvYXBpLWRhdGEvZGFzaGJvYXJkLmpzb24nO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGFwaVVybCwgeyB3aXRoQ3JlZGVudGlhbHM6IHRydWUgfSkucGlwZShcbiAgICAgIG1hcCgocmVzcG9uc2U6IFJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgIH0pLFxuICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKVxuICAgICk7XG4gIH1cblxufVxuIl19
|