mmhglobal-dynamicform 1.2.3 → 1.3.2
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 +14 -2
- package/esm2020/lib/directives/fieldelement.directive.mjs +16 -0
- package/esm2020/lib/directives/scrollbar.theme.directive.mjs +43 -0
- package/esm2020/lib/mmhglobal-dynamicform.module.mjs +464 -0
- package/esm2020/lib/services/main.service.mjs +752 -0
- package/esm2020/lib/services/zcomponent.debug.service.mjs +621 -0
- package/esm2020/lib/services/zcomponent.service.mjs +81 -0
- package/esm2020/lib/uiactionbutton/uiactionbutton.component.mjs +265 -0
- package/esm2020/lib/uiappmenucontent/uiappmenucontent.component.mjs +67 -0
- package/esm2020/lib/uicontent/uicontent.component.mjs +41 -0
- package/esm2020/lib/uiheader/uiheader.component.mjs +66 -0
- package/esm2020/lib/uimenubutton/uimenubutton.component.mjs +35 -0
- package/esm2020/lib/uimenucontent/uimenucontent.component.mjs +37 -0
- package/{esm2015/lib/uipage/uipage.component.js → esm2020/lib/uipage/uipage.component.mjs} +12 -13
- package/esm2020/lib/uivalidationmessage/uivalidationmessage.component.mjs +41 -0
- package/esm2020/lib/zbullet/zbullet.component.mjs +74 -0
- package/esm2020/lib/zbuttons/zbuttons.component.mjs +171 -0
- package/esm2020/lib/zcard/zcard.component.mjs +72 -0
- package/esm2020/lib/zchart/zchart.component.mjs +201 -0
- package/esm2020/lib/zcheckbox/zcheckbox.component.mjs +166 -0
- package/esm2020/lib/zchip/zchip.component.mjs +121 -0
- package/esm2020/lib/zcodeeditor/zcodeeditor.component.mjs +169 -0
- package/esm2020/lib/zcodeeditor/zcodeeditor.pipe.mjs +60 -0
- package/esm2020/lib/zdaterange/zdaterange.component.mjs +70 -0
- package/esm2020/lib/zdatetime/dateParser.pipe.mjs +30 -0
- package/esm2020/lib/zdatetime/zdatetime.component.mjs +285 -0
- package/esm2020/lib/zdiv/zdiv.component.mjs +50 -0
- package/esm2020/lib/zdiv/zdiv.pipe.mjs +31 -0
- package/esm2020/lib/zform/zform.component.mjs +147 -0
- package/esm2020/lib/zformcontrol/zformcontrol.component.mjs +49 -0
- package/esm2020/lib/zgauge/zgauge.component.mjs +148 -0
- package/esm2020/lib/zgrid/date-range-cell-filter.component.mjs +135 -0
- package/esm2020/lib/zgrid/zgrid.binding.directive.mjs +490 -0
- package/esm2020/lib/zgrid/zgrid.component.mjs +847 -0
- package/esm2020/lib/zgrid/zgrid.popup.anchor-target.directive.mjs +17 -0
- package/esm2020/lib/zimg/zimg.component.mjs +121 -0
- package/esm2020/lib/zkcard/zkcard.component.mjs +367 -0
- package/esm2020/lib/zlabel/zlabel.component.mjs +62 -0
- package/esm2020/lib/zmfb/zmfb.component.mjs +215 -0
- package/esm2020/lib/zmodal/zmodal-mobile.component.mjs +120 -0
- package/esm2020/lib/zmodal/zmodal.component.mjs +125 -0
- package/esm2020/lib/znumeric/znumeric.component.mjs +119 -0
- package/esm2020/lib/zpostselectinput/zpostselectinput.component.mjs +352 -0
- package/esm2020/lib/zquerybuilder/zquerybuilder.component.mjs +204 -0
- package/esm2020/lib/zreport/zreport.component.mjs +105 -0
- package/esm2020/lib/zreport/zreport.config.mjs +117 -0
- package/esm2020/lib/zscheduler/zscheduler.component.mjs +267 -0
- package/{esm2015/lib/zscheduler/zscheduler.toolbar.component.js → esm2020/lib/zscheduler/zscheduler.toolbar.component.mjs} +55 -19
- package/esm2020/lib/zselectmultiple/zselectmultiple.component.mjs +577 -0
- package/esm2020/lib/zselectmultiple/zselectmultiple.directive.mjs +35 -0
- package/esm2020/lib/ztab/ztab.component.mjs +187 -0
- package/esm2020/lib/ztab/ztab.pipe.mjs +26 -0
- package/esm2020/lib/ztext/ztext.component.mjs +297 -0
- package/esm2020/lib/ztextarea/ztextarea.component.mjs +109 -0
- package/esm2020/lib/ztexteditor/ztexteditor.component.mjs +57 -0
- package/esm2020/lib/ztree/ztree.component.mjs +380 -0
- package/esm2020/lib/ztreelist/ztreelist.component.mjs +544 -0
- package/esm2020/lib/ztrendcard/ztrendcard.component.mjs +92 -0
- package/esm2020/lib/zudf/zudf.component.mjs +205 -0
- package/esm2020/lib/zunknown/zunknown.component.mjs +20 -0
- package/esm2020/lib/zupload/zupload.component.mjs +359 -0
- package/esm2020/lib/zworkflowbuttons/zworkflowbuttons.component.mjs +216 -0
- package/esm2020/mmhglobal-dynamicform.mjs +5 -0
- package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
- package/fesm2015/mmhglobal-dynamicform.mjs +10790 -0
- package/fesm2015/mmhglobal-dynamicform.mjs.map +1 -0
- package/fesm2020/mmhglobal-dynamicform.mjs +10779 -0
- package/fesm2020/mmhglobal-dynamicform.mjs.map +1 -0
- package/lib/directives/fieldelement.directive.d.ts +3 -0
- package/lib/directives/scrollbar.theme.directive.d.ts +3 -0
- package/lib/mmhglobal-dynamicform.module.d.ts +92 -0
- package/lib/services/main.service.d.ts +3 -0
- package/lib/services/zcomponent.debug.service.d.ts +8 -5
- package/lib/services/zcomponent.service.d.ts +7 -2
- package/lib/uiactionbutton/uiactionbutton.component.d.ts +3 -0
- package/lib/uiappmenucontent/uiappmenucontent.component.d.ts +3 -0
- package/lib/uicontent/uicontent.component.d.ts +3 -0
- package/lib/uiheader/uiheader.component.d.ts +3 -0
- package/lib/uimenubutton/uimenubutton.component.d.ts +3 -0
- package/lib/uimenucontent/uimenucontent.component.d.ts +3 -0
- package/lib/uipage/uipage.component.d.ts +3 -0
- package/lib/uivalidationmessage/uivalidationmessage.component.d.ts +3 -0
- package/lib/zbullet/zbullet.component.d.ts +3 -0
- package/lib/zbuttons/zbuttons.component.d.ts +3 -0
- package/lib/zcard/zcard.component.d.ts +3 -0
- package/lib/zchart/zchart.component.d.ts +3 -0
- package/lib/zcheckbox/zcheckbox.component.d.ts +3 -0
- package/lib/zchip/zchip.component.d.ts +3 -0
- package/lib/zcodeeditor/zcodeeditor.component.d.ts +3 -0
- package/lib/zcodeeditor/zcodeeditor.pipe.d.ts +3 -0
- package/lib/zdaterange/zdaterange.component.d.ts +3 -0
- package/lib/zdatetime/dateParser.pipe.d.ts +3 -0
- package/lib/zdatetime/zdatetime.component.d.ts +3 -0
- package/lib/zdiv/zdiv.component.d.ts +3 -0
- package/lib/zdiv/zdiv.pipe.d.ts +3 -0
- package/lib/zform/zform.component.d.ts +3 -0
- package/lib/zformcontrol/zformcontrol.component.d.ts +3 -0
- package/lib/zgauge/zgauge.component.d.ts +3 -0
- package/lib/zgrid/date-range-cell-filter.component.d.ts +3 -0
- package/lib/zgrid/zgrid.binding.directive.d.ts +3 -0
- package/lib/zgrid/zgrid.component.d.ts +4 -1
- package/lib/zgrid/zgrid.popup.anchor-target.directive.d.ts +3 -0
- package/lib/zimg/zimg.component.d.ts +3 -0
- package/lib/zkcard/zkcard.component.d.ts +3 -0
- package/lib/zlabel/zlabel.component.d.ts +3 -0
- package/lib/zmfb/zmfb.component.d.ts +3 -0
- package/lib/zmodal/zmodal-mobile.component.d.ts +3 -0
- package/lib/zmodal/zmodal.component.d.ts +3 -0
- package/lib/znumeric/znumeric.component.d.ts +3 -0
- package/lib/zpostselectinput/zpostselectinput.component.d.ts +3 -0
- package/lib/zquerybuilder/zquerybuilder.component.d.ts +3 -0
- package/lib/zreport/zreport.component.d.ts +3 -0
- package/lib/zreport/zreport.config.d.ts +3 -0
- package/lib/zscheduler/zscheduler.component.d.ts +3 -0
- package/lib/zscheduler/zscheduler.toolbar.component.d.ts +3 -0
- package/lib/zselectmultiple/zselectmultiple.component.d.ts +3 -0
- package/lib/zselectmultiple/zselectmultiple.directive.d.ts +3 -0
- package/lib/ztab/ztab.component.d.ts +3 -0
- package/lib/ztab/ztab.pipe.d.ts +3 -0
- package/lib/ztext/ztext.component.d.ts +3 -0
- package/lib/ztextarea/ztextarea.component.d.ts +3 -0
- package/lib/ztexteditor/ztexteditor.component.d.ts +3 -0
- package/lib/ztree/ztree.component.d.ts +3 -0
- package/lib/ztreelist/ztreelist.component.d.ts +3 -0
- package/lib/ztrendcard/ztrendcard.component.d.ts +3 -0
- package/lib/zudf/zudf.component.d.ts +3 -0
- package/lib/zunknown/zunknown.component.d.ts +3 -0
- package/lib/zupload/zupload.component.d.ts +3 -0
- package/lib/zworkflowbuttons/zworkflowbuttons.component.d.ts +3 -0
- package/mmhglobal-dynamicform.d.ts +1 -2
- package/package.json +20 -11
- package/bundles/mmhglobal-dynamicform.umd.js +0 -11360
- package/bundles/mmhglobal-dynamicform.umd.js.map +0 -1
- package/bundles/mmhglobal-dynamicform.umd.min.js +0 -16
- package/bundles/mmhglobal-dynamicform.umd.min.js.map +0 -1
- package/esm2015/lib/directives/fieldelement.directive.js +0 -15
- package/esm2015/lib/directives/scrollbar.theme.directive.js +0 -42
- package/esm2015/lib/mmhglobal-dynamicform.module.js +0 -314
- package/esm2015/lib/services/main.service.js +0 -766
- package/esm2015/lib/services/zcomponent.debug.service.js +0 -626
- package/esm2015/lib/services/zcomponent.service.js +0 -167
- package/esm2015/lib/uiactionbutton/uiactionbutton.component.js +0 -271
- package/esm2015/lib/uiappmenucontent/uiappmenucontent.component.js +0 -69
- package/esm2015/lib/uicontent/uicontent.component.js +0 -41
- package/esm2015/lib/uiheader/uiheader.component.js +0 -65
- package/esm2015/lib/uimenubutton/uimenubutton.component.js +0 -40
- package/esm2015/lib/uimenucontent/uimenucontent.component.js +0 -34
- package/esm2015/lib/uivalidationmessage/uivalidationmessage.component.js +0 -39
- package/esm2015/lib/zbullet/zbullet.component.js +0 -71
- package/esm2015/lib/zbuttons/zbuttons.component.js +0 -168
- package/esm2015/lib/zcard/zcard.component.js +0 -68
- package/esm2015/lib/zchart/zchart.component.js +0 -199
- package/esm2015/lib/zcheckbox/zcheckbox.component.js +0 -158
- package/esm2015/lib/zchip/zchip.component.js +0 -117
- package/esm2015/lib/zcodeeditor/zcodeeditor.component.js +0 -163
- package/esm2015/lib/zcodeeditor/zcodeeditor.pipe.js +0 -56
- package/esm2015/lib/zdaterange/zdaterange.component.js +0 -63
- package/esm2015/lib/zdatetime/dateParser.pipe.js +0 -26
- package/esm2015/lib/zdatetime/zdatetime.component.js +0 -279
- package/esm2015/lib/zdiv/zdiv.component.js +0 -48
- package/esm2015/lib/zdiv/zdiv.pipe.js +0 -27
- package/esm2015/lib/zform/zform.component.js +0 -148
- package/esm2015/lib/zformcontrol/zformcontrol.component.js +0 -49
- package/esm2015/lib/zgauge/zgauge.component.js +0 -146
- package/esm2015/lib/zgrid/date-range-cell-filter.component.js +0 -102
- package/esm2015/lib/zgrid/zgrid.binding.directive.js +0 -493
- package/esm2015/lib/zgrid/zgrid.component.js +0 -834
- package/esm2015/lib/zgrid/zgrid.popup.anchor-target.directive.js +0 -16
- package/esm2015/lib/zimg/zimg.component.js +0 -123
- package/esm2015/lib/zkcard/zkcard.component.js +0 -372
- package/esm2015/lib/zlabel/zlabel.component.js +0 -59
- package/esm2015/lib/zmfb/zmfb.component.js +0 -215
- package/esm2015/lib/zmodal/zmodal-mobile.component.js +0 -119
- package/esm2015/lib/zmodal/zmodal.component.js +0 -130
- package/esm2015/lib/znumeric/znumeric.component.js +0 -114
- package/esm2015/lib/zpostselectinput/zpostselectinput.component.js +0 -345
- package/esm2015/lib/zquerybuilder/zquerybuilder.component.js +0 -196
- package/esm2015/lib/zreport/zreport.component.js +0 -104
- package/esm2015/lib/zreport/zreport.config.js +0 -115
- package/esm2015/lib/zscheduler/zscheduler.component.js +0 -268
- package/esm2015/lib/zselectmultiple/zselectmultiple.component.js +0 -565
- package/esm2015/lib/zselectmultiple/zselectmultiple.directive.js +0 -28
- package/esm2015/lib/ztab/ztab.component.js +0 -180
- package/esm2015/lib/ztab/ztab.pipe.js +0 -22
- package/esm2015/lib/ztext/ztext.component.js +0 -286
- package/esm2015/lib/ztextarea/ztextarea.component.js +0 -104
- package/esm2015/lib/ztexteditor/ztexteditor.component.js +0 -52
- package/esm2015/lib/ztree/ztree.component.js +0 -374
- package/esm2015/lib/ztreelist/ztreelist.component.js +0 -539
- package/esm2015/lib/ztrendcard/ztrendcard.component.js +0 -89
- package/esm2015/lib/zudf/zudf.component.js +0 -206
- package/esm2015/lib/zunknown/zunknown.component.js +0 -20
- package/esm2015/lib/zupload/zupload.component.js +0 -358
- package/esm2015/lib/zworkflowbuttons/zworkflowbuttons.component.js +0 -215
- package/esm2015/mmhglobal-dynamicform.js +0 -7
- package/fesm2015/mmhglobal-dynamicform.js +0 -10729
- package/fesm2015/mmhglobal-dynamicform.js.map +0 -1
- package/mmhglobal-dynamicform.metadata.json +0 -1
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
/********** Angular **********/
|
|
2
|
+
import { Component, Input, ViewChild } from '@angular/core';
|
|
3
|
+
/********** Ionic **********/
|
|
4
|
+
/********** Plugin **********/
|
|
5
|
+
import { map } from 'rxjs/operators';
|
|
6
|
+
import { QueryBuilderComponent } from 'angular2-query-builder';
|
|
7
|
+
/********** Component & Service **********/
|
|
8
|
+
import { ZComponentHelper, ZComponentProperties, DefaultPageSettingParams } from 'mmhglobal-zcore';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "mmhglobal-zcore";
|
|
11
|
+
import * as i2 from "@ionic/angular";
|
|
12
|
+
import * as i3 from "angular2-query-builder";
|
|
13
|
+
import * as i4 from "@progress/kendo-angular-dropdowns";
|
|
14
|
+
import * as i5 from "@fortawesome/angular-fontawesome";
|
|
15
|
+
import * as i6 from "@progress/kendo-angular-inputs";
|
|
16
|
+
import * as i7 from "@progress/kendo-angular-dateinputs";
|
|
17
|
+
import * as i8 from "@angular/common";
|
|
18
|
+
import * as i9 from "@angular/forms";
|
|
19
|
+
export class ZquerybuilderComponent {
|
|
20
|
+
constructor(fieldService, resourceApiService, webApiService) {
|
|
21
|
+
this.fieldService = fieldService;
|
|
22
|
+
this.resourceApiService = resourceApiService;
|
|
23
|
+
this.webApiService = webApiService;
|
|
24
|
+
//qbItems: Array<any> = [];
|
|
25
|
+
this.qbItems = {};
|
|
26
|
+
this.componentProperties = new ZComponentProperties();
|
|
27
|
+
this.currentConfig = {
|
|
28
|
+
fields: {},
|
|
29
|
+
allowEmptyRulesets: true
|
|
30
|
+
};
|
|
31
|
+
this.allowRuleset = true;
|
|
32
|
+
this.allowCollapse = false;
|
|
33
|
+
this.persistValueOnFieldChange = false;
|
|
34
|
+
this.isDisabled = false;
|
|
35
|
+
this.bootstrapClassNames = {
|
|
36
|
+
arrowIcon: 'fa fa-chevron-right px-2',
|
|
37
|
+
button: 'btn',
|
|
38
|
+
buttonGroup: 'btn-group',
|
|
39
|
+
rightAlign: 'order-12 ml-auto',
|
|
40
|
+
switchRow: 'd-flex px-2',
|
|
41
|
+
switchGroup: 'd-flex align-items-center',
|
|
42
|
+
switchRadio: 'custom-control-input',
|
|
43
|
+
switchLabel: 'custom-control-label',
|
|
44
|
+
switchControl: 'custom-control custom-radio custom-control-inline',
|
|
45
|
+
row: 'row p-2 m-1',
|
|
46
|
+
rule: 'border',
|
|
47
|
+
ruleSet: 'border',
|
|
48
|
+
invalidRuleSet: 'alert alert-danger',
|
|
49
|
+
emptyWarning: 'text-danger mx-auto',
|
|
50
|
+
operatorControl: 'form-control',
|
|
51
|
+
operatorControlSize: 'col-auto pr-0',
|
|
52
|
+
fieldControl: 'form-control',
|
|
53
|
+
fieldControlSize: 'col-auto pr-0',
|
|
54
|
+
entityControl: 'form-control',
|
|
55
|
+
entityControlSize: 'col-auto pr-0',
|
|
56
|
+
inputControl: 'form-control',
|
|
57
|
+
inputControlSize: 'col-auto'
|
|
58
|
+
};
|
|
59
|
+
this.conditionList = [
|
|
60
|
+
"AND",
|
|
61
|
+
"OR"
|
|
62
|
+
];
|
|
63
|
+
}
|
|
64
|
+
ngOnInit() {
|
|
65
|
+
ZComponentHelper.setComponentProperties(this);
|
|
66
|
+
ZComponentHelper.registerComponent(this);
|
|
67
|
+
if (this.data['AllowCollapse'] === true) {
|
|
68
|
+
this.allowCollapse = this.data['AllowCollapse'];
|
|
69
|
+
}
|
|
70
|
+
if (this.data['AllowRuleset'] === false) {
|
|
71
|
+
this.allowRuleset = this.data['AllowRuleset'];
|
|
72
|
+
}
|
|
73
|
+
this.fields = this.fieldService.getFormFieldCode(this.data.Value, "FormField", null, null);
|
|
74
|
+
try {
|
|
75
|
+
this.fields.subscribe(data => {
|
|
76
|
+
data.forEach((field) => {
|
|
77
|
+
// Handle Options
|
|
78
|
+
let optionList = [];
|
|
79
|
+
if (field.Type == 'category' || field.Type == 'multiselect') {
|
|
80
|
+
if (field['ValueOptions']) {
|
|
81
|
+
field['ValueOptions'].forEach((valueOption) => {
|
|
82
|
+
optionList.push({
|
|
83
|
+
name: valueOption.Name,
|
|
84
|
+
value: valueOption.Value
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
const selectOptions = field['SelectOptions'];
|
|
90
|
+
const param = Object.assign({}, DefaultPageSettingParams);
|
|
91
|
+
param.pageSize = selectOptions['PageSize'];
|
|
92
|
+
param.columns = selectOptions['Columns'];
|
|
93
|
+
param.filters += selectOptions['Filters'];
|
|
94
|
+
param.sortColumnName = selectOptions['SortColumnName'];
|
|
95
|
+
param.sortOrder = selectOptions['SortOrder'];
|
|
96
|
+
this.webApiService
|
|
97
|
+
.httpPost$(this.resourceApiService.getPageUrl(selectOptions['ResourceURL']), param)
|
|
98
|
+
.pipe(map((resp) => {
|
|
99
|
+
resp.dataSet.forEach((item) => {
|
|
100
|
+
optionList.push({
|
|
101
|
+
name: item[selectOptions['Name']],
|
|
102
|
+
value: item[selectOptions['Value']]
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
this.qbItems[field.Value]['options'] = optionList;
|
|
106
|
+
})).subscribe();
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// Default rule to display
|
|
110
|
+
this.qbItems[field.Value] = {
|
|
111
|
+
name: field.Name,
|
|
112
|
+
value: field.Value,
|
|
113
|
+
type: field.Type,
|
|
114
|
+
operatorList: field['Operators'],
|
|
115
|
+
options: optionList,
|
|
116
|
+
nullable: field['IsNullable'],
|
|
117
|
+
defaultValue: field['DefaultValue'] ? field['DefaultValue'] : null
|
|
118
|
+
};
|
|
119
|
+
});
|
|
120
|
+
this.currentConfig = {
|
|
121
|
+
fields: this.qbItems,
|
|
122
|
+
allowEmptyRulesets: true
|
|
123
|
+
};
|
|
124
|
+
});
|
|
125
|
+
// append default query if any.
|
|
126
|
+
if (this.data['DefaultQuery']) {
|
|
127
|
+
let defaultQueryValueString = ZComponentHelper.getGroupEvalValue.call(this, this.data['DefaultQuery'], this.group);
|
|
128
|
+
if (defaultQueryValueString) {
|
|
129
|
+
this.setQueryValue(defaultQueryValueString);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
console.error("error: ", error);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
completeRule(isUndo, queryValue) {
|
|
138
|
+
this.isDisabled = isUndo;
|
|
139
|
+
const qbResultValueName = this.data.Type + '_' + this.data.Value;
|
|
140
|
+
this.group[qbResultValueName] = this.queryBuilder.value;
|
|
141
|
+
if (queryValue) {
|
|
142
|
+
this.group[qbResultValueName] = queryValue;
|
|
143
|
+
}
|
|
144
|
+
if (!isUndo) {
|
|
145
|
+
this.group[qbResultValueName] = [];
|
|
146
|
+
}
|
|
147
|
+
if (this.group.zModel) {
|
|
148
|
+
ZComponentHelper.setModelValue(this.data.Value, this.group[qbResultValueName], this.group);
|
|
149
|
+
}
|
|
150
|
+
if (this.data['OnApplyClick'] && !queryValue) {
|
|
151
|
+
let callFunc = ZComponentHelper.getGroupEvalValue.call(this, this.data['OnApplyClick'], this.group);
|
|
152
|
+
const newFunc = callFunc.bind(this);
|
|
153
|
+
newFunc(this.group, this.group[qbResultValueName], this.fields);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
getOperators(defaultOperatorList, rule) {
|
|
157
|
+
return this.qbItems[rule.field].operatorList ? this.qbItems[rule.field].operatorList : defaultOperatorList;
|
|
158
|
+
}
|
|
159
|
+
getOptionList(optionsList, rule) {
|
|
160
|
+
return this.qbItems[rule.field].options ? this.qbItems[rule.field].options : optionsList;
|
|
161
|
+
}
|
|
162
|
+
setQueryValue(queryValueString) {
|
|
163
|
+
if (queryValueString) {
|
|
164
|
+
const defaultQueryValueJson = toQueryRule(JSON.parse(queryValueString));
|
|
165
|
+
this.queryCtrl = defaultQueryValueJson;
|
|
166
|
+
// default lock the query builder if there default query
|
|
167
|
+
this.completeRule(true, defaultQueryValueJson);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
ZquerybuilderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: ZquerybuilderComponent, deps: [{ token: i1.FieldService }, { token: i1.ResourceApiService }, { token: i1.WebApiService }], target: i0.ɵɵFactoryTarget.Component });
|
|
172
|
+
ZquerybuilderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.4", type: ZquerybuilderComponent, selector: "app-zquerybuilder", inputs: { classNames: "classNames", data: "data", group: "group", form: "form" }, viewQueries: [{ propertyName: "queryBuilder", first: true, predicate: QueryBuilderComponent, descendants: true }], ngImport: i0, template: "<ion-item *ngIf=\"(!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\">\r\n <ion-label [attr.for]=\"data.Value\"\r\n *ngIf=\"data.ShowLabel === undefined || data.ShowLabel\"\r\n [position]=\"data.LabelPosition ? data.LabelPosition : 'stacked'\">\r\n {{data.Label}}\r\n <ion-text *ngIf=\"(!!componentProperties.isRequiredField ? group[componentProperties.isRequiredField] : componentProperties.isRequired)\"\r\n color=\"danger\">*</ion-text>\r\n </ion-label>\r\n <div class=\"qbcontainer\">\r\n <query-builder [(ngModel)]='queryCtrl'\r\n [(config)]='currentConfig'\r\n [allowRuleset]='allowRuleset'\r\n [allowCollapse]='allowCollapse'\r\n [persistValueOnFieldChange]='persistValueOnFieldChange'>\r\n <!--AND OR Swtich-->\r\n <ng-container *querySwitchGroup=\"let ruleset; let onChange=onChange\">\r\n <kendo-dropdownlist [(ngModel)]=\"ruleset.condition\"\r\n (ngModelChange)=\"onChange($event, rule)\"\r\n [data]=\"conditionList\"\r\n [disabled]=\"isDisabled\"\r\n style=\"text-transform: uppercase;\">\r\n </kendo-dropdownlist>\r\n </ng-container>\r\n <!--Rule RuleSet Remove Rule Set Button-->\r\n <ng-container *queryButtonGroup=\"let ruleset; let addRule=addRule; let addRuleSet=addRuleSet; let removeRuleSet=removeRuleSet\">\r\n <!--Add Rule Button-->\r\n <ion-button fill=\"outline\"\r\n size=\"small\"\r\n strong=\"false\"\r\n (click)=\"addRule()\"\r\n [disabled]=\"isDisabled\"\r\n class=\"buttonadd\">\r\n <fa-icon [icon]=\"'plus'\" style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Add</span>\r\n </ion-button>\r\n <!--Add RuleSet Button-->\r\n <ion-button *ngIf=\"addRuleSet\"\r\n fill=\"outline\"\r\n size=\"small\"\r\n strong=\"false\"\r\n (click)=\"addRuleSet()\"\r\n [disabled]=\"isDisabled\"\r\n class=\"buttonadd\">\r\n <fa-icon [icon]=\"'plus'\" style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Add Rule Set</span>\r\n </ion-button>\r\n <!--Remove RuleSet Button-->\r\n <ion-button *ngIf=\"removeRuleSet\"\r\n fill=\"outline\"\r\n size=\"small\"\r\n strong=\"false\"\r\n (click)=\"removeRuleSet()\"\r\n [disabled]=\"isDisabled\"\r\n class=\"buttonremove\">\r\n <fa-icon [icon]=\"'times'\" style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Remove Rule Set</span>\r\n </ion-button>\r\n </ng-container>\r\n <!--Remove Rule Button-->\r\n <ng-container *queryRemoveButton=\"let rule; let removeRule=removeRule\">\r\n <ion-button fill=\"outline\"\r\n size=\"small\"\r\n strong=\"false\"\r\n (click)=\"removeRule(rule)\"\r\n [disabled]=\"isDisabled\"\r\n class=\"buttonremove\">\r\n <fa-icon [icon]=\"'minus'\"\r\n style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Remove Rule</span>\r\n </ion-button>\r\n </ng-container>\r\n <!--Name dropdown-->\r\n <ng-container *queryField=\"let rule; let fields=fields; let onChange=onChange; let getFields=getFields\">\r\n <kendo-dropdownlist [(ngModel)]=\"rule.field\"\r\n (ngModelChange)=\"onChange($event, rule)\"\r\n [data]=\"getFields(rule.entity)\"\r\n textField=\"name\"\r\n valueField=\"value\"\r\n [value]=\"value\"\r\n [valuePrimitive]=\"true\"\r\n [disabled]=\"isDisabled\"\r\n style=\"padding-right:10px;\">\r\n </kendo-dropdownlist>\r\n </ng-container>\r\n <!--Operator dropdown-->\r\n <ng-container *queryOperator=\"let rule; let operators=operators; let onChange=onChange\" style=\"padding:10px\">\r\n <kendo-dropdownlist [(ngModel)]=\"rule.operator\"\r\n (ngModelChange)=\"onChange($event, rule)\"\r\n [data]=\"getOperators(operators, rule)\"\r\n textField=\"name\"\r\n valueField=\"value\"\r\n [value]=\"value\"\r\n [valuePrimitive]=\"true\"\r\n [disabled]=\"isDisabled\"\r\n style=\"padding-right:10px;\">\r\n </kendo-dropdownlist>\r\n </ng-container>\r\n <!--Text Field-->\r\n <ng-container *queryInput=\"let rule; let field=field; type: 'string'; let onChange=onChange\">\r\n <kendo-textbox [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n [clearButton]=\"true\"\r\n [disabled]=\"isDisabled\"\r\n class=\"customTextbox\">\r\n </kendo-textbox>\r\n </ng-container>\r\n <!--TextArea Field-->\r\n <ng-container *queryInput=\"let rule; type: 'textarea'; let onChange=onChange\">\r\n <kendo-textarea [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n [rows]=\"5\"\r\n [cols]=\"40\"\r\n resizable=\"none\"\r\n [disabled]=\"isDisabled\">\r\n </kendo-textarea>\r\n </ng-container>\r\n <!--Number Field-->\r\n <ng-container *queryInput=\"let rule; let field=field; type: 'number'; let onChange=onChange\">\r\n <kendo-numerictextbox [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n [value]=\"value\"\r\n [decimals]=\"0\"\r\n [disabled]=\"isDisabled\">\r\n </kendo-numerictextbox>\r\n </ng-container>\r\n <!--Date Field-->\r\n <ng-container *queryInput=\"let rule; type: 'date'; let onChange=onChange\">\r\n <kendo-datepicker [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n calendarType=\"classic\"\r\n [value]=\"value\"\r\n [disabled]=\"isDisabled\">\r\n </kendo-datepicker>\r\n </ng-container>\r\n <!--Category Field-->\r\n <ng-container *queryInput=\"let rule; let options=options; type: 'category'; let onChange=onChange\">\r\n <kendo-dropdownlist [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n [data]=\"getOptionList(options, rule)\"\r\n textField=\"name\"\r\n valueField=\"value\"\r\n [value]=\"value\"\r\n [valuePrimitive]=\"true\"\r\n [disabled]=\"isDisabled\">\r\n </kendo-dropdownlist>\r\n </ng-container>\r\n <!--DropDown MultiSelect Field-->\r\n <ng-container *queryInput=\"let rule; let options=options; type: 'multiselect'; let onChange=onChange\">\r\n <kendo-multiselect [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n [data]=\"getOptionList(options, rule)\"\r\n textField=\"name\"\r\n valueField=\"value\"\r\n [value]=\"value\"\r\n [valuePrimitive]=\"true\"\r\n [autoClose]=\"false\"\r\n style=\"width:30%\"\r\n [disabled]=\"isDisabled\">\r\n </kendo-multiselect>\r\n </ng-container>\r\n <!--Boolean Field-->\r\n <ng-container *queryInput=\"let rule; type: 'boolean'; let onChange=onChange\">\r\n <input type=\"checkbox\"\r\n [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n class=\"customCheckBox\"\r\n [disabled]=\"isDisabled\"\r\n kendoCheckBox />\r\n </ng-container>\r\n </query-builder>\r\n <br>\r\n <div *ngIf=\"data.ShowQueryResult\">\r\n <div>\r\n <label>Query Result</label>\r\n </div>\r\n <textarea class=\"output\"\r\n resizable=\"none\"\r\n [rows]=\"10\"\r\n [cols]=\"40\">{{queryCtrl | json}}</textarea>\r\n <br>\r\n </div>\r\n <div style=\"width:100%\" slot=\"end\">\r\n <ion-button *ngIf=\"!isDisabled\"\r\n strong=\"false\"\r\n (click)=\"completeRule(true, null)\"\r\n class=\"buttonapply\">\r\n <fa-icon [icon]=\"'save'\" style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Apply</span>\r\n </ion-button>\r\n <ion-button *ngIf=\"isDisabled\"\r\n strong=\"false\"\r\n (click)=\"completeRule(false, null)\"\r\n class=\"buttonapply\">\r\n <fa-icon [icon]=\"'save'\" style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Undo Apply</span>\r\n </ion-button>\r\n </div>\r\n </div>\r\n</ion-item>\r\n", styles: [".qbcontainer{border-radius:5px;border:1px solid rgba(0,0,0,.08);padding:10px;margin:10px 0;width:100%}.item.sc-ion-label-md-h,.item .sc-ion-label-md-h{font-weight:var(--z-label-weight);color:var(--z-label-color);text-shadow:var(--z-label-shadow)}:host ::ng-deep query-builder .k-dropdown .k-dropdown-wrap,:host ::ng-deep query-builder .k-dropdowntree .k-dropdown-wrap{background-color:#fff}:host ::ng-deep query-builder .customTextbox{width:calc(100% - 440px);min-width:230px}:host ::ng-deep query-builder .customCheckBox{width:27px;height:27px}:host ::ng-deep query-builder .buttonadd{background-color:#479400;color:#fff;border-color:#479400}:host ::ng-deep query-builder .buttonremove{background-color:#f04141;color:#fff;border-color:#f04141;margin-top:0}.buttonapply{background-color:#5596e6;color:#fff;border-color:#5596e6}\n"], components: [{ type: i2.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { type: i2.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { type: i3.QueryBuilderComponent, selector: "query-builder", inputs: ["data", "allowRuleset", "allowCollapse", "emptyMessage", "config", "persistValueOnFieldChange", "value", "disabled", "classNames", "operatorMap", "parentValue", "parentArrowIconTemplate", "parentInputTemplates", "parentOperatorTemplate", "parentFieldTemplate", "parentEntityTemplate", "parentSwitchGroupTemplate", "parentButtonGroupTemplate", "parentRemoveButtonTemplate", "parentEmptyWarningTemplate", "parentChangeCallback", "parentTouchedCallback"] }, { type: i4.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["listHeight", "disabled", "readonly", "filterable", "ignoreCase", "delay", "tabindex", "id", "data", "value", "popupSettings", "itemDisabled", "virtual", "valuePrimitive", "tabIndex", "size", "rounded", "fillMode", "iconClass", "loading", "textField", "valueField", "defaultItem"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }, { type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { type: i5.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { type: i6.TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "size", "rounded", "fillMode", "tabIndex", "successIcon", "errorIcon", "clearButtonIcon", "placeholder", "maxlength"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }, { type: i6.TextAreaComponent, selector: "kendo-textarea", inputs: ["focusableId", "flow", "tabindex", "resizable", "tabIndex", "size", "rounded", "fillMode", "rows", "cols", "maxlength"], outputs: ["focus", "blur", "valueChange"], exportAs: ["kendoTextArea"] }, { type: i6.NumericTextBoxComponent, selector: "kendo-numerictextbox", inputs: ["focusableId", "disabled", "readonly", "title", "autoCorrect", "decimals", "step", "spinners", "rangeValidation", "tabindex", "changeValueOnScroll", "selectOnFocus", "value", "format", "tabIndex", "size", "rounded", "fillMode", "max", "min", "placeholder", "maxlength"], outputs: ["valueChange", "focus", "blur"], exportAs: ["kendoNumericTextBox"] }, { type: i7.DatePickerComponent, selector: "kendo-datepicker", inputs: ["focusableId", "activeView", "bottomView", "topView", "calendarType", "animateCalendarNavigation", "disabled", "readonly", "readOnlyInput", "navigation", "min", "max", "incompleteDateValidation", "focusedDate", "format", "twoDigitYearMax", "placeholder", "tabindex", "title", "rangeValidation", "disabledDatesValidation", "weekNumber", "cellTemplate", "monthCellTemplate", "yearCellTemplate", "decadeCellTemplate", "centuryCellTemplate", "weekNumberTemplate", "headerTitleTemplate", "navigationItemTemplate", "popupSettings", "value", "tabIndex", "disabledDates", "size", "rounded", "fillMode", "formatPlaceholder"], outputs: ["valueChange", "focus", "blur", "open", "close"], exportAs: ["kendo-datepicker"] }, { type: i4.MultiSelectComponent, selector: "kendo-multiselect", inputs: ["focusableId", "autoClose", "tabindex", "disabled", "readonly", "filterable", "listHeight", "clearButton", "tagMapper", "allowCustom", "valueNormalizer", "data", "value", "tabIndex", "size", "rounded", "fillMode", "placeholder", "itemDisabled", "checkboxes", "virtual", "popupSettings", "valuePrimitive", "loading", "valueField", "textField"], outputs: ["filterChange", "valueChange", "open", "opened", "close", "closed", "focus", "blur", "removeTag"], exportAs: ["kendoMultiSelect"] }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i3.QuerySwitchGroupDirective, selector: "[querySwitchGroup]" }, { type: i3.QueryButtonGroupDirective, selector: "[queryButtonGroup]" }, { type: i3.QueryRemoveButtonDirective, selector: "[queryRemoveButton]" }, { type: i3.QueryFieldDirective, selector: "[queryField]" }, { type: i3.QueryOperatorDirective, selector: "[queryOperator]" }, { type: i3.QueryInputDirective, selector: "[queryInput]", inputs: ["queryInputType"] }, { type: i9.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i6.CheckBoxDirective, selector: "input[kendoCheckBox]", inputs: ["size", "rounded"] }], pipes: { "json": i8.JsonPipe } });
|
|
173
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: ZquerybuilderComponent, decorators: [{
|
|
174
|
+
type: Component,
|
|
175
|
+
args: [{ selector: 'app-zquerybuilder', template: "<ion-item *ngIf=\"(!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\">\r\n <ion-label [attr.for]=\"data.Value\"\r\n *ngIf=\"data.ShowLabel === undefined || data.ShowLabel\"\r\n [position]=\"data.LabelPosition ? data.LabelPosition : 'stacked'\">\r\n {{data.Label}}\r\n <ion-text *ngIf=\"(!!componentProperties.isRequiredField ? group[componentProperties.isRequiredField] : componentProperties.isRequired)\"\r\n color=\"danger\">*</ion-text>\r\n </ion-label>\r\n <div class=\"qbcontainer\">\r\n <query-builder [(ngModel)]='queryCtrl'\r\n [(config)]='currentConfig'\r\n [allowRuleset]='allowRuleset'\r\n [allowCollapse]='allowCollapse'\r\n [persistValueOnFieldChange]='persistValueOnFieldChange'>\r\n <!--AND OR Swtich-->\r\n <ng-container *querySwitchGroup=\"let ruleset; let onChange=onChange\">\r\n <kendo-dropdownlist [(ngModel)]=\"ruleset.condition\"\r\n (ngModelChange)=\"onChange($event, rule)\"\r\n [data]=\"conditionList\"\r\n [disabled]=\"isDisabled\"\r\n style=\"text-transform: uppercase;\">\r\n </kendo-dropdownlist>\r\n </ng-container>\r\n <!--Rule RuleSet Remove Rule Set Button-->\r\n <ng-container *queryButtonGroup=\"let ruleset; let addRule=addRule; let addRuleSet=addRuleSet; let removeRuleSet=removeRuleSet\">\r\n <!--Add Rule Button-->\r\n <ion-button fill=\"outline\"\r\n size=\"small\"\r\n strong=\"false\"\r\n (click)=\"addRule()\"\r\n [disabled]=\"isDisabled\"\r\n class=\"buttonadd\">\r\n <fa-icon [icon]=\"'plus'\" style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Add</span>\r\n </ion-button>\r\n <!--Add RuleSet Button-->\r\n <ion-button *ngIf=\"addRuleSet\"\r\n fill=\"outline\"\r\n size=\"small\"\r\n strong=\"false\"\r\n (click)=\"addRuleSet()\"\r\n [disabled]=\"isDisabled\"\r\n class=\"buttonadd\">\r\n <fa-icon [icon]=\"'plus'\" style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Add Rule Set</span>\r\n </ion-button>\r\n <!--Remove RuleSet Button-->\r\n <ion-button *ngIf=\"removeRuleSet\"\r\n fill=\"outline\"\r\n size=\"small\"\r\n strong=\"false\"\r\n (click)=\"removeRuleSet()\"\r\n [disabled]=\"isDisabled\"\r\n class=\"buttonremove\">\r\n <fa-icon [icon]=\"'times'\" style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Remove Rule Set</span>\r\n </ion-button>\r\n </ng-container>\r\n <!--Remove Rule Button-->\r\n <ng-container *queryRemoveButton=\"let rule; let removeRule=removeRule\">\r\n <ion-button fill=\"outline\"\r\n size=\"small\"\r\n strong=\"false\"\r\n (click)=\"removeRule(rule)\"\r\n [disabled]=\"isDisabled\"\r\n class=\"buttonremove\">\r\n <fa-icon [icon]=\"'minus'\"\r\n style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Remove Rule</span>\r\n </ion-button>\r\n </ng-container>\r\n <!--Name dropdown-->\r\n <ng-container *queryField=\"let rule; let fields=fields; let onChange=onChange; let getFields=getFields\">\r\n <kendo-dropdownlist [(ngModel)]=\"rule.field\"\r\n (ngModelChange)=\"onChange($event, rule)\"\r\n [data]=\"getFields(rule.entity)\"\r\n textField=\"name\"\r\n valueField=\"value\"\r\n [value]=\"value\"\r\n [valuePrimitive]=\"true\"\r\n [disabled]=\"isDisabled\"\r\n style=\"padding-right:10px;\">\r\n </kendo-dropdownlist>\r\n </ng-container>\r\n <!--Operator dropdown-->\r\n <ng-container *queryOperator=\"let rule; let operators=operators; let onChange=onChange\" style=\"padding:10px\">\r\n <kendo-dropdownlist [(ngModel)]=\"rule.operator\"\r\n (ngModelChange)=\"onChange($event, rule)\"\r\n [data]=\"getOperators(operators, rule)\"\r\n textField=\"name\"\r\n valueField=\"value\"\r\n [value]=\"value\"\r\n [valuePrimitive]=\"true\"\r\n [disabled]=\"isDisabled\"\r\n style=\"padding-right:10px;\">\r\n </kendo-dropdownlist>\r\n </ng-container>\r\n <!--Text Field-->\r\n <ng-container *queryInput=\"let rule; let field=field; type: 'string'; let onChange=onChange\">\r\n <kendo-textbox [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n [clearButton]=\"true\"\r\n [disabled]=\"isDisabled\"\r\n class=\"customTextbox\">\r\n </kendo-textbox>\r\n </ng-container>\r\n <!--TextArea Field-->\r\n <ng-container *queryInput=\"let rule; type: 'textarea'; let onChange=onChange\">\r\n <kendo-textarea [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n [rows]=\"5\"\r\n [cols]=\"40\"\r\n resizable=\"none\"\r\n [disabled]=\"isDisabled\">\r\n </kendo-textarea>\r\n </ng-container>\r\n <!--Number Field-->\r\n <ng-container *queryInput=\"let rule; let field=field; type: 'number'; let onChange=onChange\">\r\n <kendo-numerictextbox [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n [value]=\"value\"\r\n [decimals]=\"0\"\r\n [disabled]=\"isDisabled\">\r\n </kendo-numerictextbox>\r\n </ng-container>\r\n <!--Date Field-->\r\n <ng-container *queryInput=\"let rule; type: 'date'; let onChange=onChange\">\r\n <kendo-datepicker [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n calendarType=\"classic\"\r\n [value]=\"value\"\r\n [disabled]=\"isDisabled\">\r\n </kendo-datepicker>\r\n </ng-container>\r\n <!--Category Field-->\r\n <ng-container *queryInput=\"let rule; let options=options; type: 'category'; let onChange=onChange\">\r\n <kendo-dropdownlist [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n [data]=\"getOptionList(options, rule)\"\r\n textField=\"name\"\r\n valueField=\"value\"\r\n [value]=\"value\"\r\n [valuePrimitive]=\"true\"\r\n [disabled]=\"isDisabled\">\r\n </kendo-dropdownlist>\r\n </ng-container>\r\n <!--DropDown MultiSelect Field-->\r\n <ng-container *queryInput=\"let rule; let options=options; type: 'multiselect'; let onChange=onChange\">\r\n <kendo-multiselect [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n [data]=\"getOptionList(options, rule)\"\r\n textField=\"name\"\r\n valueField=\"value\"\r\n [value]=\"value\"\r\n [valuePrimitive]=\"true\"\r\n [autoClose]=\"false\"\r\n style=\"width:30%\"\r\n [disabled]=\"isDisabled\">\r\n </kendo-multiselect>\r\n </ng-container>\r\n <!--Boolean Field-->\r\n <ng-container *queryInput=\"let rule; type: 'boolean'; let onChange=onChange\">\r\n <input type=\"checkbox\"\r\n [(ngModel)]=\"rule.value\"\r\n (ngModelChange)=\"onChange()\"\r\n class=\"customCheckBox\"\r\n [disabled]=\"isDisabled\"\r\n kendoCheckBox />\r\n </ng-container>\r\n </query-builder>\r\n <br>\r\n <div *ngIf=\"data.ShowQueryResult\">\r\n <div>\r\n <label>Query Result</label>\r\n </div>\r\n <textarea class=\"output\"\r\n resizable=\"none\"\r\n [rows]=\"10\"\r\n [cols]=\"40\">{{queryCtrl | json}}</textarea>\r\n <br>\r\n </div>\r\n <div style=\"width:100%\" slot=\"end\">\r\n <ion-button *ngIf=\"!isDisabled\"\r\n strong=\"false\"\r\n (click)=\"completeRule(true, null)\"\r\n class=\"buttonapply\">\r\n <fa-icon [icon]=\"'save'\" style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Apply</span>\r\n </ion-button>\r\n <ion-button *ngIf=\"isDisabled\"\r\n strong=\"false\"\r\n (click)=\"completeRule(false, null)\"\r\n class=\"buttonapply\">\r\n <fa-icon [icon]=\"'save'\" style=\"padding-right: 5px;\"></fa-icon>\r\n <span class=\"ion-text-capitalize\">Undo Apply</span>\r\n </ion-button>\r\n </div>\r\n </div>\r\n</ion-item>\r\n", styles: [".qbcontainer{border-radius:5px;border:1px solid rgba(0,0,0,.08);padding:10px;margin:10px 0;width:100%}.item.sc-ion-label-md-h,.item .sc-ion-label-md-h{font-weight:var(--z-label-weight);color:var(--z-label-color);text-shadow:var(--z-label-shadow)}:host ::ng-deep query-builder .k-dropdown .k-dropdown-wrap,:host ::ng-deep query-builder .k-dropdowntree .k-dropdown-wrap{background-color:#fff}:host ::ng-deep query-builder .customTextbox{width:calc(100% - 440px);min-width:230px}:host ::ng-deep query-builder .customCheckBox{width:27px;height:27px}:host ::ng-deep query-builder .buttonadd{background-color:#479400;color:#fff;border-color:#479400}:host ::ng-deep query-builder .buttonremove{background-color:#f04141;color:#fff;border-color:#f04141;margin-top:0}.buttonapply{background-color:#5596e6;color:#fff;border-color:#5596e6}\n"] }]
|
|
176
|
+
}], ctorParameters: function () { return [{ type: i1.FieldService }, { type: i1.ResourceApiService }, { type: i1.WebApiService }]; }, propDecorators: { queryBuilder: [{
|
|
177
|
+
type: ViewChild,
|
|
178
|
+
args: [QueryBuilderComponent, { static: false }]
|
|
179
|
+
}], classNames: [{
|
|
180
|
+
type: Input
|
|
181
|
+
}], data: [{
|
|
182
|
+
type: Input
|
|
183
|
+
}], group: [{
|
|
184
|
+
type: Input
|
|
185
|
+
}], form: [{
|
|
186
|
+
type: Input
|
|
187
|
+
}] } });
|
|
188
|
+
export function toQueryRule(queryBuilderModel) {
|
|
189
|
+
let rule = {};
|
|
190
|
+
if (queryBuilderModel.condition) {
|
|
191
|
+
rule.condition = queryBuilderModel.condition;
|
|
192
|
+
rule.rules = queryBuilderModel.rules.map(q => toQueryRule(q));
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
rule.field = queryBuilderModel.field;
|
|
196
|
+
rule.type = queryBuilderModel.type;
|
|
197
|
+
rule.operator = queryBuilderModel.operator;
|
|
198
|
+
rule.value = queryBuilderModel.value instanceof Array
|
|
199
|
+
? queryBuilderModel.type === 'date' ? new Date(queryBuilderModel.value) : queryBuilderModel.value
|
|
200
|
+
: [queryBuilderModel.type === 'date' ? new Date(queryBuilderModel.value) : queryBuilderModel.value];
|
|
201
|
+
}
|
|
202
|
+
return rule;
|
|
203
|
+
}
|
|
204
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoienF1ZXJ5YnVpbGRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tbWhnbG9iYWwtZHluYW1pY2Zvcm0vc3JjL2xpYi96cXVlcnlidWlsZGVyL3pxdWVyeWJ1aWxkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenF1ZXJ5YnVpbGRlci96cXVlcnlidWlsZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHcEUsNkJBQTZCO0FBRTdCLDhCQUE4QjtBQUM5QixPQUFPLEVBQUUsR0FBRyxFQUFrQixNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBOEMscUJBQXFCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUUzRywyQ0FBMkM7QUFDM0MsT0FBTyxFQUNTLGdCQUFnQixFQUFFLG9CQUFvQixFQUNoQyx3QkFBd0IsRUFDN0MsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7Ozs7Ozs7QUFTekIsTUFBTSxPQUFPLHNCQUFzQjtJQXdCakMsWUFDVSxZQUEwQixFQUMxQixrQkFBc0MsRUFDdEMsYUFBNEI7UUFGNUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQXBCdEMsMkJBQTJCO1FBQzNCLFlBQU8sR0FBRyxFQUFFLENBQUM7UUFFTix3QkFBbUIsR0FBRyxJQUFJLG9CQUFvQixFQUFFLENBQUM7UUFFakQsa0JBQWEsR0FBdUI7WUFDekMsTUFBTSxFQUFFLEVBQUU7WUFDVixrQkFBa0IsRUFBRSxJQUFJO1NBQ3pCLENBQUM7UUFDSyxpQkFBWSxHQUFZLElB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QUFNO1FBQ0wsSUFBSSxDQUFDLEtBQUssR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLENBQUM7UUFDckMsSUFBSSxDQUFDLElBQUksR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7UUFDbkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQyxRQUFRLENBQUM7UUFDM0MsSUFBSSxDQUFDLEtBQUssR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLFlBQVksS0FBSztZQUNuRCxDQUFDLENBQUMsaUJBQWlCLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEtBQUs7WUFDakcsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ3ZHO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKiogQW5ndWxhciAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuLyoqKioqKioqKiogSW9uaWMgKioqKioqKioqKi9cclxuXHJcbi8qKioqKioqKioqIFBsdWdpbiAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBtYXAsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBRdWVyeUJ1aWxkZXJDb25maWcsIFF1ZXJ5QnVpbGRlckNsYXNzTmFtZXMsIFF1ZXJ5QnVpbGRlckNvbXBvbmVudCB9IGZyb20gJ2FuZ3VsYXIyLXF1ZXJ5LWJ1aWxkZXInO1xyXG5cclxuLyoqKioqKioqKiogQ29tcG9uZW50ICYgU2VydmljZSAqKioqKioqKioqL1xyXG5pbXBvcnQge1xyXG4gIEZpZWxkU2VydmljZSwgWkNvbXBvbmVudEhlbHBlciwgWkNvbXBvbmVudFByb3BlcnRpZXMsIFpGaWVsZCwgWkdyb3VwLFxyXG4gIEZvbnRBd2VTb21lU2VydmljZSwgRGVmYXVsdFBhZ2VTZXR0aW5nUGFyYW1zLCBXZWJBcGlTZXJ2aWNlLCBSZXNvdXJjZUFwaVNlcnZpY2VcclxufSBmcm9tICdtbWhnbG9iYWwtemNvcmUnO1xyXG5pbXBvcnQgeyBvZiB9IGZyb20gJ3J4anMnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXpxdWVyeWJ1aWxkZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi96cXVlcnlidWlsZGVyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi96cXVlcnlidWlsZGVyLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBacXVlcnlidWlsZGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBAVmlld0NoaWxkKFF1ZXJ5QnVpbGRlckNvbXBvbmVudCwgeyBzdGF0aWM6IGZhbHNlIH0pIHF1ZXJ5QnVpbGRlcjogUXVlcnlCdWlsZGVyQ29tcG9uZW50O1xyXG4gIEBJbnB1dCgpIGNsYXNzTmFtZXM6IFF1ZXJ5QnVpbGRlckNsYXNzTmFtZXM7XHJcbiAgQElucHV0KCkgZGF0YTogWkZpZWxkO1xyXG4gIEBJbnB1dCgpIGdyb3VwOiBaR3JvdXA7XHJcbiAgQElucHV0KCkgZm9ybTogRm9ybUdyb3VwO1xyXG5cclxuICAvL3FiSXRlbXM6IEFycmF5PGFueT4gPSBbXTtcclxuICBxYkl0ZW1zID0ge307XHJcblxyXG4gIHB1YmxpYyBjb21wb25lbnRQcm9wZXJ0aWVzID0gbmV3IFpDb21wb25lbnRQcm9wZXJ0aWVzKCk7XHJcbiAgcHVibGljIHF1ZXJ5Q3RybDogYW55O1xyXG4gIHB1YmxpYyBjdXJyZW50Q29uZmlnOiBRdWVyeUJ1aWxkZXJDb25maWcgPSB7XHJcbiAgICBmaWVsZHM6IHt9LFxyXG4gICAgYWxsb3dFbXB0eVJ1bGVzZXRzOiB0cnVlXHJcbiAgfTtcclxuICBwdWJsaWMgYWxsb3dSdWxlc2V0OiBib29sZWFuID0gdHJ1ZTtcclxuICBwdWJsaWMgYWxsb3dDb2xsYXBzZTogYm9vbGVhbj0gZmFsc2U7XHJcbiAgcHVibGljIHBlcnNpc3RWYWx1ZU9uRmllbGRDaGFuZ2U6IGJvb2xlYW4gPSBmYWxzZTsgXHJcbiAgcHVibGljIGlzRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgcnVsZTogYW55O1xyXG4gIHB1YmxpYyB2YWx1ZTogYW55O1xyXG4gIHByaXZhdGUgZmllbGRzOiBhbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBmaWVsZFNlcnZpY2U6IEZpZWxkU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVzb3VyY2VBcGlTZXJ2aWNlOiBSZXNvdXJjZUFwaVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHdlYkFwaVNlcnZpY2U6IFdlYkFwaVNlcnZpY2VcclxuICApIHtcclxuICB9XHJcbiAgICBcclxuICBuZ09uSW5pdCgpIHtcclxuICAgIFpDb21wb25lbnRIZWxwZXIuc2V0Q29tcG9uZW50UHJvcGVydGllcyh0aGlzKTtcclxuICAgIFpDb21wb25lbnRIZWxwZXIucmVnaXN0ZXJDb21wb25lbnQodGhpcyk7XHJcbiAgICAgXHJcbiAgICBpZiAodGhpcy5kYXRhWydBbGxvd0NvbGxhcHNlJ10gPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5hbGxvd0NvbGxhcHNlID0gdGhpcy5kYXRhWydBbGxvd0NvbGxhcHNlJ107XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZGF0YVsnQWxsb3dSdWxlc2V0J10gPT09IGZhbHNlKSB7XHJcbiAgICAgIHRoaXMuYWxsb3dSdWxlc2V0ID0gdGhpcy5kYXRhWydBbGxvd1J1bGVzZXQnXTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZpZWxkcyA9IHRoaXMuZmllbGRTZXJ2aWNlLmdldEZvcm1GaWVsZENvZGUodGhpcy5kYXRhLlZhbHVlLCBcIkZvcm1GaWVsZFwiLCBudWxsLCBudWxsKTsgXHJcbiAgICAgXHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLmZpZWxkcy5zdWJzY3JpYmUoZGF0YSA9PiB7IFxyXG4gICAgICAgIGRhdGEuZm9yRWFjaCgoZmllbGQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgLy8gSGFuZGxlIE9wdGlvbnNcclxuICAgICAgICAgIGxldCBvcHRpb25MaXN0ID0gW107XHJcblxyXG4gICAgICAgICAgaWYgKGZpZWxkLlR5cGUgPT0gJ2NhdGVnb3J5JyB8fCBmaWVsZC5UeXBlID09ICdtdWx0aXNlbGVjdCcpIHtcclxuICAgICAgICAgICAgaWYgKGZpZWxkWydWYWx1ZU9wdGlvbnMnXSkge1xyXG4gICAgICAgICAgICAgIGZpZWxkWydWYWx1ZU9wdGlvbnMnXS5mb3JFYWNoKCh2YWx1ZU9wdGlvbjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBvcHRpb25MaXN0LnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICBuYW1lOiB2YWx1ZU9wdGlvbi5OYW1lLFxyXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVPcHRpb24uVmFsdWVcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHNlbGVjdE9wdGlvbnMgPSBmaWVsZFsnU2VsZWN0T3B0aW9ucyddO1xyXG5cclxuICAgICAgICAgICAgICBjb25zdCBwYXJhbSA9IE9iamVjdC5hc3NpZ24oe30sIERlZmF1bHRQYWdlU2V0dGluZ1BhcmFtcyk7XHJcbiAgICAgICAgICAgICAgcGFyYW0ucGFnZVNpemUgPSBzZWxlY3RPcHRpb25zWydQYWdlU2l6ZSddO1xyXG4gICAgICAgICAgICAgIHBhcmFtLmNvbHVtbnMgPSBzZWxlY3RPcHRpb25zWydDb2x1bW5zJ107XHJcbiAgICAgICAgICAgICAgcGFyYW0uZmlsdGVycyArPSBzZWxlY3RPcHRpb25zWydGaWx0ZXJzJ107XHJcbiAgICAgICAgICAgICAgcGFyYW0uc29ydENvbHVtbk5hbWUgPSBzZWxlY3RPcHRpb25zWydTb3J0Q29sdW1uTmFtZSddO1xyXG4gICAgICAgICAgICAgIHBhcmFtLnNvcnRPcmRlciA9IHNlbGVjdE9wdGlvbnNbJ1NvcnRPcmRlciddO1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLndlYkFwaVNlcnZpY2VcclxuICAgICAgICAgICAgICAgIC5odHRwUG9zdCQodGhpcy5yZXNvdXJjZUFwaVNlcnZpY2UuZ2V0UGFnZVVybChzZWxlY3RPcHRpb25zWydSZXNvdXJjZVVSTCddKSwgcGFyYW0pXHJcbiAgICAgICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgICAgbWFwKChyZXNwKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcC5kYXRhU2V0LmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgb3B0aW9uTGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogaXRlbVtzZWxlY3RPcHRpb25zWydOYW1lJ11dLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaXRlbVtzZWxlY3RPcHRpb25zWydWYWx1ZSddXVxyXG4gICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5xYkl0ZW1zW2ZpZWxkLlZhbHVlXVsnb3B0aW9ucyddID0gb3B0aW9uTGlzdFxyXG4gICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgKS5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIERlZmF1bHQgcnVsZSB0byBkaXNwbGF5XHJcbiAgICAgICAgICB0aGlzLnFiSXRlbXNbZmllbGQuVmFsdWVdID0ge1xyXG4gICAgICAgICAgICBuYW1lOiBmaWVsZC5OYW1lLFxyXG4gICAgICAgICAgICB2YWx1ZTogZmllbGQuVmFsdWUsXHJcbiAgICAgICAgICAgIHR5cGU6IGZpZWxkLlR5cGUsXHJcbiAgICAgICAgICAgIG9wZXJhdG9yTGlzdDogZmllbGRbJ09wZXJhdG9ycyddLFxyXG4gICAgICAgICAgICBvcHRpb25zOiBvcHRpb25MaXN0LFxyXG4gICAgICAgICAgICBudWxsYWJsZTogZmllbGRbJ0lzTnVsbGFibGUnXSxcclxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBmaWVsZFsnRGVmYXVsdFZhbHVlJ10gPyBmaWVsZFsnRGVmYXVsdFZhbHVlJ10gOiBudWxsXHJcbiAgICAgICAgICB9IFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgICBcclxuICAgICAgICB0aGlzLmN1cnJlbnRDb25maWcgPSB7XHJcbiAgICAgICAgICBmaWVsZHM6IHRoaXMucWJJdGVtcyxcclxuICAgICAgICAgIGFsbG93RW1wdHlSdWxlc2V0czogdHJ1ZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgIFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIC8vIGFwcGVuZCBkZWZhdWx0IHF1ZXJ5IGlmIGFueS5cclxuICAgICAgaWYgKHRoaXMuZGF0YVsnRGVmYXVsdFF1ZXJ5J10pIHtcclxuICAgICAgICBsZXQgZGVmYXVsdFF1ZXJ5VmFsdWVTdHJpbmcgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwoXHJcbiAgICAgICAgICB0aGlzLFxyXG4gICAgICAgICAgdGhpcy5kYXRhWydEZWZhdWx0UXVlcnknXSxcclxuICAgICAgICAgIHRoaXMuZ3JvdXBcclxuICAgICAgICApOyBcclxuXHJcbiAgICAgICAgaWYgKGRlZmF1bHRRdWVyeVZhbHVlU3RyaW5nKSB7XHJcbiAgICAgICAgICB0aGlzLnNldFF1ZXJ5VmFsdWUoZGVmYXVsdFF1ZXJ5VmFsdWVTdHJpbmcpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihcImVycm9yOiBcIiwgZXJyb3IpO1xyXG4gICAgfSBcclxuICB9XHJcbiAgICBcclxuICBwdWJsaWMgY29tcGxldGVSdWxlKGlzVW5kbzogYm9vbGVhbiwgcXVlcnlWYWx1ZTogYW55KSB7XHJcbiAgICB0aGlzLmlzRGlzYWJsZWQgPSBpc1VuZG87IFxyXG4gICAgY29uc3QgcWJSZXN1bHRWYWx1ZU5hbWUgPSB0aGlzLmRhdGEuVHlwZSArICdfJyArIHRoaXMuZGF0YS5WYWx1ZTtcclxuICAgIHRoaXMuZ3JvdXBbcWJSZXN1bHRWYWx1ZU5hbWVdID0gdGhpcy5xdWVyeUJ1aWxkZXIudmFsdWUgIFxyXG5cclxuICAgIGlmIChxdWVyeVZhbHVlKSB7XHJcbiAgICAgIHRoaXMuZ3JvdXBbcWJSZXN1bHRWYWx1ZU5hbWVdID0gcXVlcnlWYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWlzVW5kbykge1xyXG4gICAgICB0aGlzLmdyb3VwW3FiUmVzdWx0VmFsdWVOYW1lXSA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmdyb3VwLnpNb2RlbCkge1xyXG4gICAgICBaQ29tcG9uZW50SGVscGVyLnNldE1vZGVsVmFsdWUodGhpcy5kYXRhLlZhbHVlLCB0aGlzLmdyb3VwW3FiUmVzdWx0VmFsdWVOYW1lXSwgdGhpcy5ncm91cCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZGF0YVsnT25BcHBseUNsaWNrJ10gJiYgIXF1ZXJ5VmFsdWUpIHtcclxuICAgICAgbGV0IGNhbGxGdW5jID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKFxyXG4gICAgICAgIHRoaXMsXHJcbiAgICAgICAgdGhpcy5kYXRhWydPbkFwcGx5Q2xpY2snXSxcclxuICAgICAgICB0aGlzLmdyb3VwXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IG5ld0Z1bmMgPSBjYWxsRnVuYy5iaW5kKHRoaXMpO1xyXG4gICAgICBuZXdGdW5jKHRoaXMuZ3JvdXAsIHRoaXMuZ3JvdXBbcWJSZXN1bHRWYWx1ZU5hbWVdLCB0aGlzLmZpZWxkcyk7XHJcbiAgICB9IFxyXG4gIH1cclxuICAgXHJcbiAgcHVibGljIGJvb3RzdHJhcENsYXNzTmFtZXM6IFF1ZXJ5QnVpbGRlckNsYXNzTmFtZXMgPSB7XHJcbiAgICBhcnJvd0ljb246ICdmYSBmYS1jaGV2cm9uLXJpZ2h0IHB4LTInLFxyXG4gICAgYnV0dG9uOiAnYnRuJyxcclxuICAgIGJ1dHRvbkdyb3VwOiAnYnRuLWdyb3VwJyxcclxuICAgIHJpZ2h0QWxpZ246ICdvcmRlci0xMiBtbC1hdXRvJyxcclxuICAgIHN3aXRjaFJvdzogJ2QtZmxleCBweC0yJyxcclxuICAgIHN3aXRjaEdyb3VwOiAnZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlcicsXHJcbiAgICBzd2l0Y2hSYWRpbzogJ2N1c3RvbS1jb250cm9sLWlucHV0JyxcclxuICAgIHN3aXRjaExhYmVsOiAnY3VzdG9tLWNvbnRyb2wtbGFiZWwnLFxyXG4gICAgc3dpdGNoQ29udHJvbDogJ2N1c3RvbS1jb250cm9sIGN1c3RvbS1yYWRpbyBjdXN0b20tY29udHJvbC1pbmxpbmUnLFxyXG4gICAgcm93OiAncm93IHAtMiBtLTEnLFxyXG4gICAgcnVsZTogJ2JvcmRlcicsXHJcbiAgICBydWxlU2V0OiAnYm9yZGVyJyxcclxuICAgIGludmFsaWRSdWxlU2V0OiAnYWxlcnQgYWxlcnQtZGFuZ2VyJyxcclxuICAgIGVtcHR5V2FybmluZzogJ3RleHQtZGFuZ2VyIG14LWF1dG8nLFxyXG4gICAgb3BlcmF0b3JDb250cm9sOiAnZm9ybS1jb250cm9sJyxcclxuICAgIG9wZXJhdG9yQ29udHJvbFNpemU6ICdjb2wtYXV0byBwci0wJyxcclxuICAgIGZpZWxkQ29udHJvbDogJ2Zvcm0tY29udHJvbCcsXHJcbiAgICBmaWVsZENvbnRyb2xTaXplOiAnY29sLWF1dG8gcHItMCcsXHJcbiAgICBlbnRpdHlDb250cm9sOiAnZm9ybS1jb250cm9sJyxcclxuICAgIGVudGl0eUNvbnRyb2xTaXplOiAnY29sLWF1dG8gcHItMCcsXHJcbiAgICBpbnB1dENvbnRyb2w6ICdmb3JtLWNvbnRyb2wnLFxyXG4gICAgaW5wdXRDb250cm9sU2l6ZTogJ2NvbC1hdXRvJ1xyXG4gIH07XHJcblxyXG4gIHB1YmxpYyBjb25kaXRpb25MaXN0OiBBcnJheTxzdHJpbmc+ID0gW1xyXG4gICAgXCJBTkRcIixcclxuICAgIFwiT1JcIlxyXG4gIF07XHJcblxyXG4gIHB1YmxpYyBnZXRPcGVyYXRvcnMoZGVmYXVsdE9wZXJhdG9yTGlzdDogYW55LCBydWxlOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLnFiSXRlbXNbcnVsZS5maWVsZF0ub3BlcmF0b3JMaXN0ID8gdGhpcy5xYkl0ZW1zW3J1bGUuZmllbGRdLm9wZXJhdG9yTGlzdCA6IGRlZmF1bHRPcGVyYXRvckxpc3Q7XHJcbiAgfVxyXG4gICBcclxuICBwdWJsaWMgZ2V0T3B0aW9uTGlzdChvcHRpb25zTGlzdDogYW55LCBydWxlOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLnFiSXRlbXNbcnVsZS5maWVsZF0ub3B0aW9ucyA/IHRoaXMucWJJdGVtc1tydWxlLmZpZWxkXS5vcHRpb25zIDogb3B0aW9uc0xpc3Q7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0UXVlcnlWYWx1ZShxdWVyeVZhbHVlU3RyaW5nOiBzdHJpbmcpIHtcclxuICAgIGlmIChxdWVyeVZhbHVlU3RyaW5nKSB7XHJcbiAgICAgIGNvbnN0IGRlZmF1bHRRdWVyeVZhbHVlSnNvbiA9IHRvUXVlcnlSdWxlKEpTT04ucGFyc2UocXVlcnlWYWx1ZVN0cmluZykpO1xyXG4gICAgICB0aGlzLnF1ZXJ5Q3RybCA9IGRlZmF1bHRRdWVyeVZhbHVlSnNvbjtcclxuXHJcbiAgICAgIC8vIGRlZmF1bHQgbG9jayB0aGUgcXVlcnkgYnVpbGRlciBpZiB0aGVyZSBkZWZhdWx0IHF1ZXJ5XHJcbiAgICAgIHRoaXMuY29tcGxldGVSdWxlKHRydWUsIGRlZmF1bHRRdWVyeVZhbHVlSnNvbik7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXJ5UnVsZSB7XHJcbiAgY29uZGl0aW9uOiBzdHJpbmc7XHJcbiAgcnVsZXM6IFF1ZXJ5UnVsZVtdO1xyXG4gIGZpZWxkOiBzdHJpbmc7XHJcbiAgdHlwZTogc3RyaW5nO1xyXG4gIG9wZXJhdG9yOiBzdHJpbmc7XHJcbiAgdmFsdWU6IHN0cmluZ1tdO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdG9RdWVyeVJ1bGUocXVlcnlCdWlsZGVyTW9kZWw6IGFueSk6IFF1ZXJ5UnVsZSB7XHJcbiAgbGV0IHJ1bGUgPSA8UXVlcnlSdWxlPnt9O1xyXG4gIGlmIChxdWVyeUJ1aWxkZXJNb2RlbC5jb25kaXRpb24pIHtcclxuICAgIHJ1bGUuY29uZGl0aW9uID0gcXVlcnlCdWlsZGVyTW9kZWwuY29uZGl0aW9uO1xyXG4gICAgcnVsZS5ydWxlcyA9IHF1ZXJ5QnVpbGRlck1vZGVsLnJ1bGVzLm1hcChxID0+IHRvUXVlcnlSdWxlKHEpKTtcclxuICB9IGVsc2Uge1xyXG4gICAgcnVsZS5maWVsZCA9IHF1ZXJ5QnVpbGRlck1vZGVsLmZpZWxkO1xyXG4gICAgcnVsZS50eXBlID0gcXVlcnlCdWlsZGVyTW9kZWwudHlwZTtcclxuICAgIHJ1bGUub3BlcmF0b3IgPSBxdWVyeUJ1aWxkZXJNb2RlbC5vcGVyYXRvcjtcclxuICAgIHJ1bGUudmFsdWUgPSBxdWVyeUJ1aWxkZXJNb2RlbC52YWx1ZSBpbnN0YW5jZW9mIEFycmF5XHJcbiAgICAgID8gcXVlcnlCdWlsZGVyTW9kZWwudHlwZSA9PT0gJ2RhdGUnID8gbmV3IERhdGUocXVlcnlCdWlsZGVyTW9kZWwudmFsdWUpIDogcXVlcnlCdWlsZGVyTW9kZWwudmFsdWVcclxuICAgICAgOiBbcXVlcnlCdWlsZGVyTW9kZWwudHlwZSA9PT0gJ2RhdGUnID8gbmV3IERhdGUocXVlcnlCdWlsZGVyTW9kZWwudmFsdWUpIDogcXVlcnlCdWlsZGVyTW9kZWwudmFsdWVdO1xyXG4gIH1cclxuICByZXR1cm4gcnVsZTtcclxufVxyXG4iLCI8aW9uLWl0ZW0gKm5nSWY9XCIoISFjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZUZpZWxkID8gZ3JvdXBbY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGVGaWVsZF0gOiBjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZSlcIj5cclxuICA8aW9uLWxhYmVsIFthdHRyLmZvcl09XCJkYXRhLlZhbHVlXCJcclxuICAgICAgICAgICAgICpuZ0lmPVwiZGF0YS5TaG93TGFiZWwgPT09IHVuZGVmaW5lZCB8fCBkYXRhLlNob3dMYWJlbFwiXHJcbiAgICAgICAgICAgICBbcG9zaXRpb25dPVwiZGF0YS5MYWJlbFBvc2l0aW9uID8gZGF0YS5MYWJlbFBvc2l0aW9uIDogJ3N0YWNrZWQnXCI+XHJcbiAgICB7e2RhdGEuTGFiZWx9fVxyXG4gICAgPGlvbi10ZXh0ICpuZ0lmPVwiKCEhY29tcG9uZW50UHJvcGVydGllcy5pc1JlcXVpcmVkRmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVxdWlyZWRGaWVsZF0gOiBjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVxdWlyZWQpXCJcclxuICAgICAgICAgICAgICBjb2xvcj1cImRhbmdlclwiPio8L2lvbi10ZXh0PlxyXG4gIDwvaW9uLWxhYmVsPlxyXG4gIDxkaXYgY2xhc3M9XCJxYmNvbnRhaW5lclwiPlxyXG4gICAgPHF1ZXJ5LWJ1aWxkZXIgWyhuZ01vZGVsKV09J3F1ZXJ5Q3RybCdcclxuICAgICAgICAgICAgICAgICAgIFsoY29uZmlnKV09J2N1cnJlbnRDb25maWcnXHJcbiAgICAgICAgICAgICAgICAgICBbYWxsb3dSdWxlc2V0XT0nYWxsb3dSdWxlc2V0J1xyXG4gICAgICAgICAgICAgICAgICAgW2FsbG93Q29sbGFwc2VdPSdhbGxvd0NvbGxhcHNlJ1xyXG4gICAgICAgICAgICAgICAgICAgW3BlcnNpc3RWYWx1ZU9uRmllbGRDaGFuZ2VdPSdwZXJzaXN0VmFsdWVPbkZpZWxkQ2hhbmdlJz5cclxuICAgICAgPCEtLUFORCBPUiBTd3RpY2gtLT5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlTd2l0Y2hHcm91cD1cImxldCBydWxlc2V0OyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICA8a2VuZG8tZHJvcGRvd25saXN0IFsobmdNb2RlbCldPVwicnVsZXNldC5jb25kaXRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2UoJGV2ZW50LCBydWxlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJjb25kaXRpb25MaXN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwidGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcIj5cclxuICAgICAgICA8L2tlbmRvLWRyb3Bkb3dubGlzdD5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwhLS1SdWxlIFJ1bGVTZXQgUmVtb3ZlIFJ1bGUgU2V0IEJ1dHRvbi0tPlxyXG4gICAgICA8bmctY29udGFpbmVyICpxdWVyeUJ1dHRvbkdyb3VwPVwibGV0IHJ1bGVzZXQ7IGxldCBhZGRSdWxlPWFkZFJ1bGU7IGxldCBhZGRSdWxlU2V0PWFkZFJ1bGVTZXQ7IGxldCByZW1vdmVSdWxlU2V0PXJlbW92ZVJ1bGVTZXRcIj5cclxuICAgICAgICA8IS0tQWRkIFJ1bGUgQnV0dG9uLS0+XHJcbiAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cIm91dGxpbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb25nPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGRSdWxlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ1dHRvbmFkZFwiPlxyXG4gICAgICAgICAgPGZhLWljb24gW2ljb25dPVwiJ3BsdXMnXCIgc3R5bGU9XCJwYWRkaW5nLXJpZ2h0OiA1cHg7XCI+PC9mYS1pY29uPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJpb24tdGV4dC1jYXBpdGFsaXplXCI+QWRkPC9zcGFuPlxyXG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cclxuICAgICAgICA8IS0tQWRkIFJ1bGVTZXQgQnV0dG9uLS0+XHJcbiAgICAgICAgPGlvbi1idXR0b24gKm5nSWY9XCJhZGRSdWxlU2V0XCJcclxuICAgICAgICAgICAgICAgICAgICBmaWxsPVwib3V0bGluZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcclxuICAgICAgICAgICAgICAgICAgICBzdHJvbmc9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZFJ1bGVTZXQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uYWRkXCI+XHJcbiAgICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCIncGx1cydcIiBzdHlsZT1cInBhZGRpbmctcmlnaHQ6IDVweDtcIj48L2ZhLWljb24+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImlvbi10ZXh0LWNhcGl0YWxpemVcIj5BZGQgUnVsZSBTZXQ8L3NwYW4+XHJcbiAgICAgICAgPC9pb24tYnV0dG9uPlxyXG4gICAgICAgIDwhLS1SZW1vdmUgUnVsZVNldCBCdXR0b24tLT5cclxuICAgICAgICA8aW9uLWJ1dHRvbiAqbmdJZj1cInJlbW92ZVJ1bGVTZXRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGZpbGw9XCJvdXRsaW5lXCJcclxuICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0cm9uZz1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlUnVsZVNldCgpXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidXR0b25yZW1vdmVcIj5cclxuICAgICAgICAgIDxmYS1pY29uIFtpY29uXT1cIid0aW1lcydcIiBzdHlsZT1cInBhZGRpbmctcmlnaHQ6IDVweDtcIj48L2ZhLWljb24+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImlvbi10ZXh0LWNhcGl0YWxpemVcIj5SZW1vdmUgUnVsZSBTZXQ8L3NwYW4+XHJcbiAgICAgICAgPC9pb24tYnV0dG9uPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPCEtLVJlbW92ZSBSdWxlIEJ1dHRvbi0tPlxyXG4gICAgICA8bmctY29udGFpbmVyICpxdWVyeVJlbW92ZUJ1dHRvbj1cImxldCBydWxlOyBsZXQgcmVtb3ZlUnVsZT1yZW1vdmVSdWxlXCI+XHJcbiAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cIm91dGxpbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb25nPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVSdWxlKHJ1bGUpXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidXR0b25yZW1vdmVcIj5cclxuICAgICAgICAgIDxmYS1pY29uIFtpY29uXT1cIidtaW51cydcIlxyXG4gICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nLXJpZ2h0OiA1cHg7XCI+PC9mYS1pY29uPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJpb24tdGV4dC1jYXBpdGFsaXplXCI+UmVtb3ZlIFJ1bGU8L3NwYW4+XHJcbiAgICAgICAgPC9pb24tYnV0dG9uPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPCEtLU5hbWUgZHJvcGRvd24tLT5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlGaWVsZD1cImxldCBydWxlOyBsZXQgZmllbGRzPWZpZWxkczsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlOyBsZXQgZ2V0RmllbGRzPWdldEZpZWxkc1wiPlxyXG4gICAgICAgIDxrZW5kby1kcm9wZG93bmxpc3QgWyhuZ01vZGVsKV09XCJydWxlLmZpZWxkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlKCRldmVudCwgcnVsZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwiZ2V0RmllbGRzKHJ1bGUuZW50aXR5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0RmllbGQ9XCJuYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlRmllbGQ9XCJ2YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlUHJpbWl0aXZlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nLXJpZ2h0OjEwcHg7XCI+XHJcbiAgICAgICAgPC9rZW5kby1kcm9wZG93bmxpc3Q+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8IS0tT3BlcmF0b3IgZHJvcGRvd24tLT5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlPcGVyYXRvcj1cImxldCBydWxlOyBsZXQgb3BlcmF0b3JzPW9wZXJhdG9yczsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlXCIgc3R5bGU9XCJwYWRkaW5nOjEwcHhcIj5cclxuICAgICAgICA8a2VuZG8tZHJvcGRvd25saXN0IFsobmdNb2RlbCldPVwicnVsZS5vcGVyYXRvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQsIHJ1bGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhXT1cImdldE9wZXJhdG9ycyhvcGVyYXRvcnMsIHJ1bGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRGaWVsZD1cIm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVGaWVsZD1cInZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVQcmltaXRpdmVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmctcmlnaHQ6MTBweDtcIj5cclxuICAgICAgICA8L2tlbmRvLWRyb3Bkb3dubGlzdD5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwhLS1UZXh0IEZpZWxkLS0+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5SW5wdXQ9XCJsZXQgcnVsZTsgbGV0IGZpZWxkPWZpZWxkOyB0eXBlOiAnc3RyaW5nJzsgbGV0IG9uQ2hhbmdlPW9uQ2hhbmdlXCI+XHJcbiAgICAgICAgPGtlbmRvLXRleHRib3ggWyhuZ01vZGVsKV09XCJydWxlLnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBbY2xlYXJCdXR0b25dPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3VzdG9tVGV4dGJveFwiPlxyXG4gICAgICAgIDwva2VuZG8tdGV4dGJveD5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwhLS1UZXh0QXJlYSBGaWVsZC0tPlxyXG4gICAgICA8bmctY29udGFpbmVyICpxdWVyeUlucHV0PVwibGV0IHJ1bGU7IHR5cGU6ICd0ZXh0YXJlYSc7IGxldCBvbkNoYW5nZT1vbkNoYW5nZVwiPlxyXG4gICAgICAgIDxrZW5kby10ZXh0YXJlYSBbKG5nTW9kZWwpXT1cInJ1bGUudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd3NdPVwiNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xzXT1cIjQwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzaXphYmxlPVwibm9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkXCI+XHJcbiAgICAgICAgPC9rZW5kby10ZXh0YXJlYT5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwhLS1OdW1iZXIgRmllbGQtLT5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlJbnB1dD1cImxldCBydWxlOyBsZXQgZmllbGQ9ZmllbGQ7IHR5cGU6ICdudW1iZXInOyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICA8a2VuZG8tbnVtZXJpY3RleHRib3ggWyhuZ01vZGVsKV09XCJydWxlLnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2UoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkZWNpbWFsc109XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRcIj5cclxuICAgICAgICA8L2tlbmRvLW51bWVyaWN0ZXh0Ym94PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPCEtLURhdGUgRmllbGQtLT5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqcXVlcnlJbnB1dD1cImxldCBydWxlOyB0eXBlOiAnZGF0ZSc7IGxldCBvbkNoYW5nZT1vbkNoYW5nZVwiPlxyXG4gICAgICAgIDxrZW5kby1kYXRlcGlja2VyIFsobmdNb2RlbCldPVwicnVsZS52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2UoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsZW5kYXJUeXBlPVwiY2xhc3NpY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiPlxyXG4gICAgICAgIDwva2VuZG8tZGF0ZXBpY2tlcj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwhLS1DYXRlZ29yeSBGaWVsZC0tPlxyXG4gICAgICA8bmctY29udGFpbmVyICpxdWVyeUlucHV0PVwibGV0IHJ1bGU7IGxldCBvcHRpb25zPW9wdGlvbnM7IHR5cGU6ICdjYXRlZ29yeSc7IGxldCBvbkNoYW5nZT1vbkNoYW5nZVwiPlxyXG4gICAgICAgIDxrZW5kby1kcm9wZG93bmxpc3QgWyhuZ01vZGVsKV09XCJydWxlLnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwiZ2V0T3B0aW9uTGlzdChvcHRpb25zLCBydWxlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0RmllbGQ9XCJuYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlRmllbGQ9XCJ2YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlUHJpbWl0aXZlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRcIj5cclxuICAgICAgICA8L2tlbmRvLWRyb3Bkb3dubGlzdD5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwhLS1Ecm9wRG93biBNdWx0aVNlbGVjdCBGaWVsZC0tPlxyXG4gICAgICA8bmctY29udGFpbmVyICpxdWVyeUlucHV0PVwibGV0IHJ1bGU7IGxldCBvcHRpb25zPW9wdGlvbnM7IHR5cGU6ICdtdWx0aXNlbGVjdCc7IGxldCBvbkNoYW5nZT1vbkNoYW5nZVwiPlxyXG4gICAgICAgIDxrZW5kby1tdWx0aXNlbGVjdCBbKG5nTW9kZWwpXT1cInJ1bGUudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwiZ2V0T3B0aW9uTGlzdChvcHRpb25zLCBydWxlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRGaWVsZD1cIm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUZpZWxkPVwidmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVQcmltaXRpdmVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvQ2xvc2VdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOjMwJVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkXCI+XHJcbiAgICAgICAgPC9rZW5kby1tdWx0aXNlbGVjdD5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwhLS1Cb29sZWFuIEZpZWxkLS0+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKnF1ZXJ5SW5wdXQ9XCJsZXQgcnVsZTsgdHlwZTogJ2Jvb2xlYW4nOyBsZXQgb25DaGFuZ2U9b25DaGFuZ2VcIj5cclxuICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJydWxlLnZhbHVlXCJcclxuICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2UoKVwiXHJcbiAgICAgICAgICAgICAgIGNsYXNzPVwiY3VzdG9tQ2hlY2tCb3hcIlxyXG4gICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgIGtlbmRvQ2hlY2tCb3ggLz5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L3F1ZXJ5LWJ1aWxkZXI+XHJcbiAgICA8YnI+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiZGF0YS5TaG93UXVlcnlSZXN1bHRcIj5cclxuICAgICAgPGRpdj5cclxuICAgICAgICA8bGFiZWw+UXVlcnkgUmVzdWx0PC9sYWJlbD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cIm91dHB1dFwiXHJcbiAgICAgICAgICAgICAgICByZXNpemFibGU9XCJub25lXCJcclxuICAgICAgICAgICAgICAgIFtyb3dzXT1cIjEwXCJcclxuICAgICAgICAgICAgICAgIFtjb2xzXT1cIjQwXCI+e3txdWVyeUN0cmwgfCBqc29ufX08L3RleHRhcmVhPlxyXG4gICAgICA8YnI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDoxMDAlXCIgc2xvdD1cImVuZFwiPlxyXG4gICAgICA8aW9uLWJ1dHRvbiAqbmdJZj1cIiFpc0Rpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgICAgc3Ryb25nPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY29tcGxldGVSdWxlKHRydWUsIG51bGwpXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidXR0b25hcHBseVwiPlxyXG4gICAgICAgIDxmYS1pY29uIFtpY29uXT1cIidzYXZlJ1wiIHN0eWxlPVwicGFkZGluZy1yaWdodDogNXB4O1wiPjwvZmEtaWNvbj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImlvbi10ZXh0LWNhcGl0YWxpemVcIj5BcHBseTwvc3Bhbj5cclxuICAgICAgPC9pb24tYnV0dG9uPlxyXG4gICAgICA8aW9uLWJ1dHRvbiAqbmdJZj1cImlzRGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICBzdHJvbmc9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjb21wbGV0ZVJ1bGUoZmFsc2UsIG51bGwpXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidXR0b25hcHBseVwiPlxyXG4gICAgICAgIDxmYS1pY29uIFtpY29uXT1cIidzYXZlJ1wiIHN0eWxlPVwicGFkZGluZy1yaWdodDogNXB4O1wiPjwvZmEtaWNvbj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImlvbi10ZXh0LWNhcGl0YWxpemVcIj5VbmRvIEFwcGx5PC9zcGFuPlxyXG4gICAgICA8L2lvbi1idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9pb24taXRlbT5cclxuIl19
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/********** Angular **********/
|
|
2
|
+
import { Component, ViewChild, Input, ViewEncapsulation } from "@angular/core";
|
|
3
|
+
/********** Component & Service **********/
|
|
4
|
+
import { ZComponentProperties, ZComponentHelper } from "mmhglobal-zcore";
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "mmhglobal-zcore";
|
|
7
|
+
import * as i2 from "@progress/telerik-angular-report-viewer";
|
|
8
|
+
import * as i3 from "@angular/common";
|
|
9
|
+
export class ZreportComponent {
|
|
10
|
+
constructor(resourceApiService) {
|
|
11
|
+
this.resourceApiService = resourceApiService;
|
|
12
|
+
this.componentProperties = new ZComponentProperties();
|
|
13
|
+
this.title = "Report Viewer";
|
|
14
|
+
this.viewerContainerStyle = {
|
|
15
|
+
position: "relative",
|
|
16
|
+
width: "100%",
|
|
17
|
+
height: "800px",
|
|
18
|
+
["font-family"]: "ms sans serif"
|
|
19
|
+
};
|
|
20
|
+
this.resourceURL = null;
|
|
21
|
+
this.ReportSource = null;
|
|
22
|
+
this.isVisible = true;
|
|
23
|
+
this.paramToResizeReportViewer = false;
|
|
24
|
+
}
|
|
25
|
+
ngOnInit() {
|
|
26
|
+
ZComponentHelper.setComponentProperties(this);
|
|
27
|
+
ZComponentHelper.registerComponent(this);
|
|
28
|
+
this.resizeReportView = this.onPageReady.bind(this);
|
|
29
|
+
this.resourceURL = this.resourceApiService.getURL(this.data.ResourceURL);
|
|
30
|
+
if (!this.resourceURL) {
|
|
31
|
+
this.resourceURL = this.resourceApiService.getURL('e1wfs_wfm_workflowMasterReportURL');
|
|
32
|
+
//this.isVisible = false;
|
|
33
|
+
}
|
|
34
|
+
if (!!this.data.IsAutoGenerateReport) {
|
|
35
|
+
this.ReportSource = ZComponentHelper.getGroupEvalValue.call(this, this.data.ReportSource);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
generateReport() {
|
|
39
|
+
const rs = this.group["ReportSource"];
|
|
40
|
+
this.resourceURL = rs['url'];
|
|
41
|
+
this.viewer.setReportSource(rs);
|
|
42
|
+
this.viewer.refreshReport();
|
|
43
|
+
if (this.data['AutoResize']) {
|
|
44
|
+
this.paramToResizeReportViewer = true;
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
this.paramToResizeReportViewer = false;
|
|
48
|
+
}
|
|
49
|
+
const thisComponent = this;
|
|
50
|
+
const exportButton = $("#trv-main-menu-export-command");
|
|
51
|
+
exportButton.on("mouseover", function () {
|
|
52
|
+
// trigger to hide list, sometime element not loaded yet.
|
|
53
|
+
setTimeout(function () {
|
|
54
|
+
// ExportOptions.instance.exportOption(thisComponent);
|
|
55
|
+
// ExportOptions.instance.hideUnwantedOptions();
|
|
56
|
+
}, 300);
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
ready(thisComponent) {
|
|
60
|
+
// console.log("ready");
|
|
61
|
+
// ExportOptions.init(thisComponent);
|
|
62
|
+
}
|
|
63
|
+
viewerToolTipOpening(args) {
|
|
64
|
+
// console.log("viewerToolTipOpening " + args.toolTip.text);
|
|
65
|
+
}
|
|
66
|
+
onRenderingEnd(e, args) {
|
|
67
|
+
// Occurs after rendering the report.
|
|
68
|
+
// ExportOptions.instance.update(e.target.reportSource().report);
|
|
69
|
+
}
|
|
70
|
+
exportBegin(args) {
|
|
71
|
+
}
|
|
72
|
+
exportEnd(args) {
|
|
73
|
+
}
|
|
74
|
+
onPageReady(e, args) {
|
|
75
|
+
if (this.paramToResizeReportViewer) {
|
|
76
|
+
var pageHeight = $(".trv-pages-area .trv-page-wrapper").height() + $(".trv-nav").outerHeight() + 20, // Calculate the report page height
|
|
77
|
+
viewer = $("#reportViewer1"), viewerHeight = viewer.height();
|
|
78
|
+
if (viewerHeight !== pageHeight) {
|
|
79
|
+
viewer.height(pageHeight);
|
|
80
|
+
var documentMapSplitter = $(".trv-document-map-splitter").data("kendoSplitter");
|
|
81
|
+
if (documentMapSplitter !== undefined) {
|
|
82
|
+
documentMapSplitter.resize(true);
|
|
83
|
+
}
|
|
84
|
+
var parameterSplitter = $(".trv-parameters-splitter").data("kendoSplitter");
|
|
85
|
+
if (parameterSplitter !== undefined) {
|
|
86
|
+
parameterSplitter.resize(true);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
ZreportComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: ZreportComponent, deps: [{ token: i1.ResourceApiService }], target: i0.ɵɵFactoryTarget.Component });
|
|
93
|
+
ZreportComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.4", type: ZreportComponent, selector: "app-zreport", inputs: { data: "data", group: "group" }, viewQueries: [{ propertyName: "viewer", first: true, predicate: ["ReportViewer"], descendants: true }], ngImport: i0, template: "<div *ngIf=\"isVisible\" width=\"100%\" height=\"800px\">\r\n <tr-viewer #ReportViewer\r\n [containerStyle]=\"viewerContainerStyle\"\r\n [serviceUrl]=\"resourceURL\"\r\n [reportSource]=\"ReportSource\"\r\n [viewMode]=\"'INTERACTIVE'\"\r\n [scaleMode]=\"'SPECIFIC'\"\r\n [pageMode]=\"'SINGLE_PAGE'\"\r\n [scale]=\"1.0\"\r\n [ready]=\"ready(this)\"\r\n [exportBegin]=\"exportBegin(this)\"\r\n [exportEnd]=\"exportEnd(this)\"\r\n [viewerToolTipOpening]=\"viewerToolTipOpening\"\r\n [enableAccessibility]=\"false\"\r\n [pageReady] = \"resizeReportView()\"\r\n [renderingEnd]=\"onRenderingEnd\">\r\n </tr-viewer>\r\n</div>\r\n", styles: [""], components: [{ type: i2.TelerikReportViewerComponent, selector: "tr-viewer", inputs: ["id", "serviceUrl", "reportServer", "templateUrl", "initialPageAreaImageUrl", "reportSource", "sendEmail", "parameters", "scale", "scaleMode", "viewMode", "pageMode", "persistSession", "parameterEditors", "authenticationToken", "printMode", "selector", "disabledButtonClass", "checkedButtonClass", "enableAccessibility", "searchMetadataOnDemand", "parametersAreaVisible", "documentMapVisible", "ready", "error", "parametersAreaPosition", "documentMapAreaPosition", "exportBegin", "exportEnd", "sendEmailBegin", "sendEmailEnd", "pageReady", "printBegin", "printEnd", "renderingBegin", "renderingEnd", "updateUi", "interactiveActionExecuting", "interactiveActionEnter", "interactiveActionLeave", "viewerToolTipOpening", "containerStyle"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
94
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: ZreportComponent, decorators: [{
|
|
95
|
+
type: Component,
|
|
96
|
+
args: [{ selector: "app-zreport", encapsulation: ViewEncapsulation.None, template: "<div *ngIf=\"isVisible\" width=\"100%\" height=\"800px\">\r\n <tr-viewer #ReportViewer\r\n [containerStyle]=\"viewerContainerStyle\"\r\n [serviceUrl]=\"resourceURL\"\r\n [reportSource]=\"ReportSource\"\r\n [viewMode]=\"'INTERACTIVE'\"\r\n [scaleMode]=\"'SPECIFIC'\"\r\n [pageMode]=\"'SINGLE_PAGE'\"\r\n [scale]=\"1.0\"\r\n [ready]=\"ready(this)\"\r\n [exportBegin]=\"exportBegin(this)\"\r\n [exportEnd]=\"exportEnd(this)\"\r\n [viewerToolTipOpening]=\"viewerToolTipOpening\"\r\n [enableAccessibility]=\"false\"\r\n [pageReady] = \"resizeReportView()\"\r\n [renderingEnd]=\"onRenderingEnd\">\r\n </tr-viewer>\r\n</div>\r\n", styles: [""] }]
|
|
97
|
+
}], ctorParameters: function () { return [{ type: i1.ResourceApiService }]; }, propDecorators: { viewer: [{
|
|
98
|
+
type: ViewChild,
|
|
99
|
+
args: ["ReportViewer"]
|
|
100
|
+
}], data: [{
|
|
101
|
+
type: Input
|
|
102
|
+
}], group: [{
|
|
103
|
+
type: Input
|
|
104
|
+
}] } });
|
|
105
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoienJlcG9ydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tbWhnbG9iYWwtZHluYW1pY2Zvcm0vc3JjL2xpYi96cmVwb3J0L3pyZXBvcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenJlcG9ydC96cmVwb3J0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFVLFNBQVMsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFRdkYsMkNBQTJDO0FBQzNDLE9BQU8sRUFDK0Isb0JBQW9CLEVBQUUsZ0JBQWdCLEVBQzNFLE1BQU0saUJBQWlCLENBQUM7Ozs7O0FBWXpCLE1BQU0sT0FBTyxnQkFBZ0I7SUFDM0IsWUFBb0Isa0JBQXNDO1FBQXRDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFPMUQsd0JBQW1CLEdBQUcsSUFBSSxvQkFBb0IsRUFBRSxDQUFDO1FBRWpELFVBQUssR0FBRyxlQUFlLENBQUM7UUFDeEIseUJBQW9CLEdBQUc7WUFDckIsUUFBUSxFQUFFLFVBQVU7WUFDcEIsS0FBSyxFQUFFLE1BQU07WUFDYixNQUFNLEVBQUUsT0FBTztZQUNmLENBQUMsYUFBYSxDQUFDLEVBQUUsZUFBZTtTQUNqQyxDQUFDO1FBRUYsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFDbkIsaUJBQVksR0FBRyxJQUFJLENBQUM7UUFFcEIsY0FBUyxHQUFHLElBQUksQ0FBQztRQUVqQiw4QkFBeUIsR0FBRyxLQUFLLENBQUM7SUF0QjRCLENBQUM7SUF5Qi9ELFFBQVE7UUFDTixnQkFBZ0IsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENB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QixHQUFHLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDNUUsSUFBSSxpQkFBaUIsS0FBSSxTQUFTLEVBQUU7b0JBQ2xDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDaEM7YUFDSjtTQUNGO0lBQ0gsQ0FBQzs7NkdBeEdVLGdCQUFnQjtpR0FBaEIsZ0JBQWdCLHFNQ3hCN0IseXhCQWtCQTsyRkRNYSxnQkFBZ0I7a0JBTjVCLFNBQVM7K0JBQ0UsYUFBYSxpQkFHUixpQkFBaUIsQ0FBQyxJQUFJO3lHQU1yQyxNQUFNO3NCQURMLFNBQVM7dUJBQUMsY0FBYztnQkFFaEIsSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqIEFuZ3VsYXIgKioqKioqKioqKi9cclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIFZpZXdDaGlsZCwgSW5wdXQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbi8qKioqKioqKioqIElvbmljICoqKioqKioqKiovXHJcblxyXG4vKioqKioqKioqKiBQbHVnaW4gKioqKioqKioqKi9cclxuaW1wb3J0IHsgRXhwb3J0T3B0aW9ucyB9IGZyb20gXCIuL3pyZXBvcnQuY29uZmlnXCI7XHJcbmltcG9ydCB7IFRlbGVyaWtSZXBvcnRWaWV3ZXJDb21wb25lbnQgfSBmcm9tIFwiQHByb2dyZXNzL3RlbGVyaWstYW5ndWxhci1yZXBvcnQtdmlld2VyXCI7XHJcblxyXG4vKioqKioqKioqKiBDb21wb25lbnQgJiBTZXJ2aWNlICoqKioqKioqKiovXHJcbmltcG9ydCB7XHJcbiAgUmVzb3VyY2VBcGlTZXJ2aWNlLCBaRmllbGQsIFpHcm91cCwgWkNvbXBvbmVudFByb3BlcnRpZXMsIFpDb21wb25lbnRIZWxwZXJcclxufSBmcm9tIFwibW1oZ2xvYmFsLXpjb3JlXCI7XHJcblxyXG5cclxuLy8gaW1wb3J0ICogYXMgJCBmcm9tICdqcXVlcnknO1xyXG5kZWNsYXJlIHZhciAkOiBhbnk7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJhcHAtenJlcG9ydFwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4venJlcG9ydC5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi96cmVwb3J0LmNvbXBvbmVudC5zY3NzXCJdLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcclxufSlcclxuZXhwb3J0IGNsYXNzIFpyZXBvcnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVzb3VyY2VBcGlTZXJ2aWNlOiBSZXNvdXJjZUFwaVNlcnZpY2UpIHsgfVxyXG5cclxuICBAVmlld0NoaWxkKFwiUmVwb3J0Vmlld2VyXCIpXHJcbiAgdmlld2VyOiBUZWxlcmlrUmVwb3J0Vmlld2VyQ29tcG9uZW50O1xyXG4gIEBJbnB1dCgpIGRhdGE6IFpGaWVsZDtcclxuICBASW5wdXQoKSBncm91cDogWkdyb3VwO1xyXG5cclxuICBjb21wb25lbnRQcm9wZXJ0aWVzID0gbmV3IFpDb21wb25lbnRQcm9wZXJ0aWVzKCk7XHJcblxyXG4gIHRpdGxlID0gXCJSZXBvcnQgVmlld2VyXCI7XHJcbiAgdmlld2VyQ29udGFpbmVyU3R5bGUgPSB7XHJcbiAgICBwb3NpdGlvbjogXCJyZWxhdGl2ZVwiLFxyXG4gICAgd2lkdGg6IFwiMTAwJVwiLFxyXG4gICAgaGVpZ2h0OiBcIjgwMHB4XCIsXHJcbiAgICBbXCJmb250LWZhbWlseVwiXTogXCJtcyBzYW5zIHNlcmlmXCJcclxuICB9O1xyXG5cclxuICByZXNvdXJjZVVSTCA9IG51bGw7XHJcbiAgUmVwb3J0U291cmNlID0gbnVsbDtcclxuXHJcbiAgaXNWaXNpYmxlID0gdHJ1ZTtcclxuXHJcbiAgcGFyYW1Ub1Jlc2l6ZVJlcG9ydFZpZXdlciA9IGZhbHNlO1xyXG4gIHB1YmxpYyByZXNpemVSZXBvcnRWaWV3OiBGdW5jdGlvbjtcclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnNldENvbXBvbmVudFByb3BlcnRpZXModGhpcyk7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnJlZ2lzdGVyQ29tcG9uZW50KHRoaXMpO1xyXG4gICAgdGhpcy5yZXNpemVSZXBvcnRWaWV3ID0gdGhpcy5vblBhZ2VSZWFkeS5iaW5kKHRoaXMpO1xyXG5cclxuICAgIHRoaXMucmVzb3VyY2VVUkwgPSB0aGlzLnJlc291cmNlQXBpU2VydmljZS5nZXRVUkwodGhpcy5kYXRhLlJlc291cmNlVVJMKTtcclxuXHJcbiAgICBpZiAoIXRoaXMucmVzb3VyY2VVUkwpIHtcclxuICAgICAgdGhpcy5yZXNvdXJjZVVSTCA9IHRoaXMucmVzb3VyY2VBcGlTZXJ2aWNlLmdldFVSTCgnZTF3ZnNfd2ZtX3dvcmtmbG93TWFzdGVyUmVwb3J0VVJMJyk7XHJcbiAgICAgIC8vdGhpcy5pc1Zpc2libGUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoISF0aGlzLmRhdGEuSXNBdXRvR2VuZXJhdGVSZXBvcnQpIHtcclxuICAgICAgdGhpcy5SZXBvcnRTb3VyY2UgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgdGhpcy5kYXRhLlJlcG9ydFNvdXJjZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2VuZXJhdGVSZXBvcnQoKSB7XHJcbiAgICBjb25zdCBycyA9IHRoaXMuZ3JvdXBbXCJSZXBvcnRTb3VyY2VcIl07XHJcbiAgICB0aGlzLnJlc291cmNlVVJMID0gcnNbJ3VybCddO1xyXG4gICAgdGhpcy52aWV3ZXIuc2V0UmVwb3J0U291cmNlKHJzKTtcclxuICAgIHRoaXMudmlld2VyLnJlZnJlc2hSZXBvcnQoKTtcclxuXHJcbiAgICBpZiAodGhpcy5kYXRhWydBdXRvUmVzaXplJ10pIHtcclxuICAgICAgdGhpcy5wYXJhbVRvUmVzaXplUmVwb3J0Vmlld2VyID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucGFyYW1Ub1Jlc2l6ZVJlcG9ydFZpZXdlciA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRoaXNDb21wb25lbnQgPSB0aGlzO1xyXG4gICAgY29uc3QgZXhwb3J0QnV0dG9uID0gJChcIiN0cnYtbWFpbi1tZW51LWV4cG9ydC1jb21tYW5kXCIpO1xyXG4gICAgZXhwb3J0QnV0dG9uLm9uKFwibW91c2VvdmVyXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgLy8gdHJpZ2dlciB0byBoaWRlIGxpc3QsIHNvbWV0aW1lIGVsZW1lbnQgbm90IGxvYWRlZCB5ZXQuXHJcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIC8vIEV4cG9ydE9wdGlvbnMuaW5zdGFuY2UuZXhwb3J0T3B0aW9uKHRoaXNDb21wb25lbnQpO1xyXG4gICAgICAgIC8vIEV4cG9ydE9wdGlvbnMuaW5zdGFuY2UuaGlkZVVud2FudGVkT3B0aW9ucygpO1xyXG4gICAgICB9LCAzMDApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICByZWFkeSh0aGlzQ29tcG9uZW50OiBhbnkpIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKFwicmVhZHlcIik7XHJcbiAgICAvLyBFeHBvcnRPcHRpb25zLmluaXQodGhpc0NvbXBvbmVudCk7XHJcbiAgfVxyXG5cclxuICB2aWV3ZXJUb29sVGlwT3BlbmluZyhhcmdzOiBhbnkpIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKFwidmlld2VyVG9vbFRpcE9wZW5pbmcgXCIgKyBhcmdzLnRvb2xUaXAudGV4dCk7XHJcbiAgfVxyXG5cclxuICBvblJlbmRlcmluZ0VuZChlLCBhcmdzKTogdm9pZCB7XHJcbiAgICAvLyBPY2N1cnMgYWZ0ZXIgcmVuZGVyaW5nIHRoZSByZXBvcnQuXHJcbiAgICAvLyBFeHBvcnRPcHRpb25zLmluc3RhbmNlLnVwZGF0ZShlLnRhcmdldC5yZXBvcnRTb3VyY2UoKS5yZXBvcnQpO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0QmVnaW4oYXJnczogYW55KSB7XHJcbiAgfVxyXG5cclxuICBleHBvcnRFbmQoYXJnczogYW55KSB7XHJcbiAgfVxyXG5cclxuICBvblBhZ2VSZWFkeShlOiBhbnksIGFyZ3M6YW55KSB7XHJcbiAgICBpZiAodGhpcy5wYXJhbVRvUmVzaXplUmVwb3J0Vmlld2VyKSB7XHJcbiAgICAgIHZhciBwYWdlSGVpZ2h0ID0gJChcIi50cnYtcGFnZXMtYXJlYSAudHJ2LXBhZ2Utd3JhcHBlclwiKS5oZWlnaHQoKSArICQoXCIudHJ2LW5hdlwiKS5vdXRlckhlaWdodCgpICsgMjAsIC8vIENhbGN1bGF0ZSB0aGUgcmVwb3J0IHBhZ2UgaGVpZ2h0XHJcbiAgICAgICAgICB2aWV3ZXIgPSAkKFwiI3JlcG9ydFZpZXdlcjFcIiksXHJcbiAgICAgICAgICB2aWV3ZXJIZWlnaHQgPSB2aWV3ZXIuaGVpZ2h0KCk7XHJcblxyXG4gICAgICBpZiAodmlld2VySGVpZ2h0ICE9PSBwYWdlSGVpZ2h0ICkge1xyXG4gICAgICAgICAgdmlld2VyLmhlaWdodChwYWdlSGVpZ2h0KTtcclxuICAgICAgICAgIHZhciBkb2N1bWVudE1hcFNwbGl0dGVyID0gJChcIi50cnYtZG9jdW1lbnQtbWFwLXNwbGl0dGVyXCIpLmRhdGEoXCJrZW5kb1NwbGl0dGVyXCIpO1xyXG4gICAgICAgICAgaWYgKGRvY3VtZW50TWFwU3BsaXR0ZXIgIT09dW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50TWFwU3BsaXR0ZXIucmVzaXplKHRydWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdmFyIHBhcmFtZXRlclNwbGl0dGVyID0gJChcIi50cnYtcGFyYW1ldGVycy1zcGxpdHRlclwiKS5kYXRhKFwia2VuZG9TcGxpdHRlclwiKTtcclxuICAgICAgICAgIGlmIChwYXJhbWV0ZXJTcGxpdHRlciAhPT11bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcGFyYW1ldGVyU3BsaXR0ZXIucmVzaXplKHRydWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgKm5nSWY9XCJpc1Zpc2libGVcIiB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCI4MDBweFwiPlxyXG4gIDx0ci12aWV3ZXIgI1JlcG9ydFZpZXdlclxyXG4gICAgICAgICAgICAgW2NvbnRhaW5lclN0eWxlXT1cInZpZXdlckNvbnRhaW5lclN0eWxlXCJcclxuICAgICAgICAgICAgIFtzZXJ2aWNlVXJsXT1cInJlc291cmNlVVJMXCJcclxuICAgICAgICAgICAgIFtyZXBvcnRTb3VyY2VdPVwiUmVwb3J0U291cmNlXCJcclxuICAgICAgICAgICAgIFt2aWV3TW9kZV09XCInSU5URVJBQ1RJVkUnXCJcclxuICAgICAgICAgICAgIFtzY2FsZU1vZGVdPVwiJ1NQRUNJRklDJ1wiXHJcbiAgICAgICAgICAgICBbcGFnZU1vZGVdPVwiJ1NJTkdMRV9QQUdFJ1wiXHJcbiAgICAgICAgICAgICBbc2NhbGVdPVwiMS4wXCJcclxuICAgICAgICAgICAgIFtyZWFkeV09XCJyZWFkeSh0aGlzKVwiXHJcbiAgICAgICAgICAgICBbZXhwb3J0QmVnaW5dPVwiZXhwb3J0QmVnaW4odGhpcylcIlxyXG4gICAgICAgICAgICAgW2V4cG9ydEVuZF09XCJleHBvcnRFbmQodGhpcylcIlxyXG4gICAgICAgICAgICAgW3ZpZXdlclRvb2xUaXBPcGVuaW5nXT1cInZpZXdlclRvb2xUaXBPcGVuaW5nXCJcclxuICAgICAgICAgICAgIFtlbmFibGVBY2Nlc3NpYmlsaXR5XT1cImZhbHNlXCJcclxuICAgICAgICAgICAgIFtwYWdlUmVhZHldID0gXCJyZXNpemVSZXBvcnRWaWV3KClcIlxyXG4gICAgICAgICAgICAgW3JlbmRlcmluZ0VuZF09XCJvblJlbmRlcmluZ0VuZFwiPlxyXG4gIDwvdHItdmlld2VyPlxyXG48L2Rpdj5cclxuIl19
|