appproject-components 0.0.29 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{esm2020 → esm2022}/appproject-components.mjs +4 -4
- package/{esm2020 → esm2022}/lib/appproject-components.component.mjs +15 -15
- package/{esm2020 → esm2022}/lib/appproject-components.module.mjs +96 -96
- package/{esm2020 → esm2022}/lib/appproject-components.service.mjs +14 -14
- package/esm2022/lib/baseInputComponent.mjs +66 -0
- package/esm2022/lib/input-area/input-area.component.mjs +53 -0
- package/esm2022/lib/input-arquivo/input-arquivo.component.mjs +115 -0
- package/esm2022/lib/input-cep/input-cep.component.mjs +180 -0
- package/esm2022/lib/input-format/input-format.component.mjs +138 -0
- package/esm2022/lib/input-pesquisa/input-pesquisa.component.mjs +548 -0
- package/esm2022/lib/input-select/input-select.component.mjs +88 -0
- package/esm2022/lib/input-text/input-text.component.mjs +76 -0
- package/esm2022/lib/input-valor/input-valor.component.mjs +158 -0
- package/{esm2020 → esm2022}/lib/model-treeview/model-treeview.component.mjs +14 -14
- package/{esm2020 → esm2022}/public-api.mjs +18 -18
- package/fesm2022/appproject-components.mjs +1511 -0
- package/fesm2022/appproject-components.mjs.map +1 -0
- package/index.d.ts +5 -5
- package/lib/appproject-components.component.d.ts +8 -8
- package/lib/appproject-components.module.d.ts +26 -26
- package/lib/appproject-components.service.d.ts +6 -6
- package/lib/baseInputComponent.d.ts +27 -27
- package/lib/input-area/input-area.component.d.ts +21 -21
- package/lib/input-arquivo/input-arquivo.component.d.ts +34 -33
- package/lib/input-cep/input-cep.component.d.ts +29 -29
- package/lib/input-format/input-format.component.d.ts +27 -25
- package/lib/input-pesquisa/input-pesquisa.component.d.ts +68 -68
- package/lib/input-select/input-select.component.d.ts +29 -28
- package/lib/input-text/input-text.component.d.ts +29 -25
- package/lib/input-valor/input-valor.component.d.ts +28 -25
- package/lib/model-treeview/model-treeview.component.d.ts +8 -8
- package/package.json +8 -14
- package/public-api.d.ts +13 -13
- package/esm2020/lib/baseInputComponent.mjs +0 -65
- package/esm2020/lib/input-area/input-area.component.mjs +0 -53
- package/esm2020/lib/input-arquivo/input-arquivo.component.mjs +0 -110
- package/esm2020/lib/input-cep/input-cep.component.mjs +0 -180
- package/esm2020/lib/input-format/input-format.component.mjs +0 -129
- package/esm2020/lib/input-pesquisa/input-pesquisa.component.mjs +0 -540
- package/esm2020/lib/input-select/input-select.component.mjs +0 -80
- package/esm2020/lib/input-text/input-text.component.mjs +0 -65
- package/esm2020/lib/input-valor/input-valor.component.mjs +0 -125
- package/fesm2015/appproject-components.mjs +0 -1452
- package/fesm2015/appproject-components.mjs.map +0 -1
- package/fesm2020/appproject-components.mjs +0 -1437
- package/fesm2020/appproject-components.mjs.map +0 -1
|
@@ -0,0 +1,548 @@
|
|
|
1
|
+
import { Component, EventEmitter, Inject, Input, ViewChild } from '@angular/core';
|
|
2
|
+
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
3
|
+
import { Subject, of } from 'rxjs';
|
|
4
|
+
import { BaseInputComponent } from '../baseInputComponent';
|
|
5
|
+
import { debounceTime, switchMap } from 'rxjs/operators';
|
|
6
|
+
import { ModelTreeviewComponent } from '../model-treeview/model-treeview.component';
|
|
7
|
+
import { LibConfigService } from '../appproject-components.module';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
import * as i1 from "@angular/common/http";
|
|
10
|
+
import * as i2 from "@ionic/angular";
|
|
11
|
+
import * as i3 from "@angular/common";
|
|
12
|
+
export class InputPesquisaComponent extends BaseInputComponent {
|
|
13
|
+
writeValue(value) {
|
|
14
|
+
//console.log('write value', value);
|
|
15
|
+
this.onChange(value);
|
|
16
|
+
this.data = value;
|
|
17
|
+
if (value == null || value == 0) {
|
|
18
|
+
this.writePesquisa('');
|
|
19
|
+
this.selectedItem = null;
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
if (this.loadInit == true) {
|
|
23
|
+
this.loadInit = false;
|
|
24
|
+
this.modelChanged.next(value);
|
|
25
|
+
//this.carregaItemIdParaLista(value);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
//console.log(this.selectedItem);
|
|
29
|
+
if (!this.selectedItem || (this.selectedItem && this.selectedItem[this.campoId] != value)) {
|
|
30
|
+
console.log('Id diferente');
|
|
31
|
+
this.modelChanged.next(value);
|
|
32
|
+
//this.carregaItemIdParaLista(value);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
registerOnChange(fn) {
|
|
38
|
+
this.onChange = fn;
|
|
39
|
+
}
|
|
40
|
+
registerOnTouched(fn) {
|
|
41
|
+
this.onTouch = fn;
|
|
42
|
+
}
|
|
43
|
+
setDisabledState(isDisabled) {
|
|
44
|
+
this.disabled = this.disabled;
|
|
45
|
+
}
|
|
46
|
+
constructor(config, httpClient, modalCtrl) {
|
|
47
|
+
super();
|
|
48
|
+
this.config = config;
|
|
49
|
+
this.httpClient = httpClient;
|
|
50
|
+
this.modalCtrl = modalCtrl;
|
|
51
|
+
this.podePesquisar = true;
|
|
52
|
+
this.textoPesquisa = '';
|
|
53
|
+
this.selectElementVisivel = false;
|
|
54
|
+
this.listaPesquisa = [];
|
|
55
|
+
this.max = '30';
|
|
56
|
+
this.pesquisaSubject = new Subject();
|
|
57
|
+
this.filterFunction = null;
|
|
58
|
+
this.selectId = 'selectElement';
|
|
59
|
+
this.campoId = 'Id';
|
|
60
|
+
this.campoPaiId = 'PaiId';
|
|
61
|
+
this.campoDisplay = 'Descricao';
|
|
62
|
+
this.tipo = '';
|
|
63
|
+
//@ViewChild('selectElement', { read: ElementRef, static: true }) selectElement;
|
|
64
|
+
this.selectElement = null;
|
|
65
|
+
this.pesquisaChange = new EventEmitter();
|
|
66
|
+
//parametros para chamada API
|
|
67
|
+
//endpoint para pesquisa por digitação
|
|
68
|
+
this.url = '';
|
|
69
|
+
this.urlItem = '';
|
|
70
|
+
//endpoint para montar a arvore, se estiver vazia será usado o campo 'url'
|
|
71
|
+
this.urlTree = '';
|
|
72
|
+
this.empresa = 0;
|
|
73
|
+
this.loadInit = false;
|
|
74
|
+
this.onChange = (data) => { };
|
|
75
|
+
this.onTouch = () => { };
|
|
76
|
+
this.disabled = false;
|
|
77
|
+
this.console = console;
|
|
78
|
+
this.modelChanged = new Subject();
|
|
79
|
+
this.BASE_API = this.config.apiUrl;
|
|
80
|
+
this.modelChangeSubscription = this.modelChanged
|
|
81
|
+
.pipe(debounceTime(500))
|
|
82
|
+
.subscribe(data => {
|
|
83
|
+
this.carregaItemIdParaLista(data);
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
onBlur(event) {
|
|
87
|
+
console.log('blur', event);
|
|
88
|
+
//console.log(event.detail.relatedTarget);
|
|
89
|
+
if (event.detail.relatedTarget == null || event.detail.relatedTarget.id.indexOf(this.selectId + 'IonItem') == -1) {
|
|
90
|
+
//console.log("true", event.detail.relatedTarget.id);
|
|
91
|
+
//pesquisar item na lista
|
|
92
|
+
if (!this.existeNaListaTexto(this.textoPesquisa, true)) {
|
|
93
|
+
this.limparClick();
|
|
94
|
+
}
|
|
95
|
+
this.dropDownPesquisa(0);
|
|
96
|
+
if (this.form) {
|
|
97
|
+
this.form.get(this.formControlName)?.markAsTouched();
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
ngOnInit() {
|
|
102
|
+
//tratar urls
|
|
103
|
+
this.url = this.url.startsWith('http') ? this.url : `${this.BASE_API}/${this.url}`;
|
|
104
|
+
this.urlItem = this.urlItem.startsWith('http') ? this.urlItem : `${this.BASE_API}/${this.urlItem}`;
|
|
105
|
+
this.pesquisaSubject.pipe(switchMap((url) => {
|
|
106
|
+
this.console.log('subject url:', url);
|
|
107
|
+
if (!this.isEmpty(url))
|
|
108
|
+
return this.httpClient.get(url);
|
|
109
|
+
else
|
|
110
|
+
return of([]);
|
|
111
|
+
}))
|
|
112
|
+
.subscribe({
|
|
113
|
+
next: (result) => {
|
|
114
|
+
//this.listaPesquisa = result;
|
|
115
|
+
this.console.log('subject subscribe result:', result);
|
|
116
|
+
this.listaPesquisa = [];
|
|
117
|
+
if (result && result.length > 0) {
|
|
118
|
+
if (this.filterFunction) {
|
|
119
|
+
result = result.filter(this.filterFunction);
|
|
120
|
+
}
|
|
121
|
+
result.forEach((ent, index) => {
|
|
122
|
+
this.listaPesquisa.push({ ...ent, Index: index, Selected: false });
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
this.podePesquisar = true;
|
|
126
|
+
if (this.listaPesquisa.length > 0) {
|
|
127
|
+
this.dropDownPesquisa(this.listaPesquisa.length);
|
|
128
|
+
}
|
|
129
|
+
},
|
|
130
|
+
error: (error) => {
|
|
131
|
+
this.podePesquisar = true;
|
|
132
|
+
console.log('erro pesquisa', error);
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
writePesquisa(value) {
|
|
137
|
+
//console.log('write pesquisa', value);
|
|
138
|
+
this.textoPesquisa = value;
|
|
139
|
+
}
|
|
140
|
+
showPesquisa(e) {
|
|
141
|
+
//console.log('show pesquisa', e.keyCode);
|
|
142
|
+
var self = this;
|
|
143
|
+
const index = e.target.selectionStart >= 1 ? (e.target.selectionStart - 1) : 0;
|
|
144
|
+
//console.log(index, 'valor ', event.target.value, 'char ', event.target.value.charCodeAt(index));
|
|
145
|
+
const keyAt = e.target.value.charCodeAt(index);
|
|
146
|
+
/*
|
|
147
|
+
if ((e.keyCode >= 48 && e.keyCode <= 57) ||
|
|
148
|
+
(keyAt >= 48 && keyAt <= 57) ||
|
|
149
|
+
(e.keyCode >= 65 && e.keyCode <= 90) ||
|
|
150
|
+
(e.keyCode >= 96 && e.keyCode <= 105) ||
|
|
151
|
+
(e.keyCode == 8)) {
|
|
152
|
+
*/
|
|
153
|
+
if (e.keyCode != 40 && e.keyCode != 38) {
|
|
154
|
+
if (!self.podePesquisar) {
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
let filtro = self.textoPesquisa;
|
|
158
|
+
if (filtro != null && filtro != '' && filtro.length >= 2) {
|
|
159
|
+
self.pesquisarEntidade(filtro);
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
if (e.keyCode == 8 && !filtro) {
|
|
163
|
+
this.limparClick();
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
if (e.keyCode == 40 || e.keyCode == 38) {
|
|
169
|
+
self.dropDownPesquisa(self.listaPesquisa.length);
|
|
170
|
+
if (self.selectElementVisivel == true) {
|
|
171
|
+
//let select = self.selectElement; //document.getElementById(self.TemplateSelect1Id());
|
|
172
|
+
//ion-list
|
|
173
|
+
//selecionado
|
|
174
|
+
//console.log(self.listaPesquisa);
|
|
175
|
+
let inc = e.keyCode == 40 ? 1 : -1;
|
|
176
|
+
let selected = self.listaPesquisa.find(s => s['Selected'] === true);
|
|
177
|
+
let cur = 0;
|
|
178
|
+
if (selected != null) {
|
|
179
|
+
cur = selected['Index'];
|
|
180
|
+
//desmarcar o atual
|
|
181
|
+
selected['Selected'] = false;
|
|
182
|
+
cur = cur + inc;
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
cur = 0;
|
|
186
|
+
}
|
|
187
|
+
if (cur < 0) {
|
|
188
|
+
cur = self.listaPesquisa.length - 1;
|
|
189
|
+
}
|
|
190
|
+
else if (cur >= self.listaPesquisa.length) {
|
|
191
|
+
cur = 0;
|
|
192
|
+
}
|
|
193
|
+
let novoSelected = self.listaPesquisa.find(n => n['Index'] === cur);
|
|
194
|
+
if (novoSelected != null) {
|
|
195
|
+
novoSelected['Selected'] = true;
|
|
196
|
+
self.selectedItem = novoSelected;
|
|
197
|
+
self.textoPesquisa = novoSelected[self.campoDisplay];
|
|
198
|
+
}
|
|
199
|
+
/*
|
|
200
|
+
let select = document.getElementById(this.selectId) as any;
|
|
201
|
+
console.log('select Element', select)
|
|
202
|
+
if (select != null) {
|
|
203
|
+
let inc = e.keyCode == 40 ? 1 : -1;
|
|
204
|
+
let cur = select.selectedIndex;
|
|
205
|
+
if (cur == NaN) cur = -1;
|
|
206
|
+
select.selectedIndex = cur + inc;
|
|
207
|
+
if (select.selectedIndex >= 0 && select.selectedIndex < self.listaPesquisa.length) {
|
|
208
|
+
self.selectedItem = self.listaPesquisa[select.selectedIndex];
|
|
209
|
+
if (self.selectedItem != null) {
|
|
210
|
+
self.textoPesquisa = self.selectedItem[self.campoDisplay];
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
*/
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
else if (e.keyCode == 13) {
|
|
218
|
+
console.log('enter key', e);
|
|
219
|
+
//self.selecionarComboClick(e);
|
|
220
|
+
self.selecionarComboClick(null);
|
|
221
|
+
//return false;
|
|
222
|
+
}
|
|
223
|
+
else if (e.keyCode == 27) {
|
|
224
|
+
//ESC
|
|
225
|
+
self.dropDownPesquisa(0);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
highlight(texto) {
|
|
230
|
+
let index = texto.toLowerCase().indexOf(this.textoPesquisa.toLowerCase());
|
|
231
|
+
//console.log(index);
|
|
232
|
+
if (index >= 0) {
|
|
233
|
+
return texto.substring(0, index) + '<strong>' + texto.substring(index, index + this.textoPesquisa.length) + '</strong>' + texto.substring(index + this.textoPesquisa.length); //texto.replace(this.textoPesquisa, `<strong>${this.textoPesquisa}</strong>`);
|
|
234
|
+
}
|
|
235
|
+
else {
|
|
236
|
+
return texto;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
selecionarComboClick(item) {
|
|
240
|
+
// console.log(item);
|
|
241
|
+
var self = this;
|
|
242
|
+
// console.log('combo click', self);
|
|
243
|
+
/*
|
|
244
|
+
let select = document.getElementById(this.selectId) as any;
|
|
245
|
+
if (select.selectedIndex >= 0) {
|
|
246
|
+
self.selectedItem = self.listaPesquisa[select.selectedIndex];
|
|
247
|
+
}
|
|
248
|
+
console.log('selected', this.selectedItem);
|
|
249
|
+
//self.selectedItem = this.listaPesquisa.find(i => i[this.campoId] == e);
|
|
250
|
+
if (self.selectedItem != null) {
|
|
251
|
+
self.textoPesquisa = self.selectedItem[self.campoDisplay];
|
|
252
|
+
self.writeValue(self.selectedItem[self.campoId]);
|
|
253
|
+
if (e != null) {
|
|
254
|
+
self.selectElementVisivel = false;
|
|
255
|
+
if (self.action != null) {
|
|
256
|
+
self.action(self.selectedItem(), e);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
else {
|
|
261
|
+
self.selectElementVisivel = false;
|
|
262
|
+
}
|
|
263
|
+
*/
|
|
264
|
+
// pesquisar selecionado
|
|
265
|
+
// console.log(this.listaPesquisa);
|
|
266
|
+
let selected = this.listaPesquisa.find(s => s['Selected'] === true);
|
|
267
|
+
// if (!selected) {
|
|
268
|
+
// console.log(this.campoId, item);
|
|
269
|
+
// selected = this.listaPesquisa.filter( s => s[this.campoId] == item[this.campoId]);
|
|
270
|
+
// }
|
|
271
|
+
//se o item form passado como parametro (click no ion-item)
|
|
272
|
+
if (item != null) {
|
|
273
|
+
if (selected != null) {
|
|
274
|
+
selected['Selected'] = false;
|
|
275
|
+
}
|
|
276
|
+
item['Selected'] = true;
|
|
277
|
+
selected = item;
|
|
278
|
+
}
|
|
279
|
+
if (selected != null) {
|
|
280
|
+
self.selectedItem = selected;
|
|
281
|
+
self.textoPesquisa = selected[self.campoDisplay];
|
|
282
|
+
self.writeValue(selected[self.campoId]);
|
|
283
|
+
self.selectElementVisivel = false;
|
|
284
|
+
//console.log('action', self.change);
|
|
285
|
+
if (self.pesquisaChange != null) {
|
|
286
|
+
self.pesquisaChange.emit(self.selectedItem);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
else {
|
|
290
|
+
self.selectElementVisivel = false;
|
|
291
|
+
}
|
|
292
|
+
// this.listaPesquisa.forEach( pesquisa => {
|
|
293
|
+
// console.log(pesquisa, self.data);
|
|
294
|
+
// } );
|
|
295
|
+
// console.log(this.textoPesquisa);
|
|
296
|
+
}
|
|
297
|
+
selecionarComboChange(e) {
|
|
298
|
+
var self = this;
|
|
299
|
+
console.log('combo change', e);
|
|
300
|
+
self.selectedItem = this.listaPesquisa.find(i => i[this.campoId] == e);
|
|
301
|
+
if (self.selectedItem != null) {
|
|
302
|
+
self.writeValue(e);
|
|
303
|
+
self.textoPesquisa = self.selectedItem[self.campoDisplay];
|
|
304
|
+
if (e != null) {
|
|
305
|
+
self.selectElementVisivel = false;
|
|
306
|
+
if (self.pesquisaChange != null) {
|
|
307
|
+
self.pesquisaChange.emit(self.selectedItem);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
else {
|
|
312
|
+
self.selectElementVisivel = false;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
dropDownPesquisa(length) {
|
|
316
|
+
var self = this;
|
|
317
|
+
if (self.listaPesquisa != null && self.listaPesquisa.length > 0) {
|
|
318
|
+
if (length == -1) {
|
|
319
|
+
length = self.listaPesquisa.length;
|
|
320
|
+
}
|
|
321
|
+
self.selectElementVisivel = length == 0 ? false : true;
|
|
322
|
+
//console.log(this.selectElement);
|
|
323
|
+
//this.selectElement.open();
|
|
324
|
+
/*
|
|
325
|
+
//let element = this.selectElement;
|
|
326
|
+
let element = document.getElementById(this.selectId);
|
|
327
|
+
console.log('dropDown', element);
|
|
328
|
+
(element as any).size = length + 1;
|
|
329
|
+
if (length == 0) {
|
|
330
|
+
self.selectElementVisivel = false;
|
|
331
|
+
} else {
|
|
332
|
+
self.selectElementVisivel = true;
|
|
333
|
+
}
|
|
334
|
+
*/
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
pesquisarEntidade(filtro) {
|
|
338
|
+
let url = this.url.replace('<<FILTRO>>', filtro).replace('<<EMPRESA>>', this.empresa.toString());
|
|
339
|
+
console.log('pesquisarEntidade url', url);
|
|
340
|
+
this.podePesquisar = false;
|
|
341
|
+
this.pesquisaSubject.next(url);
|
|
342
|
+
}
|
|
343
|
+
pesquisarEntidadeOld(filtro) {
|
|
344
|
+
let url = this.url.replace('<<FILTRO>>', filtro).replace('<<EMPRESA>>', this.empresa.toString());
|
|
345
|
+
console.log('pesquisarEntidade url', url);
|
|
346
|
+
this.podePesquisar = false;
|
|
347
|
+
this.httpClient.get(url)
|
|
348
|
+
.subscribe({ next: (result) => {
|
|
349
|
+
//this.listaPesquisa = result;
|
|
350
|
+
if (this.filterFunction) {
|
|
351
|
+
result = result.filter(this.filterFunction);
|
|
352
|
+
}
|
|
353
|
+
this.listaPesquisa = [];
|
|
354
|
+
result.forEach((ent, index) => {
|
|
355
|
+
this.listaPesquisa.push({ ...ent, Index: index, Selected: false });
|
|
356
|
+
});
|
|
357
|
+
this.podePesquisar = true;
|
|
358
|
+
if (this.listaPesquisa.length > 0) {
|
|
359
|
+
this.dropDownPesquisa(this.listaPesquisa.length);
|
|
360
|
+
}
|
|
361
|
+
}, error: error => {
|
|
362
|
+
console.log('erro pesquisa', error);
|
|
363
|
+
this.podePesquisar = true;
|
|
364
|
+
} });
|
|
365
|
+
}
|
|
366
|
+
existeNaLista(id, setRegistro = false) {
|
|
367
|
+
if (this.listaPesquisa && this.listaPesquisa.length > 0) {
|
|
368
|
+
let existe = this.listaPesquisa.find(l => l[this.campoId] === id);
|
|
369
|
+
if (existe) {
|
|
370
|
+
if (setRegistro) {
|
|
371
|
+
this.selectedItem = existe;
|
|
372
|
+
this.selecionarComboClick(this.selectedItem);
|
|
373
|
+
}
|
|
374
|
+
return true;
|
|
375
|
+
}
|
|
376
|
+
else {
|
|
377
|
+
return false;
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
else {
|
|
381
|
+
return false;
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
existeNaListaTexto(texto, setRegistro = false) {
|
|
385
|
+
console.log("existe texto:", texto, this.campoDisplay, this.listaPesquisa);
|
|
386
|
+
if (this.listaPesquisa && this.listaPesquisa.length > 0) {
|
|
387
|
+
let existe = this.listaPesquisa.find(l => l[this.campoDisplay].toUpperCase() === texto.toUpperCase());
|
|
388
|
+
if (existe) {
|
|
389
|
+
if (setRegistro) {
|
|
390
|
+
this.selectedItem = existe;
|
|
391
|
+
this.selecionarComboClick(this.selectedItem);
|
|
392
|
+
}
|
|
393
|
+
return true;
|
|
394
|
+
}
|
|
395
|
+
else {
|
|
396
|
+
return false;
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
else {
|
|
400
|
+
return false;
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
validarItemSelecionado(setarRegistro = false) {
|
|
404
|
+
console.log('validar selecionado');
|
|
405
|
+
//passar pela função de filtro
|
|
406
|
+
let valido = false;
|
|
407
|
+
if (this.selectedItem) {
|
|
408
|
+
if (this.filterFunction) {
|
|
409
|
+
let existe = [{ ...this.selectedItem }].filter(this.filterFunction);
|
|
410
|
+
if (existe != null && existe.length > 0) {
|
|
411
|
+
valido = true;
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
else {
|
|
415
|
+
valido = true;
|
|
416
|
+
}
|
|
417
|
+
if (valido && setarRegistro) {
|
|
418
|
+
this.selecionarComboClick(this.selectedItem);
|
|
419
|
+
}
|
|
420
|
+
return valido;
|
|
421
|
+
}
|
|
422
|
+
else {
|
|
423
|
+
return false;
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
carregaItemIdParaLista(id) {
|
|
427
|
+
let url = this.urlItem.replace('<<ID>>', id.toString());
|
|
428
|
+
console.log(this.urlItem);
|
|
429
|
+
console.log('pesquisar ID url', url);
|
|
430
|
+
this.podePesquisar = false;
|
|
431
|
+
this.httpClient.get(url)
|
|
432
|
+
.subscribe({ next: (result) => {
|
|
433
|
+
this.listaPesquisa = [];
|
|
434
|
+
this.listaPesquisa.push({ ...result, Index: 0, Selected: true });
|
|
435
|
+
this.podePesquisar = true;
|
|
436
|
+
if (this.listaPesquisa.length > 0) {
|
|
437
|
+
this.selectedItem = this.listaPesquisa[0];
|
|
438
|
+
this.selecionarComboClick(this.selectedItem);
|
|
439
|
+
}
|
|
440
|
+
}, error: error => {
|
|
441
|
+
console.log('erro pesquisa', error);
|
|
442
|
+
this.podePesquisar = true;
|
|
443
|
+
} });
|
|
444
|
+
}
|
|
445
|
+
limparClick() {
|
|
446
|
+
this.writeValue(null);
|
|
447
|
+
this.writePesquisa(null);
|
|
448
|
+
this.listaPesquisa = [];
|
|
449
|
+
this.dropDownPesquisa(0);
|
|
450
|
+
//this.podePesquisar = true;
|
|
451
|
+
this.pesquisaSubject.next('');
|
|
452
|
+
if (this.limpar) {
|
|
453
|
+
this.limpar();
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
verificarPesquisa() {
|
|
457
|
+
//TODO: verificar se o texto corresponde com um item da lista
|
|
458
|
+
this.selecionarComboClick(null);
|
|
459
|
+
}
|
|
460
|
+
async pesquisarClick() {
|
|
461
|
+
/*
|
|
462
|
+
if (this.pesquisaAction != null) {
|
|
463
|
+
this.pesquisaAction();
|
|
464
|
+
}
|
|
465
|
+
*/
|
|
466
|
+
//pesquisaCategoria
|
|
467
|
+
console.log(this.filterFunction, this.url, this.urlTree);
|
|
468
|
+
const modal = await this.modalCtrl.create({
|
|
469
|
+
component: ModelTreeviewComponent,
|
|
470
|
+
componentProps: {
|
|
471
|
+
//campoId: this.campoId,
|
|
472
|
+
//campoPai: this.campoPaiId,
|
|
473
|
+
//campoLabel: this.campoDisplay,
|
|
474
|
+
filterFunction: this.filterFunction,
|
|
475
|
+
empresaSelecionadaId: this.empresa,
|
|
476
|
+
tipo: this.tipo,
|
|
477
|
+
//especifico
|
|
478
|
+
//planoContas: this.planoContas,
|
|
479
|
+
url: this.isEmpty(this.urlTree) ? this.url : this.urlTree
|
|
480
|
+
},
|
|
481
|
+
cssClass: 'my-custom-modal-pesquisa'
|
|
482
|
+
});
|
|
483
|
+
modal.onDidDismiss().then(data => {
|
|
484
|
+
let result = data['data'];
|
|
485
|
+
console.log(result);
|
|
486
|
+
if (result != null && result.Id > 0) {
|
|
487
|
+
this.carregaItemIdParaLista(result.Id);
|
|
488
|
+
}
|
|
489
|
+
});
|
|
490
|
+
modal.present();
|
|
491
|
+
}
|
|
492
|
+
isEmpty(valor) {
|
|
493
|
+
return valor == null || valor == undefined || valor == '';
|
|
494
|
+
}
|
|
495
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: InputPesquisaComponent, deps: [{ token: LibConfigService }, { token: i1.HttpClient }, { token: i2.ModalController }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
496
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.7", type: InputPesquisaComponent, selector: "kb-input-pesquisa", inputs: { textoPesquisa: "textoPesquisa", max: "max", filterFunction: "filterFunction", selectId: "selectId", campoId: "campoId", campoPaiId: "campoPaiId", campoDisplay: "campoDisplay", tipo: "tipo", pesquisaChange: "pesquisaChange", pesquisaAction: "pesquisaAction", limpar: "limpar", url: "url", urlItem: "urlItem", urlTree: "urlTree", empresa: "empresa", loadInit: "loadInit" }, providers: [{
|
|
497
|
+
provide: NG_VALUE_ACCESSOR,
|
|
498
|
+
useExisting: InputPesquisaComponent,
|
|
499
|
+
multi: true
|
|
500
|
+
}], viewQueries: [{ propertyName: "selectElement", first: true, predicate: ["selectElement"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div style=\"padding-inline-end: 0px;\">\r\n <ion-item lines=\"none\" style=\"--background: inherited; --background-focused: transparent; margin-top: 2px;\" [class]=\"itemClass\">\r\n <ion-label position=\"{{ labelPosition }}\" color=\"{{ labelColor }}\">{{ label }}</ion-label>\r\n <!-- formControlName=\"{{ campo }}\" -->\r\n <ion-spinner *ngIf=\"!podePesquisar\"\r\n style=\"--min-height: 0px !important; margin-inline-end: 5px !important; margin-top: 16px;\" \r\n slot=\"start\" name=\"lines\"></ion-spinner>\r\n <!-- (ionBlur)=\"verificarPesquisa()\" -->\r\n <!-- conflito com click da lista -->\r\n <ion-input #inputPesquisa\r\n type=\"{{type}}\" \r\n [placeholder]=\"placeholder\" \r\n maxlength=\"{{ max }}\" \r\n (ionBlur)=\"onBlur($event)\"\r\n [value]=\"textoPesquisa\" (input)=\"writePesquisa(inputPesquisa.value)\" \r\n (keyup)=\"showPesquisa($event)\"\r\n autocomplete=\"off\" [style.--background]=\"inputBackgroungColor\"\r\n (click)=\"dropDownPesquisa(-1)\"\r\n [disabled]=\"readonly\" debounce=\"500\"></ion-input>\r\n <ion-button size=\"small\" slot=\"end\" tabindex=\"-1\"\r\n style=\"margin-top: 25px; margin-inline-start: 4px !important; --padding-start:2px; --padding-end: 2px;\" fill=\"clear\" color=\"medium\"\r\n (click)=\"limparClick()\">\r\n <ion-icon name=\"close-outline\"></ion-icon>\r\n </ion-button>\r\n \r\n <!--\r\n <ion-button size=\"small\" slot=\"end\" tabindex=\"-1\"\r\n style=\"margin-top: 25px; margin-inline-start: 4px !important; --padding-start:2px; --padding-end: 2px;\" fill=\"clear\" color=\"medium\"\r\n (click)=\"pesquisarClick()\">\r\n <ion-icon color=\"primary\" name=\"search\"></ion-icon>\r\n </ion-button>\r\n -->\r\n \r\n </ion-item>\r\n \r\n <ion-list tabindex=\"-1\" [hidden]=\"!selectElementVisivel || !listaPesquisa || listaPesquisa.length == 0\" class=\"pesquisa-list\" style=\"max-height: 250px; overflow-y: auto;\">\r\n \r\n <ion-item tabindex=\"-1\" button *ngFor=\"let item of listaPesquisa\" \r\n (click)=\"selecionarComboClick(item)\" [id]=\"selectId + 'IonItem' + item['Index']\"\r\n class=\"pesquisa-item\">\r\n <!-- {{ item | json}} -->\r\n <span [class]=\"{'selected-item': item['Selected'] === true}\" [innerHTML]=\"highlight(item[campoDisplay])\"></span>\r\n </ion-item>\r\n \r\n </ion-list>\r\n \r\n <!--\r\n <ion-select interface=\"popover\" #selectElement tabindex=\"-1\" [hidden]=\"!selectElementVisivel\"\r\n (ionChange)=\"selecionarComboChange($event.target.value)\">\r\n <ion-select-option *ngFor=\"let item of listaPesquisa\" [value]=\"item[campoId]\" (click)=\"selecionarComboClick(item[campoId])\">\r\n {{ item[campoDisplay] }}\r\n </ion-select-option>\r\n </ion-select>\r\n -->\r\n \r\n <!--\r\n <select [id]=\"selectId\" #selectElement tabindex=\"-1\" [hidden]=\"!selectElementVisivel\"\r\n (change)=\"selecionarComboChange($event.target.value)\" class=\"pesquisa-select\">\r\n <option *ngFor=\"let item of listaPesquisa\" [value]=\"item[campoId]\" (click)=\"selecionarComboClick(item[campoId])\">\r\n {{ item[campoDisplay] }}\r\n </option>\r\n \r\n </select>\r\n -->\r\n \r\n <div class=\"validation-errors\" *ngIf=\"form\">\r\n \r\n <ng-container *ngFor=\"let validation of validation_messages\">\r\n <div class=\"error-message\"\r\n *ngIf=\"form.get(formControlName)?.hasError(validation.type) && (form.get(formControlName)?.dirty || form.get(formControlName)?.touched)\">\r\n • {{ validation.message }}\r\n </div>\r\n </ng-container>\r\n \r\n </div>\r\n </div>", styles: [".pesquisa-select{display:block;position:absolute;top:58px;left:20px;width:100%;z-index:800;font-size:16px;font-family:Roboto,Helvetica Neue,sans-serif;border-bottom-left-radius:5px;border-bottom-right-radius:5px}.pesquisa-select option{overflow-y:hidden}.pesquisa-select option:hover,.pesquisa-select option:checked{background-color:#add8e6}.pesquisa-list{display:block;position:absolute;margin-left:20px;margin-top:-4px;width:calc(100% - 50px);z-index:800;border:1px lightgrey solid;border-bottom-left-radius:5px;border-bottom-right-radius:5px;padding:0}.pesquisa-item{--inner-padding-top: 0px;--inner-padding-bottom: 0px;--padding-top: 0px;--padding-bottom: 0px;--min-height: 30px !important;font-size:12px}.pesquisa-item button{padding:0}.selected-item{background-color:#add8e6}\n", "@charset \"UTF-8\";ion-label{margin-bottom:4px!important}ion-item ion-label{overflow:initial!important}ion-input{padding:var(--input-padding, 8px)!important;border:1px solid darkgray;border-radius:4px;width:100%;margin-top:2px;max-height:var(--input-max-height, 29px);transition:.2s ease}.has-focus{border:1px solid var(--ion-color-bluetool, #1f477d)}input:focus ion-input,input:focus ion-textarea{border:1px solid lightblue!important}input:focus ion-label{--color: blue !important}input:disabled{opacity:.9!important}.error-message{font-size:small;color:var(--error-text-color, red);margin-left:15px}.padding{padding:auto}.no-padding{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px;height:55px!important}.no-padding-end{--inner-padding-end: 0px}.no-padding-no-height{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px}.padding-top{--padding-top: 0px}.item-inner{padding-right:0!important}.label-right ion-label{transform-origin:right top;align-self:flex-end;margin-bottom:4%!important}.align-to-right ion-label{position:relative;left:25%;text-align:end}.error-input ion-input,.error-shake ion-input{animation:shake .4s 1 linear;border:1px solid var(--error-text-color, red)!important}@keyframes shake{0%{transform:translate(20px)}20%{transform:translate(-20px)}40%{transform:translate(10px)}60%{transform:translate(-10px)}80%{transform:translate(4px)}to{transform:translate(0)}}.error-input ion-label,.error-shake ion-label{color:var(--error-text-color, red)!important}.error-input ion-input,.error-shake ion-input{border:1px solid red!important}.error-shake ion-input{animation:shake .4s 1 linear}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonInput, selector: "ion-input", inputs: ["accept", "autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "legacy", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "size", "spellcheck", "step", "type", "value"] }, { kind: "component", type: i2.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i2.IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: i2.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "directive", type: i2.TextValueAccessor, selector: "ion-input:not([type=number]),ion-textarea,ion-searchbar" }] }); }
|
|
501
|
+
}
|
|
502
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: InputPesquisaComponent, decorators: [{
|
|
503
|
+
type: Component,
|
|
504
|
+
args: [{ selector: 'kb-input-pesquisa', providers: [{
|
|
505
|
+
provide: NG_VALUE_ACCESSOR,
|
|
506
|
+
useExisting: InputPesquisaComponent,
|
|
507
|
+
multi: true
|
|
508
|
+
}], template: "<div style=\"padding-inline-end: 0px;\">\r\n <ion-item lines=\"none\" style=\"--background: inherited; --background-focused: transparent; margin-top: 2px;\" [class]=\"itemClass\">\r\n <ion-label position=\"{{ labelPosition }}\" color=\"{{ labelColor }}\">{{ label }}</ion-label>\r\n <!-- formControlName=\"{{ campo }}\" -->\r\n <ion-spinner *ngIf=\"!podePesquisar\"\r\n style=\"--min-height: 0px !important; margin-inline-end: 5px !important; margin-top: 16px;\" \r\n slot=\"start\" name=\"lines\"></ion-spinner>\r\n <!-- (ionBlur)=\"verificarPesquisa()\" -->\r\n <!-- conflito com click da lista -->\r\n <ion-input #inputPesquisa\r\n type=\"{{type}}\" \r\n [placeholder]=\"placeholder\" \r\n maxlength=\"{{ max }}\" \r\n (ionBlur)=\"onBlur($event)\"\r\n [value]=\"textoPesquisa\" (input)=\"writePesquisa(inputPesquisa.value)\" \r\n (keyup)=\"showPesquisa($event)\"\r\n autocomplete=\"off\" [style.--background]=\"inputBackgroungColor\"\r\n (click)=\"dropDownPesquisa(-1)\"\r\n [disabled]=\"readonly\" debounce=\"500\"></ion-input>\r\n <ion-button size=\"small\" slot=\"end\" tabindex=\"-1\"\r\n style=\"margin-top: 25px; margin-inline-start: 4px !important; --padding-start:2px; --padding-end: 2px;\" fill=\"clear\" color=\"medium\"\r\n (click)=\"limparClick()\">\r\n <ion-icon name=\"close-outline\"></ion-icon>\r\n </ion-button>\r\n \r\n <!--\r\n <ion-button size=\"small\" slot=\"end\" tabindex=\"-1\"\r\n style=\"margin-top: 25px; margin-inline-start: 4px !important; --padding-start:2px; --padding-end: 2px;\" fill=\"clear\" color=\"medium\"\r\n (click)=\"pesquisarClick()\">\r\n <ion-icon color=\"primary\" name=\"search\"></ion-icon>\r\n </ion-button>\r\n -->\r\n \r\n </ion-item>\r\n \r\n <ion-list tabindex=\"-1\" [hidden]=\"!selectElementVisivel || !listaPesquisa || listaPesquisa.length == 0\" class=\"pesquisa-list\" style=\"max-height: 250px; overflow-y: auto;\">\r\n \r\n <ion-item tabindex=\"-1\" button *ngFor=\"let item of listaPesquisa\" \r\n (click)=\"selecionarComboClick(item)\" [id]=\"selectId + 'IonItem' + item['Index']\"\r\n class=\"pesquisa-item\">\r\n <!-- {{ item | json}} -->\r\n <span [class]=\"{'selected-item': item['Selected'] === true}\" [innerHTML]=\"highlight(item[campoDisplay])\"></span>\r\n </ion-item>\r\n \r\n </ion-list>\r\n \r\n <!--\r\n <ion-select interface=\"popover\" #selectElement tabindex=\"-1\" [hidden]=\"!selectElementVisivel\"\r\n (ionChange)=\"selecionarComboChange($event.target.value)\">\r\n <ion-select-option *ngFor=\"let item of listaPesquisa\" [value]=\"item[campoId]\" (click)=\"selecionarComboClick(item[campoId])\">\r\n {{ item[campoDisplay] }}\r\n </ion-select-option>\r\n </ion-select>\r\n -->\r\n \r\n <!--\r\n <select [id]=\"selectId\" #selectElement tabindex=\"-1\" [hidden]=\"!selectElementVisivel\"\r\n (change)=\"selecionarComboChange($event.target.value)\" class=\"pesquisa-select\">\r\n <option *ngFor=\"let item of listaPesquisa\" [value]=\"item[campoId]\" (click)=\"selecionarComboClick(item[campoId])\">\r\n {{ item[campoDisplay] }}\r\n </option>\r\n \r\n </select>\r\n -->\r\n \r\n <div class=\"validation-errors\" *ngIf=\"form\">\r\n \r\n <ng-container *ngFor=\"let validation of validation_messages\">\r\n <div class=\"error-message\"\r\n *ngIf=\"form.get(formControlName)?.hasError(validation.type) && (form.get(formControlName)?.dirty || form.get(formControlName)?.touched)\">\r\n • {{ validation.message }}\r\n </div>\r\n </ng-container>\r\n \r\n </div>\r\n </div>", styles: [".pesquisa-select{display:block;position:absolute;top:58px;left:20px;width:100%;z-index:800;font-size:16px;font-family:Roboto,Helvetica Neue,sans-serif;border-bottom-left-radius:5px;border-bottom-right-radius:5px}.pesquisa-select option{overflow-y:hidden}.pesquisa-select option:hover,.pesquisa-select option:checked{background-color:#add8e6}.pesquisa-list{display:block;position:absolute;margin-left:20px;margin-top:-4px;width:calc(100% - 50px);z-index:800;border:1px lightgrey solid;border-bottom-left-radius:5px;border-bottom-right-radius:5px;padding:0}.pesquisa-item{--inner-padding-top: 0px;--inner-padding-bottom: 0px;--padding-top: 0px;--padding-bottom: 0px;--min-height: 30px !important;font-size:12px}.pesquisa-item button{padding:0}.selected-item{background-color:#add8e6}\n", "@charset \"UTF-8\";ion-label{margin-bottom:4px!important}ion-item ion-label{overflow:initial!important}ion-input{padding:var(--input-padding, 8px)!important;border:1px solid darkgray;border-radius:4px;width:100%;margin-top:2px;max-height:var(--input-max-height, 29px);transition:.2s ease}.has-focus{border:1px solid var(--ion-color-bluetool, #1f477d)}input:focus ion-input,input:focus ion-textarea{border:1px solid lightblue!important}input:focus ion-label{--color: blue !important}input:disabled{opacity:.9!important}.error-message{font-size:small;color:var(--error-text-color, red);margin-left:15px}.padding{padding:auto}.no-padding{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px;height:55px!important}.no-padding-end{--inner-padding-end: 0px}.no-padding-no-height{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px}.padding-top{--padding-top: 0px}.item-inner{padding-right:0!important}.label-right ion-label{transform-origin:right top;align-self:flex-end;margin-bottom:4%!important}.align-to-right ion-label{position:relative;left:25%;text-align:end}.error-input ion-input,.error-shake ion-input{animation:shake .4s 1 linear;border:1px solid var(--error-text-color, red)!important}@keyframes shake{0%{transform:translate(20px)}20%{transform:translate(-20px)}40%{transform:translate(10px)}60%{transform:translate(-10px)}80%{transform:translate(4px)}to{transform:translate(0)}}.error-input ion-label,.error-shake ion-label{color:var(--error-text-color, red)!important}.error-input ion-input,.error-shake ion-input{border:1px solid red!important}.error-shake ion-input{animation:shake .4s 1 linear}\n"] }]
|
|
509
|
+
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
510
|
+
type: Inject,
|
|
511
|
+
args: [LibConfigService]
|
|
512
|
+
}] }, { type: i1.HttpClient }, { type: i2.ModalController }], propDecorators: { textoPesquisa: [{
|
|
513
|
+
type: Input
|
|
514
|
+
}], max: [{
|
|
515
|
+
type: Input
|
|
516
|
+
}], filterFunction: [{
|
|
517
|
+
type: Input
|
|
518
|
+
}], selectId: [{
|
|
519
|
+
type: Input
|
|
520
|
+
}], campoId: [{
|
|
521
|
+
type: Input
|
|
522
|
+
}], campoPaiId: [{
|
|
523
|
+
type: Input
|
|
524
|
+
}], campoDisplay: [{
|
|
525
|
+
type: Input
|
|
526
|
+
}], tipo: [{
|
|
527
|
+
type: Input
|
|
528
|
+
}], selectElement: [{
|
|
529
|
+
type: ViewChild,
|
|
530
|
+
args: ['selectElement', { static: false }]
|
|
531
|
+
}], pesquisaChange: [{
|
|
532
|
+
type: Input
|
|
533
|
+
}], pesquisaAction: [{
|
|
534
|
+
type: Input
|
|
535
|
+
}], limpar: [{
|
|
536
|
+
type: Input
|
|
537
|
+
}], url: [{
|
|
538
|
+
type: Input
|
|
539
|
+
}], urlItem: [{
|
|
540
|
+
type: Input
|
|
541
|
+
}], urlTree: [{
|
|
542
|
+
type: Input
|
|
543
|
+
}], empresa: [{
|
|
544
|
+
type: Input
|
|
545
|
+
}], loadInit: [{
|
|
546
|
+
type: Input
|
|
547
|
+
}] } });
|
|
548
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtcGVzcXVpc2EuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXBwcHJvamVjdC1jb21wb25lbnRzL3NyYy9saWIvaW5wdXQtcGVzcXVpc2EvaW5wdXQtcGVzcXVpc2EuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXBwcHJvamVjdC1jb21wb25lbnRzL3NyYy9saWIvaW5wdXQtcGVzcXVpc2EvaW5wdXQtcGVzcXVpc2EuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JHLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6RSxPQUFPLEVBQUUsT0FBTyxFQUFnQixFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUN4RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNwRixPQUFPLEVBQWEsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7QUFZOUUsTUFBTSxPQUFPLHNCQUF1QixTQUFRLGtCQUFrQjtJQTJDNUQsVUFBVSxDQUFDLEtBQW1CO1FBQzVCLG9DQUFvQztRQUNwQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFO1lBQy9CLElBQUksQ0FBQyxhQUFhLENBQUMsRUFB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c0JBQWYsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEluamVjdCwgSW5wdXQsIE9uSW5pdCwgUHJlZGljYXRlLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBJb25TZWxlY3QsIE1vZGFsQ29udHJvbGxlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcclxuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBCYXNlSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi9iYXNlSW5wdXRDb21wb25lbnQnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xyXG5pbXBvcnQgeyBNb2RlbFRyZWV2aWV3Q29tcG9uZW50IH0gZnJvbSAnLi4vbW9kZWwtdHJlZXZpZXcvbW9kZWwtdHJlZXZpZXcuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTGliQ29uZmlnLCBMaWJDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vYXBwcHJvamVjdC1jb21wb25lbnRzLm1vZHVsZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2tiLWlucHV0LXBlc3F1aXNhJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vaW5wdXQtcGVzcXVpc2EuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2lucHV0LXBlc3F1aXNhLmNvbXBvbmVudC5zY3NzJywgJy4vLi4vYmFzZUNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbe1xyXG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICB1c2VFeGlzdGluZzogSW5wdXRQZXNxdWlzYUNvbXBvbmVudCxcclxuICAgIG11bHRpOiB0cnVlXHJcbiAgfV1cclxufSlcclxuZXhwb3J0IGNsYXNzIElucHV0UGVzcXVpc2FDb21wb25lbnQgZXh0ZW5kcyBCYXNlSW5wdXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuXHJcbiAgcG9kZVBlc3F1aXNhcjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgdGV4dG9QZXNxdWlzYTogc3RyaW5nID0gJyc7XHJcbiAgc2VsZWN0RWxlbWVudFZpc2l2ZWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBsaXN0YVBlc3F1aXNhOiBhbnlbXSA9IFtdO1xyXG4gIHNlbGVjdGVkSXRlbTogYW55O1xyXG4gIEBJbnB1dCgpIG92ZXJyaWRlIG1heDogc3RyaW5nID0gJzMwJztcclxuICBwcml2YXRlIHBlc3F1aXNhU3ViamVjdDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgQElucHV0KCkgZmlsdGVyRnVuY3Rpb246IFByZWRpY2F0ZTxhbnk+IHwgbnVsbCA9IG51bGw7XHJcbiAgQElucHV0KCkgc2VsZWN0SWQ6IHN0cmluZyA9ICdzZWxlY3RFbGVtZW50JztcclxuICBASW5wdXQoKSBjYW1wb0lkOiBzdHJpbmcgPSAnSWQnO1xyXG4gIEBJbnB1dCgpIGNhbXBvUGFpSWQ6IHN0cmluZyA9ICdQYWlJZCc7XHJcbiAgQElucHV0KCkgY2FtcG9EaXNwbGF5OiBzdHJpbmcgPSAnRGVzY3JpY2FvJztcclxuICBASW5wdXQoKSB0aXBvOiBzdHJpbmcgPSAnJztcclxuICAvL0BWaWV3Q2hpbGQoJ3NlbGVjdEVsZW1lbnQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZSB9KSBzZWxlY3RFbGVtZW50O1xyXG4gIEBWaWV3Q2hpbGQoJ3NlbGVjdEVsZW1lbnQnLCB7IHN0YXRpYzogZmFsc2UgfSkgc2VsZWN0RWxlbWVudDogSW9uU2VsZWN0IHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIEBJbnB1dCgpIHBlc3F1aXNhQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBJbnB1dCgpIHBlc3F1aXNhQWN0aW9uPzogRnVuY3Rpb247XHJcbiAgQElucHV0KCkgbGltcGFyPzogRnVuY3Rpb247XHJcbiAgLy9wYXJhbWV0cm9zIHBhcmEgY2hhbWFkYSBBUElcclxuICAvL2VuZHBvaW50IHBhcmEgcGVzcXVpc2EgcG9yIGRpZ2l0YcOnw6NvXHJcbiAgQElucHV0KCkgdXJsOiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKSB1cmxJdGVtOiBzdHJpbmcgPSAnJztcclxuICAvL2VuZHBvaW50IHBhcmEgbW9udGFyIGEgYXJ2b3JlLCBzZSBlc3RpdmVyIHZhemlhIHNlcsOhIHVzYWRvIG8gY2FtcG8gJ3VybCdcclxuICBASW5wdXQoKSB1cmxUcmVlOiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKSBlbXByZXNhOiBudW1iZXIgPSAwO1xyXG4gIEBJbnB1dCgpIGxvYWRJbml0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vcGxhbm9Db250YXM6IG51bWJlcjtcclxuXHJcbiAgLy9jb250cm9sIHZhbHVlIGFjZXNzb3JcclxuICBwdWJsaWMgZGF0YTogbnVtYmVyIHwgYW55O1xyXG4gIHByaXZhdGUgb25DaGFuZ2U6IEZ1bmN0aW9uID0gKGRhdGE6IG51bWJlcikgPT4geyB9O1xyXG4gIHByaXZhdGUgb25Ub3VjaDogRnVuY3Rpb24gPSAoKSA9PiB7IH07XHJcbiAgcHJpdmF0ZSBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBjb25zb2xlID0gY29uc29sZTtcclxuXHJcbiAgbW9kZWxDaGFuZ2VkOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcbiAgbW9kZWxDaGFuZ2VTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XHJcblxyXG4gIHdyaXRlVmFsdWUodmFsdWU6IG51bWJlciB8IGFueSk6IHZvaWQge1xyXG4gICAgLy9jb25zb2xlLmxvZygnd3JpdGUgdmFsdWUnLCB2YWx1ZSk7XHJcbiAgICB0aGlzLm9uQ2hhbmdlKHZhbHVlKTtcclxuICAgIHRoaXMuZGF0YSA9IHZhbHVlO1xyXG4gICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT0gMCkge1xyXG4gICAgICB0aGlzLndyaXRlUGVzcXVpc2EoJycpO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IG51bGw7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5sb2FkSW5pdCA9PSB0cnVlKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkSW5pdCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubW9kZWxDaGFuZ2VkLm5leHQodmFsdWUpO1xyXG4gICAgICAgIC8vdGhpcy5jYXJyZWdhSXRlbUlkUGFyYUxpc3RhKHZhbHVlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuc2VsZWN0ZWRJdGVtKTtcclxuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRJdGVtIHx8ICh0aGlzLnNlbGVjdGVkSXRlbSAmJiB0aGlzLnNlbGVjdGVkSXRlbVt0aGlzLmNhbXBvSWRdICE9IHZhbHVlKSkge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ0lkIGRpZmVyZW50ZScpO1xyXG4gICAgICAgICAgdGhpcy5tb2RlbENoYW5nZWQubmV4dCh2YWx1ZSk7XHJcbiAgICAgICAgICAvL3RoaXMuY2FycmVnYUl0ZW1JZFBhcmFMaXN0YSh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gIH1cclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcclxuICB9XHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5vblRvdWNoID0gZm47XHJcbiAgfVxyXG4gIHNldERpc2FibGVkU3RhdGU/KGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuZGlzYWJsZWQgPSB0aGlzLmRpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgQkFTRV9BUEkgPSB0aGlzLmNvbmZpZy5hcGlVcmw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoTGliQ29uZmlnU2VydmljZSkgcHJpdmF0ZSBjb25maWc6IExpYkNvbmZpZyxcclxuICAgIHByaXZhdGUgaHR0cENsaWVudDogSHR0cENsaWVudCxcclxuICAgIHByaXZhdGUgbW9kYWxDdHJsOiBNb2RhbENvbnRyb2xsZXIpIHtcclxuICAgIHN1cGVyKCk7XHJcblxyXG4gICAgdGhpcy5tb2RlbENoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMubW9kZWxDaGFuZ2VkXHJcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSg1MDApXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgICB0aGlzLmNhcnJlZ2FJdGVtSWRQYXJhTGlzdGEoZGF0YSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25CbHVyKGV2ZW50OiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKCdibHVyJywgZXZlbnQpO1xyXG4gICAgLy9jb25zb2xlLmxvZyhldmVudC5kZXRhaWwucmVsYXRlZFRhcmdldCk7XHJcbiAgICBpZiAoZXZlbnQuZGV0YWlsLnJlbGF0ZWRUYXJnZXQgPT0gbnVsbCB8fCBldmVudC5kZXRhaWwucmVsYXRlZFRhcmdldC5pZC5pbmRleE9mKHRoaXMuc2VsZWN0SWQgKyAnSW9uSXRlbScpID09IC0xKSB7XHJcbiAgICAgIC8vY29uc29sZS5sb2coXCJ0cnVlXCIsIGV2ZW50LmRldGFpbC5yZWxhdGVkVGFyZ2V0LmlkKTtcclxuICAgICAgLy9wZXNxdWlzYXIgaXRlbSBuYSBsaXN0YVxyXG4gICAgICBpZiAoIXRoaXMuZXhpc3RlTmFMaXN0YVRleHRvKHRoaXMudGV4dG9QZXNxdWlzYSwgdHJ1ZSkpIHtcclxuICAgICAgICB0aGlzLmxpbXBhckNsaWNrKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuZHJvcERvd25QZXNxdWlzYSgwKTtcclxuICAgICAgaWYgKHRoaXMuZm9ybSkge1xyXG4gICAgICAgIHRoaXMuZm9ybS5nZXQodGhpcy5mb3JtQ29udHJvbE5hbWUpPy5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIG5nT25Jbml0KCkge1xyXG4gICAgLy90cmF0YXIgdXJsc1xyXG4gICAgdGhpcy51cmwgPSB0aGlzLnVybC5zdGFydHNXaXRoKCdodHRwJykgPyB0aGlzLnVybCA6IGAke3RoaXMuQkFTRV9BUEl9LyR7dGhpcy51cmx9YDtcclxuICAgIHRoaXMudXJsSXRlbSA9IHRoaXMudXJsSXRlbS5zdGFydHNXaXRoKCdodHRwJykgPyB0aGlzLnVybEl0ZW0gOiBgJHt0aGlzLkJBU0VfQVBJfS8ke3RoaXMudXJsSXRlbX1gO1xyXG5cclxuICAgIHRoaXMucGVzcXVpc2FTdWJqZWN0LnBpcGUoc3dpdGNoTWFwKCh1cmwpID0+IHtcclxuICAgICAgdGhpcy5jb25zb2xlLmxvZygnc3ViamVjdCB1cmw6JywgdXJsKTtcclxuICAgICAgaWYgKCF0aGlzLmlzRW1wdHkodXJsKSlcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldDxhbnk+KHVybCk7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgfSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgLy90aGlzLmxpc3RhUGVzcXVpc2EgPSByZXN1bHQ7XHJcbiAgICAgICAgICB0aGlzLmNvbnNvbGUubG9nKCdzdWJqZWN0IHN1YnNjcmliZSByZXN1bHQ6JywgcmVzdWx0KTtcclxuICAgICAgICAgIHRoaXMubGlzdGFQZXNxdWlzYSA9IFtdO1xyXG5cclxuICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZmlsdGVyRnVuY3Rpb24pIHtcclxuICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuZmlsdGVyKHRoaXMuZmlsdGVyRnVuY3Rpb24pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXN1bHQuZm9yRWFjaCgoZW50OiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmxpc3RhUGVzcXVpc2EucHVzaCh7IC4uLmVudCwgSW5kZXg6IGluZGV4LCBTZWxlY3RlZDogZmFsc2UgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMucG9kZVBlc3F1aXNhciA9IHRydWU7XHJcbiAgICAgICAgICBpZiAodGhpcy5saXN0YVBlc3F1aXNhLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5kcm9wRG93blBlc3F1aXNhKHRoaXMubGlzdGFQZXNxdWlzYS5sZW5ndGgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAsIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMucG9kZVBlc3F1aXNhciA9IHRydWU7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnZXJybyBwZXNxdWlzYScsIGVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgd3JpdGVQZXNxdWlzYSh2YWx1ZTogc3RyaW5nIHwgYW55KTogdm9pZCB7XHJcbiAgICAvL2NvbnNvbGUubG9nKCd3cml0ZSBwZXNxdWlzYScsIHZhbHVlKTtcclxuICAgIHRoaXMudGV4dG9QZXNxdWlzYSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgc2hvd1Blc3F1aXNhKGU6IGFueSk6IHZvaWQge1xyXG4gICAgLy9jb25zb2xlLmxvZygnc2hvdyBwZXNxdWlzYScsIGUua2V5Q29kZSk7XHJcbiAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICBjb25zdCBpbmRleCA9IGUudGFyZ2V0LnNlbGVjdGlvblN0YXJ0ID49IDEgPyAoZS50YXJnZXQuc2VsZWN0aW9uU3RhcnQgLSAxKSA6IDA7XHJcbiAgICAvL2NvbnNvbGUubG9nKGluZGV4LCAndmFsb3IgJywgZXZlbnQudGFyZ2V0LnZhbHVlLCAnY2hhciAnLCBldmVudC50YXJnZXQudmFsdWUuY2hhckNvZGVBdChpbmRleCkpO1xyXG4gICAgY29uc3Qga2V5QXQgPSBlLnRhcmdldC52YWx1ZS5jaGFyQ29kZUF0KGluZGV4KTtcclxuICAgIC8qXHJcbiAgICBpZiAoKGUua2V5Q29kZSA+PSA0OCAmJiBlLmtleUNvZGUgPD0gNTcpIHx8XHJcbiAgICAgIChrZXlBdCA+PSA0OCAmJiBrZXlBdCA8PSA1NykgfHxcclxuICAgICAgKGUua2V5Q29kZSA+PSA2NSAmJiBlLmtleUNvZGUgPD0gOTApIHx8XHJcbiAgICAgIChlLmtleUNvZGUgPj0gOTYgJiYgZS5rZXlDb2RlIDw9IDEwNSkgfHxcclxuICAgICAgKGUua2V5Q29kZSA9PSA4KSkge1xyXG4gICAgICAgICovXHJcbiAgICBpZiAoZS5rZXlDb2RlICE9IDQwICYmIGUua2V5Q29kZSAhPSAzOCkge1xyXG4gICAgICBpZiAoIXNlbGYucG9kZVBlc3F1aXNhcikge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBsZXQgZmlsdHJvID0gc2VsZi50ZXh0b1Blc3F1aXNhO1xyXG4gICAgICBpZiAoZmlsdHJvICE9IG51bGwgJiYgZmlsdHJvICE9ICcnICYmIGZpbHRyby5sZW5ndGggPj0gMikge1xyXG4gICAgICAgIHNlbGYucGVzcXVpc2FyRW50aWRhZGUoZmlsdHJvKTtcclxuXHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKGUua2V5Q29kZSA9PSA4ICYmICFmaWx0cm8pIHtcclxuICAgICAgICAgIHRoaXMubGltcGFyQ2xpY2soKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKGUua2V5Q29kZSA9PSA0MCB8fCBlLmtleUNvZGUgPT0gMzgpIHtcclxuICAgICAgICBzZWxmLmRyb3BEb3duUGVzcXVpc2Eoc2VsZi5saXN0YVBlc3F1aXNhLmxlbmd0aCk7XHJcbiAgICAgICAgaWYgKHNlbGYuc2VsZWN0RWxlbWVudFZpc2l2ZWwgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgLy9sZXQgc2VsZWN0ID0gc2VsZi5zZWxlY3RFbGVtZW50OyAvL2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNlbGYuVGVtcGxhdGVTZWxlY3QxSWQoKSk7XHJcblxyXG4gICAgICAgICAgLy9pb24tbGlzdFxyXG4gICAgICAgICAgLy9zZWxlY2lvbmFkb1xyXG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhzZWxmLmxpc3RhUGVzcXVpc2EpO1xyXG4gICAgICAgICAgbGV0IGluYyA9IGUua2V5Q29kZSA9PSA0MCA/IDEgOiAtMTtcclxuICAgICAgICAgIGxldCBzZWxlY3RlZCA9IHNlbGYubGlzdGFQZXNxdWlzYS5maW5kKHMgPT4gc1snU2VsZWN0ZWQnXSA9PT0gdHJ1ZSk7XHJcbiAgICAgICAgICBsZXQgY3VyID0gMDtcclxuICAgICAgICAgIGlmIChzZWxlY3RlZCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGN1ciA9IHNlbGVjdGVkWydJbmRleCddO1xyXG4gICAgICAgICAgICAvL2Rlc21hcmNhciBvIGF0dWFsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkWydTZWxlY3RlZCddID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGN1ciA9IGN1ciArIGluYztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGN1ciA9IDA7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKGN1ciA8IDApIHtcclxuICAgICAgICAgICAgY3VyID0gc2VsZi5saXN0YVBlc3F1aXNhLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGN1ciA+PSBzZWxmLmxpc3RhUGVzcXVpc2EubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGN1ciA9IDA7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgbGV0IG5vdm9TZWxlY3RlZCA9IHNlbGYubGlzdGFQZXNxdWlzYS5maW5kKG4gPT4gblsnSW5kZXgnXSA9PT0gY3VyKTtcclxuICAgICAgICAgIGlmIChub3ZvU2VsZWN0ZWQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBub3ZvU2VsZWN0ZWRbJ1NlbGVjdGVkJ10gPSB0cnVlO1xyXG4gICAgICAgICAgICBzZWxmLnNlbGVjdGVkSXRlbSA9IG5vdm9TZWxlY3RlZDtcclxuICAgICAgICAgICAgc2VsZi50ZXh0b1Blc3F1aXNhID0gbm92b1NlbGVjdGVkW3NlbGYuY2FtcG9EaXNwbGF5XTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8qXHJcbiAgICAgICAgICBsZXQgc2VsZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5zZWxlY3RJZCkgYXMgYW55O1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ3NlbGVjdCBFbGVtZW50Jywgc2VsZWN0KVxyXG4gICAgICAgICAgaWYgKHNlbGVjdCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGxldCBpbmMgPSBlLmtleUNvZGUgPT0gNDAgPyAxIDogLTE7XHJcbiAgICAgICAgICAgIGxldCBjdXIgPSBzZWxlY3Quc2VsZWN0ZWRJbmRleDtcclxuICAgICAgICAgICAgaWYgKGN1ciA9PSBOYU4pIGN1ciA9IC0xO1xyXG4gICAgICAgICAgICBzZWxlY3Quc2VsZWN0ZWRJbmRleCA9IGN1ciArIGluYztcclxuICAgICAgICAgICAgaWYgKHNlbGVjdC5zZWxlY3RlZEluZGV4ID49IDAgJiYgc2VsZWN0LnNlbGVjdGVkSW5kZXggPCBzZWxmLmxpc3RhUGVzcXVpc2EubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZEl0ZW0gPSBzZWxmLmxpc3RhUGVzcXVpc2Fbc2VsZWN0LnNlbGVjdGVkSW5kZXhdO1xyXG4gICAgICAgICAgICAgIGlmIChzZWxmLnNlbGVjdGVkSXRlbSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnRleHRvUGVzcXVpc2EgPSBzZWxmLnNlbGVjdGVkSXRlbVtzZWxmLmNhbXBvRGlzcGxheV07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAqL1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0gZWxzZVxyXG4gICAgICAgIGlmIChlLmtleUNvZGUgPT0gMTMpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdlbnRlciBrZXknLCBlKVxyXG4gICAgICAgICAgLy9zZWxmLnNlbGVjaW9uYXJDb21ib0NsaWNrKGUpO1xyXG4gICAgICAgICAgc2VsZi5zZWxlY2lvbmFyQ29tYm9DbGljayhudWxsKTtcclxuICAgICAgICAgIC8vcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZS5rZXlDb2RlID09IDI3KSB7XHJcbiAgICAgICAgICAvL0VTQ1xyXG4gICAgICAgICAgc2VsZi5kcm9wRG93blBlc3F1aXNhKDApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBoaWdobGlnaHQodGV4dG86IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgaW5kZXggPSB0ZXh0by50b0xvd2VyQ2FzZSgpLmluZGV4T2YodGhpcy50ZXh0b1Blc3F1aXNhLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgLy9jb25zb2xlLmxvZyhpbmRleCk7XHJcbiAgICBpZiAoaW5kZXggPj0gMCkge1xyXG4gICAgICByZXR1cm4gdGV4dG8uc3Vic3RyaW5nKDAsIGluZGV4KSArICc8c3Ryb25nPicgKyB0ZXh0by5zdWJzdHJpbmcoaW5kZXgsIGluZGV4ICsgdGhpcy50ZXh0b1Blc3F1aXNhLmxlbmd0aCkgKyAnPC9zdHJvbmc+JyArIHRleHRvLnN1YnN0cmluZyhpbmRleCArIHRoaXMudGV4dG9QZXNxdWlzYS5sZW5ndGgpOyAgLy90ZXh0by5yZXBsYWNlKHRoaXMudGV4dG9QZXNxdWlzYSwgYDxzdHJvbmc+JHt0aGlzLnRleHRvUGVzcXVpc2F9PC9zdHJvbmc+YCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGV4dG87XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWxlY2lvbmFyQ29tYm9DbGljayhpdGVtOiBhbnkpIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKGl0ZW0pO1xyXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgLy8gY29uc29sZS5sb2coJ2NvbWJvIGNsaWNrJywgc2VsZik7XHJcblxyXG4gICAgLypcclxuICAgIGxldCBzZWxlY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLnNlbGVjdElkKSBhcyBhbnk7XHJcbiAgICBpZiAoc2VsZWN0LnNlbGVjdGVkSW5kZXggPj0gMCkge1xyXG4gICAgICBzZWxmLnNlbGVjdGVkSXRlbSA9IHNlbGYubGlzdGFQZXNxdWlzYVtzZWxlY3Quc2VsZWN0ZWRJbmRleF07XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZygnc2VsZWN0ZWQnLCB0aGlzLnNlbGVjdGVkSXRlbSk7XHJcbiAgICAvL3NlbGYuc2VsZWN0ZWRJdGVtID0gdGhpcy5saXN0YVBlc3F1aXNhLmZpbmQoaSA9PiBpW3RoaXMuY2FtcG9JZF0gPT0gZSk7XHJcbiAgICBpZiAoc2VsZi5zZWxlY3RlZEl0ZW0gIT0gbnVsbCkge1xyXG4gICAgICBzZWxmLnRleHRvUGVzcXVpc2EgPSBzZWxmLnNlbGVjdGVkSXRlbVtzZWxmLmNhbXBvRGlzcGxheV07XHJcbiAgICAgIHNlbGYud3JpdGVWYWx1ZShzZWxmLnNlbGVjdGVkSXRlbVtzZWxmLmNhbXBvSWRdKTtcclxuICAgICAgaWYgKGUgIT0gbnVsbCkge1xyXG4gICAgICAgIHNlbGYuc2VsZWN0RWxlbWVudFZpc2l2ZWwgPSBmYWxzZTtcclxuICAgICAgICBpZiAoc2VsZi5hY3Rpb24gIT0gbnVsbCkge1xyXG4gICAgICAgICAgc2VsZi5hY3Rpb24oc2VsZi5zZWxlY3RlZEl0ZW0oKSwgZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgc2VsZi5zZWxlY3RFbGVtZW50VmlzaXZlbCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgKi9cclxuICAgIC8vIHBlc3F1aXNhciBzZWxlY2lvbmFkb1xyXG4gICAgLy8gY29uc29sZS5sb2codGhpcy5saXN0YVBlc3F1aXNhKTtcclxuICAgIGxldCBzZWxlY3RlZCA9IHRoaXMubGlzdGFQZXNxdWlzYS5maW5kKHMgPT4gc1snU2VsZWN0ZWQnXSA9PT0gdHJ1ZSk7XHJcblxyXG4gICAgLy8gaWYgKCFzZWxlY3RlZCkge1xyXG4gICAgLy8gICBjb25zb2xlLmxvZyh0aGlzLmNhbXBvSWQsIGl0ZW0pO1xyXG4gICAgLy8gICBzZWxlY3RlZCA9IHRoaXMubGlzdGFQZXNxdWlzYS5maWx0ZXIoIHMgPT4gc1t0aGlzLmNhbXBvSWRdID09IGl0ZW1bdGhpcy5jYW1wb0lkXSk7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgLy9zZSBvIGl0ZW0gZm9ybSBwYXNzYWRvIGNvbW8gcGFyYW1ldHJvIChjbGljayBubyBpb24taXRlbSlcclxuICAgIGlmIChpdGVtICE9IG51bGwpIHtcclxuICAgICAgaWYgKHNlbGVjdGVkICE9IG51bGwpIHtcclxuICAgICAgICBzZWxlY3RlZFsnU2VsZWN0ZWQnXSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIGl0ZW1bJ1NlbGVjdGVkJ10gPSB0cnVlO1xyXG4gICAgICBzZWxlY3RlZCA9IGl0ZW07XHJcbiAgICB9XHJcbiAgICBpZiAoc2VsZWN0ZWQgIT0gbnVsbCkge1xyXG4gICAgICBzZWxmLnNlbGVjdGVkSXRlbSA9IHNlbGVjdGVkO1xyXG4gICAgICBzZWxmLnRleHRvUGVzcXVpc2EgPSBzZWxlY3RlZFtzZWxmLmNhbXBvRGlzcGxheV07XHJcbiAgICAgIHNlbGYud3JpdGVWYWx1ZShzZWxlY3RlZFtzZWxmLmNhbXBvSWRdKTtcclxuICAgICAgc2VsZi5zZWxlY3RFbGVtZW50VmlzaXZlbCA9IGZhbHNlO1xyXG4gICAgICAvL2NvbnNvbGUubG9nKCdhY3Rpb24nLCBzZWxmLmNoYW5nZSk7XHJcbiAgICAgIGlmIChzZWxmLnBlc3F1aXNhQ2hhbmdlICE9IG51bGwpIHtcclxuICAgICAgICBzZWxmLnBlc3F1aXNhQ2hhbmdlLmVtaXQoc2VsZi5zZWxlY3RlZEl0ZW0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzZWxmLnNlbGVjdEVsZW1lbnRWaXNpdmVsID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyB0aGlzLmxpc3RhUGVzcXVpc2EuZm9yRWFjaCggcGVzcXVpc2EgPT4ge1xyXG4gICAgLy8gICBjb25zb2xlLmxvZyhwZXNxdWlzYSwgc2VsZi5kYXRhKTtcclxuICAgIC8vIH0gKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMudGV4dG9QZXNxdWlzYSk7XHJcbiAgfVxyXG5cclxuICBzZWxlY2lvbmFyQ29tYm9DaGFuZ2UoZTogYW55KSB7XHJcbiAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICBjb25zb2xlLmxvZygnY29tYm8gY2hhbmdlJywgZSk7XHJcbiAgICBzZWxmLnNlbGVjdGVkSXRlbSA9IHRoaXMubGlzdGFQZXNxdWlzYS5maW5kKGkgPT4gaVt0aGlzLmNhbXBvSWRdID09IGUpO1xyXG4gICAgaWYgKHNlbGYuc2VsZWN0ZWRJdGVtICE9IG51bGwpIHtcclxuICAgICAgc2VsZi53cml0ZVZhbHVlKGUpO1xyXG4gICAgICBzZWxmLnRleHRvUGVzcXVpc2EgPSBzZWxmLnNlbGVjdGVkSXRlbVtzZWxmLmNhbXBvRGlzcGxheV07XHJcbiAgICAgIGlmIChlICE9IG51bGwpIHtcclxuICAgICAgICBzZWxmLnNlbGVjdEVsZW1lbnRWaXNpdmVsID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHNlbGYucGVzcXVpc2FDaGFuZ2UgIT0gbnVsbCkge1xyXG4gICAgICAgICAgc2VsZi5wZXNxdWlzYUNoYW5nZS5lbWl0KHNlbGYuc2VsZWN0ZWRJdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBzZWxmLnNlbGVjdEVsZW1lbnRWaXNpdmVsID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkcm9wRG93blBlc3F1aXNhKGxlbmd0aDogbnVtYmVyKSB7XHJcbiAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICBpZiAoc2VsZi5saXN0YVBlc3F1aXNhICE9IG51bGwgJiYgc2VsZi5saXN0YVBlc3F1aXNhLmxlbmd0aCA+IDApIHtcclxuICAgICAgaWYgKGxlbmd0aCA9PSAtMSkge1xyXG4gICAgICAgIGxlbmd0aCA9IHNlbGYubGlzdGFQZXNxdWlzYS5sZW5ndGg7XHJcbiAgICAgIH1cclxuICAgICAgc2VsZi5zZWxlY3RFbGVtZW50VmlzaXZlbCA9IGxlbmd0aCA9PSAwID8gZmFsc2UgOiB0cnVlO1xyXG5cclxuICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnNlbGVjdEVsZW1lbnQpO1xyXG4gICAgICAvL3RoaXMuc2VsZWN0RWxlbWVudC5vcGVuKCk7XHJcblxyXG4gICAgICAvKlxyXG4gICAgICAvL2xldCBlbGVtZW50ID0gdGhpcy5zZWxlY3RFbGVtZW50O1xyXG4gICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuc2VsZWN0SWQpO1xyXG4gICAgICBjb25zb2xlLmxvZygnZHJvcERvd24nLCBlbGVtZW50KTtcclxuICAgICAgKGVsZW1lbnQgYXMgYW55KS5zaXplID0gbGVuZ3RoICsgMTtcclxuICAgICAgaWYgKGxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgc2VsZi5zZWxlY3RFbGVtZW50VmlzaXZlbCA9IGZhbHNlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHNlbGYuc2VsZWN0RWxlbWVudFZpc2l2ZWwgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgICovXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwZXNxdWlzYXJFbnRpZGFkZShmaWx0cm86IHN0cmluZykge1xyXG4gICAgbGV0IHVybCA9IHRoaXMudXJsLnJlcGxhY2UoJzw8RklMVFJPPj4nLCBmaWx0cm8pLnJlcGxhY2UoJzw8RU1QUkVTQT4+JywgdGhpcy5lbXByZXNhLnRvU3RyaW5nKCkpO1xyXG4gICAgY29uc29sZS5sb2coJ3Blc3F1aXNhckVudGlkYWRlIHVybCcsIHVybCk7XHJcbiAgICB0aGlzLnBvZGVQZXNxdWlzYXIgPSBmYWxzZTtcclxuICAgIHRoaXMucGVzcXVpc2FTdWJqZWN0Lm5leHQodXJsKTtcclxuICB9XHJcblxyXG4gIHBlc3F1aXNhckVudGlkYWRlT2xkKGZpbHRybzogc3RyaW5nKSB7XHJcbiAgICBsZXQgdXJsID0gdGhpcy51cmwucmVwbGFjZSgnPDxGSUxUUk8+PicsIGZpbHRybykucmVwbGFjZSgnPDxFTVBSRVNBPj4nLCB0aGlzLmVtcHJlc2EudG9TdHJpbmcoKSk7XHJcbiAgICBjb25zb2xlLmxvZygncGVzcXVpc2FyRW50aWRhZGUgdXJsJywgdXJsKTtcclxuICAgIHRoaXMucG9kZVBlc3F1aXNhciA9IGZhbHNlO1xyXG4gICAgdGhpcy5odHRwQ2xpZW50LmdldDxhbnk+KHVybClcclxuICAgICAgLnN1YnNjcmliZSh7IG5leHQ6IChyZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgICAgIC8vdGhpcy5saXN0YVBlc3F1aXNhID0gcmVzdWx0O1xyXG4gICAgICAgIGlmICh0aGlzLmZpbHRlckZ1bmN0aW9uKSB7XHJcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQuZmlsdGVyKHRoaXMuZmlsdGVyRnVuY3Rpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxpc3RhUGVzcXVpc2EgPSBbXTtcclxuICAgICAgICByZXN1bHQuZm9yRWFjaCgoZW50OiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIHRoaXMubGlzdGFQZXNxdWlzYS5wdXNoKHsgLi4uZW50LCBJbmRleDogaW5kZXgsIFNlbGVjdGVkOiBmYWxzZSB9KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5wb2RlUGVzcXVpc2FyID0gdHJ1ZTtcclxuICAgICAgICBpZiAodGhpcy5saXN0YVBlc3F1aXNhLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHRoaXMuZHJvcERvd25QZXNxdWlzYSh0aGlzLmxpc3RhUGVzcXVpc2EubGVuZ3RoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIGVycm9yOiBlcnJvciA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2Vycm8gcGVzcXVpc2EnLCBlcnJvcik7XHJcbiAgICAgICAgdGhpcy5wb2RlUGVzcXVpc2FyID0gdHJ1ZTtcclxuICAgICAgfX0pO1xyXG4gIH1cclxuXHJcbiAgZXhpc3RlTmFMaXN0YShpZDogbnVtYmVyLCBzZXRSZWdpc3RybzogYm9vbGVhbiA9IGZhbHNlKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5saXN0YVBlc3F1aXNhICYmIHRoaXMubGlzdGFQZXNxdWlzYS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGxldCBleGlzdGUgPSB0aGlzLmxpc3RhUGVzcXVpc2EuZmluZChsID0+IGxbdGhpcy5jYW1wb0lkXSA9PT0gaWQpO1xyXG4gICAgICBpZiAoZXhpc3RlKSB7XHJcbiAgICAgICAgaWYgKHNldFJlZ2lzdHJvKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IGV4aXN0ZTtcclxuICAgICAgICAgIHRoaXMuc2VsZWNpb25hckNvbWJvQ2xpY2sodGhpcy5zZWxlY3RlZEl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4aXN0ZU5hTGlzdGFUZXh0byh0ZXh0bzogc3RyaW5nLCBzZXRSZWdpc3RybzogYm9vbGVhbiA9IGZhbHNlKTogYm9vbGVhbiB7XHJcbiAgICBjb25zb2xlLmxvZyhcImV4aXN0ZSB0ZXh0bzpcIiwgdGV4dG8sIHRoaXMuY2FtcG9EaXNwbGF5LCB0aGlzLmxpc3RhUGVzcXVpc2EpO1xyXG4gICAgaWYgKHRoaXMubGlzdGFQZXNxdWlzYSAmJiB0aGlzLmxpc3RhUGVzcXVpc2EubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgZXhpc3RlID0gdGhpcy5saXN0YVBlc3F1aXNhLmZpbmQobCA9PiBsW3RoaXMuY2FtcG9EaXNwbGF5XS50b1VwcGVyQ2FzZSgpID09PSB0ZXh0by50b1VwcGVyQ2FzZSgpKTtcclxuICAgICAgaWYgKGV4aXN0ZSkge1xyXG4gICAgICAgIGlmIChzZXRSZWdpc3Rybykge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBleGlzdGU7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjaW9uYXJDb21ib0NsaWNrKHRoaXMuc2VsZWN0ZWRJdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB2YWxpZGFySXRlbVNlbGVjaW9uYWRvKHNldGFyUmVnaXN0cm86IGJvb2xlYW4gPSBmYWxzZSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc29sZS5sb2coJ3ZhbGlkYXIgc2VsZWNpb25hZG8nKTtcclxuICAgIC8vcGFzc2FyIHBlbGEgZnVuw6fDo28gZGUgZmlsdHJvXHJcbiAgICBsZXQgdmFsaWRvID0gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW0pIHtcclxuICAgICAgaWYgKHRoaXMuZmlsdGVyRnVuY3Rpb24pIHtcclxuICAgICAgICBsZXQgZXhpc3RlID0gW3sgLi4udGhpcy5zZWxlY3RlZEl0ZW0gfV0uZmlsdGVyKHRoaXMuZmlsdGVyRnVuY3Rpb24pO1xyXG4gICAgICAgIGlmIChleGlzdGUgIT0gbnVsbCAmJiBleGlzdGUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgdmFsaWRvID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdmFsaWRvID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodmFsaWRvICYmIHNldGFyUmVnaXN0cm8pIHtcclxuICAgICAgICB0aGlzLnNlbGVjaW9uYXJDb21ib0NsaWNrKHRoaXMuc2VsZWN0ZWRJdGVtKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHZhbGlkbztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNhcnJlZ2FJdGVtSWRQYXJhTGlzdGEoaWQ6IG51bWJlcikge1xyXG4gICAgbGV0IHVybCA9IHRoaXMudXJsSXRlbS5yZXBsYWNlKCc8PElEPj4nLCBpZC50b1N0cmluZygpKTtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMudXJsSXRlbSk7XHJcbiAgICBjb25zb2xlLmxvZygncGVzcXVpc2FyIElEIHVybCcsIHVybCk7XHJcbiAgICB0aGlzLnBvZGVQZXNxdWlzYXIgPSBmYWxzZTtcclxuICAgIHRoaXMuaHR0cENsaWVudC5nZXQ8YW55Pih1cmwpXHJcbiAgICAgIC5zdWJzY3JpYmUoeyBuZXh0OiAocmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmxpc3RhUGVzcXVpc2EgPSBbXTtcclxuICAgICAgICB0aGlzLmxpc3RhUGVzcXVpc2EucHVzaCh7IC4uLnJlc3VsdCwgSW5kZXg6IDAsIFNlbGVjdGVkOiB0cnVlIH0pO1xyXG4gICAgICAgIHRoaXMucG9kZVBlc3F1aXNhciA9IHRydWU7XHJcbiAgICAgICAgaWYgKHRoaXMubGlzdGFQZXNxdWlzYS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IHRoaXMubGlzdGFQZXNxdWlzYVswXTtcclxuICAgICAgICAgIHRoaXMuc2VsZWNpb25hckNvbWJvQ2xpY2sodGhpcy5zZWxlY3RlZEl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSwgZXJyb3I6ICBlcnJvciA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2Vycm8gcGVzcXVpc2EnLCBlcnJvcik7XHJcbiAgICAgICAgdGhpcy5wb2RlUGVzcXVpc2FyID0gdHJ1ZTtcclxuICAgICAgfX0pO1xyXG4gIH1cclxuXHJcbiAgbGltcGFyQ2xpY2soKSB7XHJcbiAgICB0aGlzLndyaXRlVmFsdWUobnVsbCk7XHJcbiAgICB0aGlzLndyaXRlUGVzcXVpc2EobnVsbCk7XHJcbiAgICB0aGlzLmxpc3RhUGVzcXVpc2EgPSBbXTtcclxuICAgIHRoaXMuZHJvcERvd25QZXNxdWlzYSgwKTtcclxuICAgIC8vdGhpcy5wb2RlUGVzcXVpc2FyID0gdHJ1ZTtcclxuICAgIHRoaXMucGVzcXVpc2FTdWJqZWN0Lm5leHQoJycpO1xyXG4gICAgaWYgKHRoaXMubGltcGFyKSB7XHJcbiAgICAgIHRoaXMubGltcGFyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB2ZXJpZmljYXJQZXNxdWlzYSgpIHtcclxuICAgIC8vVE9ETzogdmVyaWZpY2FyIHNlIG8gdGV4dG8gY29ycmVzcG9uZGUgY29tIHVtIGl0ZW0gZGEgbGlzdGFcclxuICAgIHRoaXMuc2VsZWNpb25hckNvbWJvQ2xpY2sobnVsbCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBwZXNxdWlzYXJDbGljaygpIHtcclxuICAgIC8qXHJcbiAgICBpZiAodGhpcy5wZXNxdWlzYUFjdGlvbiAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMucGVzcXVpc2FBY3Rpb24oKTtcclxuICAgIH1cclxuICAgICovXHJcbiAgICAvL3Blc3F1aXNhQ2F0ZWdvcmlhXHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLmZpbHRlckZ1bmN0aW9uLCB0aGlzLnVybCwgdGhpcy51cmxUcmVlKTtcclxuXHJcbiAgICBjb25zdCBtb2RhbCA9IGF3YWl0IHRoaXMubW9kYWxDdHJsLmNyZWF0ZSh7XHJcbiAgICAgIGNvbXBvbmVudDogTW9kZWxUcmVldmlld0NvbXBvbmVudCxcclxuICAgICAgY29tcG9uZW50UHJvcHM6IHtcclxuICAgICAgICAvL2NhbXBvSWQ6IHRoaXMuY2FtcG9JZCxcclxuICAgICAgICAvL2NhbXBvUGFpOiB0aGlzLmNhbXBvUGFpSWQsXHJcbiAgICAgICAgLy9jYW1wb0xhYmVsOiB0aGlzLmNhbXBvRGlzcGxheSxcclxuICAgICAgICBmaWx0ZXJGdW5jdGlvbjogdGhpcy5maWx0ZXJGdW5jdGlvbixcclxuICAgICAgICBlbXByZXNhU2VsZWNpb25hZGFJZDogdGhpcy5lbXByZXNhLFxyXG4gICAgICAgIHRpcG86IHRoaXMudGlwbyxcclxuICAgICAgICAvL2VzcGVjaWZpY29cclxuICAgICAgICAvL3BsYW5vQ29udGFzOiB0aGlzLnBsYW5vQ29udGFzLFxyXG4gICAgICAgIHVybDogdGhpcy5pc0VtcHR5KHRoaXMudXJsVHJlZSkgPyB0aGlzLnVybCA6IHRoaXMudXJsVHJlZVxyXG4gICAgICB9LFxyXG4gICAgICBjc3NDbGFzczogJ215LWN1c3RvbS1tb2RhbC1wZXNxdWlzYSdcclxuICAgIH0pO1xyXG5cclxuICAgIG1vZGFsLm9uRGlkRGlzbWlzcygpLnRoZW4oZGF0YSA9PiB7XHJcbiAgICAgIGxldCByZXN1bHQgPSBkYXRhWydkYXRhJ107XHJcbiAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XHJcbiAgICAgIGlmIChyZXN1bHQgIT0gbnVsbCAmJiByZXN1bHQuSWQgPiAwKSB7XHJcbiAgICAgICAgdGhpcy5jYXJyZWdhSXRlbUlkUGFyYUxpc3RhKHJlc3VsdC5JZCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgbW9kYWwucHJlc2VudCgpO1xyXG5cclxuICB9XHJcblxyXG4gIGlzRW1wdHkodmFsb3I6IHN0cmluZyB8IGFueSkge1xyXG4gICAgcmV0dXJuIHZhbG9yID09IG51bGwgfHwgdmFsb3IgPT0gdW5kZWZpbmVkIHx8IHZhbG9yID09ICcnXHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgc3R5bGU9XCJwYWRkaW5nLWlubGluZS1lbmQ6IDBweDtcIj5cclxuICAgIDxpb24taXRlbSBsaW5lcz1cIm5vbmVcIiBzdHlsZT1cIi0tYmFja2dyb3VuZDogaW5oZXJpdGVkOyAtLWJhY2tncm91bmQtZm9jdXNlZDogdHJhbnNwYXJlbnQ7IG1hcmdpbi10b3A6IDJweDtcIiBbY2xhc3NdPVwiaXRlbUNsYXNzXCI+XHJcbiAgICAgIDxpb24tbGFiZWwgcG9zaXRpb249XCJ7eyBsYWJlbFBvc2l0aW9uIH19XCIgY29sb3I9XCJ7eyBsYWJlbENvbG9yIH19XCI+e3sgbGFiZWwgfX08L2lvbi1sYWJlbD5cclxuICAgICAgPCEtLSBmb3JtQ29udHJvbE5hbWU9XCJ7eyBjYW1wbyB9fVwiICAtLT5cclxuICAgICAgPGlvbi1zcGlubmVyICpuZ0lmPVwiIXBvZGVQZXNxdWlzYXJcIlxyXG4gICAgICAgIHN0eWxlPVwiLS1taW4taGVpZ2h0OiAwcHggIWltcG9ydGFudDsgbWFyZ2luLWlubGluZS1lbmQ6IDVweCAhaW1wb3J0YW50OyBtYXJnaW4tdG9wOiAxNnB4O1wiIFxyXG4gICAgICAgIHNsb3Q9XCJzdGFydFwiIG5hbWU9XCJsaW5lc1wiPjwvaW9uLXNwaW5uZXI+XHJcbiAgICAgIDwhLS0gKGlvbkJsdXIpPVwidmVyaWZpY2FyUGVzcXVpc2EoKVwiIC0tPlxyXG4gICAgICA8IS0tIGNvbmZsaXRvIGNvbSBjbGljayBkYSBsaXN0YSAtLT5cclxuICAgICAgPGlvbi1pbnB1dCAjaW5wdXRQZXNxdWlzYVxyXG4gICAgICAgIHR5cGU9XCJ7e3R5cGV9fVwiIFxyXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiIFxyXG4gICAgICAgIG1heGxlbmd0aD1cInt7IG1heCB9fVwiIFxyXG4gICAgICAgIChpb25CbHVyKT1cIm9uQmx1cigkZXZlbnQpXCJcclxuICAgICAgICBbdmFsdWVdPVwidGV4dG9QZXNxdWlzYVwiIChpbnB1dCk9XCJ3cml0ZVBlc3F1aXNhKGlucHV0UGVzcXVpc2EudmFsdWUpXCIgXHJcbiAgICAgICAgKGtleXVwKT1cInNob3dQZXNxdWlzYSgkZXZlbnQpXCJcclxuICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIiBbc3R5bGUuLS1iYWNrZ3JvdW5kXT1cImlucHV0QmFja2dyb3VuZ0NvbG9yXCJcclxuICAgICAgICAoY2xpY2spPVwiZHJvcERvd25QZXNxdWlzYSgtMSlcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJyZWFkb25seVwiIGRlYm91bmNlPVwiNTAwXCI+PC9pb24taW5wdXQ+XHJcbiAgICAgIDxpb24tYnV0dG9uIHNpemU9XCJzbWFsbFwiIHNsb3Q9XCJlbmRcIiB0YWJpbmRleD1cIi0xXCJcclxuICAgICAgICBzdHlsZT1cIm1hcmdpbi10b3A6IDI1cHg7IG1hcmdpbi1pbmxpbmUtc3RhcnQ6IDRweCAhaW1wb3J0YW50OyAtLXBhZGRpbmctc3RhcnQ6MnB4OyAtLXBhZGRpbmctZW5kOiAycHg7XCIgZmlsbD1cImNsZWFyXCIgY29sb3I9XCJtZWRpdW1cIlxyXG4gICAgICAgIChjbGljayk9XCJsaW1wYXJDbGljaygpXCI+XHJcbiAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjbG9zZS1vdXRsaW5lXCI+PC9pb24taWNvbj5cclxuICAgICAgPC9pb24tYnV0dG9uPlxyXG4gIFxyXG4gICAgICA8IS0tXHJcbiAgICAgIDxpb24tYnV0dG9uIHNpemU9XCJzbWFsbFwiIHNsb3Q9XCJlbmRcIiB0YWJpbmRleD1cIi0xXCJcclxuICAgICAgICBzdHlsZT1cIm1hcmdpbi10b3A6IDI1cHg7IG1hcmdpbi1pbmxpbmUtc3RhcnQ6IDRweCAhaW1wb3J0YW50OyAtLXBhZGRpbmctc3RhcnQ6MnB4OyAtLXBhZGRpbmctZW5kOiAycHg7XCIgZmlsbD1cImNsZWFyXCIgY29sb3I9XCJtZWRpdW1cIlxyXG4gICAgICAgIChjbGljayk9XCJwZXNxdWlzYXJDbGljaygpXCI+XHJcbiAgICAgICAgPGlvbi1pY29uIGNvbG9yPVwicHJpbWFyeVwiIG5hbWU9XCJzZWFyY2hcIj48L2lvbi1pY29uPlxyXG4gICAgICA8L2lvbi1idXR0b24+XHJcbiAgICAgIC0tPlxyXG4gICAgICBcclxuICAgIDwvaW9uLWl0ZW0+XHJcbiAgXHJcbiAgICA8aW9uLWxpc3QgdGFiaW5kZXg9XCItMVwiIFtoaWRkZW5dPVwiIXNlbGVjdEVsZW1lbnRWaXNpdmVsIHx8ICFsaXN0YVBlc3F1aXNhIHx8IGxpc3RhUGVzcXVpc2EubGVuZ3RoID09IDBcIiBjbGFzcz1cInBlc3F1aXNhLWxpc3RcIiBzdHlsZT1cIm1heC1oZWlnaHQ6IDI1MHB4OyBvdmVyZmxvdy15OiBhdXRvO1wiPlxyXG4gICAgICBcclxuICAgICAgPGlvbi1pdGVtIHRhYmluZGV4PVwiLTFcIiBidXR0b24gKm5nRm9yPVwibGV0IGl0ZW0gb2YgbGlzdGFQZXNxdWlzYVwiIFxyXG4gICAgICAoY2xpY2spPVwic2VsZWNpb25hckNvbWJvQ2xpY2soaXRlbSlcIiBbaWRdPVwic2VsZWN0SWQgKyAnSW9uSXRlbScgKyBpdGVtWydJbmRleCddXCJcclxuICAgICAgICBjbGFzcz1cInBlc3F1aXNhLWl0ZW1cIj5cclxuICAgICAgICA8IS0tIHt7IGl0ZW0gfCBqc29ufX0gLS0+XHJcbiAgICAgICAgPHNwYW4gW2NsYXNzXT1cInsnc2VsZWN0ZWQtaXRlbSc6IGl0ZW1bJ1NlbGVjdGVkJ10gPT09IHRydWV9XCIgW2lubmVySFRNTF09XCJoaWdobGlnaHQoaXRlbVtjYW1wb0Rpc3BsYXldKVwiPjwvc3Bhbj5cclxuICAgICAgPC9pb24taXRlbT5cclxuICBcclxuICAgIDwvaW9uLWxpc3Q+XHJcbiAgXHJcbiAgICA8IS0tXHJcbiAgICA8aW9uLXNlbGVjdCBpbnRlcmZhY2U9XCJwb3BvdmVyXCIgI3NlbGVjdEVsZW1lbnQgdGFiaW5kZXg9XCItMVwiIFtoaWRkZW5dPVwiIXNlbGVjdEVsZW1lbnRWaXNpdmVsXCJcclxuICAgICAgKGlvbkNoYW5nZSk9XCJzZWxlY2lvbmFyQ29tYm9DaGFuZ2UoJGV2ZW50LnRhcmdldC52YWx1ZSlcIj5cclxuICAgICAgPGlvbi1zZWxlY3Qtb3B0aW9uICpuZ0Zvcj1cImxldCBpdGVtIG9mIGxpc3RhUGVzcXVpc2FcIiBbdmFsdWVdPVwiaXRlbVtjYW1wb0lkXVwiIChjbGljayk9XCJzZWxlY2lvbmFyQ29tYm9DbGljayhpdGVtW2NhbXBvSWRdKVwiPlxyXG4gICAgICAgIHt7IGl0ZW1bY2FtcG9EaXNwbGF5XSB9fVxyXG4gICAgICA8L2lvbi1zZWxlY3Qtb3B0aW9uPlxyXG4gICAgPC9pb24tc2VsZWN0PlxyXG4gICAgLS0+XHJcbiAgXHJcbiAgICA8IS0tXHJcbiAgICA8c2VsZWN0IFtpZF09XCJzZWxlY3RJZFwiICNzZWxlY3RFbGVtZW50IHRhYmluZGV4PVwiLTFcIiBbaGlkZGVuXT1cIiFzZWxlY3RFbGVtZW50VmlzaXZlbFwiXHJcbiAgICAgIChjaGFuZ2UpPVwic2VsZWNpb25hckNvbWJvQ2hhbmdlKCRldmVudC50YXJnZXQudmFsdWUpXCIgY2xhc3M9XCJwZXNxdWlzYS1zZWxlY3RcIj5cclxuICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBsaXN0YVBlc3F1aXNhXCIgW3ZhbHVlXT1cIml0ZW1bY2FtcG9JZF1cIiAoY2xpY2spPVwic2VsZWNpb25hckNvbWJvQ2xpY2soaXRlbVtjYW1wb0lkXSlcIj5cclxuICAgICAgICB7eyBpdGVtW2NhbXBvRGlzcGxheV0gfX1cclxuICAgICAgPC9vcHRpb24+XHJcbiAgXHJcbiAgICA8L3NlbGVjdD5cclxuICAgIC0tPlxyXG4gIFxyXG4gICAgPGRpdiBjbGFzcz1cInZhbGlkYXRpb24tZXJyb3JzXCIgKm5nSWY9XCJmb3JtXCI+XHJcbiAgXHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHZhbGlkYXRpb24gb2YgdmFsaWRhdGlvbl9tZXNzYWdlc1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCJcclxuICAgICAgICAgICpuZ0lmPVwiZm9ybS5nZXQoZm9ybUNvbnRyb2xOYW1lKT8uaGFzRXJyb3IodmFsaWRhdGlvbi50eXBlKSAmJiAoZm9ybS5nZXQoZm9ybUNvbnRyb2xOYW1lKT8uZGlydHkgfHwgZm9ybS5nZXQoZm9ybUNvbnRyb2xOYW1lKT8udG91Y2hlZClcIj5cclxuICAgICAgICAgICYjODIyNjsge3sgdmFsaWRhdGlvbi5tZXNzYWdlIH19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gIFxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+Il19
|