vcomply-workflow-engine 2.9.60 → 2.9.62
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/bundles/vcomply-workflow-engine.umd.js +1062 -877
- package/bundles/vcomply-workflow-engine.umd.js.map +1 -1
- package/esm2015/lib/add-multiple-responsibility/add-multiple-responsibility.component.js +1 -1
- package/esm2015/lib/add-multiple-responsibility-container/add-multiple-responsibility-container.component.js +1 -1
- package/esm2015/lib/add-multiple-responsibility-with-tab/add-multiple-responsibility-with-tab.component.js +1 -1
- package/esm2015/lib/add-multiple-risk/add-multiple-risk.component.js +1 -1
- package/esm2015/lib/log-an-issue/log-an-issue.component.js +1 -1
- package/esm2015/lib/more-option/more-option.component.js +15 -17
- package/esm2015/lib/sharedComponents/approval-workflow/approval-create-form/approval-create-form.component.js +234 -0
- package/esm2015/lib/sharedComponents/approval-workflow/approval-create-form/approval-create-form.component.ngfactory.js +223 -0
- package/esm2015/lib/sharedComponents/approval-workflow/approval-create-form/approval-create-form.component.ngsummary.json +1 -0
- package/esm2015/lib/sharedComponents/approval-workflow/approval-workflow-list/approval-workflow-list.component.js +54 -0
- package/esm2015/lib/sharedComponents/approval-workflow/approval-workflow-list/approval-workflow-list.component.ngfactory.js +215 -0
- package/esm2015/lib/sharedComponents/approval-workflow/approval-workflow-list/approval-workflow-list.component.ngsummary.json +1 -0
- package/esm2015/lib/sharedComponents/approval-workflow/approval-workflow.component.js +40 -3
- package/esm2015/lib/sharedComponents/approval-workflow/approval-workflow.component.ngfactory.js +24 -408
- package/esm2015/lib/sharedComponents/approval-workflow/approval-workflow.component.ngsummary.json +1 -1
- package/esm2015/lib/sharedComponents/format-and-evidence/format-and-evidence.component.js +1 -1
- package/esm2015/lib/sharedComponents/link-program/link-program/link-program.component.js +27 -14
- package/esm2015/lib/sharedComponents/link-program/link-program/link-program.component.ngfactory.js +4 -4
- package/esm2015/lib/sharedComponents/link-program/link-program/link-program.component.ngsummary.json +1 -1
- package/esm2015/lib/sharedComponents/link-program/restapi.service.js +8 -6
- package/esm2015/lib/sharedComponents/no-data/no-data.component.js +4 -2
- package/esm2015/lib/sharedComponents/no-data/no-data.component.ngfactory.js +1 -1
- package/esm2015/lib/sharedComponents/no-data/no-data.component.ngsummary.json +1 -1
- package/esm2015/lib/sharedComponents/risk-classification/risk-classification.component.js +1 -1
- package/esm2015/lib/sharedComponents/select-approvers/select-approvers.component.js +65 -354
- package/esm2015/lib/sharedComponents/select-approvers/select-approvers.component.ngfactory.js +59 -28
- package/esm2015/lib/sharedComponents/select-approvers/select-approvers.component.ngsummary.json +1 -1
- package/esm2015/lib/ui-kit/directive/directive.module.js +19 -0
- package/esm2015/lib/ui-kit/directive/directive.module.ngfactory.js +12 -0
- package/esm2015/lib/ui-kit/directive/directive.module.ngsummary.json +1 -0
- package/esm2015/lib/ui-kit/directive/stop-propagation.directive.js +16 -0
- package/esm2015/lib/ui-kit/directive/stop-propagation.directive.ngsummary.json +1 -0
- package/esm2015/lib/workflow-assessment/import-an-assessment/import-an-assessment.component.js +1 -1
- package/esm2015/lib/workflow-assessment/workflow-assessment.component.js +1 -1
- package/esm2015/lib/workflow-compliance/workflow-compliance.component.js +1 -1
- package/esm2015/lib/workflow-engine-container/workflow-engine-container.component.js +1 -1
- package/esm2015/lib/workflow-engine-container/workflow-engine-container.component.ngfactory.js +43 -42
- package/esm2015/lib/workflow-engine.module.js +11 -9
- package/esm2015/lib/workflow-engine.module.ngfactory.js +3 -2
- package/esm2015/lib/workflow-engine.module.ngsummary.json +1 -1
- package/esm2015/lib/workflow-interfaces/create-policy-form.js +1 -1
- package/esm2015/lib/workflow-policy/workflow-policy.component.js +100 -39
- package/esm2015/lib/workflow-policy/workflow-policy.component.ngfactory.js +389 -370
- package/esm2015/lib/workflow-policy/workflow-policy.component.ngsummary.json +1 -1
- package/esm2015/lib/workflow-program/create-program-ui/file-pill/file-pill.component.js +1 -1
- package/esm2015/lib/workflow-program/create-program-ui/floating-bar/floating-bar.component.js +10 -7
- package/esm2015/lib/workflow-program/create-program-ui/form-field/form-field.component.js +1 -1
- package/esm2015/lib/workflow-program/create-program-ui/input-with-pill/input-with-pill.component.js +1 -1
- package/esm2015/lib/workflow-program/create-program-ui/pagination/pagination/pagination.component.js +2 -2
- package/esm2015/lib/workflow-program/create-program-ui/pagination/pagination/pagination.component.ngfactory.js +2 -2
- package/esm2015/lib/workflow-program/create-program-ui/user-group-list/user-group-list.component.js +2 -2
- package/esm2015/lib/workflow-program/create-program-ui/user-group-list/user-group-list.component.ngfactory.js +23 -8
- package/esm2015/lib/workflow-program/workflow-program.component.js +1 -1
- package/esm2015/lib/workflow-risk/workflow-risk.component.js +1 -1
- package/esm2015/lib/workflow-services/policy.service.js +49 -19
- package/esm2015/lib/workflow-services/policy.service.ngsummary.json +1 -1
- package/esm2015/lib/workflow-survey-form/workflow-survey-form.component.js +1 -1
- package/esm2015/vcomply-workflow-engine.js +302 -298
- package/esm2015/vcomply-workflow-engine.ngsummary.json +1 -1
- package/fesm2015/vcomply-workflow-engine.js +754 -585
- package/fesm2015/vcomply-workflow-engine.js.map +1 -1
- package/lib/sharedComponents/approval-workflow/approval-create-form/approval-create-form.component.d.ts +62 -0
- package/lib/sharedComponents/approval-workflow/approval-create-form/approval-create-form.component.ngfactory.d.ts +1 -0
- package/lib/sharedComponents/approval-workflow/approval-workflow-list/approval-workflow-list.component.d.ts +19 -0
- package/lib/sharedComponents/approval-workflow/approval-workflow-list/approval-workflow-list.component.ngfactory.d.ts +1 -0
- package/lib/sharedComponents/approval-workflow/approval-workflow.component.d.ts +15 -1
- package/lib/sharedComponents/link-program/link-program/link-program.component.d.ts +3 -0
- package/lib/sharedComponents/link-program/restapi.service.d.ts +3 -3
- package/lib/sharedComponents/no-data/no-data.component.d.ts +3 -2
- package/lib/sharedComponents/select-approvers/select-approvers.component.d.ts +14 -3
- package/lib/ui-kit/directive/directive.module.d.ts +2 -0
- package/lib/ui-kit/directive/directive.module.ngfactory.d.ts +3 -0
- package/lib/ui-kit/directive/directive.module.ts +17 -0
- package/lib/ui-kit/directive/stop-propagation.directive.d.ts +3 -0
- package/lib/ui-kit/directive/stop-propagation.directive.spec.ts +8 -0
- package/lib/ui-kit/directive/stop-propagation.directive.ts +15 -0
- package/lib/workflow-interfaces/create-policy-form.d.ts +3 -4
- package/lib/workflow-policy/workflow-policy.component.d.ts +10 -1
- package/lib/workflow-services/policy.service.d.ts +2 -0
- package/package.json +2 -2
- package/vcomply-workflow-engine.d.ts +301 -297
- package/vcomply-workflow-engine.metadata.json +1 -1
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
import { __rest } from "tslib";
|
|
2
|
+
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
3
|
+
import { AuthService } from '../../../workflow-services/auth.service';
|
|
4
|
+
import { PolicyService } from '../../../workflow-services/policy.service';
|
|
5
|
+
export class ApprovalCreateFormComponent {
|
|
6
|
+
constructor(authService, policyService) {
|
|
7
|
+
this.authService = authService;
|
|
8
|
+
this.policyService = policyService;
|
|
9
|
+
this.enableApprovalCreate = false;
|
|
10
|
+
this.enableApprovalLevel = false;
|
|
11
|
+
this.enablePolicyCategory = false;
|
|
12
|
+
this.workflowName = '';
|
|
13
|
+
this.selectApprovalPayload = [];
|
|
14
|
+
this.createApprovalPayload = [];
|
|
15
|
+
this.approvalWorkflows = [];
|
|
16
|
+
this.filteredCategory = [];
|
|
17
|
+
this.levels = 1;
|
|
18
|
+
this.categoryConfig = {
|
|
19
|
+
panelTitle: 'Select Category',
|
|
20
|
+
floatingTextSingular: 'Category selected',
|
|
21
|
+
floatingTextPlural: 'Categories selected',
|
|
22
|
+
searchPlaceholder: 'Search Category',
|
|
23
|
+
searchEnabled: true,
|
|
24
|
+
selectAllEnabled: true,
|
|
25
|
+
workflow: 'policy',
|
|
26
|
+
};
|
|
27
|
+
this.selectedCat = [];
|
|
28
|
+
this.editApprovalData = [];
|
|
29
|
+
this.editIndex = -1;
|
|
30
|
+
this.createDescription = '';
|
|
31
|
+
this.selectedCategoryId = [];
|
|
32
|
+
this.mode = 'CREATE';
|
|
33
|
+
this.saveApprovalWorkflow = new EventEmitter();
|
|
34
|
+
this.description = {
|
|
35
|
+
mode: 'prime',
|
|
36
|
+
colorPalette: true,
|
|
37
|
+
link: true,
|
|
38
|
+
placeholder: 'Add a description for this policy',
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
ngOnInit() {
|
|
42
|
+
console.log('workflowName xxyy', this.workflowName, this.approverDetails, this.mode);
|
|
43
|
+
console.log('approvalWorkflows to display on init', this.approvalWorkflows);
|
|
44
|
+
if (this.mode == 'EDIT') {
|
|
45
|
+
this.populateApprover();
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
createApprovalAction(event) {
|
|
49
|
+
console.log('createApprovalAction', event);
|
|
50
|
+
if (event.toLowerCase() === 'approval') {
|
|
51
|
+
this.enableApprovalCreate = true;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
addLevelsClicked(event) {
|
|
55
|
+
this.enableApprovalLevel = event;
|
|
56
|
+
if (event)
|
|
57
|
+
this.levels++;
|
|
58
|
+
}
|
|
59
|
+
getCategoryId(category) {
|
|
60
|
+
this.selectedCategoryId = category.map((cat) => cat.item_id);
|
|
61
|
+
console.log('this.selectedCategoryId', this.selectedCategoryId);
|
|
62
|
+
}
|
|
63
|
+
saveCategoryList(event) {
|
|
64
|
+
this.selectedCat = event;
|
|
65
|
+
this.filterSelectedCategory(event);
|
|
66
|
+
this.enablePolicyCategory = false;
|
|
67
|
+
console.log('category list saveCategoryList', event);
|
|
68
|
+
console.log('category selected', event);
|
|
69
|
+
}
|
|
70
|
+
filterSelectedCategory(selectedCategory) {
|
|
71
|
+
this.filteredCategory = this.selectedCategory.filter((category) => selectedCategory.includes(category._id));
|
|
72
|
+
this.getCategoryId(this.filteredCategory);
|
|
73
|
+
console.log('filteredCategory', this.filteredCategory);
|
|
74
|
+
}
|
|
75
|
+
removeCategory(event) {
|
|
76
|
+
var _a;
|
|
77
|
+
console.log('this.filteredCategory 1', this.filteredCategory);
|
|
78
|
+
const categoryIndex = this.filteredCategory.findIndex((category) => (category === null || category === void 0 ? void 0 : category.item_id) === (event === null || event === void 0 ? void 0 : event.item_id));
|
|
79
|
+
(_a = this.filteredCategory) === null || _a === void 0 ? void 0 : _a.splice(categoryIndex, 1);
|
|
80
|
+
console.log('this.filteredCategory 2', this.filteredCategory);
|
|
81
|
+
}
|
|
82
|
+
closeCategoryList() {
|
|
83
|
+
console.log('close category list', this.createDescription);
|
|
84
|
+
this.enablePolicyCategory = false;
|
|
85
|
+
}
|
|
86
|
+
enableCategory(event) {
|
|
87
|
+
this.enablePolicyCategory = event;
|
|
88
|
+
console.log('selectedCat', this.selectedCat);
|
|
89
|
+
}
|
|
90
|
+
closeSelectApprover() {
|
|
91
|
+
this.enableApprovalLevel = false;
|
|
92
|
+
}
|
|
93
|
+
selectedApprover(event) {
|
|
94
|
+
var _a, _b;
|
|
95
|
+
this.selectApprovalPayload = event;
|
|
96
|
+
console.log('close selected', this.selectApprovalPayload, this.editIndex, this.editApprovalData);
|
|
97
|
+
console.log('approvalWorkflows selectedApprover', this.approvalWorkflows);
|
|
98
|
+
if (this.editIndex !== -1) {
|
|
99
|
+
(_a = this.approvalWorkflows) === null || _a === void 0 ? void 0 : _a.splice(this.editIndex, 1);
|
|
100
|
+
(_b = this.approvalWorkflows) === null || _b === void 0 ? void 0 : _b.splice(this.editIndex, 0, event[0]);
|
|
101
|
+
this.editIndex = -1;
|
|
102
|
+
this.editApprovalData = [];
|
|
103
|
+
console.log(' hi in if');
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
console.log('hi in else');
|
|
107
|
+
this.approvalWorkflows.push(event[0]);
|
|
108
|
+
}
|
|
109
|
+
this.enableApprovalLevel = false;
|
|
110
|
+
}
|
|
111
|
+
deleteLevel(index) {
|
|
112
|
+
// Approver Level delete
|
|
113
|
+
console.log('this.approvalWorkflows', this.approvalWorkflows, index);
|
|
114
|
+
this.approvalWorkflows.splice(index, 1);
|
|
115
|
+
console.log('this.approvalWorkflows after splice', this.approvalWorkflows, index);
|
|
116
|
+
for (let i = index; i < this.approvalWorkflows.length; i++) {
|
|
117
|
+
if (this.approvalWorkflows[index]['level1'] ===
|
|
118
|
+
this.approvalWorkflows[index]['alias_name']) {
|
|
119
|
+
this.approvalWorkflows[index]['alias_name'] = `Level ${i + 1}`;
|
|
120
|
+
}
|
|
121
|
+
this.approvalWorkflows[index]['level1'] = `Level ${i + 1}`;
|
|
122
|
+
}
|
|
123
|
+
console.log('this.approvalWorkflows after delete', this.approvalWorkflows);
|
|
124
|
+
// delete this.approvalWorkflows[`level${i + 1}`];
|
|
125
|
+
// const newObj: any = {};
|
|
126
|
+
// Object.keys(this.approvalWorkflows).forEach((item, index) => { // Renaming the keys of the object in sequential order
|
|
127
|
+
// const key = item.substring(0, item.lastIndexOf('l') + 1).concat(`${index + 1}`);
|
|
128
|
+
// newObj[key] = this.approvalWorkflows[item];
|
|
129
|
+
// });
|
|
130
|
+
// this.approvalWorkflows = Object.assign({}, newObj);
|
|
131
|
+
// this.levels--;
|
|
132
|
+
// this.checkLevel();
|
|
133
|
+
}
|
|
134
|
+
checkLevel() {
|
|
135
|
+
if (this.levels === 0) {
|
|
136
|
+
this.levels = 1;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
editApproval(approval, index) {
|
|
140
|
+
this.editApprovalData = [approval];
|
|
141
|
+
this.editIndex = index;
|
|
142
|
+
this.enableApprovalLevel = true;
|
|
143
|
+
console.log('approval workflow ', this.editApprovalData, this.editIndex);
|
|
144
|
+
}
|
|
145
|
+
closeCreateForm() {
|
|
146
|
+
console.log('this.approvalWorkflows on next click', this.approvalWorkflows);
|
|
147
|
+
}
|
|
148
|
+
nextClick() {
|
|
149
|
+
this.removeMemberNameKey();
|
|
150
|
+
}
|
|
151
|
+
removeMemberNameKey() {
|
|
152
|
+
this.approvalWorkflows = this.approvalWorkflows.map((_a) => {
|
|
153
|
+
var { approvers } = _a, rest = __rest(_a, ["approvers"]);
|
|
154
|
+
return (Object.assign(Object.assign({}, rest), { approvers: approvers.map((_a) => {
|
|
155
|
+
var { member_name } = _a, rest = __rest(_a, ["member_name"]);
|
|
156
|
+
return (Object.assign({}, rest));
|
|
157
|
+
}) }));
|
|
158
|
+
});
|
|
159
|
+
console.log('this.approvalWorkflows removeMemberNameKey', this.approvalWorkflows);
|
|
160
|
+
this.generatePayload();
|
|
161
|
+
}
|
|
162
|
+
generatePayload() {
|
|
163
|
+
const payload = {
|
|
164
|
+
workflow_module: 'POLICY',
|
|
165
|
+
workflow_name: this.workflowName,
|
|
166
|
+
category_id: this.selectedCategoryId,
|
|
167
|
+
approval_workflow: this.approvalWorkflows,
|
|
168
|
+
created_by: this.authService.getMemberId(),
|
|
169
|
+
organisation_id: this.authService.getOrganizationId(),
|
|
170
|
+
delete_flag: 0,
|
|
171
|
+
Is_approval: 1,
|
|
172
|
+
};
|
|
173
|
+
if (this.mode === 'EDIT') {
|
|
174
|
+
this._editWorkflow(payload);
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
this.createNewWorkflow(payload);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
createNewWorkflow(payload) {
|
|
181
|
+
this.policyService.createApprovalWorkflow(payload).subscribe({
|
|
182
|
+
next: (res) => {
|
|
183
|
+
this.saveApprovalWorkflow.emit(true);
|
|
184
|
+
console.log('policy create', res);
|
|
185
|
+
},
|
|
186
|
+
error: (err) => {
|
|
187
|
+
console.log(err);
|
|
188
|
+
},
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
_editWorkflow(payload) {
|
|
192
|
+
this.policyService
|
|
193
|
+
.editApprovalWorkflow(payload, this.approverDetails._id)
|
|
194
|
+
.subscribe({
|
|
195
|
+
next: (res) => {
|
|
196
|
+
this.saveApprovalWorkflow.emit(true);
|
|
197
|
+
console.log('policy create', res);
|
|
198
|
+
},
|
|
199
|
+
error: (err) => {
|
|
200
|
+
console.log(err);
|
|
201
|
+
},
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
populateApprover() {
|
|
205
|
+
const { workflow_name, approval_workflow, description } = this.approverDetails;
|
|
206
|
+
this.workflowName = workflow_name;
|
|
207
|
+
this.approvalWorkflows = approval_workflow;
|
|
208
|
+
this.description = description;
|
|
209
|
+
}
|
|
210
|
+
closeForm() {
|
|
211
|
+
this.saveApprovalWorkflow.emit();
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
ApprovalCreateFormComponent.decorators = [
|
|
215
|
+
{ type: Component, args: [{
|
|
216
|
+
selector: 'app-approval-create-form',
|
|
217
|
+
template: "<div class=\"approval-workflow-dialog\">\r\n <div\r\n class=\"approval-workflow-dialog-head vx-d-flex vx-align-center vx-justify-between vx-pl-4 vx-pr-4\"\r\n >\r\n <div class=\"vx-fs-14 vx-fw-500 vx-label-txt\">\r\n <button (click)=\"closeForm()\" class=\"back-btn vx-p-0 vx-m-0\">\r\n <i class=\"icons vx-mr-1\"></i></button\r\n >Select Approval Workflow\r\n </div>\r\n </div>\r\n <div class=\"approval-workflow-dialog-body\">\r\n <app-no-data\r\n *ngIf=\"!approverWorkFlowList.length && !enableApprovalCreate\"\r\n [noDataImage]=\"\r\n 'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/approval-workflow.svg'\r\n \"\r\n [noDataText]=\"\r\n 'You did not set any approval workflow.<br>Click on the <strong>Create An Approval Workflow</strong> button to begin.'\r\n \"\r\n [noDataButton]=\"'CREATE AN APPROVAL WORKFLOW'\"\r\n [button]=\"'approval'\"\r\n (buttonAction)=\"createApprovalAction($event)\"\r\n ></app-no-data>\r\n\r\n <div\r\n *ngIf=\"enableApprovalCreate || enableCreateForm\"\r\n class=\"approval-workflow-dialog-body-inner vx-d-flex vx-align-center vx-justify-center\"\r\n >\r\n <div class=\"approval-workflow-form\">\r\n <!-- Workflow Name -->\r\n <div class=\"approval-workflow-form-row vx-mb-5\">\r\n <div class=\"form-left\">\r\n <img\r\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/what.svg\"\r\n />\r\n </div>\r\n <div class=\"form-right\">\r\n <div\r\n class=\"label-heading vx-fs-11 vx-fw-500 vx-tt-uppercase vx-tt-uppercase vx-mb-2\"\r\n >\r\n WORKFLOW NAME <span class=\"required vx-fs-14 vx-fw-500\">*</span>\r\n </div>\r\n <input\r\n class=\"textField\"\r\n type=\"text\"\r\n [(ngModel)]=\"workflowName\"\r\n placeholder=\"Name of the approval workflow\"\r\n />\r\n <div class=\"vx-mt-2\">\r\n <marx-editor\r\n [editorConfig]=\"description\"\r\n [(ngModel)]=\"createDescription\"\r\n ></marx-editor>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Policy Category -->\r\n <div class=\"approval-workflow-form-row vx-mb-5\">\r\n <div class=\"form-left\">\r\n <img\r\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/category.svg\"\r\n />\r\n </div>\r\n <div class=\"form-right\">\r\n <div\r\n class=\"label-heading vx-fs-11 vx-fw-500 vx-tt-uppercase vx-tt-uppercase vx-mb-2\"\r\n >\r\n SELECT POLICY CATEGORY\r\n <span class=\"required vx-fs-14 vx-fw-500\">*</span>\r\n </div>\r\n <div\r\n *ngIf=\"filteredCategory?.length === 0\"\r\n (click)=\"enableCategory(true)\"\r\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\r\n [class.disabled]=\"false\"\r\n >\r\n <div\r\n class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\"\r\n >\r\n Select the policy category that this approval<br />workflow\r\n applies to\r\n </div>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"filteredCategory?.length > 0\"\r\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\r\n >\r\n <div\r\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-1 vx-pr-2\"\r\n >\r\n <ng-container\r\n *ngFor=\"\r\n let category of filteredCategory | slice : 0 : 1;\r\n let catIndex = index\r\n \"\r\n >\r\n <i\r\n (click)=\"removeCategory(category)\"\r\n class=\"icons cross vx-fs-12 vx-paragraph-txt vx-mr-1 vx-ml-1\"\r\n ></i\r\n >\r\n <span\r\n class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"category?.item_name\"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >{{ category?.item_name }}</span\r\n >\r\n </ng-container>\r\n <button\r\n *ngIf=\"filteredCategory?.length > 1\"\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover\r\n (click)=\"policyOwnerPopover.popover()\"\r\n placement=\"right\"\r\n >\r\n +{{ filteredCategory?.length - 1 }}\r\n </button>\r\n </div>\r\n <app-popover #policyOwnerPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let category of filteredCategory | slice : 1\">\r\n <div class=\"avatar-card\">\r\n <span\r\n class=\"value\"\r\n [appTooltip]=\"category?.item_name\"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >\r\n <i (click)=\"removeCategory(category)\" class=\"icons\"\r\n ></i\r\n >\r\n {{ category?.item_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <button\r\n filteredCategory\r\n (click)=\"enableCategory(true)\"\r\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\r\n >\r\n <i class=\"icons vx-mr-1\"></i> EDIT\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Approval Workflow -->\r\n <div class=\"approval-workflow-form-row vx-mb-5\">\r\n <div class=\"form-left\">\r\n <img\r\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/approval.svg\"\r\n />\r\n </div>\r\n <div class=\"form-right\">\r\n <div\r\n class=\"label-heading vx-fs-11 vx-fw-500 vx-tt-uppercase vx-tt-uppercase vx-mb-2\"\r\n >\r\n APPROVERS & APPROVAL WORKFLOW\r\n <span class=\"required vx-fs-14 vx-fw-500\">*</span>\r\n </div>\r\n <div\r\n *ngIf=\"approvalWorkflows?.length === 0\"\r\n (click)=\"addLevelsClicked(true)\"\r\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\r\n [class.disabled]=\"false\"\r\n >\r\n <div\r\n class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\"\r\n >\r\n Select approvers and select the order of approval\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"approvalWorkflows?.length > 0\">\r\n <div\r\n *ngFor=\"\r\n let approvalWorkflow of approvalWorkflows;\r\n let i = index\r\n \"\r\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between vx-mb-2\"\r\n >\r\n <div class=\"vx-d-flex vx-align-center\">\r\n <div class=\"level-left vx-d-flex vx-align-center\">\r\n <div class=\"vx-d-block\">\r\n <div\r\n class=\"level-name vx-fs-9 vx-fw-500 vx-paragraph-txt vx-tt-uppercase vx-lh-3\"\r\n [appTooltip]=\"approvalWorkflow?.alias_name\"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >\r\n {{ approvalWorkflow?.alias_name }}\r\n </div>\r\n <div\r\n class=\"vx-fs-9 vx-fw-500 vx-label-txt vx-tt-uppercase vx-lh-3\"\r\n >\r\n {{ approvalWorkflow?.type }}\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-1 vx-pr-2 vx-ml-2\"\r\n >\r\n <i\r\n class=\"icons cross vx-fs-12 vx-paragraph-txt vx-mr-1 vx-ml-1\"\r\n ></i\r\n >\r\n <div\r\n class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-mr-1 vx-text-center\"\r\n >\r\n 1\r\n </div>\r\n <span\r\n class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"'Samantha Jones'\"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >{{ approvalWorkflow?.approvers[0]?.member_name }}</span\r\n >\r\n <button\r\n *ngIf=\"approvalWorkflow?.approvers?.length > 1\"\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover\r\n (click)=\"workflowPopover.popover()\"\r\n placement=\"right\"\r\n >\r\n + {{ approvalWorkflow?.approvers?.length - 1 }}\r\n </button>\r\n </div>\r\n <app-popover #workflowPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"\r\n let approver of approvalWorkflow?.approvers\r\n | slice : 1;\r\n let j = index\r\n \"\r\n >\r\n <div class=\"avatar-card\">\r\n <span\r\n class=\"value\"\r\n [appTooltip]=\"approver?.member_name\"\r\n placement=\"bottom-left\"\r\n delay=\"0\"\r\n type=\"black\"\r\n [tooltipMandatory]=\"false\"\r\n >\r\n <i class=\"icons\"></i>\r\n <span\r\n class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-mr-1 vx-text-center\"\r\n >Final</span\r\n >\r\n {{ approver?.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n\r\n <div class=\"vx-d-flex vx-align-center\">\r\n <button\r\n (click)=\"editApproval(approvalWorkflow, i)\"\r\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\r\n >\r\n <i class=\"icons vx-mr-1\"></i> EDIT\r\n </button>\r\n <button\r\n (click)=\"deleteLevel(i)\"\r\n class=\"deleteBtn vx-fs-11 vx-fw-600 vx-tt-uppercase vx-p-0 vx-m-0 vx-ml-4 vx-d-flex vx-align-center\"\r\n >\r\n <i class=\"icons vx-mr-1\"></i> DELETE\r\n </button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <button\r\n *ngIf=\"approvalWorkflows?.length > 0\"\r\n (click)=\"addLevelsClicked(true)\"\r\n class=\"addMoreBtn vx-fs-11 vx-fw-500 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-mt-1\"\r\n >\r\n + ADD MORE LEVELS\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <vui-floating-bar\r\n *ngIf=\"enableApprovalCreate || enableCreateForm\"\r\n [nextDisabled]=\"\r\n workflowName?.trim() === '' ||\r\n approvalWorkflows?.length === 0 ||\r\n filteredCategory?.length === 0\r\n \"\r\n (closeList)=\"closeCreateForm()\"\r\n (closeEvent)=\"nextClick()\"\r\n ></vui-floating-bar>\r\n </div>\r\n</div>\r\n\r\n<!-- [selectedItems]=\"policyForm.selectedCategories\" -->\r\n\r\n<app-select-approvers\r\n *ngIf=\"enableApprovalLevel\"\r\n [allApprovers]=\"allApprovers\"\r\n (closeSelectApprover)=\"closeSelectApprover()\"\r\n (selectedApprover)=\"selectedApprover($event)\"\r\n [levels]=\"levels\"\r\n [editApprovalData]=\"editApprovalData\"\r\n></app-select-approvers>\r\n\r\n<app-checkbox-list\r\n *ngIf=\"enablePolicyCategory\"\r\n [config]=\"categoryConfig\"\r\n [twoColumn]=\"false\"\r\n [itemsList]=\"selectedCategory\"\r\n [identifierKey]=\"'_id'\"\r\n [displayKey]=\"'item_name'\"\r\n [tooltipKey]=\"'item_name'\"\r\n (saveList)=\"saveCategoryList($event)\"\r\n (closeList)=\"closeCategoryList()\"\r\n [selectedItems]=\"filteredCategory\"\r\n>\r\n</app-checkbox-list>\r\n",
|
|
218
|
+
styles: ["@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/display/display.css\";@import\"https://cdn.v-comply.com/design-system/css/alignment/alignment.css\";@import\"https://cdn.v-comply.com/design-system/css/text/text.css\";@import\"https://cdn.v-comply.com/design-system/css/color/color.css\";@import\"https://cdn.v-comply.com/design-system/css/width/width.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-top.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-left.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-right.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-top.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-left.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-right.css\";::ng-deep .approval-workflow-dialog{position:fixed;top:0;right:500px;bottom:0;left:0}::ng-deep .approval-workflow-dialog:before{background:#1e5dd3;content:\"\";position:absolute;top:0;left:0;right:0;width:100%;height:3px}::ng-deep .approval-workflow-dialog-head{background:#fbfbfb;height:2.75rem;border-bottom:1px solid #f1f1f1}::ng-deep .approval-workflow-dialog-head button.back-btn{background:transparent;border-radius:0;border:none}::ng-deep .approval-workflow-dialog-body{background:#fff;height:calc(100vh - 2.75rem);padding:2rem}::ng-deep .approval-workflow-dialog-body-inner{height:calc(100vh - 10.75rem);overflow:hidden;overflow-y:auto;margin-bottom:1rem;padding-right:.5rem;width:calc(100% + .5rem)}::ng-deep .approval-workflow-dialog-body-inner::-webkit-scrollbar-track{background-color:#fff;position:absolute}::ng-deep .approval-workflow-dialog-body-inner::-webkit-scrollbar{width:3px;height:3px;background-color:transparent;position:absolute}::ng-deep .approval-workflow-dialog-body-inner::-webkit-scrollbar-thumb{border-radius:3px;background-color:#dbdbdb;position:absolute}::ng-deep .approval-workflow-dialog-body-inner .approval-workflow-form{width:30.75rem;max-height:calc(100vh - 10.75rem)}::ng-deep .approval-workflow-dialog-body-inner .approval-workflow-form-row{position:relative}::ng-deep .approval-workflow-dialog-body-inner .approval-workflow-form-row .form-left{position:absolute;top:30px;left:0}::ng-deep .approval-workflow-dialog-body-inner .approval-workflow-form-row .form-left img{width:2.5rem;height:2.5rem}::ng-deep .approval-workflow-dialog-body-inner .approval-workflow-form-row .form-right{padding-left:3.75rem}::ng-deep .approval-workflow-dialog-body-inner .approval-workflow-form-row .form-right .label-heading .required{color:#eb2424;position:relative;top:-.125rem}::ng-deep .approval-workflow-dialog-body-inner .approval-workflow-form-row .form-right button.addMoreBtn{background:transparent;border-radius:0;border:none}::ng-deep .approval-workflow-dialog-body vui-floating-bar .reviewer-floating-bar{padding:0!important}\n"]
|
|
219
|
+
},] }
|
|
220
|
+
];
|
|
221
|
+
ApprovalCreateFormComponent.ctorParameters = () => [
|
|
222
|
+
{ type: AuthService },
|
|
223
|
+
{ type: PolicyService }
|
|
224
|
+
];
|
|
225
|
+
ApprovalCreateFormComponent.propDecorators = {
|
|
226
|
+
mode: [{ type: Input }],
|
|
227
|
+
approverDetails: [{ type: Input }],
|
|
228
|
+
approverWorkFlowList: [{ type: Input }],
|
|
229
|
+
enableCreateForm: [{ type: Input }],
|
|
230
|
+
allApprovers: [{ type: Input }],
|
|
231
|
+
selectedCategory: [{ type: Input }],
|
|
232
|
+
saveApprovalWorkflow: [{ type: Output }]
|
|
233
|
+
};
|
|
234
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwcm92YWwtY3JlYXRlLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdngtd29ya2Zsb3ctZW5naW5lL3NyYy9saWIvc2hhcmVkQ29tcG9uZW50cy9hcHByb3ZhbC13b3JrZmxvdy9hcHByb3ZhbC1jcmVhdGUtZm9ybS9hcHByb3ZhbC1jcmVhdGUtZm9ybS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQU8xRSxNQUFNLE9BQU8sMkJBQTJCO0lBa0N0QyxZQUNVLFdBQXdCLEVBQ3hCLGFBQTRCO1FBRDVCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBbkN0Qyx5QkFBb0IsR0FBWSxLQUFLLENBQUM7UUFDdEMsd0JBQW1CLEdBQVksS0FBSyxDQUFDO1FBQ3JDLHlCQUFvQixHQUFZLEtBQUssQ0FBQztRQUN0QyxpQkFBWSxHQUFXLEVBQUUsQ0FBQztRQUMxQiwwQkFBcUIsR0FBVSxFQUFFLENBQUM7UUFDbEMsMEJBQXFCLEdBQVUsRUFBRSxDQUFDO1FBQ2xDLHNCQUFpQixHQUFVLEVBQUUsQ0FBQztRQUM5QixxQkFBZ0IsR0FBVSxFQUFFLENBQUM7UUFDN0IsV0FBTSxHQUFXLENBQUMsQ0FBQztRQUNuQixtQkFBYyxHQUFHO1lBQ2YsVUFBVSxFQUFFLGlCQUFpQjtZQUM3QixvQkFBb0IsRUFBRSxtQkFBbUI7WUFDekMsa0JBQWtCLEVBQUUscUJBQXFCO1lBQ3pDLGlCQUFpQixFQUFFLGlCQUFpQjtZQUNwQyxhQUFhLEVBQUUs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QUFXLENBQUM7SUFDakMsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDbkMsQ0FBQzs7O1lBN1FGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsMEJBQTBCO2dCQUNwQyxvMWNBQW9EOzthQUVyRDs7O1lBUFEsV0FBVztZQUNYLGFBQWE7OzttQkFnQ25CLEtBQUs7OEJBQ0wsS0FBSzttQ0FDTCxLQUFLOytCQUNMLEtBQUs7MkJBQ0wsS0FBSzsrQkFDTCxLQUFLO21DQUVMLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEVkaXRvckNvbmZpZyB9IGZyb20gJ3Zjb21wbHktZWRpdG9yJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi93b3JrZmxvdy1zZXJ2aWNlcy9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQb2xpY3lTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vd29ya2Zsb3ctc2VydmljZXMvcG9saWN5LnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtYXBwcm92YWwtY3JlYXRlLWZvcm0nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hcHByb3ZhbC1jcmVhdGUtZm9ybS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYXBwcm92YWwtY3JlYXRlLWZvcm0uY29tcG9uZW50Lmxlc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFwcHJvdmFsQ3JlYXRlRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgZW5hYmxlQXBwcm92YWxDcmVhdGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBlbmFibGVBcHByb3ZhbExldmVsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZW5hYmxlUG9saWN5Q2F0ZWdvcnk6IGJvb2xlYW4gPSBmYWxzZTtcclxuICB3b3JrZmxvd05hbWU6IHN0cmluZyA9ICcnO1xyXG4gIHNlbGVjdEFwcHJvdmFsUGF5bG9hZDogYW55W10gPSBbXTtcclxuICBjcmVhdGVBcHByb3ZhbFBheWxvYWQ6IGFueVtdID0gW107XHJcbiAgYXBwcm92YWxXb3JrZmxvd3M6IGFueVtdID0gW107XHJcbiAgZmlsdGVyZWRDYXRlZ29yeTogYW55W10gPSBbXTtcclxuICBsZXZlbHM6IG51bWJlciA9IDE7XHJcbiAgY2F0ZWdvcnlDb25maWcgPSB7XHJcbiAgICBwYW5lbFRpdGxlOiAnU2VsZWN0IENhdGVnb3J5JyxcclxuICAgIGZsb2F0aW5nVGV4dFNpbmd1bGFyOiAnQ2F0ZWdvcnkgc2VsZWN0ZWQnLFxyXG4gICAgZmxvYXRpbmdUZXh0UGx1cmFsOiAnQ2F0ZWdvcmllcyBzZWxlY3RlZCcsXHJcbiAgICBzZWFyY2hQbGFjZWhvbGRlcjogJ1NlYXJjaCBDYXRlZ29yeScsXHJcbiAgICBzZWFyY2hFbmFibGVkOiB0cnVlLFxyXG4gICAgc2VsZWN0QWxsRW5hYmxlZDogdHJ1ZSxcclxuICAgIHdvcmtmbG93OiAncG9saWN5JyxcclxuICB9O1xyXG4gIHNlbGVjdGVkQ2F0OiBhbnlbXSA9IFtdO1xyXG4gIGVkaXRBcHByb3ZhbERhdGE6IGFueVtdID0gW107XHJcbiAgZWRpdEluZGV4OiBudW1iZXIgPSAtMTtcclxuICBjcmVhdGVEZXNjcmlwdGlvbjogc3RyaW5nID0gJyc7XHJcbiAgc2VsZWN0ZWRDYXRlZ29yeUlkOiBhbnlbXSA9IFtdO1xyXG5cclxuICBASW5wdXQoKSBtb2RlOiAnQ1JFQVRFJyB8ICdFRElUJyA9ICdDUkVBVEUnO1xyXG4gIEBJbnB1dCgpIGFwcHJvdmVyRGV0YWlsczogYW55O1xyXG4gIEBJbnB1dCgpIGFwcHJvdmVyV29ya0Zsb3dMaXN0ITogYW55O1xyXG4gIEBJbnB1dCgpIGVuYWJsZUNyZWF0ZUZvcm0hOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGFsbEFwcHJvdmVycyE6IGFueTtcclxuICBASW5wdXQoKSBzZWxlY3RlZENhdGVnb3J5ITogYW55O1xyXG5cclxuICBAT3V0cHV0KCkgc2F2ZUFwcHJvdmFsV29ya2Zsb3cgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHBvbGljeVNlcnZpY2U6IFBvbGljeVNlcnZpY2VcclxuICApIHt9XHJcblxyXG4gIGRlc2NyaXB0aW9uOiBFZGl0b3JDb25maWcgPSB7XHJcbiAgICBtb2RlOiAncHJpbWUnLFxyXG4gICAgY29sb3JQYWxldHRlOiB0cnVlLFxyXG4gICAgbGluazogdHJ1ZSxcclxuICAgIHBsYWNlaG9sZGVyOiAnQWRkIGEgZGVzY3JpcHRpb24gZm9yIHRoaXMgcG9saWN5JyxcclxuICB9O1xyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAnd29ya2Zsb3dOYW1lIHh4eXknLFxyXG4gICAgICB0aGlzLndvcmtmbG93TmFtZSxcclxuICAgICAgdGhpcy5hcHByb3ZlckRldGFpbHMsXHJcbiAgICAgIHRoaXMubW9kZVxyXG4gICAgKTtcclxuICAgIGNvbnNvbGUubG9nKCdhcHByb3ZhbFdvcmtmbG93cyB0byBkaXNwbGF5IG9uIGluaXQnLCB0aGlzLmFwcHJvdmFsV29ya2Zsb3dzKTtcclxuICAgIGlmICh0aGlzLm1vZGUgPT0gJ0VESVQnKSB7XHJcbiAgICAgIHRoaXMucG9wdWxhdGVBcHByb3ZlcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY3JlYXRlQXBwcm92YWxBY3Rpb24oZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc29sZS5sb2coJ2NyZWF0ZUFwcHJvdmFsQWN0aW9uJywgZXZlbnQpO1xyXG4gICAgaWYgKGV2ZW50LnRvTG93ZXJDYXNlKCkgPT09ICdhcHByb3ZhbCcpIHtcclxuICAgICAgdGhpcy5lbmFibGVBcHByb3ZhbENyZWF0ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRMZXZlbHNDbGlja2VkKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuZW5hYmxlQXBwcm92YWxMZXZlbCA9IGV2ZW50O1xyXG4gICAgaWYgKGV2ZW50KSB0aGlzLmxldmVscysrO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2F0ZWdvcnlJZChjYXRlZ29yeTogYW55KSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkQ2F0ZWdvcnlJZCA9IGNhdGVnb3J5Lm1hcCgoY2F0OiBhbnkpID0+IGNhdC5pdGVtX2lkKTtcclxuICAgIGNvbnNvbGUubG9nKCd0aGlzLnNlbGVjdGVkQ2F0ZWdvcnlJZCcsIHRoaXMuc2VsZWN0ZWRDYXRlZ29yeUlkKTtcclxuICB9XHJcblxyXG4gIHNhdmVDYXRlZ29yeUxpc3QoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZENhdCA9IGV2ZW50O1xyXG4gICAgdGhpcy5maWx0ZXJTZWxlY3RlZENhdGVnb3J5KGV2ZW50KTtcclxuICAgIHRoaXMuZW5hYmxlUG9saWN5Q2F0ZWdvcnkgPSBmYWxzZTtcclxuICAgIGNvbnNvbGUubG9nKCdjYXRlZ29yeSBsaXN0IHNhdmVDYXRlZ29yeUxpc3QnLCBldmVudCk7XHJcbiAgICBjb25zb2xlLmxvZygnY2F0ZWdvcnkgc2VsZWN0ZWQnLCBldmVudCk7XHJcbiAgfVxyXG5cclxuICBmaWx0ZXJTZWxlY3RlZENhdGVnb3J5KHNlbGVjdGVkQ2F0ZWdvcnk6IGFueSkge1xyXG4gICAgdGhpcy5maWx0ZXJlZENhdGVnb3J5ID0gdGhpcy5zZWxlY3RlZENhdGVnb3J5LmZpbHRlcigoY2F0ZWdvcnk6IGFueSkgPT5cclxuICAgICAgc2VsZWN0ZWRDYXRlZ29yeS5pbmNsdWRlcyhjYXRlZ29yeS5faWQpXHJcbiAgICApO1xyXG4gICAgdGhpcy5nZXRDYXRlZ29yeUlkKHRoaXMuZmlsdGVyZWRDYXRlZ29yeSk7XHJcbiAgICBjb25zb2xlLmxvZygnZmlsdGVyZWRDYXRlZ29yeScsIHRoaXMuZmlsdGVyZWRDYXRlZ29yeSk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVDYXRlZ29yeShldmVudDogYW55KSB7XHJcbiAgICBjb25zb2xlLmxvZygndGhpcy5maWx0ZXJlZENhdGVnb3J5IDEnLCB0aGlzLmZpbHRlcmVkQ2F0ZWdvcnkpO1xyXG4gICAgY29uc3QgY2F0ZWdvcnlJbmRleCA9IHRoaXMuZmlsdGVyZWRDYXRlZ29yeS5maW5kSW5kZXgoXHJcbiAgICAgIChjYXRlZ29yeTogYW55KSA9PiBjYXRlZ29yeT8uaXRlbV9pZCA9PT0gZXZlbnQ/Lml0ZW1faWRcclxuICAgICk7XHJcbiAgICB0aGlzLmZpbHRlcmVkQ2F0ZWdvcnk/LnNwbGljZShjYXRlZ29yeUluZGV4LCAxKTtcclxuICAgIGNvbnNvbGUubG9nKCd0aGlzLmZpbHRlcmVkQ2F0ZWdvcnkgMicsIHRoaXMuZmlsdGVyZWRDYXRlZ29yeSk7XHJcbiAgfVxyXG5cclxuICBjbG9zZUNhdGVnb3J5TGlzdCgpIHtcclxuICAgIGNvbnNvbGUubG9nKCdjbG9zZSBjYXRlZ29yeSBsaXN0JywgdGhpcy5jcmVhdGVEZXNjcmlwdGlvbik7XHJcbiAgICB0aGlzLmVuYWJsZVBvbGljeUNhdGVnb3J5ID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBlbmFibGVDYXRlZ29yeShldmVudDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5lbmFibGVQb2xpY3lDYXRlZ29yeSA9IGV2ZW50O1xyXG4gICAgY29uc29sZS5sb2coJ3NlbGVjdGVkQ2F0JywgdGhpcy5zZWxlY3RlZENhdCk7XHJcbiAgfVxyXG5cclxuICBjbG9zZVNlbGVjdEFwcHJvdmVyKCkge1xyXG4gICAgdGhpcy5lbmFibGVBcHByb3ZhbExldmVsID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RlZEFwcHJvdmVyKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuc2VsZWN0QXBwcm92YWxQYXlsb2FkID0gZXZlbnQ7XHJcbiAgICBjb25zb2xlLmxvZyhcclxuICAgICAgJ2Nsb3NlIHNlbGVjdGVkJyxcclxuICAgICAgdGhpcy5zZWxlY3RBcHByb3ZhbFBheWxvYWQsXHJcbiAgICAgIHRoaXMuZWRpdEluZGV4LFxyXG4gICAgICB0aGlzLmVkaXRBcHByb3ZhbERhdGFcclxuICAgICk7XHJcbiAgICBjb25zb2xlLmxvZygnYXBwcm92YWxXb3JrZmxvd3Mgc2VsZWN0ZWRBcHByb3ZlcicsIHRoaXMuYXBwcm92YWxXb3JrZmxvd3MpO1xyXG4gICAgaWYgKHRoaXMuZWRpdEluZGV4ICE9PSAtMSkge1xyXG4gICAgICB0aGlzLmFwcHJvdmFsV29ya2Zsb3dzPy5zcGxpY2UodGhpcy5lZGl0SW5kZXgsIDEpO1xyXG4gICAgICB0aGlzLmFwcHJvdmFsV29ya2Zsb3dzPy5zcGxpY2UodGhpcy5lZGl0SW5kZXgsIDAsIGV2ZW50WzBdKTtcclxuICAgICAgdGhpcy5lZGl0SW5kZXggPSAtMTtcclxuICAgICAgdGhpcy5lZGl0QXBwcm92YWxEYXRhID0gW107XHJcbiAgICAgIGNvbnNvbGUubG9nKCcgaGkgaW4gaWYnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdoaSBpbiBlbHNlJyk7XHJcbiAgICAgIHRoaXMuYXBwcm92YWxXb3JrZmxvd3MucHVzaChldmVudFswXSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5lbmFibGVBcHByb3ZhbExldmVsID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBkZWxldGVMZXZlbChpbmRleDogYW55KSB7XHJcbiAgICAvLyBBcHByb3ZlciBMZXZlbCBkZWxldGVcclxuICAgIGNvbnNvbGUubG9nKCd0aGlzLmFwcHJvdmFsV29ya2Zsb3dzJywgdGhpcy5hcHByb3ZhbFdvcmtmbG93cywgaW5kZXgpO1xyXG4gICAgdGhpcy5hcHByb3ZhbFdvcmtmbG93cy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgY29uc29sZS5sb2coXHJcbiAgICAgICd0aGlzLmFwcHJvdmFsV29ya2Zsb3dzIGFmdGVyIHNwbGljZScsXHJcbiAgICAgIHRoaXMuYXBwcm92YWxXb3JrZmxvd3MsXHJcbiAgICAgIGluZGV4XHJcbiAgICApO1xyXG4gICAgZm9yIChsZXQgaSA9IGluZGV4OyBpIDwgdGhpcy5hcHByb3ZhbFdvcmtmbG93cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5hcHByb3ZhbFdvcmtmbG93c1tpbmRleF1bJ2xldmVsMSddID09PVxyXG4gICAgICAgIHRoaXMuYXBwcm92YWxXb3JrZmxvd3NbaW5kZXhdWydhbGlhc19uYW1lJ11cclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5hcHByb3ZhbFdvcmtmbG93c1tpbmRleF1bJ2FsaWFzX25hbWUnXSA9IGBMZXZlbCAke2kgKyAxfWA7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5hcHByb3ZhbFdvcmtmbG93c1tpbmRleF1bJ2xldmVsMSddID0gYExldmVsICR7aSArIDF9YDtcclxuICAgIH1cclxuICAgIGNvbnNvbGUubG9nKCd0aGlzLmFwcHJvdmFsV29ya2Zsb3dzIGFmdGVyIGRlbGV0ZScsIHRoaXMuYXBwcm92YWxXb3JrZmxvd3MpO1xyXG4gICAgLy8gZGVsZXRlIHRoaXMuYXBwcm92YWxXb3JrZmxvd3NbYGxldmVsJHtpICsgMX1gXTtcclxuICAgIC8vIGNvbnN0IG5ld09iajogYW55ID0ge307XHJcbiAgICAvLyBPYmplY3Qua2V5cyh0aGlzLmFwcHJvdmFsV29ya2Zsb3dzKS5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4geyAvLyBSZW5hbWluZyB0aGUga2V5cyBvZiB0aGUgb2JqZWN0IGluIHNlcXVlbnRpYWwgb3JkZXJcclxuICAgIC8vICAgICBjb25zdCBrZXkgPSBpdGVtLnN1YnN0cmluZygwLCBpdGVtLmxhc3RJbmRleE9mKCdsJykgKyAxKS5jb25jYXQoYCR7aW5kZXggKyAxfWApO1xyXG4gICAgLy8gICAgIG5ld09ialtrZXldID0gdGhpcy5hcHByb3ZhbFdvcmtmbG93c1tpdGVtXTtcclxuICAgIC8vIH0pO1xyXG4gICAgLy8gdGhpcy5hcHByb3ZhbFdvcmtmbG93cyA9IE9iamVjdC5hc3NpZ24oe30sIG5ld09iaik7XHJcbiAgICAvLyB0aGlzLmxldmVscy0tO1xyXG4gICAgLy8gdGhpcy5jaGVja0xldmVsKCk7XHJcbiAgfVxyXG5cclxuICBjaGVja0xldmVsKCkge1xyXG4gICAgaWYgKHRoaXMubGV2ZWxzID09PSAwKSB7XHJcbiAgICAgIHRoaXMubGV2ZWxzID0gMTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGVkaXRBcHByb3ZhbChhcHByb3ZhbDogYW55LCBpbmRleDogYW55KSB7XHJcbiAgICB0aGlzLmVkaXRBcHByb3ZhbERhdGEgPSBbYXBwcm92YWxdO1xyXG4gICAgdGhpcy5lZGl0SW5kZXggPSBpbmRleDtcclxuICAgIHRoaXMuZW5hYmxlQXBwcm92YWxMZXZlbCA9IHRydWU7XHJcbiAgICBjb25zb2xlLmxvZygnYXBwcm92YWwgd29ya2Zsb3cgJywgdGhpcy5lZGl0QXBwcm92YWxEYXRhLCB0aGlzLmVkaXRJbmRleCk7XHJcbiAgfVxyXG5cclxuICBjbG9zZUNyZWF0ZUZvcm0oKSB7XHJcbiAgICBjb25zb2xlLmxvZygndGhpcy5hcHByb3ZhbFdvcmtmbG93cyBvbiBuZXh0IGNsaWNrJywgdGhpcy5hcHByb3ZhbFdvcmtmbG93cyk7XHJcbiAgfVxyXG5cclxuICBuZXh0Q2xpY2soKSB7XHJcbiAgICB0aGlzLnJlbW92ZU1lbWJlck5hbWVLZXkoKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZU1lbWJlck5hbWVLZXkoKSB7XHJcbiAgICB0aGlzLmFwcHJvdmFsV29ya2Zsb3dzID0gdGhpcy5hcHByb3ZhbFdvcmtmbG93cy5tYXAoXHJcbiAgICAgICh7XHJcbiAgICAgICAgYXBwcm92ZXJzLFxyXG4gICAgICAgIC4uLnJlc3RcclxuICAgICAgfToge1xyXG4gICAgICAgIGFwcHJvdmVyczogQXJyYXk8eyBba2V5OiBzdHJpbmddOiBhbnkgfT47XHJcbiAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xyXG4gICAgICB9KSA9PiAoe1xyXG4gICAgICAgIC4uLnJlc3QsXHJcbiAgICAgICAgYXBwcm92ZXJzOiBhcHByb3ZlcnMubWFwKFxyXG4gICAgICAgICAgKHsgbWVtYmVyX25hbWUsIC4uLnJlc3QgfTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkgPT4gKHsgLi4ucmVzdCB9KVxyXG4gICAgICAgICksXHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgY29uc29sZS5sb2coXHJcbiAgICAgICd0aGlzLmFwcHJvdmFsV29ya2Zsb3dzIHJlbW92ZU1lbWJlck5hbWVLZXknLFxyXG4gICAgICB0aGlzLmFwcHJvdmFsV29ya2Zsb3dzXHJcbiAgICApO1xyXG4gICAgdGhpcy5nZW5lcmF0ZVBheWxvYWQoKTtcclxuICB9XHJcblxyXG4gIGdlbmVyYXRlUGF5bG9hZCgpIHtcclxuICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgIHdvcmtmbG93X21vZHVsZTogJ1BPTElDWScsXHJcbiAgICAgIHdvcmtmbG93X25hbWU6IHRoaXMud29ya2Zsb3dOYW1lLFxyXG4gICAgICBjYXRlZ29yeV9pZDogdGhpcy5zZWxlY3RlZENhdGVnb3J5SWQsXHJcbiAgICAgIGFwcHJvdmFsX3dvcmtmbG93OiB0aGlzLmFwcHJvdmFsV29ya2Zsb3dzLFxyXG4gICAgICBjcmVhdGVkX2J5OiB0aGlzLmF1dGhTZXJ2aWNlLmdldE1lbWJlcklkKCksXHJcbiAgICAgIG9yZ2FuaXNhdGlvbl9pZDogdGhpcy5hdXRoU2VydmljZS5nZXRPcmdhbml6YXRpb25JZCgpLFxyXG4gICAgICBkZWxldGVfZmxhZzogMCxcclxuICAgICAgSXNfYXBwcm92YWw6IDEsXHJcbiAgICB9O1xyXG4gICAgaWYgKHRoaXMubW9kZSA9PT0gJ0VESVQnKSB7XHJcbiAgICAgIHRoaXMuX2VkaXRXb3JrZmxvdyhwYXlsb2FkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY3JlYXRlTmV3V29ya2Zsb3cocGF5bG9hZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjcmVhdGVOZXdXb3JrZmxvdyhwYXlsb2FkOiBhbnkpIHtcclxuICAgIHRoaXMucG9saWN5U2VydmljZS5jcmVhdGVBcHByb3ZhbFdvcmtmbG93KHBheWxvYWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2F2ZUFwcHJvdmFsV29ya2Zsb3cuZW1pdCh0cnVlKTtcclxuICAgICAgICBjb25zb2xlLmxvZygncG9saWN5IGNyZWF0ZScsIHJlcyk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBfZWRpdFdvcmtmbG93KHBheWxvYWQ6IGFueSkge1xyXG4gICAgdGhpcy5wb2xpY3lTZXJ2aWNlXHJcbiAgICAgIC5lZGl0QXBwcm92YWxXb3JrZmxvdyhwYXlsb2FkLCB0aGlzLmFwcHJvdmVyRGV0YWlscy5faWQpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zYXZlQXBwcm92YWxXb3JrZmxvdy5lbWl0KHRydWUpO1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ3BvbGljeSBjcmVhdGUnLCByZXMpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcbiAgcG9wdWxhdGVBcHByb3ZlcigpIHtcclxuICAgIGNvbnN0IHsgd29ya2Zsb3dfbmFtZSwgYXBwcm92YWxfd29ya2Zsb3csIGRlc2NyaXB0aW9uIH0gPVxyXG4gICAgICB0aGlzLmFwcHJvdmVyRGV0YWlscztcclxuICAgIHRoaXMud29ya2Zsb3dOYW1lID0gd29ya2Zsb3dfbmFtZTtcclxuICAgIHRoaXMuYXBwcm92YWxXb3JrZmxvd3MgPSBhcHByb3ZhbF93b3JrZmxvdztcclxuICAgIHRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcclxuICB9XHJcblxyXG4gIGNsb3NlRm9ybSgpIHtcclxuICAgIHRoaXMuc2F2ZUFwcHJvdmFsV29ya2Zsb3cuZW1pdCgpO1xyXG4gIH1cclxufVxyXG4iXX0=
|