@vgip/meta-ui 1.1.3
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 +2 -0
- package/bundles/vgip-meta-ui.umd.js +6323 -0
- package/bundles/vgip-meta-ui.umd.js.map +1 -0
- package/esm2015/lib/common/fieldNormalizer/boolean.js +12 -0
- package/esm2015/lib/common/fieldNormalizer/datetime.js +9 -0
- package/esm2015/lib/common/fieldNormalizer/index.js +168 -0
- package/esm2015/lib/common/fieldNormalizer/number.js +9 -0
- package/esm2015/lib/common/fieldNormalizer/options.js +50 -0
- package/esm2015/lib/common/fieldNormalizer/radio.js +10 -0
- package/esm2015/lib/common/fieldNormalizer/reference.js +36 -0
- package/esm2015/lib/common/fieldNormalizer/richtext.js +15 -0
- package/esm2015/lib/common/fieldNormalizer/string.js +24 -0
- package/esm2015/lib/common/fieldNormalizer/text.js +15 -0
- package/esm2015/lib/common/fieldNormalizer/uniqueNameFilter.js +23 -0
- package/esm2015/lib/common/metaAutofocus.directive.js +35 -0
- package/esm2015/lib/common/metaIcons.pipe.js +28 -0
- package/esm2015/lib/common/metaModel.pipe.js +22 -0
- package/esm2015/lib/common/metaNormalizer.js +311 -0
- package/esm2015/lib/common/metaStripHtml.pipe.js +18 -0
- package/esm2015/lib/common/utils/colorThemes.js +77 -0
- package/esm2015/lib/common/utils/indexedDbStore/index.js +218 -0
- package/esm2015/lib/common/utils/relativeTimeBuilder.js +51 -0
- package/esm2015/lib/common/utils/templateBuilder.js +92 -0
- package/esm2015/lib/field.js +157 -0
- package/esm2015/lib/fieldAbstract.js +195 -0
- package/esm2015/lib/fieldBoolean/index.js +50 -0
- package/esm2015/lib/fieldComposite/index.js +41 -0
- package/esm2015/lib/fieldDatetime/index.js +334 -0
- package/esm2015/lib/fieldInput/index.js +421 -0
- package/esm2015/lib/fieldList/index.js +68 -0
- package/esm2015/lib/fieldRadio/index.js +85 -0
- package/esm2015/lib/fieldReference/index.js +797 -0
- package/esm2015/lib/fieldRichtext/index.js +82 -0
- package/esm2015/lib/fieldSelect/index.js +448 -0
- package/esm2015/lib/fieldText/index.js +66 -0
- package/esm2015/lib/fieldUnknown/index.js +16 -0
- package/esm2015/lib/index.js +105 -0
- package/esm2015/lib/layout/index.js +155 -0
- package/esm2015/lib/refDialog/index.js +134 -0
- package/esm2015/lib/resource/index.js +424 -0
- package/esm2015/lib/resourceCard/index.js +56 -0
- package/esm2015/lib/services/metaContext/index.js +34 -0
- package/esm2015/lib/services/metaMsg/index.js +86 -0
- package/esm2015/lib/services/metaReference/index.js +98 -0
- package/esm2015/lib/services/metaResource/index.js +141 -0
- package/esm2015/lib/services/metaResource/metaHttpClient.js +65 -0
- package/esm2015/lib/services/metaTracker/index.js +30 -0
- package/esm2015/lib/services/resourceDrafts/index.js +70 -0
- package/esm2015/public-api.js +5 -0
- package/esm2015/vgip-meta-ui.js +5 -0
- package/fesm2015/vgip-meta-ui.js +5226 -0
- package/fesm2015/vgip-meta-ui.js.map +1 -0
- package/lib/common/fieldNormalizer/boolean.d.ts +1 -0
- package/lib/common/fieldNormalizer/datetime.d.ts +1 -0
- package/lib/common/fieldNormalizer/index.d.ts +1 -0
- package/lib/common/fieldNormalizer/number.d.ts +1 -0
- package/lib/common/fieldNormalizer/options.d.ts +1 -0
- package/lib/common/fieldNormalizer/radio.d.ts +1 -0
- package/lib/common/fieldNormalizer/reference.d.ts +1 -0
- package/lib/common/fieldNormalizer/richtext.d.ts +1 -0
- package/lib/common/fieldNormalizer/string.d.ts +1 -0
- package/lib/common/fieldNormalizer/text.d.ts +1 -0
- package/lib/common/fieldNormalizer/uniqueNameFilter.d.ts +1 -0
- package/lib/common/metaAutofocus.directive.d.ts +7 -0
- package/lib/common/metaIcons.pipe.d.ts +7 -0
- package/lib/common/metaModel.pipe.d.ts +5 -0
- package/lib/common/metaNormalizer.d.ts +1 -0
- package/lib/common/metaStripHtml.pipe.d.ts +4 -0
- package/lib/common/utils/colorThemes.d.ts +8 -0
- package/lib/common/utils/indexedDbStore/index.d.ts +24 -0
- package/lib/common/utils/relativeTimeBuilder.d.ts +1 -0
- package/lib/common/utils/templateBuilder.d.ts +1 -0
- package/lib/field.d.ts +22 -0
- package/lib/fieldAbstract.d.ts +58 -0
- package/lib/fieldBoolean/index.d.ts +7 -0
- package/lib/fieldComposite/index.d.ts +8 -0
- package/lib/fieldDatetime/index.d.ts +23 -0
- package/lib/fieldInput/index.d.ts +28 -0
- package/lib/fieldList/index.d.ts +10 -0
- package/lib/fieldRadio/index.d.ts +12 -0
- package/lib/fieldReference/index.d.ts +68 -0
- package/lib/fieldRichtext/index.d.ts +27 -0
- package/lib/fieldSelect/index.d.ts +38 -0
- package/lib/fieldText/index.d.ts +12 -0
- package/lib/fieldUnknown/index.d.ts +3 -0
- package/lib/index.d.ts +35 -0
- package/lib/layout/index.d.ts +35 -0
- package/lib/refDialog/index.d.ts +30 -0
- package/lib/resource/index.d.ts +54 -0
- package/lib/resourceCard/index.d.ts +15 -0
- package/lib/services/metaContext/index.d.ts +23 -0
- package/lib/services/metaMsg/index.d.ts +11 -0
- package/lib/services/metaReference/index.d.ts +11 -0
- package/lib/services/metaResource/index.d.ts +28 -0
- package/lib/services/metaResource/metaHttpClient.d.ts +12 -0
- package/lib/services/metaTracker/index.d.ts +16 -0
- package/lib/services/resourceDrafts/index.d.ts +23 -0
- package/package.json +23 -0
- package/public-api.d.ts +1 -0
- package/vgip-meta-ui.d.ts +4 -0
- package/vgip-meta-ui.metadata.json +1 -0
|
@@ -0,0 +1,424 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* @Author: Alexander.Vangelov@vonage.com
|
|
3
|
+
* @Date: 2019-09-19 17:35:28
|
|
4
|
+
* @Last Modified by: Alexander.Vangelov@vonage.com
|
|
5
|
+
* @Last Modified time: 2020-09-03 13:22:14
|
|
6
|
+
*/
|
|
7
|
+
import { Component, Input, ChangeDetectorRef, Output, EventEmitter, ElementRef, ComponentFactoryResolver } from '@angular/core';
|
|
8
|
+
import { MetaResourceService } from '../services/metaResource';
|
|
9
|
+
import { MetaContextService } from '../services/metaContext';
|
|
10
|
+
import { MetaMsgService } from '../services/metaMsg';
|
|
11
|
+
import { metaNormalizer } from '../common/metaNormalizer';
|
|
12
|
+
import { templateBuilder } from '../common/utils/templateBuilder';
|
|
13
|
+
import { metaDark, metaLight } from '../common/utils/colorThemes';
|
|
14
|
+
export class MetaResource {
|
|
15
|
+
constructor(componentFactoryResolver, ref, el, metaResourceService, metaContext, metaMsgService) {
|
|
16
|
+
this.componentFactoryResolver = componentFactoryResolver;
|
|
17
|
+
this.ref = ref;
|
|
18
|
+
this.el = el;
|
|
19
|
+
this.metaResourceService = metaResourceService;
|
|
20
|
+
this.metaContext = metaContext;
|
|
21
|
+
this.metaMsgService = metaMsgService;
|
|
22
|
+
this.done = new EventEmitter();
|
|
23
|
+
this.edit = true;
|
|
24
|
+
this.contactsSuggestionsDone = false;
|
|
25
|
+
this.onMenuClickout = () => {
|
|
26
|
+
delete this.resourceMenuVisible;
|
|
27
|
+
document.removeEventListener('click', this.onMenuClickout);
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
ngOnInit() {
|
|
31
|
+
this.integrationCode = (this.resource.integrationCode || '').toUpperCase();
|
|
32
|
+
this.resourceType = this.resource.resourceType;
|
|
33
|
+
this.service = (this.metaResourceServiceDelegated || this.metaResourceService).new(this.resource);
|
|
34
|
+
if (!this.model) {
|
|
35
|
+
this.model = {};
|
|
36
|
+
}
|
|
37
|
+
if (this.resource.ref && this.resource.ref.activity) { // reuse failed autoactivities data
|
|
38
|
+
this.model = this.resource.ref.activity;
|
|
39
|
+
}
|
|
40
|
+
if (this.resource.activity && this.resource.ref.editable === false && !this.resource.externalId) {
|
|
41
|
+
this.resource.externalId = 'MISSING_EXTERNAL_ID';
|
|
42
|
+
}
|
|
43
|
+
this.isPersistent = this.resource && this.resource.externalId;
|
|
44
|
+
if (!this.resource.meta) {
|
|
45
|
+
this.loadMetadata(this.resource.layoutId);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
// if (this.isPersistent && (!this.isEditable || this.resources[ref.name].meta.layout.children)) {
|
|
49
|
+
// this.edit = false;
|
|
50
|
+
// }
|
|
51
|
+
this.meta = this.resource.meta;
|
|
52
|
+
this.currentLayoutId = this.meta.layout.id;
|
|
53
|
+
this.getDetails();
|
|
54
|
+
this.getFieldsMap();
|
|
55
|
+
}
|
|
56
|
+
if (this.theme !== 'inherit') {
|
|
57
|
+
this.applyTheme();
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
ngOnChanges(changes) {
|
|
61
|
+
if (changes.theme) {
|
|
62
|
+
this.theme = changes.theme.currentValue;
|
|
63
|
+
if (this.theme !== 'inherit') {
|
|
64
|
+
this.applyTheme();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
editMode() {
|
|
69
|
+
this.edit = true;
|
|
70
|
+
}
|
|
71
|
+
loadMetadata(layoutId, refresh = false) {
|
|
72
|
+
const layoutStoreKey = `vgis.layout_${this.metaContext.vgipUserId}_${this.integrationCode}_${this.resource.resourceType}`;
|
|
73
|
+
if (!layoutId) {
|
|
74
|
+
layoutId = localStorage.getItem(layoutStoreKey);
|
|
75
|
+
}
|
|
76
|
+
this.busy = true;
|
|
77
|
+
delete this.resource.niceFields;
|
|
78
|
+
this.service.getMetadata(layoutId, refresh).subscribe({
|
|
79
|
+
next: (meta) => {
|
|
80
|
+
this.currentLayoutId = meta.layout.id;
|
|
81
|
+
if (layoutId !== meta.layout.id && !this.isPersistent) {
|
|
82
|
+
localStorage.removeItem(layoutStoreKey);
|
|
83
|
+
}
|
|
84
|
+
this.meta = metaNormalizer(meta, this.integrationCode, this.resource.resourceType);
|
|
85
|
+
this.isEditable = this.meta.layout && this.meta.layout.editable !== false;
|
|
86
|
+
this.resource.meta = this.meta;
|
|
87
|
+
if (this.isPersistent && (!this.isEditable || this.meta.layout.children)) {
|
|
88
|
+
this.edit = false;
|
|
89
|
+
}
|
|
90
|
+
delete this.busy;
|
|
91
|
+
this.getDetails();
|
|
92
|
+
this.getFieldsMap();
|
|
93
|
+
},
|
|
94
|
+
error: (metaError) => {
|
|
95
|
+
delete this.busy;
|
|
96
|
+
this.generalError = `Error loading resource metadata (${metaError.statusText})`;
|
|
97
|
+
},
|
|
98
|
+
complete: () => {
|
|
99
|
+
this.forceUiUpdate();
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
changeLayout() {
|
|
104
|
+
localStorage.setItem(`vgis.layout_${this.metaContext.vgipUserId}_${this.integrationCode}_${this.resource.resourceType}`, this.currentLayoutId);
|
|
105
|
+
this.loadMetadata(this.currentLayoutId);
|
|
106
|
+
}
|
|
107
|
+
getDetails() {
|
|
108
|
+
if (this.resource && (this.resource.externalId || this.resource.id)) {
|
|
109
|
+
if (this.resource.parent && this.resource.activity // skip fetch
|
|
110
|
+
&& this.meta.layout.editable === false && !this.meta.layout.children) {
|
|
111
|
+
for (const p in this.resource.activity) {
|
|
112
|
+
if (this.resource.activity[p] && this.fieldNames.indexOf(p) !== -1) {
|
|
113
|
+
this.model[p] = this.resource.activity[p];
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
this.busy = true;
|
|
119
|
+
this.service.getDetails((this.resource.externalId || this.resource.id), {
|
|
120
|
+
eventId: this.resource.eventId !== 'NO_EVENT' ? this.resource.eventId : null, layoutId: this.resource.layoutId
|
|
121
|
+
}).subscribe({
|
|
122
|
+
next: (resource) => {
|
|
123
|
+
/* eslint-disable no-underscore-dangle */
|
|
124
|
+
if (resource._vgis) {
|
|
125
|
+
if (resource._vgis.eventId) {
|
|
126
|
+
this.metaContext.vgipEventId = resource._vgis.eventId;
|
|
127
|
+
}
|
|
128
|
+
if (resource.layoutId && resource._vgis.layoutId !== this.currentLayoutId) {
|
|
129
|
+
this.loadMetadata(resource._vgis.layoutId);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/* eslint-enable no-underscore-dangle */
|
|
133
|
+
for (const p in resource) {
|
|
134
|
+
if (typeof (resource[p] !== 'undefined') && (this.fieldNames.indexOf(p) !== -1 || p === '_vgis')) {
|
|
135
|
+
this.model[p] = resource[p];
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
delete this.busy;
|
|
139
|
+
},
|
|
140
|
+
error: (resourceError) => {
|
|
141
|
+
this.generalError = resourceError.error ? resourceError.error.message || resourceError.message : resourceError.message;
|
|
142
|
+
delete this.busy;
|
|
143
|
+
},
|
|
144
|
+
complete: () => {
|
|
145
|
+
this.forceUiUpdate();
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
this.performAutoFill();
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
performAutoFill() {
|
|
155
|
+
this.metaMsgService.sendMessage(this.integrationCode, {
|
|
156
|
+
action: 'autoFill',
|
|
157
|
+
integration: this.integrationCode,
|
|
158
|
+
resourceType: this.resourceType,
|
|
159
|
+
resource: JSON.parse(JSON.stringify(this.model)),
|
|
160
|
+
fields: this.niceFields,
|
|
161
|
+
event: this.metaContext.context,
|
|
162
|
+
profile: this.metaContext.profiles[this.integrationCode]
|
|
163
|
+
}, (response) => {
|
|
164
|
+
if (!response.error) {
|
|
165
|
+
for (const afp in response.autoFill) {
|
|
166
|
+
if (!this.model[afp]) {
|
|
167
|
+
this.model[afp] = response.autoFill[afp];
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
getFieldsMap() {
|
|
174
|
+
if (this.meta.fieldsMap) {
|
|
175
|
+
this.fieldsMap = this.meta.fieldsMap;
|
|
176
|
+
this.markContactables();
|
|
177
|
+
this.buildContactsSuggestions();
|
|
178
|
+
if (!this.resource.externalId) {
|
|
179
|
+
this.buildSubjectTemplate();
|
|
180
|
+
this.execTransformer();
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
this.metaMsgService.sendMessage(this.integrationCode, { action: 'fieldsMap', integration: this.integrationCode, resourceType: this.resourceType }, (response) => {
|
|
185
|
+
if (!response.error) {
|
|
186
|
+
this.fieldsMap = response.fieldsMap;
|
|
187
|
+
this.markContactables();
|
|
188
|
+
this.buildContactsSuggestions();
|
|
189
|
+
if (!this.resource.externalId) {
|
|
190
|
+
this.buildSubjectTemplate();
|
|
191
|
+
this.execTransformer();
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
console.log('No fields map', this.integrationCode, this.resourceType, response.error);
|
|
196
|
+
}
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
openResourceMenu() {
|
|
201
|
+
this.resourceMenuVisible = true;
|
|
202
|
+
setTimeout(() => {
|
|
203
|
+
document.addEventListener('click', this.onMenuClickout);
|
|
204
|
+
}, 10);
|
|
205
|
+
}
|
|
206
|
+
close(result) {
|
|
207
|
+
this.done.emit(result);
|
|
208
|
+
}
|
|
209
|
+
submit(resourceForm) {
|
|
210
|
+
delete this.formErrors;
|
|
211
|
+
resourceForm.form.submitted = true;
|
|
212
|
+
if (resourceForm.valid) {
|
|
213
|
+
this.busy = true;
|
|
214
|
+
if (this.metaContext.vgipEventId) {
|
|
215
|
+
/* eslint-disable no-underscore-dangle */
|
|
216
|
+
if (!this.model._vgis) {
|
|
217
|
+
this.model._vgis = {
|
|
218
|
+
connector: this.integrationCode,
|
|
219
|
+
resourceType: this.resourceType
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
this.model._vgis.layoutId = this.currentLayoutId;
|
|
223
|
+
this.model._vgis.timeZoneOffsetInMinutes = new Date().getTimezoneOffset();
|
|
224
|
+
this.model._vgis.eventId = this.metaContext.vgipEventId;
|
|
225
|
+
/* eslint-enable no-underscore-dangle */
|
|
226
|
+
}
|
|
227
|
+
this.service.save(this.model).subscribe((result) => {
|
|
228
|
+
this.close(result);
|
|
229
|
+
delete this.busy;
|
|
230
|
+
}, (errorResult) => {
|
|
231
|
+
this.formErrors = errorResult.error;
|
|
232
|
+
delete this.busy;
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
else {
|
|
236
|
+
this.formErrors = Object.keys(resourceForm.controls)
|
|
237
|
+
.filter((c) => resourceForm.controls[c].invalid).join(', ');
|
|
238
|
+
// .map((f) => this.niceFields(this.currentResource).label).join(', ');
|
|
239
|
+
setTimeout(() => {
|
|
240
|
+
const selector = `form[name="${this.resourceType}"] .Vlt-form__element--error .main:not(.standalone)`;
|
|
241
|
+
const firstInvalid = this.el.nativeElement.querySelector(selector);
|
|
242
|
+
if (firstInvalid) {
|
|
243
|
+
firstInvalid.focus();
|
|
244
|
+
}
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
clearFormErrors() {
|
|
249
|
+
delete this.formErrors;
|
|
250
|
+
}
|
|
251
|
+
get niceFields() {
|
|
252
|
+
if (!this.resource.niceFields
|
|
253
|
+
&& this.resource.meta
|
|
254
|
+
&& this.resource.meta.layout
|
|
255
|
+
&& this.resource.meta.layout.sections) {
|
|
256
|
+
const extractSectionFields = (s) => {
|
|
257
|
+
for (const f of s.fields) {
|
|
258
|
+
if (f.fields && f.fields.length) {
|
|
259
|
+
extractSectionFields(f);
|
|
260
|
+
}
|
|
261
|
+
else {
|
|
262
|
+
this.resource.niceFields[f.name] = f;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
};
|
|
266
|
+
this.resource.niceFields = {};
|
|
267
|
+
for (const s of this.resource.meta.layout.sections) {
|
|
268
|
+
extractSectionFields(s);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
return this.resource.niceFields;
|
|
272
|
+
}
|
|
273
|
+
get fieldNames() {
|
|
274
|
+
const names = Object.keys(this.niceFields);
|
|
275
|
+
if (this.resource.meta.layout.children) {
|
|
276
|
+
for (const child of this.resource.meta.layout.children) {
|
|
277
|
+
names.push(child.name);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
return names;
|
|
281
|
+
}
|
|
282
|
+
suggestFieldProperty(key, value) {
|
|
283
|
+
if (key && value) {
|
|
284
|
+
const fieldNames = this.fieldNames;
|
|
285
|
+
if (this.model) {
|
|
286
|
+
const nestMatch = key.match(/(\S+)\[\d\]\.(\S+)/);
|
|
287
|
+
if (nestMatch && fieldNames.indexOf(nestMatch[1]) !== -1) {
|
|
288
|
+
this.model[nestMatch[1]] = [];
|
|
289
|
+
const nestKeys = {};
|
|
290
|
+
nestKeys[nestMatch[2]] = value;
|
|
291
|
+
this.model[nestMatch[1]].push(nestKeys);
|
|
292
|
+
}
|
|
293
|
+
else if (fieldNames.indexOf(key) !== -1) {
|
|
294
|
+
this.model[key] = value;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
execTransformer() {
|
|
300
|
+
if (this.metaContext && this.fieldsMap) {
|
|
301
|
+
setTimeout(() => {
|
|
302
|
+
this.suggestFieldProperty(this.fieldsMap.phoneNumber, this.metaContext.phoneNumber);
|
|
303
|
+
if (this.fieldsMap.firstName || this.fieldsMap.lastName) {
|
|
304
|
+
const names = (this.metaContext.displayName || '').split(' ');
|
|
305
|
+
this.suggestFieldProperty(this.fieldsMap.firstName, names[0]);
|
|
306
|
+
this.suggestFieldProperty(this.fieldsMap.lastName, names[1]);
|
|
307
|
+
}
|
|
308
|
+
else if (this.fieldsMap.displayName) {
|
|
309
|
+
this.suggestFieldProperty(this.fieldsMap.displayName, this.metaContext.displayName);
|
|
310
|
+
}
|
|
311
|
+
}, 100);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
markContactables() {
|
|
315
|
+
if (this.fieldsMap.contactables && this.fieldsMap.contactables.length) {
|
|
316
|
+
for (const c of this.fieldsMap.contactables) {
|
|
317
|
+
const field = this.niceFields[c];
|
|
318
|
+
if (field) {
|
|
319
|
+
Object.defineProperty(field, '$isContactable', {
|
|
320
|
+
value: true,
|
|
321
|
+
configurable: true,
|
|
322
|
+
enumerable: false
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
buildSubjectTemplate() {
|
|
329
|
+
if (!this.model[this.fieldsMap.subject] && this.fieldsMap.subject && this.niceFields[this.fieldsMap.subject]) {
|
|
330
|
+
let subjectTemplate;
|
|
331
|
+
if (this.niceFields[this.fieldsMap.subject].default) {
|
|
332
|
+
subjectTemplate = this.niceFields[this.fieldsMap.subject].default.id || this.niceFields[this.fieldsMap.subject].default;
|
|
333
|
+
}
|
|
334
|
+
else if (this.metaContext.profiles[this.integrationCode]) {
|
|
335
|
+
const profile = this.metaContext.profiles[this.integrationCode] || {};
|
|
336
|
+
subjectTemplate = profile.defaultSubject ?
|
|
337
|
+
profile.defaultSubject[((this.metaContext.context || 'CALL').type || '').toUpperCase()] : profile.activityDefaultSubjectTemplate;
|
|
338
|
+
}
|
|
339
|
+
if (subjectTemplate) {
|
|
340
|
+
this.model[this.fieldsMap.subject] = templateBuilder(this.metaContext, subjectTemplate);
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
buildContactsSuggestions() {
|
|
345
|
+
// let hasDefaultContact = false;
|
|
346
|
+
if (this.metaContext.contactables[this.integrationCode] && this.meta.layout && this.meta.layout.sections) {
|
|
347
|
+
for (const s of this.meta.layout.sections) {
|
|
348
|
+
for (const f of (s.fields || [])) {
|
|
349
|
+
if (f.type === 'reference') {
|
|
350
|
+
const refTypes = (f.reference.length ? f.reference : [f.reference]).map(r => r.name);
|
|
351
|
+
for (const c of this.metaContext.contactables[this.integrationCode]) {
|
|
352
|
+
if (refTypes.indexOf(c.resourceType || c.type) !== -1) {
|
|
353
|
+
if (!f.suggestions) {
|
|
354
|
+
f.suggestions = [];
|
|
355
|
+
}
|
|
356
|
+
let tLabel = c.displayName || c.name;
|
|
357
|
+
if (c.phoneNumbers) {
|
|
358
|
+
tLabel += (' ✆' + c.phoneNumbers.map(p => p.phoneNumber).join(','));
|
|
359
|
+
}
|
|
360
|
+
f.suggestions.push({
|
|
361
|
+
id: c.externalId || c.identifier || c.id,
|
|
362
|
+
label: tLabel,
|
|
363
|
+
type: c.resourceType || c.type
|
|
364
|
+
});
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
if ((this.fieldsMap.contactables || []).indexOf(f.name) !== -1) { // evaluate usability?
|
|
368
|
+
f.alwaysVisible = true;
|
|
369
|
+
}
|
|
370
|
+
// if (
|
|
371
|
+
// !hasDefaultContact && this.metaContext.defaultContactables[this.integrationCode]
|
|
372
|
+
// && refTypes.indexOf(this.metaContext.defaultContactables[this.integrationCode].type) !== -1
|
|
373
|
+
// ) {
|
|
374
|
+
// this.resource[f.name] = this.metaContext.defaultContactables[this.integrationCode];
|
|
375
|
+
// hasDefaultContact = true;
|
|
376
|
+
// } else if (!hasDefaultContact && this.fieldsMap.contactables && f.suggestions && f.suggestions.length === 1) {
|
|
377
|
+
// if (this.fieldsMap.contactables.indexOf(f.name) !== -1 && !f.default) {
|
|
378
|
+
// f.default = f.suggestions[0];
|
|
379
|
+
// hasDefaultContact = true;
|
|
380
|
+
// }
|
|
381
|
+
// }
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
this.contactsSuggestionsDone = true;
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
applyTheme() {
|
|
389
|
+
const metaTheme = this.theme === 'dark' ? metaDark : metaLight;
|
|
390
|
+
console.log('resource apply theme', this.theme);
|
|
391
|
+
for (const key of Object.keys(metaTheme.properties)) {
|
|
392
|
+
this.el.nativeElement.style.setProperty(key, metaTheme.properties[key]);
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
forceUiUpdate() {
|
|
396
|
+
// this.ref.detectChanges();
|
|
397
|
+
const e = document.createEvent('Events');
|
|
398
|
+
e.initEvent('click', true, false);
|
|
399
|
+
this.el.nativeElement.dispatchEvent(e);
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
MetaResource.decorators = [
|
|
403
|
+
{ type: Component, args: [{
|
|
404
|
+
selector: 'vgip-meta-resource',
|
|
405
|
+
template: "<div *ngIf='generalError' class=\"Vlt-callout Vlt-callout--critical\" style='overflow: auto; margin: 20px;'>\n\t<i></i>\n\t<div class=\"Vlt-callout__content\">\n\t\t<p>{{generalError}}</p>\n\t</div>\n</div>\n<form [vgipMetaFormAutofocus]='!resource || !resource.externalId' *ngIf='meta && !generalError' #resourceForm=\"ngForm\" [name]='resource.resourceType' (ngSubmit)='submit(resourceForm)' novalidate>\n\t<div class='form-content'>\n\t\t<div [ngClass]=\"{ 'Vlt-callout--dismissed': !formErrors }\" class=\"Vlt-callout Vlt-callout--banner Vlt-callout--critical\">\n\t\t\t<i></i>\n\t\t\t<div class=\"Vlt-callout__content\" style=\"margin-top: auto;\">\n\t\t\t\t<p>There is a problem with one or more fields</p>\n\t\t\t\t<small style='font-weight: 600; font-size: 1.0em;' *ngIf='formErrors'>{{ formErrors.message || formErrors }}</small>\n\t\t\t</div>\n\t\t\t<button type='button' class=\"Vlt-callout__dismiss\" (click)='clearFormErrors()' aria-label=\"Dismiss\"></button>\n\t\t</div>\n\t\t<div class=\"Vlt-card__content\" style='min-height: 40px;'>\n\t\t\t<vgip-meta-layout *ngIf='edit' [meta]='meta.layout' [resource]='model' [preview]='false' [integration]='meta.integration' [type]='resource.resourceType' theme='inherit'></vgip-meta-layout>\n\t\t\t<vgip-meta-layout *ngIf='!edit' [meta]='meta.layout' [resource]='model' [preview]='true' [integration]='meta.integration' [type]='resource.resourceType' theme='inherit'></vgip-meta-layout>\n\t\t</div>\n\t</div>\n\t<div class=\"Vlt-card__footer\">\n\t\t<button class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--app Vlt-btn--outline\" type='button' aria-label='Cancel' (click)='close()'>\n\t\t\t{{ edit ? 'Cancel' : 'Close' }}\n\t\t</button>\n\t\t<button *ngIf='edit' class=\"Vlt-btn Vlt-btn--app\" [ngClass]=\"{ 'Vlt-btn--primary': isPersistent, 'Vlt-btn--secondary': !isPersistent }\" type='submit'>\n\t\t\t{{ (resource && resource.externalId) ? 'Update' : 'Create' }}\n\t\t</button>\n\t\t<button (click)='editMode()' *ngIf='!edit && isEditable' [disabled]='!isEditable' class=\"Vlt-btn Vlt-btn--app Vlt-btn--primary\" type='button' aria-label='Edit'>\n\t\t\tEdit\n\t\t</button>\n\t\t<div style='margin-right: 8px; flex: 1;'>\n\t\t\t<div *ngIf='meta.availableLayouts && meta.availableLayouts.length' class=\"Vlt-form__element Vlt-form__element--big\" style='padding: 0; margin: -8px -18px -8px 0;'>\n\t\t\t\t<div class=\"Vlt-select\">\n\t\t\t\t\t<label style='all: inherit;'>\n\t\t\t\t\t\t<select style='border: 0; margin-top: 3px; background: transparent;' (change)='changeLayout()' [(ngModel)]='currentLayoutId' [ngModelOptions]='{ standalone: true }' [disabled]='isPersistent'>\n\t\t\t\t\t\t\t<option selected disabled>Select layout</option>\n\t\t\t\t\t\t\t<option *ngFor='let layout of meta.availableLayouts' [ngValue]='layout.id'>{{layout.name}}</option>\n\t\t\t\t\t\t</select>\n\t\t\t\t\t\t<label>Layout</label>\n\t\t\t\t\t</label>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"Vlt-dropdown resource-menu\" [ngClass]=\"{ 'Vlt-dropdown--expanded': resourceMenuVisible }\" style='margin-left: 2px;'>\n\t\t\t<div class=\"Vlt-dropdown__panel\" style='bottom: 40px; right: -4px; top: initial;'>\n\t\t\t\t<div class=\"Vlt-dropdown__panel__content\">\n\t\t\t\t\t<a class=\"Vlt-dropdown__link\" (click)='loadMetadata(currentLayoutId, true)'>\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<svg class='Vlt-icon Vlt-icon--smaller'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-refresh\"/></svg> Refresh metadata\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</a>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"Vlt-dropdown__trigger\">\n\t\t\t\t<button type='button' (click)='openResourceMenu()' class=\"Vlt-btn Vlt-btn--link\" aria-label='Resource menu'>\n\t\t\t\t\t<svg class='Vlt-icon Vlt-icon--small' style='margin: 0;'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-more-v-negative\"/></svg>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</form>\n<div class='busy-mask' [ngClass]=\"{ active: busy }\">\n\t<div style='height: 100%; display: flex; flex-direction: column; align-items: center; justify-content: center;'>\n\t\t<div class=\"Vlt-spinner\"></div>\n\t</div>\n</div>",
|
|
406
|
+
styles: [":host{flex:1;display:flex;flex-direction:column;min-height:0;color:var(--vgip-meta-resource-color)}.Vlt-callout--banner{justify-content:normal;text-align:left;text-align:initial;overflow-y:auto}.Vlt-callout--banner.Vlt-callout--dismissed{padding:0}.Vlt-callout--banner:not(.Vlt-callout--dismissed){min-height:78px}.Vlt-spinner:after,.Vlt-spinner:before{border:6px solid transparent;border-top-color:#616266}.Vlt-card__content{padding:8px 8px 8px 16px;display:flex;flex-direction:column;min-height:0;flex:1;overflow-y:scroll;overflow-x:hidden;background-color:var(--vgip-meta-resource-bg-color)}@media (hover:none){.Vlt-card__content{padding-right:16px}}.Vlt-card__content::-webkit-scrollbar{width:8px}.Vlt-card__content::-webkit-scrollbar-thumb{background-color:var(--vgip-meta-scrollbar-color);border:2px solid transparent;border-radius:6px;background-clip:content-box}.Vlt-card__footer{background:var(--vgip-meta-resource-bar-color);border-top:1px solid var(--vgip-meta-separator-color);display:flex;flex-direction:row;margin:16px -24px -24px;padding:8px 8px 8px 16px;box-shadow:0 0 4px rgba(0,0,0,.25);z-index:1}.Vlt-card__footer .Vlt-select select{color:var(--vgip-meta-input-color)}.Vlt-card__footer .Vlt-select select:disabled{background:transparent none repeat 0 0/auto auto padding-box border-box scroll;background:initial;cursor:not-allowed}.Vlt-card__footer .Vlt-select:after{background-image:var(--vgip-meta-dropdown-icon)}.Vlt-card__footer .resource-menu .Vlt-icon:not(:hover){fill:var(--vgip-meta-input-label-color)}.Vlt-card__footer button.Vlt-btn--secondary{border:none;box-shadow:inset 0 0 0 1px var(--vgip-meta-button-border-color)}.Vlt-card__footer button.Vlt-btn--secondary:not([type=submit]){color:var(--vgip-meta-input-color)}.Vlt-card__footer button.Vlt-btn--secondary:hover{box-shadow:inset 0 0 0 1px var(--vgip-meta-input-accent-color)}.Vlt-card__footer button.Vlt-btn--secondary:hover[type=submit]{background-color:var(--vgip-meta-submit-hover-bg-color)}form{border-radius:6px;padding:24px;display:flex;flex-direction:column;min-height:0;flex:1}form .form-content{margin:-24px -24px -16px;padding-bottom:0;flex:1;display:flex;flex-direction:column}.busy-mask{position:absolute;top:0;right:0;bottom:0;left:0;background:rgba(0,0,0,.32);opacity:1;z-index:898;display:none;border-bottom-left-radius:6px;border-bottom-right-radius:6px;margin:1px;cursor:progress}.busy-mask.active{display:block}"]
|
|
407
|
+
},] }
|
|
408
|
+
];
|
|
409
|
+
MetaResource.ctorParameters = () => [
|
|
410
|
+
{ type: ComponentFactoryResolver },
|
|
411
|
+
{ type: ChangeDetectorRef },
|
|
412
|
+
{ type: ElementRef },
|
|
413
|
+
{ type: MetaResourceService },
|
|
414
|
+
{ type: MetaContextService },
|
|
415
|
+
{ type: MetaMsgService }
|
|
416
|
+
];
|
|
417
|
+
MetaResource.propDecorators = {
|
|
418
|
+
resource: [{ type: Input }],
|
|
419
|
+
model: [{ type: Input }],
|
|
420
|
+
metaResourceServiceDelegated: [{ type: Input }],
|
|
421
|
+
theme: [{ type: Input }],
|
|
422
|
+
done: [{ type: Output }]
|
|
423
|
+
};
|
|
424
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXRhLXVpL3NyYy9saWIvcmVzb3VyY2UvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBVSxNQUFNLEVBQUUsWUFBWSxFQUN4RSxVQUFVLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFOUQsT0FBTyxFQUFFLG1CQUFtQixFQUF1QixNQUFNLDBCQUEwQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVyRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFPbEUsTUFBTSxPQUFPLFlBQVk7SUFzQnZCLFlBQ1Usd0JBQWtELEVBQ2xELEdBQXNCLEVBQ3RCLEVBQWMsRUFDZCxtQkFBd0MsRUFDeEMsV0FBK0IsRUFDL0IsY0FBOEI7UUFMOUIsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUNsRCxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQ2Qsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QyxnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUFDL0IsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBdkJ2QixTQUFJLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQVMzQyxTQUFJLEdBQUcsSUFBSSxDQUFDO1FBSVosNEJBQXVCLEdBQUcsS0FBSyxDQUFDO1FBa1N4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QixLQUFLO29CQUNMLEtBQUs7MkNBQ0wsS0FBSztvQkFDTCxLQUFLO21CQUNMLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQEF1dGhvcjogQWxleGFuZGVyLlZhbmdlbG92QHZvbmFnZS5jb21cbiAqIEBEYXRlOiAyMDE5LTA5LTE5IDE3OjM1OjI4XG4gKiBATGFzdCBNb2RpZmllZCBieTogQWxleGFuZGVyLlZhbmdlbG92QHZvbmFnZS5jb21cbiAqIEBMYXN0IE1vZGlmaWVkIHRpbWU6IDIwMjAtMDktMDMgMTM6MjI6MTRcbiAqL1xuXG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBDaGFuZ2VEZXRlY3RvclJlZiwgT25Jbml0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25DaGFuZ2VzLFxuICBFbGVtZW50UmVmLCBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgTWV0YVJlc291cmNlU2VydmljZSwgSU1ldGFSZXNvdXJjZUNvbmZpZyB9IGZyb20gJy4uL3NlcnZpY2VzL21ldGFSZXNvdXJjZSc7XG5pbXBvcnQgeyBNZXRhQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9tZXRhQ29udGV4dCc7XG5pbXBvcnQgeyBNZXRhTXNnU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL21ldGFNc2cnO1xuXG5pbXBvcnQgeyBtZXRhTm9ybWFsaXplciB9IGZyb20gJy4uL2NvbW1vbi9tZXRhTm9ybWFsaXplcic7XG5pbXBvcnQgeyB0ZW1wbGF0ZUJ1aWxkZXIgfSBmcm9tICcuLi9jb21tb24vdXRpbHMvdGVtcGxhdGVCdWlsZGVyJztcbmltcG9ydCB7IG1ldGFEYXJrLCBtZXRhTGlnaHQgfSBmcm9tICcuLi9jb21tb24vdXRpbHMvY29sb3JUaGVtZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2Z2lwLW1ldGEtcmVzb3VyY2UnLFxuICB0ZW1wbGF0ZVVybDogJy4vdmlldy5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc3R5bGUuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIE1ldGFSZXNvdXJjZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgcmVzb3VyY2U6IGFueTtcbiAgQElucHV0KCkgbW9kZWw6IGFueTtcbiAgQElucHV0KCkgbWV0YVJlc291cmNlU2VydmljZURlbGVnYXRlZDogTWV0YVJlc291cmNlU2VydmljZTsgLy8gY2FyeSBpdCBmcm9tIHRoZSBwYXJlbnQgdG8ga2VlcCB0aGUgaW50ZXJjZXB0b3JzXG4gIEBJbnB1dCgpIHRoZW1lOiBzdHJpbmc7XG4gIEBPdXRwdXQoKSBwdWJsaWMgZG9uZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBpbnRlZ3JhdGlvbkNvZGU6IHN0cmluZztcbiAgcmVzb3VyY2VUeXBlOiBzdHJpbmc7XG4gIG1ldGE6IGFueTtcbiAgc2VydmljZTogTWV0YVJlc291cmNlU2VydmljZTtcbiAgY3VycmVudExheW91dElkOiBhbnk7XG4gIGZvcm1FcnJvcnM6IGFueTtcbiAgZmllbGRzTWFwOiBhbnk7XG4gIGVkaXQgPSB0cnVlO1xuICBidXN5OiBib29sZWFuO1xuICBnZW5lcmFsRXJyb3I6IHN0cmluZztcbiAgcmVzb3VyY2VNZW51VmlzaWJsZTogYm9vbGVhbjtcbiAgY29udGFjdHNTdWdnZXN0aW9uc0RvbmUgPSBmYWxzZTtcbiAgaXNFZGl0YWJsZTogYm9vbGVhbjtcbiAgaXNQZXJzaXN0ZW50OiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgcHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBtZXRhUmVzb3VyY2VTZXJ2aWNlOiBNZXRhUmVzb3VyY2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgbWV0YUNvbnRleHQ6IE1ldGFDb250ZXh0U2VydmljZSxcbiAgICBwcml2YXRlIG1ldGFNc2dTZXJ2aWNlOiBNZXRhTXNnU2VydmljZVxuICApIHtcblxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5pbnRlZ3JhdGlvbkNvZGUgPSAodGhpcy5yZXNvdXJjZS5pbnRlZ3JhdGlvbkNvZGUgfHwgJycpLnRvVXBwZXJDYXNlKCk7XG4gICAgdGhpcy5yZXNvdXJjZVR5cGUgPSB0aGlzLnJlc291cmNlLnJlc291cmNlVHlwZTtcbiAgICB0aGlzLnNlcnZpY2UgPSAodGhpcy5tZXRhUmVzb3VyY2VTZXJ2aWNlRGVsZWdhdGVkIHx8IHRoaXMubWV0YVJlc291cmNlU2VydmljZSkubmV3KHRoaXMucmVzb3VyY2UpO1xuICAgIGlmICghdGhpcy5tb2RlbCkge1xuICAgICAgdGhpcy5tb2RlbCA9IHt9O1xuICAgIH1cbiAgICBpZiAodGhpcy5yZXNvdXJjZS5yZWYgJiYgdGhpcy5yZXNvdXJjZS5yZWYuYWN0aXZpdHkpIHsgLy8gcmV1c2UgZmFpbGVkIGF1dG9hY3Rpdml0aWVzIGRhdGEgXG4gICAgICB0aGlzLm1vZGVsID0gdGhpcy5yZXNvdXJjZS5yZWYuYWN0aXZpdHk7XG4gICAgfVxuICAgIGlmICh0aGlzLnJlc291cmNlLmFjdGl2aXR5ICYmIHRoaXMucmVzb3VyY2UucmVmLmVkaXRhYmxlID09PSBmYWxzZSAmJiAhdGhpcy5yZXNvdXJjZS5leHRlcm5hbElkKSB7XG4gICAgICB0aGlzLnJlc291cmNlLmV4dGVybmFsSWQgPSAnTUlTU0lOR19FWFRFUk5BTF9JRCc7XG4gICAgfVxuICAgIHRoaXMuaXNQZXJzaXN0ZW50ID0gdGhpcy5yZXNvdXJjZSAmJiB0aGlzLnJlc291cmNlLmV4dGVybmFsSWQ7XG4gICAgaWYgKCF0aGlzLnJlc291cmNlLm1ldGEpIHtcbiAgICAgIHRoaXMubG9hZE1ldGFkYXRhKHRoaXMucmVzb3VyY2UubGF5b3V0SWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyAgIGlmICh0aGlzLmlzUGVyc2lzdGVudCAmJiAoIXRoaXMuaXNFZGl0YWJsZSB8fCB0aGlzLnJlc291cmNlc1tyZWYubmFtZV0ubWV0YS5sYXlvdXQuY2hpbGRyZW4pKSB7XG4gICAgICAvLyAgICAgdGhpcy5lZGl0ID0gZmFsc2U7XG4gICAgICAvLyAgIH1cbiAgICAgIHRoaXMubWV0YSA9IHRoaXMucmVzb3VyY2UubWV0YTtcbiAgICAgIHRoaXMuY3VycmVudExheW91dElkID0gdGhpcy5tZXRhLmxheW91dC5pZDtcbiAgICAgIHRoaXMuZ2V0RGV0YWlscygpO1xuICAgICAgdGhpcy5nZXRGaWVsZHNNYXAoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGhlbWUgIT09ICdpbmhlcml0Jykge1xuICAgICAgdGhpcy5hcHBseVRoZW1lKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogYW55KSB7XG4gICAgaWYgKGNoYW5nZXMudGhlbWUpIHtcbiAgICAgIHRoaXMudGhlbWUgPSBjaGFuZ2VzLnRoZW1lLmN1cnJlbnRWYWx1ZTtcbiAgICAgIGlmICh0aGlzLnRoZW1lICE9PSAnaW5oZXJpdCcpIHtcbiAgICAgICAgdGhpcy5hcHBseVRoZW1lKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZWRpdE1vZGUoKSB7XG4gICAgdGhpcy5lZGl0ID0gdHJ1ZTtcbiAgfVxuXG4gIGxvYWRNZXRhZGF0YShsYXlvdXRJZD8sIHJlZnJlc2ggPSBmYWxzZSkge1xuICAgIGNvbnN0IGxheW91dFN0b3JlS2V5ID0gYHZnaXMubGF5b3V0XyR7dGhpcy5tZXRhQ29udGV4dC52Z2lwVXNlcklkfV8ke3RoaXMuaW50ZWdyYXRpb25Db2RlfV8ke3RoaXMucmVzb3VyY2UucmVzb3VyY2VUeXBlfWA7XG4gICAgaWYgKCFsYXlvdXRJZCkge1xuICAgICAgbGF5b3V0SWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShsYXlvdXRTdG9yZUtleSk7XG4gICAgfVxuICAgIHRoaXMuYnVzeSA9IHRydWU7XG4gICAgZGVsZXRlIHRoaXMucmVzb3VyY2UubmljZUZpZWxkcztcbiAgICB0aGlzLnNlcnZpY2UuZ2V0TWV0YWRhdGEobGF5b3V0SWQsIHJlZnJlc2gpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAobWV0YTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuY3VycmVudExheW91dElkID0gbWV0YS5sYXlvdXQuaWQ7XG4gICAgICAgIGlmIChsYXlvdXRJZCAhPT0gbWV0YS5sYXlvdXQuaWQgJiYgIXRoaXMuaXNQZXJzaXN0ZW50KSB7XG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0obGF5b3V0U3RvcmVLZXkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWV0YSA9IG1ldGFOb3JtYWxpemVyKG1ldGEsIHRoaXMuaW50ZWdyYXRpb25Db2RlLCB0aGlzLnJlc291cmNlLnJlc291cmNlVHlwZSk7XG4gICAgICAgIHRoaXMuaXNFZGl0YWJsZSA9IHRoaXMubWV0YS5sYXlvdXQgJiYgdGhpcy5tZXRhLmxheW91dC5lZGl0YWJsZSAhPT0gZmFsc2U7XG4gICAgICAgIHRoaXMucmVzb3VyY2UubWV0YSA9IHRoaXMubWV0YTtcbiAgICAgICAgaWYgKHRoaXMuaXNQZXJzaXN0ZW50ICYmICghdGhpcy5pc0VkaXRhYmxlIHx8IHRoaXMubWV0YS5sYXlvdXQuY2hpbGRyZW4pKSB7XG4gICAgICAgICAgdGhpcy5lZGl0ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlIHRoaXMuYnVzeTtcbiAgICAgICAgdGhpcy5nZXREZXRhaWxzKCk7XG4gICAgICAgIHRoaXMuZ2V0RmllbGRzTWFwKCk7XG4gICAgICB9LCBcbiAgICAgIGVycm9yOiAobWV0YUVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgZGVsZXRlIHRoaXMuYnVzeTtcbiAgICAgICAgdGhpcy5nZW5lcmFsRXJyb3IgPSBgRXJyb3IgbG9hZGluZyByZXNvdXJjZSBtZXRhZGF0YSAoJHttZXRhRXJyb3Iuc3RhdHVzVGV4dH0pYDtcbiAgICAgIH0sIFxuICAgICAgY29tcGxldGU6ICgpID0+IHtcbiAgICAgICAgdGhpcy5mb3JjZVVpVXBkYXRlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjaGFuZ2VMYXlvdXQoKSB7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXG4gICAgICBgdmdpcy5sYXlvdXRfJHt0aGlzLm1ldGFDb250ZXh0LnZnaXBVc2VySWR9XyR7dGhpcy5pbnRlZ3JhdGlvbkNvZGV9XyR7dGhpcy5yZXNvdXJjZS5yZXNvdXJjZVR5cGV9YCwgXG4gICAgICB0aGlzLmN1cnJlbnRMYXlvdXRJZFxuICAgICk7XG4gICAgdGhpcy5sb2FkTWV0YWRhdGEodGhpcy5jdXJyZW50TGF5b3V0SWQpO1xuICB9XG5cbiAgZ2V0RGV0YWlscygpIHtcbiAgICBpZiAodGhpcy5yZXNvdXJjZSAmJiAodGhpcy5yZXNvdXJjZS5leHRlcm5hbElkIHx8IHRoaXMucmVzb3VyY2UuaWQpKSB7XG4gICAgICBpZiAodGhpcy5yZXNvdXJjZS5wYXJlbnQgJiYgdGhpcy5yZXNvdXJjZS5hY3Rpdml0eSAvLyBza2lwIGZldGNoXG4gICAgICAgICYmIHRoaXMubWV0YS5sYXlvdXQuZWRpdGFibGUgPT09IGZhbHNlICYmICF0aGlzLm1ldGEubGF5b3V0LmNoaWxkcmVuXG4gICAgICApIHtcbiAgICAgICAgZm9yIChjb25zdCBwIGluIHRoaXMucmVzb3VyY2UuYWN0aXZpdHkpIHtcbiAgICAgICAgICBpZiAodGhpcy5yZXNvdXJjZS5hY3Rpdml0eVtwXSAmJiB0aGlzLmZpZWxkTmFtZXMuaW5kZXhPZihwKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMubW9kZWxbcF0gPSB0aGlzLnJlc291cmNlLmFjdGl2aXR5W3BdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5idXN5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZXJ2aWNlLmdldERldGFpbHMoXG4gICAgICAgICAgKHRoaXMucmVzb3VyY2UuZXh0ZXJuYWxJZCB8fCB0aGlzLnJlc291cmNlLmlkKSwgeyBcbiAgICAgICAgICAgIGV2ZW50SWQ6IHRoaXMucmVzb3VyY2UuZXZlbnRJZCAhPT0gJ05PX0VWRU5UJyA/IHRoaXMucmVzb3VyY2UuZXZlbnRJZCA6IG51bGwsIGxheW91dElkOiB0aGlzLnJlc291cmNlLmxheW91dElkIFxuICAgICAgICAgIH1cbiAgICAgICAgKS5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IChyZXNvdXJjZTogYW55KSA9PiB7XG4gICAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlcnNjb3JlLWRhbmdsZSAqL1xuICAgICAgICAgICAgaWYgKHJlc291cmNlLl92Z2lzKSB7IFxuICAgICAgICAgICAgICBpZiAocmVzb3VyY2UuX3ZnaXMuZXZlbnRJZCkge1xuICAgICAgICAgICAgICAgIHRoaXMubWV0YUNvbnRleHQudmdpcEV2ZW50SWQgPSByZXNvdXJjZS5fdmdpcy5ldmVudElkO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChyZXNvdXJjZS5sYXlvdXRJZCAmJiByZXNvdXJjZS5fdmdpcy5sYXlvdXRJZCAhPT0gdGhpcy5jdXJyZW50TGF5b3V0SWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRNZXRhZGF0YShyZXNvdXJjZS5fdmdpcy5sYXlvdXRJZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qIGVzbGludC1lbmFibGUgbm8tdW5kZXJzY29yZS1kYW5nbGUgKi9cbiAgICAgICAgICAgIGZvciAoY29uc3QgcCBpbiByZXNvdXJjZSkge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mKHJlc291cmNlW3BdICE9PSAndW5kZWZpbmVkJykgJiYgKHRoaXMuZmllbGROYW1lcy5pbmRleE9mKHApICE9PSAtMSB8fCBwID09PSAnX3ZnaXMnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubW9kZWxbcF0gPSByZXNvdXJjZVtwXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuYnVzeTtcbiAgICAgICAgICB9LCBcbiAgICAgICAgICBlcnJvcjogKHJlc291cmNlRXJyb3IpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhbEVycm9yID0gcmVzb3VyY2VFcnJvci5lcnJvciA/IHJlc291cmNlRXJyb3IuZXJyb3IubWVzc2FnZSB8fCByZXNvdXJjZUVycm9yLm1lc3NhZ2UgOiByZXNvdXJjZUVycm9yLm1lc3NhZ2U7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5idXN5O1xuICAgICAgICAgIH0sXG4gICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZm9yY2VVaVVwZGF0ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGVyZm9ybUF1dG9GaWxsKCk7XG4gICAgfVxuICB9XG5cbiAgcGVyZm9ybUF1dG9GaWxsKCkge1xuICAgIHRoaXMubWV0YU1zZ1NlcnZpY2Uuc2VuZE1lc3NhZ2UoXG4gICAgICB0aGlzLmludGVncmF0aW9uQ29kZSwgXG4gICAgICB7IFxuICAgICAgICBhY3Rpb246ICdhdXRvRmlsbCcsXG4gICAgICAgIGludGVncmF0aW9uOiB0aGlzLmludGVncmF0aW9uQ29kZSxcbiAgICAgICAgcmVzb3VyY2VUeXBlOiB0aGlzLnJlc291cmNlVHlwZSxcbiAgICAgICAgcmVzb3VyY2U6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5tb2RlbCkpLFxuICAgICAgICBmaWVsZHM6IHRoaXMubmljZUZpZWxkcyxcbiAgICAgICAgZXZlbnQ6IHRoaXMubWV0YUNvbnRleHQuY29udGV4dCwgXG4gICAgICAgIHByb2ZpbGU6IHRoaXMubWV0YUNvbnRleHQucHJvZmlsZXNbdGhpcy5pbnRlZ3JhdGlvbkNvZGVdXG4gICAgICB9LFxuICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmICghcmVzcG9uc2UuZXJyb3IpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGFmcCBpbiByZXNwb25zZS5hdXRvRmlsbCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLm1vZGVsW2FmcF0pIHtcbiAgICAgICAgICAgICAgdGhpcy5tb2RlbFthZnBdID0gcmVzcG9uc2UuYXV0b0ZpbGxbYWZwXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgZ2V0RmllbGRzTWFwKCkge1xuICAgIGlmICh0aGlzLm1ldGEuZmllbGRzTWFwKSB7XG4gICAgICB0aGlzLmZpZWxkc01hcCA9IHRoaXMubWV0YS5maWVsZHNNYXA7XG4gICAgICB0aGlzLm1hcmtDb250YWN0YWJsZXMoKTtcbiAgICAgIHRoaXMuYnVpbGRDb250YWN0c1N1Z2dlc3Rpb25zKCk7XG4gICAgICBpZiAoIXRoaXMucmVzb3VyY2UuZXh0ZXJuYWxJZCkge1xuICAgICAgICB0aGlzLmJ1aWxkU3ViamVjdFRlbXBsYXRlKCk7XG4gICAgICAgIHRoaXMuZXhlY1RyYW5zZm9ybWVyKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWV0YU1zZ1NlcnZpY2Uuc2VuZE1lc3NhZ2UoXG4gICAgICAgIHRoaXMuaW50ZWdyYXRpb25Db2RlLCBcbiAgICAgICAgeyBhY3Rpb246ICdmaWVsZHNNYXAnLCBpbnRlZ3JhdGlvbjogdGhpcy5pbnRlZ3JhdGlvbkNvZGUsIHJlc291cmNlVHlwZTogdGhpcy5yZXNvdXJjZVR5cGUgfSxcbiAgICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgaWYgKCFyZXNwb25zZS5lcnJvcikge1xuICAgICAgICAgICAgdGhpcy5maWVsZHNNYXAgPSByZXNwb25zZS5maWVsZHNNYXA7XG4gICAgICAgICAgICB0aGlzLm1hcmtDb250YWN0YWJsZXMoKTtcbiAgICAgICAgICAgIHRoaXMuYnVpbGRDb250YWN0c1N1Z2dlc3Rpb25zKCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMucmVzb3VyY2UuZXh0ZXJuYWxJZCkge1xuICAgICAgICAgICAgICB0aGlzLmJ1aWxkU3ViamVjdFRlbXBsYXRlKCk7XG4gICAgICAgICAgICAgIHRoaXMuZXhlY1RyYW5zZm9ybWVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdObyBmaWVsZHMgbWFwJywgdGhpcy5pbnRlZ3JhdGlvbkNvZGUsIHRoaXMucmVzb3VyY2VUeXBlLCByZXNwb25zZS5lcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIG9wZW5SZXNvdXJjZU1lbnUoKSB7XG4gICAgdGhpcy5yZXNvdXJjZU1lbnVWaXNpYmxlID0gdHJ1ZTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbk1lbnVDbGlja291dCk7XG4gICAgfSwgMTApO1xuICB9XG5cbiAgY2xvc2UocmVzdWx0Pykge1xuICAgIHRoaXMuZG9uZS5lbWl0KHJlc3VsdCk7XG4gIH1cblxuICBzdWJtaXQocmVzb3VyY2VGb3JtKSB7XG4gICAgZGVsZXRlIHRoaXMuZm9ybUVycm9ycztcbiAgICByZXNvdXJjZUZvcm0uZm9ybS5zdWJtaXR0ZWQgPSB0cnVlO1xuICAgIGlmIChyZXNvdXJjZUZvcm0udmFsaWQpIHtcbiAgICAgIHRoaXMuYnVzeSA9IHRydWU7XG4gICAgICBpZiAodGhpcy5tZXRhQ29udGV4dC52Z2lwRXZlbnRJZCkge1xuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlcnNjb3JlLWRhbmdsZSAqL1xuICAgICAgICBpZiAoIXRoaXMubW9kZWwuX3ZnaXMpIHtcbiAgICAgICAgICB0aGlzLm1vZGVsLl92Z2lzID0ge1xuICAgICAgICAgICAgY29ubmVjdG9yOiB0aGlzLmludGVncmF0aW9uQ29kZSxcbiAgICAgICAgICAgIHJlc291cmNlVHlwZTogdGhpcy5yZXNvdXJjZVR5cGVcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubW9kZWwuX3ZnaXMubGF5b3V0SWQgPSB0aGlzLmN1cnJlbnRMYXlvdXRJZDtcbiAgICAgICAgdGhpcy5tb2RlbC5fdmdpcy50aW1lWm9uZU9mZnNldEluTWludXRlcyA9IG5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICAgICAgdGhpcy5tb2RlbC5fdmdpcy5ldmVudElkID0gdGhpcy5tZXRhQ29udGV4dC52Z2lwRXZlbnRJZDtcbiAgICAgICAgLyogZXNsaW50LWVuYWJsZSBuby11bmRlcnNjb3JlLWRhbmdsZSAqL1xuICAgICAgfVxuICAgICAgdGhpcy5zZXJ2aWNlLnNhdmUodGhpcy5tb2RlbCkuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmNsb3NlKHJlc3VsdCk7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmJ1c3k7XG4gICAgICB9LCAoZXJyb3JSZXN1bHQpID0+IHtcbiAgICAgICAgdGhpcy5mb3JtRXJyb3JzID0gZXJyb3JSZXN1bHQuZXJyb3I7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmJ1c3k7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb3JtRXJyb3JzID0gT2JqZWN0LmtleXMocmVzb3VyY2VGb3JtLmNvbnRyb2xzKVxuICAgICAgICAuZmlsdGVyKChjKSA9PiByZXNvdXJjZUZvcm0uY29udHJvbHNbY10uaW52YWxpZCkuam9pbignLCAnKTtcbiAgICAgICAgLy8gLm1hcCgoZikgPT4gdGhpcy5uaWNlRmllbGRzKHRoaXMuY3VycmVudFJlc291cmNlKS5sYWJlbCkuam9pbignLCAnKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCBzZWxlY3RvciA9IGBmb3JtW25hbWU9XCIke3RoaXMucmVzb3VyY2VUeXBlfVwiXSAuVmx0LWZvcm1fX2VsZW1lbnQtLWVycm9yIC5tYWluOm5vdCguc3RhbmRhbG9uZSlgO1xuICAgICAgICBjb25zdCBmaXJzdEludmFsaWQ6IEhUTUxJbnB1dEVsZW1lbnQgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgICAgIGlmIChmaXJzdEludmFsaWQpIHtcbiAgICAgICAgICBmaXJzdEludmFsaWQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJGb3JtRXJyb3JzKCkge1xuICAgIGRlbGV0ZSB0aGlzLmZvcm1FcnJvcnM7XG4gIH1cblxuICBnZXQgbmljZUZpZWxkcygpIHtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5yZXNvdXJjZS5uaWNlRmllbGRzXG4gICAgICAmJiB0aGlzLnJlc291cmNlLm1ldGFcbiAgICAgICYmIHRoaXMucmVzb3VyY2UubWV0YS5sYXlvdXRcbiAgICAgICYmIHRoaXMucmVzb3VyY2UubWV0YS5sYXlvdXQuc2VjdGlvbnNcbiAgICApIHtcbiAgICAgIGNvbnN0IGV4dHJhY3RTZWN0aW9uRmllbGRzID0gKHMpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBmIG9mIHMuZmllbGRzKSB7XG4gICAgICAgICAgaWYgKGYuZmllbGRzICYmIGYuZmllbGRzLmxlbmd0aCkge1xuICAgICAgICAgICAgZXh0cmFjdFNlY3Rpb25GaWVsZHMoZik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVzb3VyY2UubmljZUZpZWxkc1tmLm5hbWVdID0gZjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB0aGlzLnJlc291cmNlLm5pY2VGaWVsZHMgPSB7fTtcbiAgICAgIGZvciAoY29uc3QgcyBvZiB0aGlzLnJlc291cmNlLm1ldGEubGF5b3V0LnNlY3Rpb25zKSB7XG4gICAgICAgIGV4dHJhY3RTZWN0aW9uRmllbGRzKHMpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZS5uaWNlRmllbGRzO1xuICB9XG5cbiAgZ2V0IGZpZWxkTmFtZXMoKSB7XG4gICAgY29uc3QgbmFtZXMgPSBPYmplY3Qua2V5cyh0aGlzLm5pY2VGaWVsZHMpO1xuICAgIGlmICh0aGlzLnJlc291cmNlLm1ldGEubGF5b3V0LmNoaWxkcmVuKSB7XG4gICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRoaXMucmVzb3VyY2UubWV0YS5sYXlvdXQuY2hpbGRyZW4pIHtcbiAgICAgICAgbmFtZXMucHVzaChjaGlsZC5uYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5hbWVzO1xuICB9XG5cbiAgcHJpdmF0ZSBvbk1lbnVDbGlja291dCA9ICgpID0+IHtcbiAgICBkZWxldGUgdGhpcy5yZXNvdXJjZU1lbnVWaXNpYmxlO1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbk1lbnVDbGlja291dCk7XG4gIH07XG5cbiAgcHJpdmF0ZSBzdWdnZXN0RmllbGRQcm9wZXJ0eShrZXksIHZhbHVlKSB7XG4gICAgaWYgKGtleSAmJiB2YWx1ZSkge1xuICAgICAgY29uc3QgZmllbGROYW1lcyA9IHRoaXMuZmllbGROYW1lcztcbiAgICAgIGlmICh0aGlzLm1vZGVsKSB7XG4gICAgICAgIGNvbnN0IG5lc3RNYXRjaCA9IGtleS5tYXRjaCgvKFxcUyspXFxbXFxkXFxdXFwuKFxcUyspLyk7XG4gICAgICAgIGlmIChuZXN0TWF0Y2ggJiYgZmllbGROYW1lcy5pbmRleE9mKG5lc3RNYXRjaFsxXSkgIT09IC0xKSB7XG4gICAgICAgICAgdGhpcy5tb2RlbFtuZXN0TWF0Y2hbMV1dID0gW107XG4gICAgICAgICAgY29uc3QgbmVzdEtleXM6IGFueSA9IHt9O1xuICAgICAgICAgIG5lc3RLZXlzW25lc3RNYXRjaFsyXV0gPSB2YWx1ZTtcbiAgICAgICAgICB0aGlzLm1vZGVsW25lc3RNYXRjaFsxXV0ucHVzaChuZXN0S2V5cyk7XG4gICAgICAgIH0gZWxzZSBpZiAoZmllbGROYW1lcy5pbmRleE9mKGtleSkgIT09IC0xKSB7XG4gICAgICAgICAgdGhpcy5tb2RlbFtrZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGV4ZWNUcmFuc2Zvcm1lcigpIHtcbiAgICBpZiAodGhpcy5tZXRhQ29udGV4dCAmJiB0aGlzLmZpZWxkc01hcCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuc3VnZ2VzdEZpZWxkUHJvcGVydHkodGhpcy5maWVsZHNNYXAucGhvbmVOdW1iZXIsIHRoaXMubWV0YUNvbnRleHQucGhvbmVOdW1iZXIpO1xuICAgICAgICBpZiAodGhpcy5maWVsZHNNYXAuZmlyc3ROYW1lIHx8IHRoaXMuZmllbGRzTWFwLmxhc3ROYW1lKSB7XG4gICAgICAgICAgY29uc3QgbmFtZXMgPSAodGhpcy5tZXRhQ29udGV4dC5kaXNwbGF5TmFtZSB8fCAnJykuc3BsaXQoJyAnKTtcbiAgICAgICAgICB0aGlzLnN1Z2dlc3RGaWVsZFByb3BlcnR5KHRoaXMuZmllbGRzTWFwLmZpcnN0TmFtZSwgbmFtZXNbMF0pO1xuICAgICAgICAgIHRoaXMuc3VnZ2VzdEZpZWxkUHJvcGVydHkodGhpcy5maWVsZHNNYXAubGFzdE5hbWUsIG5hbWVzWzFdKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmZpZWxkc01hcC5kaXNwbGF5TmFtZSkge1xuICAgICAgICAgIHRoaXMuc3VnZ2VzdEZpZWxkUHJvcGVydHkodGhpcy5maWVsZHNNYXAuZGlzcGxheU5hbWUsIHRoaXMubWV0YUNvbnRleHQuZGlzcGxheU5hbWUpO1xuICAgICAgICB9XG4gICAgICB9LCAxMDApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFya0NvbnRhY3RhYmxlcygpIHtcbiAgICBpZiAodGhpcy5maWVsZHNNYXAuY29udGFjdGFibGVzICYmIHRoaXMuZmllbGRzTWFwLmNvbnRhY3RhYmxlcy5sZW5ndGgpIHtcbiAgICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmZpZWxkc01hcC5jb250YWN0YWJsZXMpIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLm5pY2VGaWVsZHNbY107XG4gICAgICAgIGlmIChmaWVsZCkge1xuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmaWVsZCwgJyRpc0NvbnRhY3RhYmxlJywge1xuICAgICAgICAgICAgdmFsdWU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFN1YmplY3RUZW1wbGF0ZSgpIHtcbiAgICBpZiAoIXRoaXMubW9kZWxbdGhpcy5maWVsZHNNYXAuc3ViamVjdF0gJiYgdGhpcy5maWVsZHNNYXAuc3ViamVjdCAmJiB0aGlzLm5pY2VGaWVsZHNbdGhpcy5maWVsZHNNYXAuc3ViamVjdF0pIHtcbiAgICAgIGxldCBzdWJqZWN0VGVtcGxhdGU6IHN0cmluZztcbiAgICAgIGlmICh0aGlzLm5pY2VGaWVsZHNbdGhpcy5maWVsZHNNYXAuc3ViamVjdF0uZGVmYXVsdCkge1xuICAgICAgICBzdWJqZWN0VGVtcGxhdGUgPSB0aGlzLm5pY2VGaWVsZHNbdGhpcy5maWVsZHNNYXAuc3ViamVjdF0uZGVmYXVsdC5pZCB8fCB0aGlzLm5pY2VGaWVsZHNbdGhpcy5maWVsZHNNYXAuc3ViamVjdF0uZGVmYXVsdDtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5tZXRhQ29udGV4dC5wcm9maWxlc1t0aGlzLmludGVncmF0aW9uQ29kZV0pIHtcbiAgICAgICAgY29uc3QgcHJvZmlsZSA9IHRoaXMubWV0YUNvbnRleHQucHJvZmlsZXNbdGhpcy5pbnRlZ3JhdGlvbkNvZGVdIHx8IHt9O1xuICAgICAgICBzdWJqZWN0VGVtcGxhdGUgPSBwcm9maWxlLmRlZmF1bHRTdWJqZWN0ID8gXG4gICAgICAgICAgcHJvZmlsZS5kZWZhdWx0U3ViamVjdFsoKHRoaXMubWV0YUNvbnRleHQuY29udGV4dCB8fCAnQ0FMTCcpLnR5cGUgfHwgJycpLnRvVXBwZXJDYXNlKCldIDogcHJvZmlsZS5hY3Rpdml0eURlZmF1bHRTdWJqZWN0VGVtcGxhdGU7XG4gICAgICB9XG4gICAgICBpZiAoc3ViamVjdFRlbXBsYXRlKSB7XG4gICAgICAgIHRoaXMubW9kZWxbdGhpcy5maWVsZHNNYXAuc3ViamVjdF0gPSB0ZW1wbGF0ZUJ1aWxkZXIodGhpcy5tZXRhQ29udGV4dCwgc3ViamVjdFRlbXBsYXRlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkQ29udGFjdHNTdWdnZXN0aW9ucygpIHtcbiAgICAvLyBsZXQgaGFzRGVmYXVsdENvbnRhY3QgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5tZXRhQ29udGV4dC5jb250YWN0YWJsZXNbdGhpcy5pbnRlZ3JhdGlvbkNvZGVdICYmIHRoaXMubWV0YS5sYXlvdXQgJiYgdGhpcy5tZXRhLmxheW91dC5zZWN0aW9ucykge1xuICAgICAgZm9yIChjb25zdCBzIG9mIHRoaXMubWV0YS5sYXlvdXQuc2VjdGlvbnMpIHtcbiAgICAgICAgZm9yIChjb25zdCBmIG9mIChzLmZpZWxkcyB8fCBbXSkpIHtcbiAgICAgICAgICBpZiAoZi50eXBlID09PSAncmVmZXJlbmNlJykge1xuICAgICAgICAgICAgY29uc3QgcmVmVHlwZXMgPSAoZi5yZWZlcmVuY2UubGVuZ3RoID8gZi5yZWZlcmVuY2UgOiBbZi5yZWZlcmVuY2VdKS5tYXAociA9PiByLm5hbWUpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBjIG9mIHRoaXMubWV0YUNvbnRleHQuY29udGFjdGFibGVzW3RoaXMuaW50ZWdyYXRpb25Db2RlXSkge1xuICAgICAgICAgICAgICBpZiAocmVmVHlwZXMuaW5kZXhPZihjLnJlc291cmNlVHlwZSB8fCBjLnR5cGUpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGlmICghZi5zdWdnZXN0aW9ucykge1xuICAgICAgICAgICAgICAgICAgZi5zdWdnZXN0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgdExhYmVsID0gYy5kaXNwbGF5TmFtZSB8fCBjLm5hbWU7XG4gICAgICAgICAgICAgICAgaWYgKGMucGhvbmVOdW1iZXJzKSB7XG4gICAgICAgICAgICAgICAgICB0TGFiZWwgKz0gKCcg4pyGJyArIGMucGhvbmVOdW1iZXJzLm1hcChwID0+IHAucGhvbmVOdW1iZXIpLmpvaW4oJywnKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGYuc3VnZ2VzdGlvbnMucHVzaCh7IFxuICAgICAgICAgICAgICAgICAgaWQ6IGMuZXh0ZXJuYWxJZCB8fCBjLmlkZW50aWZpZXIgfHwgYy5pZCwgXG4gICAgICAgICAgICAgICAgICBsYWJlbDogdExhYmVsLCBcbiAgICAgICAgICAgICAgICAgIHR5cGU6IGMucmVzb3VyY2VUeXBlIHx8IGMudHlwZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoKHRoaXMuZmllbGRzTWFwLmNvbnRhY3RhYmxlcyB8fCBbXSkuaW5kZXhPZihmLm5hbWUpICE9PSAtMSkgeyAvLyBldmFsdWF0ZSB1c2FiaWxpdHk/XG4gICAgICAgICAgICAgIGYuYWx3YXlzVmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZiAoXG4gICAgICAgICAgICAvLyAgICFoYXNEZWZhdWx0Q29udGFjdCAmJiB0aGlzLm1ldGFDb250ZXh0LmRlZmF1bHRDb250YWN0YWJsZXNbdGhpcy5pbnRlZ3JhdGlvbkNvZGVdXG4gICAgICAgICAgICAvLyAgICYmIHJlZlR5cGVzLmluZGV4T2YodGhpcy5tZXRhQ29udGV4dC5kZWZhdWx0Q29udGFjdGFibGVzW3RoaXMuaW50ZWdyYXRpb25Db2RlXS50eXBlKSAhPT0gLTFcbiAgICAgICAgICAgIC8vICkge1xuICAgICAgICAgICAgLy8gICB0aGlzLnJlc291cmNlW2YubmFtZV0gPSB0aGlzLm1ldGFDb250ZXh0LmRlZmF1bHRDb250YWN0YWJsZXNbdGhpcy5pbnRlZ3JhdGlvbkNvZGVdO1xuICAgICAgICAgICAgLy8gICBoYXNEZWZhdWx0Q29udGFjdCA9IHRydWU7XG4gICAgICAgICAgICAvLyB9IGVsc2UgaWYgKCFoYXNEZWZhdWx0Q29udGFjdCAmJiB0aGlzLmZpZWxkc01hcC5jb250YWN0YWJsZXMgJiYgZi5zdWdnZXN0aW9ucyAmJiBmLnN1Z2dlc3Rpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgLy8gICBpZiAodGhpcy5maWVsZHNNYXAuY29udGFjdGFibGVzLmluZGV4T2YoZi5uYW1lKSAhPT0gLTEgJiYgIWYuZGVmYXVsdCkge1xuICAgICAgICAgICAgLy8gICAgIGYuZGVmYXVsdCA9IGYuc3VnZ2VzdGlvbnNbMF07XG4gICAgICAgICAgICAvLyAgICAgaGFzRGVmYXVsdENvbnRhY3QgPSB0cnVlO1xuICAgICAgICAgICAgLy8gICB9XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmNvbnRhY3RzU3VnZ2VzdGlvbnNEb25lID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFwcGx5VGhlbWUoKSB7XG4gICAgY29uc3QgbWV0YVRoZW1lID0gdGhpcy50aGVtZSA9PT0gJ2RhcmsnID8gbWV0YURhcmsgOiBtZXRhTGlnaHQ7XG4gICAgY29uc29sZS5sb2coJ3Jlc291cmNlIGFwcGx5IHRoZW1lJywgdGhpcy50aGVtZSk7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobWV0YVRoZW1lLnByb3BlcnRpZXMpKSB7XG4gICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoa2V5LCBtZXRhVGhlbWUucHJvcGVydGllc1trZXldKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvcmNlVWlVcGRhdGUoKSB7IC8vIGlPUyB3ZWJ2aWV3IGRvZXMgbm90IHVwZGF0ZSB0aGUgVUkgYWZ0ZXIgYXN5YyBjaGFuZ2VzLiBUZW1wIGZpeCA6KFxuICAgIC8vIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICBjb25zdCBlID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50cycpO1xuICAgIGUuaW5pdEV2ZW50KCdjbGljaycsIHRydWUsIGZhbHNlKTtcbiAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChlKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* @Author: Alexander.Vangelov@vonage.com
|
|
3
|
+
* @Date: 2019-09-19 17:35:28
|
|
4
|
+
* @Last Modified by: Alexander.Vangelov@vonage.com
|
|
5
|
+
* @Last Modified time: 2020-05-03 21:30:58
|
|
6
|
+
*/
|
|
7
|
+
import { Component, Input, ComponentFactoryResolver } from '@angular/core';
|
|
8
|
+
import { MetaResourceService } from '../services/metaResource';
|
|
9
|
+
import { MetaRefDialog } from '../refDialog';
|
|
10
|
+
import { MetaReferenceService } from '../services/metaReference';
|
|
11
|
+
// import { tMetaLayout } from '../definitions/tMetaLayout';
|
|
12
|
+
export class MetaResourceCard {
|
|
13
|
+
constructor(componentFactoryResolver, metaResource, referenceService) {
|
|
14
|
+
this.componentFactoryResolver = componentFactoryResolver;
|
|
15
|
+
this.metaResource = metaResource;
|
|
16
|
+
this.referenceService = referenceService;
|
|
17
|
+
}
|
|
18
|
+
ngOnInit() {
|
|
19
|
+
this.integrationCode = (this.resource.integration || this.resource.integrationCode || '').toLowerCase();
|
|
20
|
+
}
|
|
21
|
+
open(reference, model) {
|
|
22
|
+
if (!this.refDialogFactory) {
|
|
23
|
+
this.refDialogFactory = this.componentFactoryResolver.resolveComponentFactory(MetaRefDialog);
|
|
24
|
+
}
|
|
25
|
+
this.referenceService.openDialog(this.refDialogFactory, this.metaResource, this.integrationCode, reference, model, model && (reference.editable === false) // is preview mode
|
|
26
|
+
).subscribe((result) => {
|
|
27
|
+
console.log('dialog result', result);
|
|
28
|
+
// if (result && result.raw) {
|
|
29
|
+
// if (!this.parent[reference.type]) {
|
|
30
|
+
// this.parent[reference.type] = [];
|
|
31
|
+
// }
|
|
32
|
+
// this.parent[reference.type].push(result.raw);
|
|
33
|
+
// }
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
MetaResourceCard.decorators = [
|
|
38
|
+
{ type: Component, args: [{
|
|
39
|
+
selector: 'vgip-meta-resource-card',
|
|
40
|
+
template: "<div class=\"Vlt-card Vlt-bg-white\">\n\t<div class=\"Vlt-card__content Vlt-btn-on-hover\">\n\t\t<h5>{{model.Subject || model.subject || model.summary || model.title || model.CaseNumber || model.comment || model.body || model.name || model.topic || '...' }}</h5>\n\t\t<div style='font-size: 12px; line-height: 16px;'>\n\t\t\tCreated: <span class='Vlt-black'>{{model._vgis.createdDate | date:'mediumDate'}}</span>\n\t\t\tEdited: <span class='Vlt-black'>{{model._vgis.modifiedDate | date:'medium'}}</span>\n\t\t</div>\n\t\t<div class=\"Vlt-badge Vlt-badge--app Vlt-badge--purple Vlt-badge--small\">{{model._vgis.resourceType}}</div>\n\t\t<div class=\"Vlt-btn-group Vlt-btn-group--hover\">\n\t\t\t<a *ngIf='model._vgis.externalLink' attr.href='{{model._vgis.externalLink}}' target='_blank' rel='noopener' class=\"Vlt-btn Vlt-btn--tertiary Vlt-btn--icon\" aria-label='Open external'><svg style='margin-left: 0; margin-right: 0;'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-open\"/></svg></a>\n\t\t\t<button type='button' (click)='open(resource, model)' class=\"Vlt-btn Vlt-btn--tertiary Vlt-btn--icon\" aria-label='Edit'><svg style='margin-left: 0; margin-right: 0;'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-edit\"/></svg></button>\n\t\t</div>\n\t</div>\n</div>\n",
|
|
41
|
+
entryComponents: [
|
|
42
|
+
MetaRefDialog
|
|
43
|
+
],
|
|
44
|
+
styles: [".Vlt-card{margin-bottom:8px;padding:16px}.Vlt-card .Vlt-btn-group.Vlt-btn-group--hover{right:-8px}"]
|
|
45
|
+
},] }
|
|
46
|
+
];
|
|
47
|
+
MetaResourceCard.ctorParameters = () => [
|
|
48
|
+
{ type: ComponentFactoryResolver },
|
|
49
|
+
{ type: MetaResourceService },
|
|
50
|
+
{ type: MetaReferenceService }
|
|
51
|
+
];
|
|
52
|
+
MetaResourceCard.propDecorators = {
|
|
53
|
+
resource: [{ type: Input }],
|
|
54
|
+
model: [{ type: Input }]
|
|
55
|
+
};
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXRhLXVpL3NyYy9saWIvcmVzb3VyY2VDYXJkL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsd0JBQXdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVqRSw0REFBNEQ7QUFVNUQsTUFBTSxPQUFPLGdCQUFnQjtJQU8zQixZQUNVLHdCQUFrRCxFQUNsRCxZQUFpQyxFQUNqQyxnQkFBc0M7UUFGdEMsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUNsRCxpQkFBWSxHQUFaLFlBQVksQ0FBcUI7UUFDakMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFzQjtJQUM3QyxDQUFDO0lBRUosUUFBUTtRQUNOLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsSUFBSSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUMxRyxDQUFDO0lBRUQsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFNO1FBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDMUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyx1QkFBdUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUM5RjtRQUNELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQzlCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFDaEYsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsS0FBSyxLQUFLLENBQUMsQ0FBQyxrQkFBa0I7U0FDM0QsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRTtZQUMxQixPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUNyQyw4QkFBOEI7WUFDOUIsd0NBQXdDO1lBQ3hDLHdDQUF3QztZQUN4QyxNQUFNO1lBQ04sa0RBQWtEO1lBQ2xELElBQUk7UUFDTixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7OztZQXpDRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLHlCQUF5QjtnQkFDbkMsb3dDQUEwQjtnQkFFMUIsZUFBZSxFQUFFO29CQUNmLGFBQWE7aUJBQ2Q7O2FBQ0Y7OztZQWZrQyx3QkFBd0I7WUFFbEQsbUJBQW1CO1lBRW5CLG9CQUFvQjs7O3VCQWExQixLQUFLO29CQUNMLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQEF1dGhvcjogQWxleGFuZGVyLlZhbmdlbG92QHZvbmFnZS5jb20gXG4gKiBARGF0ZTogMjAxOS0wOS0xOSAxNzozNToyOCBcbiAqIEBMYXN0IE1vZGlmaWVkIGJ5OiBBbGV4YW5kZXIuVmFuZ2Vsb3ZAdm9uYWdlLmNvbVxuICogQExhc3QgTW9kaWZpZWQgdGltZTogMjAyMC0wNS0wMyAyMTozMDo1OFxuICovXG5cbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE1ldGFSZXNvdXJjZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9tZXRhUmVzb3VyY2UnO1xuaW1wb3J0IHsgTWV0YVJlZkRpYWxvZyB9IGZyb20gJy4uL3JlZkRpYWxvZyc7XG5pbXBvcnQgeyBNZXRhUmVmZXJlbmNlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL21ldGFSZWZlcmVuY2UnO1xuXG4vLyBpbXBvcnQgeyB0TWV0YUxheW91dCB9IGZyb20gJy4uL2RlZmluaXRpb25zL3RNZXRhTGF5b3V0JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmdpcC1tZXRhLXJlc291cmNlLWNhcmQnLFxuICB0ZW1wbGF0ZVVybDogJy4vdmlldy5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc3R5bGUuc2NzcyddLFxuICBlbnRyeUNvbXBvbmVudHM6IFtcbiAgICBNZXRhUmVmRGlhbG9nXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgTWV0YVJlc291cmNlQ2FyZCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIHJlc291cmNlOiBhbnk7XG4gIEBJbnB1dCgpIG1vZGVsOiBhbnk7XG5cbiAgaW50ZWdyYXRpb25Db2RlOiBzdHJpbmc7XG4gIHJlZkRpYWxvZ0ZhY3Rvcnk6IGFueTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgIHByaXZhdGUgbWV0YVJlc291cmNlOiBNZXRhUmVzb3VyY2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVmZXJlbmNlU2VydmljZTogTWV0YVJlZmVyZW5jZVNlcnZpY2VcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaW50ZWdyYXRpb25Db2RlID0gKHRoaXMucmVzb3VyY2UuaW50ZWdyYXRpb24gfHwgdGhpcy5yZXNvdXJjZS5pbnRlZ3JhdGlvbkNvZGUgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gIH1cblxuICBvcGVuKHJlZmVyZW5jZSwgbW9kZWw/KSB7XG4gICAgaWYgKCF0aGlzLnJlZkRpYWxvZ0ZhY3RvcnkpIHtcbiAgICAgIHRoaXMucmVmRGlhbG9nRmFjdG9yeSA9IHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KE1ldGFSZWZEaWFsb2cpO1xuICAgIH1cbiAgICB0aGlzLnJlZmVyZW5jZVNlcnZpY2Uub3BlbkRpYWxvZyhcbiAgICAgIHRoaXMucmVmRGlhbG9nRmFjdG9yeSwgdGhpcy5tZXRhUmVzb3VyY2UsIHRoaXMuaW50ZWdyYXRpb25Db2RlLCByZWZlcmVuY2UsIG1vZGVsLCBcbiAgICAgIG1vZGVsICYmIChyZWZlcmVuY2UuZWRpdGFibGUgPT09IGZhbHNlKSAvLyBpcyBwcmV2aWV3IG1vZGVcbiAgICApLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCdkaWFsb2cgcmVzdWx0JywgcmVzdWx0KTtcbiAgICAgIC8vIGlmIChyZXN1bHQgJiYgcmVzdWx0LnJhdykge1xuICAgICAgLy8gICBpZiAoIXRoaXMucGFyZW50W3JlZmVyZW5jZS50eXBlXSkge1xuICAgICAgLy8gICAgIHRoaXMucGFyZW50W3JlZmVyZW5jZS50eXBlXSA9IFtdO1xuICAgICAgLy8gICB9XG4gICAgICAvLyAgIHRoaXMucGFyZW50W3JlZmVyZW5jZS50eXBlXS5wdXNoKHJlc3VsdC5yYXcpO1xuICAgICAgLy8gfVxuICAgIH0pO1xuICB9XG5cbn1cbiJdfQ==
|