gamma-app-controller 1.1.25 → 1.1.27
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/esm2020/lib/application-controller/application-controller.module.mjs +20 -20
- package/esm2020/lib/application-controller/application-dataset-component/application-dataset/application-dataset.component.mjs +1 -1
- package/esm2020/lib/application-controller/application-dataset-component/create-dataset/create-dataset.component.mjs +1 -1
- package/esm2020/lib/application-controller/application-filter/application-filter.component.mjs +1 -1
- package/esm2020/lib/application-controller/application-menu-controller/application-menus/application-menus.component.mjs +1 -1
- package/esm2020/lib/application-controller/application-metric-config/all-metrics-config/all-metrics-config.component.mjs +1 -1
- package/esm2020/lib/application-controller/application-metric-config/create-metrics/create-metrics.component.mjs +1 -1
- package/esm2020/lib/application-controller/application-view-components/application-views/application-views.component.mjs +1 -1
- package/esm2020/lib/application-controller/application-view-components/create-comp-view/create-comp-view.component.mjs +1 -1
- package/esm2020/lib/application-controller/page-controller/page-config/page-config.component.mjs +11 -11
- package/esm2020/lib/application-controller/page-controller/page-config-multi-layout/page-config-multi-layout.component.mjs +10 -10
- package/esm2020/lib/application-controller/page-controller/page-controller/page-controller.component.mjs +1 -1
- package/esm2020/lib/application-controller/support-components/dash-chart/dash-chart.component.mjs +1 -1
- package/esm2020/lib/application-controller/support-components/dash-table/dash-table.component.mjs +1 -1
- package/esm2020/lib/application-controller/support-components/dash-today-previous/dash-today-previous.component.mjs +1 -1
- package/esm2020/lib/application-controller/support-components/geo-map/geo-map.component.mjs +2 -2
- package/esm2020/lib/application-controller/support-components/heat-map/heat-map.component.mjs +1 -1
- package/esm2020/lib/application-controller/support-components/single-card/single-card.component.mjs +1 -1
- package/esm2020/lib/application-controller/support-components/table-with-bar/table-with-bar.component.mjs +2 -2
- package/esm2020/lib/shared/advanced-component/advance-widget-header-filter/advance-widget-header-filter.component.mjs +116 -0
- package/esm2020/lib/shared/advanced-component/app-advance-header/app-header.component.mjs +306 -0
- package/esm2020/lib/shared/advanced-component/gamm-single-number-card/gamm-single-number-card.component.mjs +80 -0
- package/esm2020/lib/shared/advanced-component/gamma-advance-chart/gamma-advance-chart.component.mjs +379 -0
- package/esm2020/lib/shared/advanced-component/gamma-advance-operator-table/gamma-advance-operator-table.component.mjs +188 -0
- package/esm2020/lib/shared/advanced-component/gamma-geo-chart/gamma-geo-chart.component.mjs +435 -0
- package/esm2020/lib/shared/advanced-component/gamma-heatmap/gamma-heatmap.component.mjs +334 -0
- package/esm2020/lib/shared/advanced-component/gamma-table-clumn-bar-chart/gamma-table-clumn-bar-chart.component.mjs +155 -0
- package/esm2020/lib/shared/advanced-component/gamma-table-with-percentage/contentSafeHtml.mjs +20 -0
- package/esm2020/lib/shared/advanced-component/gamma-table-with-percentage/gamma-table-with-percentage.component.mjs +187 -0
- package/esm2020/lib/shared/advanced-component/gamma-today-previous/gamma-today-previous.component.mjs +86 -0
- package/esm2020/lib/shared/advanced-component/google-geo-map/google-geo-map.component.mjs +439 -0
- package/esm2020/lib/shared/app-title/app-title.component.mjs +67 -0
- package/esm2020/lib/shared/gamam-widget/gamam-widget.component.mjs +35 -0
- package/esm2020/lib/shared/gamma-advance-filter/gamma-advance-filter.component.mjs +273 -0
- package/esm2020/lib/shared/gamma-bread-crumbs/bread-crumbs.component.mjs +142 -0
- package/esm2020/lib/shared/kpi-comon-service.mjs +537 -0
- package/esm2020/lib/{application-controller/shared → shared}/loader/loader.component.mjs +1 -1
- package/esm2020/lib/{application-controller/shared → shared}/loading/loading.component.mjs +1 -1
- package/esm2020/lib/shared/loading/loadingModule.mjs +28 -0
- package/esm2020/lib/shared/safeHtmlPipe.mjs +20 -0
- package/esm2020/lib/template-module/KpiCreationModule/create-kpi-tree.component.mjs +381 -0
- package/esm2020/lib/template-module/KpiCreationModule/createKpi.service.mjs +90 -0
- package/esm2020/lib/template-module/KpiCreationModule/kpiCreation.module.mjs +184 -0
- package/esm2020/lib/template-module/KpiCreationModule/treeview/animation.mjs +15 -0
- package/esm2020/lib/template-module/KpiCreationModule/treeview/animations/defaults.mjs +12 -0
- package/esm2020/lib/template-module/KpiCreationModule/treeview/animations/expand-collapse.mjs +16 -0
- package/esm2020/lib/template-module/KpiCreationModule/treeview/animations/fade.mjs +160 -0
- package/esm2020/lib/template-module/KpiCreationModule/treeview/animations/shake.mjs +58 -0
- package/esm2020/lib/template-module/KpiCreationModule/treeview/animations/slide.mjs +116 -0
- package/esm2020/lib/template-module/KpiCreationModule/treeview/animations/zoom.mjs +36 -0
- package/esm2020/lib/template-module/KpiCreationModule/treeview/components/aside/aside.component.mjs +85 -0
- package/esm2020/lib/template-module/KpiCreationModule/treeview/components/basic/basic.component.mjs +118 -0
- package/esm2020/lib/template-module/KpiCreationModule/treeview/components/collapsable/collapsable.component.mjs +159 -0
- package/esm2020/lib/template-module/KpiCreationModule/treeview/components/divider/divider.component.mjs +27 -0
- package/esm2020/lib/template-module/KpiCreationModule/treeview/components/group/group.component.mjs +37 -0
- package/esm2020/lib/template-module/KpiCreationModule/treeview/components/spacer/spacer.component.mjs +27 -0
- package/esm2020/lib/template-module/KpiCreationModule/treeview/moment-helper.mjs +4 -0
- package/esm2020/lib/template-module/KpiCreationModule/treeview/treeview-navigation.service.mjs +2 -0
- package/esm2020/lib/template-module/KpiCreationModule/treeview/treeview-shared.service.mjs +16 -0
- package/esm2020/lib/template-module/KpiCreationModule/treeview/treeview.component.mjs +134 -0
- package/esm2020/lib/template-module/bookmarked-template/bookmarked-template.component.mjs +816 -0
- package/esm2020/lib/template-module/bookmarked-template/bookmarkedTemplate.module.mjs +149 -0
- package/esm2020/lib/template-module/cdrConfigModule/cdr-config.component.mjs +1 -1
- package/esm2020/lib/template-module/cdrConfigModule/cdrConfig.module.mjs +2 -2
- package/esm2020/lib/template-module/defaulLandingComponent/defaultLandingComponent.module.mjs +149 -0
- package/esm2020/lib/template-module/defaulLandingComponent/landing-component.component.mjs +870 -0
- package/esm2020/lib/template-module/exceptionConfigModule/exception-operation.component.mjs +1 -1
- package/esm2020/lib/template-module/exceptionConfigModule/exceptionConfig.module.mjs +2 -2
- package/esm2020/lib/template-module/kpiWithMultiLayout/dynamin-modal-multi.component.mjs +180 -0
- package/esm2020/lib/template-module/kpiWithMultiLayout/kpi-with-multilayout.component.mjs +992 -0
- package/esm2020/lib/template-module/kpiWithMultiLayout/kpiWithMultiayout.module.mjs +154 -0
- package/esm2020/lib/template-module/kpiWithSingleLayout/dynamin-modal.component.mjs +180 -0
- package/esm2020/lib/template-module/kpiWithSingleLayout/kpi-with-dataset.component.mjs +1046 -0
- package/esm2020/lib/template-module/kpiWithSingleLayout/kpiWithSingleLayout.module.mjs +154 -0
- package/esm2020/public-api.mjs +39 -20
- package/fesm2015/gamma-app-controller.mjs +6750 -475
- package/fesm2015/gamma-app-controller.mjs.map +1 -1
- package/fesm2020/gamma-app-controller.mjs +6709 -475
- package/fesm2020/gamma-app-controller.mjs.map +1 -1
- package/lib/application-controller/application-controller.module.d.ts +19 -19
- package/lib/application-controller/page-controller/page-config/page-config.component.d.ts +9 -9
- package/lib/application-controller/page-controller/page-config-multi-layout/page-config-multi-layout.component.d.ts +8 -8
- package/lib/{application-controller/shared → shared}/advanced-component/app-advance-header/app-header.component.d.ts +18 -2
- package/lib/{application-controller/shared → shared}/advanced-component/gamm-single-number-card/gamm-single-number-card.component.d.ts +3 -5
- package/lib/{application-controller/shared → shared}/advanced-component/gamma-advance-chart/gamma-advance-chart.component.d.ts +3 -1
- package/lib/{application-controller/shared → shared}/advanced-component/gamma-advance-operator-table/gamma-advance-operator-table.component.d.ts +4 -2
- package/lib/{application-controller/shared → shared}/advanced-component/gamma-geo-chart/gamma-geo-chart.component.d.ts +1 -1
- package/lib/{application-controller/shared → shared}/advanced-component/gamma-heatmap/gamma-heatmap.component.d.ts +1 -1
- package/lib/{application-controller/shared → shared}/advanced-component/gamma-table-clumn-bar-chart/gamma-table-clumn-bar-chart.component.d.ts +1 -1
- package/lib/{application-controller/shared → shared}/advanced-component/gamma-table-with-percentage/gamma-table-with-percentage.component.d.ts +6 -2
- package/lib/{application-controller/shared → shared}/advanced-component/gamma-today-previous/gamma-today-previous.component.d.ts +1 -1
- package/lib/{application-controller/shared → shared}/advanced-component/google-geo-map/google-geo-map.component.d.ts +1 -1
- package/lib/{application-controller/shared → shared}/app-title/app-title.component.d.ts +1 -1
- package/lib/{application-controller/shared → shared}/gamam-widget/gamam-widget.component.d.ts +1 -1
- package/lib/{application-controller/shared → shared}/gamma-advance-filter/gamma-advance-filter.component.d.ts +3 -2
- package/lib/{application-controller/shared → shared}/gamma-bread-crumbs/bread-crumbs.component.d.ts +1 -1
- package/lib/{application-controller/shared → shared}/kpi-comon-service.d.ts +1 -1
- package/lib/template-module/KpiCreationModule/create-kpi-tree.component.d.ts +75 -0
- package/lib/template-module/KpiCreationModule/createKpi.service.d.ts +32 -0
- package/lib/template-module/KpiCreationModule/kpiCreation.module.d.ts +23 -0
- package/lib/template-module/KpiCreationModule/treeview/animation.d.ts +1 -0
- package/lib/template-module/KpiCreationModule/treeview/animations/defaults.d.ts +11 -0
- package/lib/template-module/KpiCreationModule/treeview/animations/expand-collapse.d.ts +2 -0
- package/lib/template-module/KpiCreationModule/treeview/animations/fade.d.ts +11 -0
- package/lib/template-module/KpiCreationModule/treeview/animations/shake.d.ts +2 -0
- package/lib/template-module/KpiCreationModule/treeview/animations/slide.d.ts +9 -0
- package/lib/template-module/KpiCreationModule/treeview/animations/zoom.d.ts +3 -0
- package/lib/template-module/KpiCreationModule/treeview/components/aside/aside.component.d.ts +26 -0
- package/lib/template-module/KpiCreationModule/treeview/components/basic/basic.component.d.ts +29 -0
- package/lib/template-module/KpiCreationModule/treeview/components/collapsable/collapsable.component.d.ts +37 -0
- package/lib/template-module/KpiCreationModule/treeview/components/divider/divider.component.d.ts +13 -0
- package/lib/template-module/KpiCreationModule/treeview/components/group/group.component.d.ts +17 -0
- package/lib/template-module/KpiCreationModule/treeview/components/spacer/spacer.component.d.ts +13 -0
- package/lib/template-module/KpiCreationModule/treeview/moment-helper.d.ts +3 -0
- package/lib/template-module/KpiCreationModule/treeview/treeview-navigation.service.d.ts +39 -0
- package/lib/template-module/KpiCreationModule/treeview/treeview-shared.service.d.ts +8 -0
- package/lib/template-module/KpiCreationModule/treeview/treeview.component.d.ts +52 -0
- package/lib/template-module/bookmarked-template/bookmarked-template.component.d.ts +109 -0
- package/lib/template-module/bookmarked-template/bookmarkedTemplate.module.d.ts +16 -0
- package/lib/template-module/cdrConfigModule/cdrConfig.module.d.ts +1 -1
- package/lib/template-module/defaulLandingComponent/defaultLandingComponent.module.d.ts +16 -0
- package/lib/template-module/defaulLandingComponent/landing-component.component.d.ts +109 -0
- package/lib/template-module/exceptionConfigModule/exceptionConfig.module.d.ts +1 -1
- package/lib/template-module/kpiWithMultiLayout/dynamin-modal-multi.component.d.ts +42 -0
- package/lib/template-module/kpiWithMultiLayout/kpi-with-multilayout.component.d.ts +117 -0
- package/lib/template-module/kpiWithMultiLayout/kpiWithMultiayout.module.d.ts +17 -0
- package/lib/template-module/kpiWithSingleLayout/dynamin-modal.component.d.ts +42 -0
- package/lib/template-module/kpiWithSingleLayout/kpi-with-dataset.component.d.ts +122 -0
- package/lib/template-module/kpiWithSingleLayout/kpiWithSingleLayout.module.d.ts +17 -0
- package/package.json +1 -1
- package/public-api.d.ts +38 -19
- package/esm2020/lib/application-controller/shared/advanced-component/advance-widget-header-filter/advance-widget-header-filter.component.mjs +0 -124
- package/esm2020/lib/application-controller/shared/advanced-component/app-advance-header/app-header.component.mjs +0 -220
- package/esm2020/lib/application-controller/shared/advanced-component/gamm-single-number-card/gamm-single-number-card.component.mjs +0 -95
- package/esm2020/lib/application-controller/shared/advanced-component/gamma-advance-chart/gamma-advance-chart.component.mjs +0 -362
- package/esm2020/lib/application-controller/shared/advanced-component/gamma-advance-operator-table/gamma-advance-operator-table.component.mjs +0 -177
- package/esm2020/lib/application-controller/shared/advanced-component/gamma-geo-chart/gamma-geo-chart.component.mjs +0 -441
- package/esm2020/lib/application-controller/shared/advanced-component/gamma-heatmap/gamma-heatmap.component.mjs +0 -328
- package/esm2020/lib/application-controller/shared/advanced-component/gamma-table-clumn-bar-chart/gamma-table-clumn-bar-chart.component.mjs +0 -155
- package/esm2020/lib/application-controller/shared/advanced-component/gamma-table-with-percentage/contentSafeHtml.mjs +0 -20
- package/esm2020/lib/application-controller/shared/advanced-component/gamma-table-with-percentage/gamma-table-with-percentage.component.mjs +0 -157
- package/esm2020/lib/application-controller/shared/advanced-component/gamma-today-previous/gamma-today-previous.component.mjs +0 -85
- package/esm2020/lib/application-controller/shared/advanced-component/google-geo-map/google-geo-map.component.mjs +0 -439
- package/esm2020/lib/application-controller/shared/app-title/app-title.component.mjs +0 -67
- package/esm2020/lib/application-controller/shared/gamam-widget/gamam-widget.component.mjs +0 -35
- package/esm2020/lib/application-controller/shared/gamma-advance-filter/gamma-advance-filter.component.mjs +0 -237
- package/esm2020/lib/application-controller/shared/gamma-bread-crumbs/bread-crumbs.component.mjs +0 -142
- package/esm2020/lib/application-controller/shared/kpi-comon-service.mjs +0 -537
- package/esm2020/lib/application-controller/shared/loading/loadingModule.mjs +0 -28
- package/esm2020/lib/application-controller/shared/safeHtmlPipe.mjs +0 -20
- /package/lib/{application-controller/shared → shared}/advanced-component/advance-widget-header-filter/advance-widget-header-filter.component.d.ts +0 -0
- /package/lib/{application-controller/shared → shared}/advanced-component/gamma-table-with-percentage/contentSafeHtml.d.ts +0 -0
- /package/lib/{application-controller/shared → shared}/loader/loader.component.d.ts +0 -0
- /package/lib/{application-controller/shared → shared}/loading/loading.component.d.ts +0 -0
- /package/lib/{application-controller/shared → shared}/loading/loadingModule.d.ts +0 -0
- /package/lib/{application-controller/shared → shared}/safeHtmlPipe.d.ts +0 -0
|
@@ -1,220 +0,0 @@
|
|
|
1
|
-
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
-
import moment from './../../../moment-helper';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "@angular/router";
|
|
5
|
-
import * as i2 from "@angular/common";
|
|
6
|
-
import * as i3 from "devextreme-angular/core";
|
|
7
|
-
import * as i4 from "devextreme-angular/ui/popup";
|
|
8
|
-
import * as i5 from "devextreme-angular/ui/select-box";
|
|
9
|
-
import * as i6 from "@angular/material/icon";
|
|
10
|
-
import * as i7 from "../../gamma-advance-filter/gamma-advance-filter.component";
|
|
11
|
-
import * as i8 from "../../gamma-bread-crumbs/bread-crumbs.component";
|
|
12
|
-
export class AppAdvanceHeaderComponent {
|
|
13
|
-
constructor(activatedRoute, route) {
|
|
14
|
-
this.activatedRoute = activatedRoute;
|
|
15
|
-
this.route = route;
|
|
16
|
-
this.isEditButton = true;
|
|
17
|
-
this.toggleEvent = new EventEmitter();
|
|
18
|
-
this.autoload_button = true;
|
|
19
|
-
this.toolTipText = 'By Date Range';
|
|
20
|
-
this.daterange = {};
|
|
21
|
-
this.daterange_options = {
|
|
22
|
-
locale: { format: 'YYYY-MM-DD' },
|
|
23
|
-
alwaysShowCalendars: true,
|
|
24
|
-
showCustomRangeLabel: true,
|
|
25
|
-
ranges: {
|
|
26
|
-
Today: [moment(), moment()],
|
|
27
|
-
'Last 1 Month': [moment().subtract(30, 'days'), moment()],
|
|
28
|
-
'Last 3 Month': [moment().subtract(91, 'days'), moment()],
|
|
29
|
-
'Last 6 Month': [moment().subtract(182, 'days'), moment()],
|
|
30
|
-
'Last 12 Month': [moment().subtract(365, 'days'), moment()],
|
|
31
|
-
'Last 13 Months': [
|
|
32
|
-
moment().subtract(12, 'month').startOf('month'),
|
|
33
|
-
moment(),
|
|
34
|
-
],
|
|
35
|
-
'This Month': [moment().startOf('month'), moment().endOf('month')],
|
|
36
|
-
},
|
|
37
|
-
};
|
|
38
|
-
this.srvTypeDataSource = [];
|
|
39
|
-
this.srvTypeDisplayValue = [];
|
|
40
|
-
this.selectedDateRangeOrServtype = new EventEmitter();
|
|
41
|
-
this.getFilterPageConfig = new EventEmitter();
|
|
42
|
-
}
|
|
43
|
-
set filterItems(value) {
|
|
44
|
-
if (value === undefined || value.length === 0) {
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
else {
|
|
48
|
-
let displayStartDate = '';
|
|
49
|
-
let displayEndDate = '';
|
|
50
|
-
this.filterItemsForFilter = value;
|
|
51
|
-
value.forEach(element => {
|
|
52
|
-
if (element.filterType === 'date' || element.filterType === 'datetime') {
|
|
53
|
-
if (element.defaultFilterType === "dynamic" && element.momentFunction !== "" && element.defaultFilterValue !== "" && element.momentFormat !== "") {
|
|
54
|
-
if (element.apiName === "startDate") {
|
|
55
|
-
if (element.display) {
|
|
56
|
-
displayStartDate = this.selectedDates[element.apiName];
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
if (element.apiName === "endDate") {
|
|
60
|
-
if (element.display) {
|
|
61
|
-
displayEndDate = this.selectedDates[element.apiName];
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
else if (element.defaultFilterType === "static" && element.defaultFilterValue !== "") {
|
|
66
|
-
if (element.apiName === "startDate") {
|
|
67
|
-
if (element.display) {
|
|
68
|
-
displayStartDate = moment(this.selectedDates[element.apiName]).format(element.momentFormat);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
if (element.apiName === "endDate") {
|
|
72
|
-
if (element.display) {
|
|
73
|
-
displayEndDate = moment(this.selectedDates[element.apiName]).format(element.momentFormat);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
});
|
|
79
|
-
if (displayStartDate && displayEndDate) {
|
|
80
|
-
this.selectedDetesforView = `${displayStartDate} - ${displayEndDate}`;
|
|
81
|
-
}
|
|
82
|
-
else if (displayStartDate) {
|
|
83
|
-
this.selectedDetesforView = displayStartDate;
|
|
84
|
-
}
|
|
85
|
-
else if (displayEndDate) {
|
|
86
|
-
this.selectedDetesforView = displayEndDate;
|
|
87
|
-
}
|
|
88
|
-
else {
|
|
89
|
-
this.selectedDetesforView = '';
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
set contextFilterItems(value) {
|
|
94
|
-
if (!value) {
|
|
95
|
-
this.contextFilterItemsForFilter = value;
|
|
96
|
-
}
|
|
97
|
-
else {
|
|
98
|
-
this.contextFilterItemsForFilter = [];
|
|
99
|
-
value.forEach(element => {
|
|
100
|
-
if (element.filterType == "context") {
|
|
101
|
-
this.contextFilterItemsForFilter.push(element);
|
|
102
|
-
}
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
ngOnInit() {
|
|
107
|
-
}
|
|
108
|
-
pageAutoloadStopRun() {
|
|
109
|
-
if (this.autoload_button == true) {
|
|
110
|
-
this.autoload_button = false;
|
|
111
|
-
clearInterval(this.time_out_id);
|
|
112
|
-
this.time_out_id = 0;
|
|
113
|
-
}
|
|
114
|
-
else if (this.autoload_button == false) {
|
|
115
|
-
this.autoload_button = true;
|
|
116
|
-
this.time_out_id = 1;
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
callPageDocumentation() {
|
|
120
|
-
}
|
|
121
|
-
getDateOrServeTypeValueChange(node) {
|
|
122
|
-
this.selectedDateRangeOrServtype.emit(node);
|
|
123
|
-
}
|
|
124
|
-
editKpi() {
|
|
125
|
-
const pageId = this.activatedRoute.snapshot.queryParams['pageId'];
|
|
126
|
-
let navigationExtras = {
|
|
127
|
-
queryParams: {
|
|
128
|
-
pageId: pageId,
|
|
129
|
-
contentType: "edit"
|
|
130
|
-
},
|
|
131
|
-
};
|
|
132
|
-
this.route.navigate(['/apps/controlPanel/pageConfigController'], navigationExtras);
|
|
133
|
-
}
|
|
134
|
-
advanceFilterKpi() {
|
|
135
|
-
this.isAdvanceFilter = true;
|
|
136
|
-
}
|
|
137
|
-
getSerchFilter(filter) {
|
|
138
|
-
this.isAdvanceFilter = false;
|
|
139
|
-
let displayStartDate = '';
|
|
140
|
-
let displayEndDate = '';
|
|
141
|
-
this.filterItemsForFilter.forEach(element => {
|
|
142
|
-
if (element.filterType === 'date' || element.filterType === 'datetime') {
|
|
143
|
-
if (element.defaultFilterType === "dynamic" && element.momentFunction !== "" && element.defaultFilterValue !== "" && element.momentFormat !== "") {
|
|
144
|
-
let [count, unit] = element.defaultFilterValue.split(',');
|
|
145
|
-
if (element.apiName === "startDate") {
|
|
146
|
-
if (element.display) {
|
|
147
|
-
filter.startDate = moment(filter.startDate).format(element.momentFormat);
|
|
148
|
-
displayStartDate = filter.startDate;
|
|
149
|
-
}
|
|
150
|
-
else {
|
|
151
|
-
filter.startDate = moment(filter.endDate)[element.momentFunction](parseInt(count), unit).format(element.momentFormat);
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
if (element.apiName === "endDate") {
|
|
155
|
-
filter.endDate = moment(filter.endDate).format(element.momentFormat);
|
|
156
|
-
if (element.display) {
|
|
157
|
-
displayEndDate = filter.endDate;
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
else if (element.defaultFilterType === "static" && element.defaultFilterValue !== "") {
|
|
162
|
-
if (element.apiName === "startDate") {
|
|
163
|
-
if (element.display) {
|
|
164
|
-
displayStartDate = moment(this.selectedDates[element.apiName]).format(element.momentFormat);
|
|
165
|
-
filter.startDate = moment(this.selectedDates[element.apiName]).format(element.momentFormat);
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
if (element.apiName === "endDate") {
|
|
169
|
-
if (element.display) {
|
|
170
|
-
displayEndDate = moment(this.selectedDates[element.apiName]).format(element.momentFormat);
|
|
171
|
-
filter.endDate = moment(this.selectedDates[element.apiName]).format(element.momentFormat);
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
});
|
|
177
|
-
if (displayStartDate && displayEndDate) {
|
|
178
|
-
this.selectedDetesforView = `${displayStartDate} - ${displayEndDate}`;
|
|
179
|
-
}
|
|
180
|
-
else if (displayStartDate) {
|
|
181
|
-
this.selectedDetesforView = displayStartDate;
|
|
182
|
-
}
|
|
183
|
-
else if (displayEndDate) {
|
|
184
|
-
this.selectedDetesforView = displayEndDate;
|
|
185
|
-
}
|
|
186
|
-
else {
|
|
187
|
-
this.selectedDetesforView = '';
|
|
188
|
-
}
|
|
189
|
-
this.getFilterPageConfig.emit(filter);
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
AppAdvanceHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AppAdvanceHeaderComponent, deps: [{ token: i1.ActivatedRoute }, { token: i1.Router }], target: i0.ɵɵFactoryTarget.Component });
|
|
193
|
-
AppAdvanceHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: AppAdvanceHeaderComponent, selector: "app-advance-header", inputs: { pageTitle: "pageTitle", bread_crumbs_container: "bread_crumbs_container", isEditButton: "isEditButton", isAdvanceButton: "isAdvanceButton", selectedDates: "selectedDates", filterItems: "filterItems", contextFilterItems: "contextFilterItems" }, outputs: { toggleEvent: "toggleEvent", selectedDateRangeOrServtype: "selectedDateRangeOrServtype", getFilterPageConfig: "getFilterPageConfig" }, ngImport: i0, template: "<div class=\"flex flex-col mb-2\">\n <div class=\"flex justify-between border-b dark:bg-transparent\">\n <div class=\"flex flex-col ml-1\">\n <div class=\"flex items-center float-start\">\n <div class=\"flex items-center overflow-hidden\">\n <mat-icon class=\"icon-size-2\" [svgIcon]=\"'heroicons_solid:template'\"></mat-icon>\n </div>\n <h2\n class=\"text-2xl md:text-2xl py-3 font-extrabold items-center ml-2 tracking-tight leading-5 truncate capitalize\">\n {{ pageTitle }}\n </h2>\n </div>\n <div class=\"\">\n <!-- INCOMING -->\n <gamma-bread-crumbs [kpi_data_container]=\"bread_crumbs_container\"></gamma-bread-crumbs>\n </div>\n </div>\n <div class=\"flex justify-between items-center border-l-2 p-0 m-0\">\n\n <div class=\"mx-2\" *ngIf=\"isEditButton\">\n <div (click)=\"editKpi()\"\n class=\"bg-blue-700 cursor-pointer dark:bg-blue-600 dark:focus:ring-blue-800 dark:hover:bg-blue-700 focus:outline-none focus:ring-4 focus:ring-blue-300 font-medium hover:bg-blue-800 mr-2 px-2.5 py-2 rounded text-sm text-white ng-star-inserted\">\n Edit\n </div>\n </div>\n <div class=\"w-1 h-full border-l-2\"></div>\n <ng-container *ngIf=\"contextFilterItemsForFilter && contextFilterItemsForFilter.length !== 0\">\n <div class=\"mx-2\">\n <dx-select-box [dataSource]=\"contextFilterItemsForFilter\" displayExpr=\"label\" value=\"defaultFilterValue\"></dx-select-box>\n </div>\n </ng-container>\n \n <div class=\"w-1 h-full border-l-2\"></div>\n <div class=\"mx-2\">\n <div class=\"cursor-pointer\" (click)=\"advanceFilterKpi()\"> {{selectedDetesforView}}</div>\n </div>\n <div class=\"w-1 h-full border-l-2\"></div>\n <div class=\"mx-2\" *ngIf=\"isAdvanceButton\">\n <button class=\"mat-focus-indicator mat-menu-trigger mat-icon-button mat-button-base\"\n aria-haspopup=\"menu\" (click)=\"advanceFilterKpi()\">\n <span class=\"mat-button-wrapper\">\n <span class=\"relative\">\n <mat-icon title=\"Filters\" [svgIcon]=\"'heroicons_outline:adjustments'\">\n </mat-icon>\n </span>\n </span>\n </button>\n </div>\n\n\n <div class=\"w-1 h-full border-l-2\"></div>\n \n\n </div>\n </div>\n</div>\n\n<dx-popup [(visible)]=\"isAdvanceFilter\" [closeOnOutsideClick]=\"false\" [dragEnabled]=\"false\" [width]=\"600\"\n [height]=\"'auto'\" [showTitle]=\"true\" class=\"popup\" title=\"Filter\">\n <div *dxTemplate=\"let data of 'content'\">\n <app-gamma-advance-filter [kpiId]=\"'231212'\" [filterOperatorData]=\"filterItemsForFilter\"\n [isButtonDesiable]=\"isAdvanceFilter\" [filterStartDate]=\"filterStartDate\" [filterEndDate]=\"filterEndDate\"\n (filterDataObject)=\"getSerchFilter($event)\"></app-gamma-advance-filter>\n </div>\n</dx-popup>", styles: [""], dependencies: [{ 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"] }, { kind: "component", type: i5.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: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i7.GammaAdvanceFilterComponent, selector: "app-gamma-advance-filter", inputs: ["kpiId", "filterStartDate", "filterEndDate", "browser_api_config", "isButtonDesiable", "filterOperatorData"], outputs: ["filterDataObject"] }, { kind: "component", type: i8.BreadCrumbsComponent, selector: "gamma-bread-crumbs", inputs: ["kpi_data_container"] }] });
|
|
194
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AppAdvanceHeaderComponent, decorators: [{
|
|
195
|
-
type: Component,
|
|
196
|
-
args: [{ selector: 'app-advance-header', template: "<div class=\"flex flex-col mb-2\">\n <div class=\"flex justify-between border-b dark:bg-transparent\">\n <div class=\"flex flex-col ml-1\">\n <div class=\"flex items-center float-start\">\n <div class=\"flex items-center overflow-hidden\">\n <mat-icon class=\"icon-size-2\" [svgIcon]=\"'heroicons_solid:template'\"></mat-icon>\n </div>\n <h2\n class=\"text-2xl md:text-2xl py-3 font-extrabold items-center ml-2 tracking-tight leading-5 truncate capitalize\">\n {{ pageTitle }}\n </h2>\n </div>\n <div class=\"\">\n <!-- INCOMING -->\n <gamma-bread-crumbs [kpi_data_container]=\"bread_crumbs_container\"></gamma-bread-crumbs>\n </div>\n </div>\n <div class=\"flex justify-between items-center border-l-2 p-0 m-0\">\n\n <div class=\"mx-2\" *ngIf=\"isEditButton\">\n <div (click)=\"editKpi()\"\n class=\"bg-blue-700 cursor-pointer dark:bg-blue-600 dark:focus:ring-blue-800 dark:hover:bg-blue-700 focus:outline-none focus:ring-4 focus:ring-blue-300 font-medium hover:bg-blue-800 mr-2 px-2.5 py-2 rounded text-sm text-white ng-star-inserted\">\n Edit\n </div>\n </div>\n <div class=\"w-1 h-full border-l-2\"></div>\n <ng-container *ngIf=\"contextFilterItemsForFilter && contextFilterItemsForFilter.length !== 0\">\n <div class=\"mx-2\">\n <dx-select-box [dataSource]=\"contextFilterItemsForFilter\" displayExpr=\"label\" value=\"defaultFilterValue\"></dx-select-box>\n </div>\n </ng-container>\n \n <div class=\"w-1 h-full border-l-2\"></div>\n <div class=\"mx-2\">\n <div class=\"cursor-pointer\" (click)=\"advanceFilterKpi()\"> {{selectedDetesforView}}</div>\n </div>\n <div class=\"w-1 h-full border-l-2\"></div>\n <div class=\"mx-2\" *ngIf=\"isAdvanceButton\">\n <button class=\"mat-focus-indicator mat-menu-trigger mat-icon-button mat-button-base\"\n aria-haspopup=\"menu\" (click)=\"advanceFilterKpi()\">\n <span class=\"mat-button-wrapper\">\n <span class=\"relative\">\n <mat-icon title=\"Filters\" [svgIcon]=\"'heroicons_outline:adjustments'\">\n </mat-icon>\n </span>\n </span>\n </button>\n </div>\n\n\n <div class=\"w-1 h-full border-l-2\"></div>\n \n\n </div>\n </div>\n</div>\n\n<dx-popup [(visible)]=\"isAdvanceFilter\" [closeOnOutsideClick]=\"false\" [dragEnabled]=\"false\" [width]=\"600\"\n [height]=\"'auto'\" [showTitle]=\"true\" class=\"popup\" title=\"Filter\">\n <div *dxTemplate=\"let data of 'content'\">\n <app-gamma-advance-filter [kpiId]=\"'231212'\" [filterOperatorData]=\"filterItemsForFilter\"\n [isButtonDesiable]=\"isAdvanceFilter\" [filterStartDate]=\"filterStartDate\" [filterEndDate]=\"filterEndDate\"\n (filterDataObject)=\"getSerchFilter($event)\"></app-gamma-advance-filter>\n </div>\n</dx-popup>" }]
|
|
197
|
-
}], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i1.Router }]; }, propDecorators: { pageTitle: [{
|
|
198
|
-
type: Input
|
|
199
|
-
}], bread_crumbs_container: [{
|
|
200
|
-
type: Input
|
|
201
|
-
}], isEditButton: [{
|
|
202
|
-
type: Input
|
|
203
|
-
}], isAdvanceButton: [{
|
|
204
|
-
type: Input
|
|
205
|
-
}], selectedDates: [{
|
|
206
|
-
type: Input
|
|
207
|
-
}], toggleEvent: [{
|
|
208
|
-
type: Output
|
|
209
|
-
}], selectedDateRangeOrServtype: [{
|
|
210
|
-
type: Output
|
|
211
|
-
}], getFilterPageConfig: [{
|
|
212
|
-
type: Output
|
|
213
|
-
}], filterItems: [{
|
|
214
|
-
type: Input,
|
|
215
|
-
args: ['filterItems']
|
|
216
|
-
}], contextFilterItems: [{
|
|
217
|
-
type: Input,
|
|
218
|
-
args: ['contextFilterItems']
|
|
219
|
-
}] } });
|
|
220
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWhlYWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvc2hhcmVkL2FkdmFuY2VkLWNvbXBvbmVudC9hcHAtYWR2YW5jZS1oZWFkZXIvYXBwLWhlYWRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvc2hhcmVkL2FkdmFuY2VkLWNvbXBvbmVudC9hcHAtYWR2YW5jZS1oZWFkZXIvYXBwLWhlYWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRS9FLE9BQU8sTUFBTSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7O0FBTTlDLE1BQU0sT0FBTyx5QkFBeUI7SUErSGxDLFlBQ1ksY0FBOEIsRUFDOUIsS0FBYTtRQURiLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixVQUFLLEdBQUwsS0FBSyxDQUFRO1FBOUhoQixpQkFBWSxHQUFZLElBQUksQ0FBQztRQUs1QixnQkFBVyxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBU3pFLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBRXZCLGdCQUFXLEdBQUcsZUFBZSxDQUFDO1FBRXZCLGNBQVMsR0FBUSxFQUFFLENBQUM7UUFDcEIsc0JBQWlCLEdBQVE7WUFDNUIsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRTtZQUNoQyxtQkFBbUIsRUFBRSxJQUFJO1lBQ3pCLG9CQUFvQixFQUFFLElBQUk7WUFDMUIsTUFBTSxFQUFFO2dCQUNK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RyxnQkFBZ0IsQ0FBQztTQUNoRDthQUFNLElBQUksY0FBYyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxjQUFjLENBQUM7U0FDOUM7YUFBTTtZQUNILElBQUksQ0FBQyxvQkFBb0IsR0FBRyxFQUFFLENBQUM7U0FDbEM7UUFJRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ3pDLENBQUM7O3NIQTdPUSx5QkFBeUI7MEdBQXpCLHlCQUF5Qix5Y0NSdEMsd3lHQWdFVzsyRkR4REUseUJBQXlCO2tCQUxyQyxTQUFTOytCQUNJLG9CQUFvQjswSEFLckIsU0FBUztzQkFBakIsS0FBSztnQkFDRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUVHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUksV0FBVztzQkFBcEIsTUFBTTtnQkFvQ1UsMkJBQTJCO3NCQUEzQyxNQUFNO2dCQUNVLG1CQUFtQjtzQkFBbkMsTUFBTTtnQkFNSCxXQUFXO3NCQURkLEtBQUs7dUJBQUMsYUFBYTtnQkE0RGhCLGtCQUFrQjtzQkFEckIsS0FBSzt1QkFBQyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgTmF2aWdhdGlvbkV4dHJhcywgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCBtb21lbnQgZnJvbSAnLi8uLi8uLi8uLi9tb21lbnQtaGVscGVyJztcbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXBwLWFkdmFuY2UtaGVhZGVyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYXBwLWhlYWRlci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vYXBwLWhlYWRlci5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBBcHBBZHZhbmNlSGVhZGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBASW5wdXQoKSBwYWdlVGl0bGU6IHN0cmluZztcbiAgICBASW5wdXQoKSBicmVhZF9jcnVtYnNfY29udGFpbmVyOiBhbnk7XG4gICAgQElucHV0KCkgaXNFZGl0QnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBpc0FkdmFuY2VCdXR0b246IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKSBzZWxlY3RlZERhdGVzOiBhbnk7XG5cbiAgICBAT3V0cHV0KCkgdG9nZ2xlRXZlbnQ6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gICAgaXNBZHZhbmNlRmlsdGVyOiBib29sZWFuO1xuICAgIGJyb3dzZXJfY29uZmlnOiBhbnk7XG4gICAga3BpX2lkOiBhbnk7XG5cbiAgICBmaWx0ZXJTdGFydERhdGU7XG4gICAgZmlsdGVyRW5kRGF0ZTtcbiAgICBmaWx0ZXJPcHRpb25zO1xuXG4gICAgYXV0b2xvYWRfYnV0dG9uID0gdHJ1ZTtcbiAgICBwcml2YXRlIHRpbWVfb3V0X2lkO1xuICAgIHRvb2xUaXBUZXh0ID0gJ0J5IERhdGUgUmFuZ2UnO1xuXG4gICAgcHVibGljIGRhdGVyYW5nZTogYW55ID0ge307XG4gICAgcHVibGljIGRhdGVyYW5nZV9vcHRpb25zOiBhbnkgPSB7XG4gICAgICAgIGxvY2FsZTogeyBmb3JtYXQ6ICdZWVlZLU1NLUREJyB9LFxuICAgICAgICBhbHdheXNTaG93Q2FsZW5kYXJzOiB0cnVlLFxuICAgICAgICBzaG93Q3VzdG9tUmFuZ2VMYWJlbDogdHJ1ZSxcbiAgICAgICAgcmFuZ2VzOiB7XG4gICAgICAgICAgICBUb2RheTogW21vbWVudCgpLCBtb21lbnQoKV0sXG4gICAgICAgICAgICAvLyBZZXN0ZXJkYXk6IFttb21lbnQoKS5zdWJ0cmFjdCgxLCAnZGF5cycpLCBtb21lbnQoKS5zdWJ0cmFjdCgxLCAnZGF5cycpXSxcbiAgICAgICAgICAgICdMYXN0IDEgTW9udGgnOiBbbW9tZW50KCkuc3VidHJhY3QoMzAsICdkYXlzJyksIG1vbWVudCgpXSxcbiAgICAgICAgICAgICdMYXN0IDMgTW9udGgnOiBbbW9tZW50KCkuc3VidHJhY3QoOTEsICdkYXlzJyksIG1vbWVudCgpXSxcbiAgICAgICAgICAgICdMYXN0IDYgTW9udGgnOiBbbW9tZW50KCkuc3VidHJhY3QoMTgyLCAnZGF5cycpLCBtb21lbnQoKV0sXG4gICAgICAgICAgICAnTGFzdCAxMiBNb250aCc6IFttb21lbnQoKS5zdWJ0cmFjdCgzNjUsICdkYXlzJyksIG1vbWVudCgpXSxcbiAgICAgICAgICAgICdMYXN0IDEzIE1vbnRocyc6IFtcbiAgICAgICAgICAgICAgICBtb21lbnQoKS5zdWJ0cmFjdCgxMiwgJ21vbnRoJykuc3RhcnRPZignbW9udGgnKSxcbiAgICAgICAgICAgICAgICBtb21lbnQoKSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAnVGhpcyBNb250aCc6IFttb21lbnQoKS5zdGFydE9mKCdtb250aCcpLCBtb21lbnQoKS5lbmRPZignbW9udGgnKV0sXG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIHNydlR5cGVEYXRhU291cmNlOiBhbnkgPSBbXTtcbiAgICBzcnZUeXBlRGlzcGxheVZhbHVlOiBhbnkgPSBbXTtcbiAgICBzZWxlY3RlZERldGVzZm9yVmlldzogYW55O1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgc2VsZWN0ZWREYXRlUmFuZ2VPclNlcnZ0eXBlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgcHVibGljIGdldEZpbHRlclBhZ2VDb25maWc6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cbiAgICBmaWx0ZXJJdGVtc0ZvckZpbHRlcjogYW55O1xuXG4gICAgQElucHV0KCdmaWx0ZXJJdGVtcycpXG4gICAgc2V0IGZpbHRlckl0ZW1zKHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICBsZXQgZGlzcGxheVN0YXJ0RGF0ZSA9ICcnO1xuICAgICAgICAgICAgbGV0IGRpc3BsYXlFbmREYXRlID0gJyc7XG4gICAgICAgICAgICB0aGlzLmZpbHRlckl0ZW1zRm9yRmlsdGVyID0gdmFsdWU7XG4gICAgICAgICAgICB2YWx1ZS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmZpbHRlclR5cGUgPT09ICdkYXRlJyB8fCBlbGVtZW50LmZpbHRlclR5cGUgPT09ICdkYXRldGltZScpIHtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmRlZmF1bHRGaWx0ZXJUeXBlID09PSBcImR5bmFtaWNcIiAmJiBlbGVtZW50Lm1vbWVudEZ1bmN0aW9uICE9PSBcIlwiICYmIGVsZW1lbnQuZGVmYXVsdEZpbHRlclZhbHVlICE9PSBcIlwiICYmIGVsZW1lbnQubW9tZW50Rm9ybWF0ICE9PSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gIGxldCBbY291bnQsIHVuaXRdID0gZWxlbWVudC5kZWZhdWx0RmlsdGVyVmFsdWUuc3BsaXQoJywnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxldCBmb3JtYXR0ZWREYXRlID0gbW9tZW50KClbZWxlbWVudC5tb21lbnRGdW5jdGlvbl0ocGFyc2VJbnQoY291bnQpLCB1bml0KS5mb3JtYXQoZWxlbWVudC5tb21lbnRGb3JtYXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuYXBpTmFtZSA9PT0gXCJzdGFydERhdGVcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmRpc3BsYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheVN0YXJ0RGF0ZSA9IHRoaXMuc2VsZWN0ZWREYXRlc1tlbGVtZW50LmFwaU5hbWVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmFwaU5hbWUgPT09IFwiZW5kRGF0ZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuZGlzcGxheSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5RW5kRGF0ZSA9IHRoaXMuc2VsZWN0ZWREYXRlc1tlbGVtZW50LmFwaU5hbWVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LmRlZmF1bHRGaWx0ZXJUeXBlID09PSBcInN0YXRpY1wiICYmIGVsZW1lbnQuZGVmYXVsdEZpbHRlclZhbHVlICE9PSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuYXBpTmFtZSA9PT0gXCJzdGFydERhdGVcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmRpc3BsYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheVN0YXJ0RGF0ZSA9IG1vbWVudCh0aGlzLnNlbGVjdGVkRGF0ZXNbZWxlbWVudC5hcGlOYW1lXSkuZm9ybWF0KGVsZW1lbnQubW9tZW50Rm9ybWF0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5hcGlOYW1lID09PSBcImVuZERhdGVcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmRpc3BsYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUVuZERhdGUgPSBtb21lbnQodGhpcy5zZWxlY3RlZERhdGVzW2VsZW1lbnQuYXBpTmFtZV0pLmZvcm1hdChlbGVtZW50Lm1vbWVudEZvcm1hdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIHRoaXMuZ2V0RmlsdGVyUGFnZUNvbmZpZy5lbWl0KGZpbHRlcl9jb25maWcpXG5cbiAgICAgICAgICAgIGlmIChkaXNwbGF5U3RhcnREYXRlICYmIGRpc3BsYXlFbmREYXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERldGVzZm9yVmlldyA9IGAke2Rpc3BsYXlTdGFydERhdGV9IC0gJHtkaXNwbGF5RW5kRGF0ZX1gO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChkaXNwbGF5U3RhcnREYXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERldGVzZm9yVmlldyA9IGRpc3BsYXlTdGFydERhdGU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRpc3BsYXlFbmREYXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERldGVzZm9yVmlldyA9IGRpc3BsYXlFbmREYXRlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGV0ZXNmb3JWaWV3ID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuXG4gICAgfVxuXG4gICAgY29udGV4dEZpbHRlckl0ZW1zRm9yRmlsdGVyOmFueTtcbiAgICBASW5wdXQoJ2NvbnRleHRGaWx0ZXJJdGVtcycpXG4gICAgc2V0IGNvbnRleHRGaWx0ZXJJdGVtcyh2YWx1ZSkge1xuICAgICAgICBcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0RmlsdGVySXRlbXNGb3JGaWx0ZXIgPSB2YWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dEZpbHRlckl0ZW1zRm9yRmlsdGVyID0gW107XG4gICAgICAgICAgICB2YWx1ZS5mb3JFYWNoKGVsZW1lbnQ9PntcbiAgICAgICAgICAgICAgICBpZihlbGVtZW50LmZpbHRlclR5cGUgPT0gXCJjb250ZXh0XCIpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHRGaWx0ZXJJdGVtc0ZvckZpbHRlci5wdXNoKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBcbiAgICAgICAgfVxuXG5cbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgIHByaXZhdGUgcm91dGU6IFJvdXRlcixcbiAgICApIHtcblxuICAgIH1cblxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG5cblxuICAgIH1cblxuXG5cbiAgICBwYWdlQXV0b2xvYWRTdG9wUnVuKCkge1xuICAgICAgICBpZiAodGhpcy5hdXRvbG9hZF9idXR0b24gPT0gdHJ1ZSkge1xuICAgICAgICAgICAgdGhpcy5hdXRvbG9hZF9idXR0b24gPSBmYWxzZTtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy50aW1lX291dF9pZCk7XG4gICAgICAgICAgICB0aGlzLnRpbWVfb3V0X2lkID0gMDtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmF1dG9sb2FkX2J1dHRvbiA9PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhpcy5hdXRvbG9hZF9idXR0b24gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy50aW1lX291dF9pZCA9IDE7XG4gICAgICAgICAgICAvLyB0aGlzLmRhdGVzVXBkYXRlZCh0aGlzLnNlbGVjdGVkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNhbGxQYWdlRG9jdW1lbnRhdGlvbigpIHtcblxuICAgIH1cblxuXG4gICAgZ2V0RGF0ZU9yU2VydmVUeXBlVmFsdWVDaGFuZ2Uobm9kZTogYW55KSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlUmFuZ2VPclNlcnZ0eXBlLmVtaXQobm9kZSlcbiAgICB9XG5cblxuICAgIGVkaXRLcGkoKSB7XG4gICAgICAgIGNvbnN0IHBhZ2VJZCA9IHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNbJ3BhZ2VJZCddO1xuICAgICAgICBsZXQgbmF2aWdhdGlvbkV4dHJhczogTmF2aWdhdGlvbkV4dHJhcyA9IHtcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgcGFnZUlkOiBwYWdlSWQsXG4gICAgICAgICAgICAgICAgY29udGVudFR5cGU6IFwiZWRpdFwiXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnJvdXRlLm5hdmlnYXRlKFsnL2FwcHMvY29udHJvbFBhbmVsL3BhZ2VDb25maWdDb250cm9sbGVyJ10sIG5hdmlnYXRpb25FeHRyYXMpO1xuICAgIH1cblxuXG4gICAgYWR2YW5jZUZpbHRlcktwaSgpIHtcbiAgICAgICAgdGhpcy5pc0FkdmFuY2VGaWx0ZXIgPSB0cnVlO1xuICAgIH1cblxuICAgIGdldFNlcmNoRmlsdGVyKGZpbHRlcikge1xuXG4gICAgICAgIHRoaXMuaXNBZHZhbmNlRmlsdGVyID0gZmFsc2U7XG4gICAgICAgIGxldCBkaXNwbGF5U3RhcnREYXRlID0gJyc7XG4gICAgICAgIGxldCBkaXNwbGF5RW5kRGF0ZSA9ICcnO1xuXG4gICAgICAgIHRoaXMuZmlsdGVySXRlbXNGb3JGaWx0ZXIuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgIGlmIChlbGVtZW50LmZpbHRlclR5cGUgPT09ICdkYXRlJyB8fCBlbGVtZW50LmZpbHRlclR5cGUgPT09ICdkYXRldGltZScpIHtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5kZWZhdWx0RmlsdGVyVHlwZSA9PT0gXCJkeW5hbWljXCIgJiYgZWxlbWVudC5tb21lbnRGdW5jdGlvbiAhPT0gXCJcIiAmJiBlbGVtZW50LmRlZmF1bHRGaWx0ZXJWYWx1ZSAhPT0gXCJcIiAmJiBlbGVtZW50Lm1vbWVudEZvcm1hdCAhPT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICBsZXQgW2NvdW50LCB1bml0XSA9IGVsZW1lbnQuZGVmYXVsdEZpbHRlclZhbHVlLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmFwaU5hbWUgPT09IFwic3RhcnREYXRlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmRpc3BsYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIuc3RhcnREYXRlID0gbW9tZW50KGZpbHRlci5zdGFydERhdGUpLmZvcm1hdChlbGVtZW50Lm1vbWVudEZvcm1hdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheVN0YXJ0RGF0ZSA9IGZpbHRlci5zdGFydERhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5zdGFydERhdGUgPSBtb21lbnQoZmlsdGVyLmVuZERhdGUpW2VsZW1lbnQubW9tZW50RnVuY3Rpb25dKHBhcnNlSW50KGNvdW50KSwgdW5pdCkuZm9ybWF0KGVsZW1lbnQubW9tZW50Rm9ybWF0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5hcGlOYW1lID09PSBcImVuZERhdGVcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLmVuZERhdGUgPSBtb21lbnQoZmlsdGVyLmVuZERhdGUpLmZvcm1hdChlbGVtZW50Lm1vbWVudEZvcm1hdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5kaXNwbGF5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUVuZERhdGUgPSBmaWx0ZXIuZW5kRGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5kZWZhdWx0RmlsdGVyVHlwZSA9PT0gXCJzdGF0aWNcIiAmJiBlbGVtZW50LmRlZmF1bHRGaWx0ZXJWYWx1ZSAhPT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuYXBpTmFtZSA9PT0gXCJzdGFydERhdGVcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuZGlzcGxheSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlTdGFydERhdGUgPSBtb21lbnQodGhpcy5zZWxlY3RlZERhdGVzW2VsZW1lbnQuYXBpTmFtZV0pLmZvcm1hdChlbGVtZW50Lm1vbWVudEZvcm1hdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLnN0YXJ0RGF0ZSA9IG1vbWVudCh0aGlzLnNlbGVjdGVkRGF0ZXNbZWxlbWVudC5hcGlOYW1lXSkuZm9ybWF0KGVsZW1lbnQubW9tZW50Rm9ybWF0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5hcGlOYW1lID09PSBcImVuZERhdGVcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuZGlzcGxheSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlFbmREYXRlID0gbW9tZW50KHRoaXMuc2VsZWN0ZWREYXRlc1tlbGVtZW50LmFwaU5hbWVdKS5mb3JtYXQoZWxlbWVudC5tb21lbnRGb3JtYXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5lbmREYXRlID0gbW9tZW50KHRoaXMuc2VsZWN0ZWREYXRlc1tlbGVtZW50LmFwaU5hbWVdKS5mb3JtYXQoZWxlbWVudC5tb21lbnRGb3JtYXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGRpc3BsYXlTdGFydERhdGUgJiYgZGlzcGxheUVuZERhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREZXRlc2ZvclZpZXcgPSBgJHtkaXNwbGF5U3RhcnREYXRlfSAtICR7ZGlzcGxheUVuZERhdGV9YDtcbiAgICAgICAgfSBlbHNlIGlmIChkaXNwbGF5U3RhcnREYXRlKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGV0ZXNmb3JWaWV3ID0gZGlzcGxheVN0YXJ0RGF0ZTtcbiAgICAgICAgfSBlbHNlIGlmIChkaXNwbGF5RW5kRGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERldGVzZm9yVmlldyA9IGRpc3BsYXlFbmREYXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERldGVzZm9yVmlldyA9ICcnO1xuICAgICAgICB9XG5cblxuXG4gICAgICAgIHRoaXMuZ2V0RmlsdGVyUGFnZUNvbmZpZy5lbWl0KGZpbHRlcilcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBtYi0yXCI+XG4gICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGJvcmRlci1iIGRhcms6YmctdHJhbnNwYXJlbnRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgbWwtMVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGZsb2F0LXN0YXJ0XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIG92ZXJmbG93LWhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJpY29uLXNpemUtMlwiIFtzdmdJY29uXT1cIidoZXJvaWNvbnNfc29saWQ6dGVtcGxhdGUnXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8aDJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LTJ4bCBtZDp0ZXh0LTJ4bCBweS0zIGZvbnQtZXh0cmFib2xkIGl0ZW1zLWNlbnRlciBtbC0yIHRyYWNraW5nLXRpZ2h0IGxlYWRpbmctNSB0cnVuY2F0ZSBjYXBpdGFsaXplXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IHBhZ2VUaXRsZSB9fVxuICAgICAgICAgICAgICAgIDwvaDI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJcIj5cbiAgICAgICAgICAgICAgICA8IS0tIElOQ09NSU5HIC0tPlxuICAgICAgICAgICAgICAgIDxnYW1tYS1icmVhZC1jcnVtYnMgW2twaV9kYXRhX2NvbnRhaW5lcl09XCJicmVhZF9jcnVtYnNfY29udGFpbmVyXCI+PC9nYW1tYS1icmVhZC1jcnVtYnM+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgYm9yZGVyLWwtMiBwLTAgbS0wXCI+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteC0yXCIgKm5nSWY9XCJpc0VkaXRCdXR0b25cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJlZGl0S3BpKClcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJnLWJsdWUtNzAwIGN1cnNvci1wb2ludGVyIGRhcms6YmctYmx1ZS02MDAgZGFyazpmb2N1czpyaW5nLWJsdWUtODAwIGRhcms6aG92ZXI6YmctYmx1ZS03MDAgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctNCBmb2N1czpyaW5nLWJsdWUtMzAwIGZvbnQtbWVkaXVtIGhvdmVyOmJnLWJsdWUtODAwIG1yLTIgcHgtMi41IHB5LTIgcm91bmRlZCB0ZXh0LXNtIHRleHQtd2hpdGUgbmctc3Rhci1pbnNlcnRlZFwiPlxuICAgICAgICAgICAgICAgICAgICBFZGl0XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEgaC1mdWxsIGJvcmRlci1sLTJcIj48L2Rpdj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb250ZXh0RmlsdGVySXRlbXNGb3JGaWx0ZXIgJiYgIGNvbnRleHRGaWx0ZXJJdGVtc0ZvckZpbHRlci5sZW5ndGggIT09IDBcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXgtMlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZHgtc2VsZWN0LWJveCBbZGF0YVNvdXJjZV09XCJjb250ZXh0RmlsdGVySXRlbXNGb3JGaWx0ZXJcIiBkaXNwbGF5RXhwcj1cImxhYmVsXCIgdmFsdWU9XCJkZWZhdWx0RmlsdGVyVmFsdWVcIj48L2R4LXNlbGVjdC1ib3g+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xIGgtZnVsbCBib3JkZXItbC0yXCI+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXgtMlwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJhZHZhbmNlRmlsdGVyS3BpKClcIj4ge3tzZWxlY3RlZERldGVzZm9yVmlld319PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEgaC1mdWxsIGJvcmRlci1sLTJcIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteC0yXCIgKm5nSWY9XCJpc0FkdmFuY2VCdXR0b25cIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibWF0LWZvY3VzLWluZGljYXRvciBtYXQtbWVudS10cmlnZ2VyIG1hdC1pY29uLWJ1dHRvbiBtYXQtYnV0dG9uLWJhc2VcIlxuICAgICAgICAgICAgICAgICAgICBhcmlhLWhhc3BvcHVwPVwibWVudVwiIChjbGljayk9XCJhZHZhbmNlRmlsdGVyS3BpKClcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXQtYnV0dG9uLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmVsYXRpdmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gdGl0bGU9XCJGaWx0ZXJzXCIgW3N2Z0ljb25dPVwiJ2hlcm9pY29uc19vdXRsaW5lOmFkanVzdG1lbnRzJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEgaC1mdWxsIGJvcmRlci1sLTJcIj48L2Rpdj5cbiAgICAgICAgICAgIFxuXG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjxkeC1wb3B1cCBbKHZpc2libGUpXT1cImlzQWR2YW5jZUZpbHRlclwiIFtjbG9zZU9uT3V0c2lkZUNsaWNrXT1cImZhbHNlXCIgW2RyYWdFbmFibGVkXT1cImZhbHNlXCIgW3dpZHRoXT1cIjYwMFwiXG4gICAgW2hlaWdodF09XCInYXV0bydcIiBbc2hvd1RpdGxlXT1cInRydWVcIiBjbGFzcz1cInBvcHVwXCIgdGl0bGU9XCJGaWx0ZXJcIj5cbiAgICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IGRhdGEgb2YgJ2NvbnRlbnQnXCI+XG4gICAgICAgIDxhcHAtZ2FtbWEtYWR2YW5jZS1maWx0ZXIgW2twaUlkXT1cIicyMzEyMTInXCIgW2ZpbHRlck9wZXJhdG9yRGF0YV09XCJmaWx0ZXJJdGVtc0ZvckZpbHRlclwiXG4gICAgICAgICAgICBbaXNCdXR0b25EZXNpYWJsZV09XCJpc0FkdmFuY2VGaWx0ZXJcIiBbZmlsdGVyU3RhcnREYXRlXT1cImZpbHRlclN0YXJ0RGF0ZVwiIFtmaWx0ZXJFbmREYXRlXT1cImZpbHRlckVuZERhdGVcIlxuICAgICAgICAgICAgKGZpbHRlckRhdGFPYmplY3QpPVwiZ2V0U2VyY2hGaWx0ZXIoJGV2ZW50KVwiPjwvYXBwLWdhbW1hLWFkdmFuY2UtZmlsdGVyPlxuICAgIDwvZGl2PlxuPC9keC1wb3B1cD4iXX0=
|
|
@@ -1,95 +0,0 @@
|
|
|
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 "../../loader/loader.component";
|
|
8
|
-
export class GammSingleNumberCardComponent {
|
|
9
|
-
constructor(commonService, toastr, cdr) {
|
|
10
|
-
this.commonService = commonService;
|
|
11
|
-
this.toastr = toastr;
|
|
12
|
-
this.cdr = cdr;
|
|
13
|
-
this.isLoader = true;
|
|
14
|
-
this.colors = [
|
|
15
|
-
"text-green-500",
|
|
16
|
-
"text-orange-500",
|
|
17
|
-
"text-blue-500",
|
|
18
|
-
"text-purple-500",
|
|
19
|
-
"text-yellow-500"
|
|
20
|
-
];
|
|
21
|
-
}
|
|
22
|
-
set chartDataSource(value) {
|
|
23
|
-
this.objectdataSource = value;
|
|
24
|
-
if (!this.objectdataSource || this.objectdataSource.length === 0) {
|
|
25
|
-
this.isChartvisible = false;
|
|
26
|
-
return;
|
|
27
|
-
}
|
|
28
|
-
else {
|
|
29
|
-
this.isLoader = true;
|
|
30
|
-
this.selectedColumn = value.kpiConfig?.dataConfig?.columns?.[0]?.dataField || "";
|
|
31
|
-
this.sortBy = value.kpiConfig?.dataConfig?.sortBy;
|
|
32
|
-
if (value.kpiConfig.dataSource?.length) {
|
|
33
|
-
this.page_config = value;
|
|
34
|
-
let sortedData = value.kpiConfig.dataSource;
|
|
35
|
-
if (this.sortBy?.length) {
|
|
36
|
-
let sortKey = this.sortBy[0];
|
|
37
|
-
sortedData = sortedData.sort((a, b) => moment(b[sortKey], "YYYY-MM-DD").diff(moment(a[sortKey], "YYYY-MM-DD")));
|
|
38
|
-
}
|
|
39
|
-
if (value.kpiConfig.formate === "daily") {
|
|
40
|
-
this.currentDateData = sortedData.length ? this.commonService.abbreviateNumber(sortedData[0][this.selectedColumn] || 0) : "0";
|
|
41
|
-
}
|
|
42
|
-
else if (value.kpiConfig.formate === "monthly") {
|
|
43
|
-
let total = sortedData.reduce((sum, item) => {
|
|
44
|
-
let value = Number(item[this.selectedColumn]) || 0;
|
|
45
|
-
return sum + value;
|
|
46
|
-
}, 0);
|
|
47
|
-
this.currentDateData = this.commonService.abbreviateNumber(total);
|
|
48
|
-
}
|
|
49
|
-
this.isLoader = false;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
getDynamicValue(data) {
|
|
54
|
-
if (!this.selectedColumn || !data.hasOwnProperty(this.selectedColumn)) {
|
|
55
|
-
return null;
|
|
56
|
-
}
|
|
57
|
-
let value = data[this.selectedColumn];
|
|
58
|
-
const numericValue = Number(value);
|
|
59
|
-
if (!isNaN(numericValue)) {
|
|
60
|
-
return this.commonService.abbreviateNumber(numericValue);
|
|
61
|
-
}
|
|
62
|
-
return value;
|
|
63
|
-
}
|
|
64
|
-
ngOnInit() {
|
|
65
|
-
this.randomColorClass = this.getRandomColor();
|
|
66
|
-
}
|
|
67
|
-
getRandomColor() {
|
|
68
|
-
const randomIndex = Math.floor(Math.random() * this.colors.length);
|
|
69
|
-
return this.colors[randomIndex];
|
|
70
|
-
}
|
|
71
|
-
formatNumber(value) {
|
|
72
|
-
if (value >= 1e9) {
|
|
73
|
-
return (value / 1e9).toFixed(1) + 'B';
|
|
74
|
-
}
|
|
75
|
-
else if (value >= 1e6) {
|
|
76
|
-
return (value / 1e6).toFixed(1) + 'M';
|
|
77
|
-
}
|
|
78
|
-
else if (value >= 1e3) {
|
|
79
|
-
return (value / 1e3).toFixed(1) + 'K';
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
return value.toString();
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
GammSingleNumberCardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: GammSingleNumberCardComponent, deps: [{ token: i1.CommonService }, { token: i2.ToastrService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
87
|
-
GammSingleNumberCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: GammSingleNumberCardComponent, selector: "app-gamm-single-number-card", inputs: { chartDataSource: "chartDataSource" }, ngImport: i0, template: "<div class=\"flex flex-row justify-center items-start bg-gray-800 p-4 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=\"flex justify-center items-center text-4xl font-bold p-2 {{randomColorClass}}\">\n {{ currentDateData }}\n </div>\n </ng-container>\n\n</div>", styles: [""], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.LoaderComponent, selector: "app-loader" }] });
|
|
88
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: GammSingleNumberCardComponent, decorators: [{
|
|
89
|
-
type: Component,
|
|
90
|
-
args: [{ selector: 'app-gamm-single-number-card', template: "<div class=\"flex flex-row justify-center items-start bg-gray-800 p-4 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=\"flex justify-center items-center text-4xl font-bold p-2 {{randomColorClass}}\">\n {{ currentDateData }}\n </div>\n </ng-container>\n\n</div>" }]
|
|
91
|
-
}], ctorParameters: function () { return [{ type: i1.CommonService }, { type: i2.ToastrService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { chartDataSource: [{
|
|
92
|
-
type: Input,
|
|
93
|
-
args: ['chartDataSource']
|
|
94
|
-
}] } });
|
|
95
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FtbS1zaW5nbGUtbnVtYmVyLWNhcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2FtbWEtYXBwLWNvbnRyb2xsZXIvc3JjL2xpYi9hcHBsaWNhdGlvbi1jb250cm9sbGVyL3NoYXJlZC9hZHZhbmNlZC1jb21wb25lbnQvZ2FtbS1zaW5nbGUtbnVtYmVyLWNhcmQvZ2FtbS1zaW5nbGUtbnVtYmVyLWNhcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2FtbWEtYXBwLWNvbnRyb2xsZXIvc3JjL2xpYi9hcHBsaWNhdGlvbi1jb250cm9sbGVyL3NoYXJlZC9hZHZhbmNlZC1jb21wb25lbnQvZ2FtbS1zaW5nbGUtbnVtYmVyLWNhcmQvZ2FtbS1zaW5nbGUtbnVtYmVyLWNhcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRTVFLE9BQU8sTUFBTSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7QUFROUMsTUFBTSxPQUFPLDZCQUE2QjtJQXFCeEMsWUFDUyxhQUE0QixFQUMzQixNQUFxQixFQUNyQixHQUFzQjtRQUZ2QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUMzQixXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3JCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBYmhDLGFBQVEsR0FBWSxJQUFJLENBQUM7UUFFekIsV0FBTSxHQUFHO1lBQ1AsZ0JBQWdCO1lBQ2hCLGlCQUFpQjtZQUNqQixlQUFlO1lBQ2YsaUJBQWlCO1lBQ2pCLGlCQUFpQjtTQUNsQixDQUFDO0lBT0UsQ0FBQztJQUVMLElBQ0ksZUFBZSxDQUFDLEtBQUs7UUFDdkIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUU5QixJQUFJLENBQUMsSUFB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QixHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUNoRCxDQUFDO0lBSUQsY0FBYztRQUNaLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkUsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBSztRQUNoQixJQUFJLEtBQUssSUFBSSxHQUFHLEVBQUU7WUFDaEIsT0FBTyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1NBQ3ZDO2FBQU0sSUFBSSxLQUFLLElBQUksR0FBRyxFQUFFO1lBQ3ZCLE9BQU8sQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztTQUN2QzthQUFNLElBQUksS0FBSyxJQUFJLEdBQUcsRUFBRTtZQUN2QixPQUFPLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7U0FDdkM7YUFBTTtZQUNMLE9BQU8sS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQzs7MEhBNUdVLDZCQUE2Qjs4R0FBN0IsNkJBQTZCLG1IQ1YxQywwWkFVTTsyRkRBTyw2QkFBNkI7a0JBTHpDLFNBQVM7K0JBQ0UsNkJBQTZCO2dLQWlDbkMsZUFBZTtzQkFEbEIsS0FBSzt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSAnbmd4LXRvYXN0cic7XG5pbXBvcnQgbW9tZW50IGZyb20gJy4vLi4vLi4vLi4vbW9tZW50LWhlbHBlcic7XG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWdhbW0tc2luZ2xlLW51bWJlci1jYXJkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2dhbW0tc2luZ2xlLW51bWJlci1jYXJkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZ2FtbS1zaW5nbGUtbnVtYmVyLWNhcmQuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBHYW1tU2luZ2xlTnVtYmVyQ2FyZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIG9iamVjdGRhdGFTb3VyY2U6IGFueTtcbiAgaXNDaGFydHZpc2libGU6IGJvb2xlYW47XG4gIHBhZ2VfY29uZmlnOiBhbnk7XG4gIGN1cnJlbnREYXRlRGF0YTogYW55O1xuICBwcmV2b3VzRGF5c0RhdGE6IGFueTtcbiAgY2FsY3VsYXRlZFZhbHVlOiBhbnk7XG4gIGlzUHJldmlvdXNEYXk6IGJvb2xlYW47XG4gIHNvcnRCeTogYW55O1xuICBzZWxlY3RlZENvbHVtbjogYW55O1xuICBzdWJzY3JpYmVyX2NvdW50O1xuICBpc0xvYWRlcjogYm9vbGVhbiA9IHRydWU7XG5cbiAgY29sb3JzID0gW1xuICAgIFwidGV4dC1ncmVlbi01MDBcIixcbiAgICBcInRleHQtb3JhbmdlLTUwMFwiLFxuICAgIFwidGV4dC1ibHVlLTUwMFwiLFxuICAgIFwidGV4dC1wdXJwbGUtNTAwXCIsXG4gICAgXCJ0ZXh0LXllbGxvdy01MDBcIlxuICBdO1xuICByYW5kb21Db2xvckNsYXNzOiBhbnk7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBjb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgdG9hc3RyOiBUb2FzdHJTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBcbiAgKSB7IH1cblxuICBASW5wdXQoJ2NoYXJ0RGF0YVNvdXJjZScpXG4gIHNldCBjaGFydERhdGFTb3VyY2UodmFsdWUpIHtcbiAgICB0aGlzLm9iamVjdGRhdGFTb3VyY2UgPSB2YWx1ZTtcbiAgXG4gICAgaWYgKCF0aGlzLm9iamVjdGRhdGFTb3VyY2UgfHwgdGhpcy5vYmplY3RkYXRhU291cmNlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5pc0NoYXJ0dmlzaWJsZSA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzTG9hZGVyID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW4gPSB2YWx1ZS5rcGlDb25maWc/LmRhdGFDb25maWc/LmNvbHVtbnM/LlswXT8uZGF0YUZpZWxkIHx8IFwiXCI7XG4gICAgICB0aGlzLnNvcnRCeSA9IHZhbHVlLmtwaUNvbmZpZz8uZGF0YUNvbmZpZz8uc29ydEJ5O1xuICBcbiAgICAgIGlmICh2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZT8ubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMucGFnZV9jb25maWcgPSB2YWx1ZTtcbiAgICAgICAgbGV0IHNvcnRlZERhdGEgPSB2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZTtcbiAgXG4gICAgICAgIGlmICh0aGlzLnNvcnRCeT8ubGVuZ3RoKSB7XG4gICAgICAgICAgbGV0IHNvcnRLZXkgPSB0aGlzLnNvcnRCeVswXTtcbiAgICAgICAgICBzb3J0ZWREYXRhID0gc29ydGVkRGF0YS5zb3J0KChhLCBiKSA9PiBcbiAgICAgICAgICAgIG1vbWVudChiW3NvcnRLZXldLCBcIllZWVktTU0tRERcIikuZGlmZihtb21lbnQoYVtzb3J0S2V5XSwgXCJZWVlZLU1NLUREXCIpKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgXG4gICAgICAgIGlmICh2YWx1ZS5rcGlDb25maWcuZm9ybWF0ZSA9PT0gXCJkYWlseVwiKSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50RGF0ZURhdGEgPSBzb3J0ZWREYXRhLmxlbmd0aCA/IHRoaXMuY29tbW9uU2VydmljZS5hYmJyZXZpYXRlTnVtYmVyKHNvcnRlZERhdGFbMF1bdGhpcy5zZWxlY3RlZENvbHVtbl0gfHwgMCkgOiBcIjBcIjtcblxuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmtwaUNvbmZpZy5mb3JtYXRlID09PSBcIm1vbnRobHlcIikge1xuICAgICAgICAgIGxldCB0b3RhbCA9IHNvcnRlZERhdGEucmVkdWNlKChzdW0sIGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IE51bWJlcihpdGVtW3RoaXMuc2VsZWN0ZWRDb2x1bW5dKSB8fCAwO1xuICAgICAgICAgICAgcmV0dXJuIHN1bSArIHZhbHVlO1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICAgIHRoaXMuY3VycmVudERhdGVEYXRhID0gdGhpcy5jb21tb25TZXJ2aWNlLmFiYnJldmlhdGVOdW1iZXIodG90YWwpO1xuICAgICAgICB9XG4gICAgXG4gICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgXG4gICAgfVxuICB9XG4gIFxuICAgICAgXG5cbmdldER5bmFtaWNWYWx1ZShkYXRhOiBhbnkpOiBudW1iZXIgfCBzdHJpbmcgfCBhbnkge1xuXG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkQ29sdW1uIHx8ICFkYXRhLmhhc093blByb3BlcnR5KHRoaXMuc2VsZWN0ZWRDb2x1bW4pKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBsZXQgdmFsdWUgPSBkYXRhW3RoaXMuc2VsZWN0ZWRDb2x1bW5dO1xuICAgIGNvbnN0IG51bWVyaWNWYWx1ZSA9IE51bWJlcih2YWx1ZSk7XG4gICAgaWYgKCFpc05hTihudW1lcmljVmFsdWUpKSB7XG4gICAgICAvLyBsZXQgY2FsX251bWJlciA9IE1hdGguYWJzKG51bWVyaWNWYWx1ZSlcbiAgICAgIHJldHVybiB0aGlzLmNvbW1vblNlcnZpY2UuYWJicmV2aWF0ZU51bWJlcihudW1lcmljVmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMucmFuZG9tQ29sb3JDbGFzcyA9IHRoaXMuZ2V0UmFuZG9tQ29sb3IoKTtcbiAgfVxuXG5cblxuICBnZXRSYW5kb21Db2xvcigpIHtcbiAgICBjb25zdCByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHRoaXMuY29sb3JzLmxlbmd0aCk7XG4gICAgcmV0dXJuIHRoaXMuY29sb3JzW3JhbmRvbUluZGV4XTtcbiAgfVxuXG4gIGZvcm1hdE51bWJlcih2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA+PSAxZTkpIHtcbiAgICAgIHJldHVybiAodmFsdWUgLyAxZTkpLnRvRml4ZWQoMSkgKyAnQic7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA+PSAxZTYpIHtcbiAgICAgIHJldHVybiAodmFsdWUgLyAxZTYpLnRvRml4ZWQoMSkgKyAnTSc7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA+PSAxZTMpIHtcbiAgICAgIHJldHVybiAodmFsdWUgLyAxZTMpLnRvRml4ZWQoMSkgKyAnSyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xuICAgIH1cbiAgfVxuXG59XG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWNlbnRlciBpdGVtcy1zdGFydCBiZy1ncmF5LTgwMCBwLTQgbXgtMiB0ZXh0LWNlbnRlclwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0xvYWRlclwiPlxuICAgICAgICA8YXBwLWxvYWRlcj48L2FwcC1sb2FkZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0xvYWRlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgdGV4dC00eGwgZm9udC1ib2xkIHAtMiB7e3JhbmRvbUNvbG9yQ2xhc3N9fVwiPlxuICAgICAgICAgICAge3sgY3VycmVudERhdGVEYXRhIH19XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG48L2Rpdj4iXX0=
|