zek 17.3.52 → 17.3.54

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.
@@ -17,6 +17,7 @@ export class CoreComponent {
17
17
  this.loading = true;
18
18
  await this.init();
19
19
  await this.bindModel();
20
+ await this.onBindModelCompleted();
20
21
  await this.bindDictionary();
21
22
  await this.onBindingCompleted();
22
23
  }
@@ -27,6 +28,7 @@ export class CoreComponent {
27
28
  }
28
29
  init() { }
29
30
  bindModel() { }
31
+ onBindModelCompleted() { }
30
32
  bindDictionary() { }
31
33
  onBindingCompleted() { }
32
34
  onLoadCompleted() { }
@@ -38,4 +40,4 @@ export class CoreComponent {
38
40
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: CoreComponent, decorators: [{
39
41
  type: Directive
40
42
  }] });
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy96ZWsvc3JjL2xpYi9jb21wb25lbnRzL2NvcmUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBVSxTQUFTLEVBQWEsTUFBTSxlQUFlLENBQUM7O0FBRzdELE1BQU0sT0FBTyxhQUFhO0lBRDFCO1FBRUksWUFBTyxHQUFHLEtBQUssQ0FBQztLQWlDbkI7SUEvQkcsUUFBUTtRQUNKLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBQ0QsV0FBVztRQUNQLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUk7UUFDTixJQUFJLENBQUM7WUFDRCxJQUFJLElBQUksQ0FBQyxPQUFPO2dCQUFFLE9BQU87WUFFekIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDcEIsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbEIsTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDdkIsTUFBTSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDNUIsTUFBTSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUNwQyxDQUFDO2dCQUNPLENBQUM7WUFDTCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUN6QixDQUFDO1FBRUQsTUFBTSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUNELElBQUksS0FBSyxDQUFDO0lBQ1YsU0FBUyxLQUFLLENBQUM7SUFDZixjQUFjLEtBQUssQ0FBQztJQUNwQixrQkFBa0IsS0FBSyxDQUFDO0lBQ3hCLGVBQWUsS0FBSyxDQUFDO0lBRXJCLEtBQUssQ0FBQyxPQUFPO0lBQ2IsQ0FBQzs4R0FqQ1EsYUFBYTtrR0FBYixhQUFhOzsyRkFBYixhQUFhO2tCQUR6QixTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT25Jbml0LCBEaXJlY3RpdmUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQERpcmVjdGl2ZSgpXHJcbmV4cG9ydCBjbGFzcyBDb3JlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gICAgbG9hZGluZyA9IGZhbHNlO1xyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMubG9hZCgpO1xyXG4gICAgfVxyXG4gICAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgdGhpcy5kZXN0cm95KCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbG9hZCgpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5sb2FkaW5nKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmluaXQoKTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5iaW5kTW9kZWwoKTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5iaW5kRGljdGlvbmFyeSgpO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLm9uQmluZGluZ0NvbXBsZXRlZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhd2FpdCB0aGlzLm9uTG9hZENvbXBsZXRlZCgpO1xyXG4gICAgfVxyXG4gICAgaW5pdCgpIHsgfVxyXG4gICAgYmluZE1vZGVsKCkgeyB9XHJcbiAgICBiaW5kRGljdGlvbmFyeSgpIHsgfVxyXG4gICAgb25CaW5kaW5nQ29tcGxldGVkKCkgeyB9XHJcbiAgICBvbkxvYWRDb21wbGV0ZWQoKSB7IH1cclxuXHJcbiAgICBhc3luYyBkZXN0cm95KCkge1xyXG4gICAgfVxyXG59Il19
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy96ZWsvc3JjL2xpYi9jb21wb25lbnRzL2NvcmUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBVSxTQUFTLEVBQWEsTUFBTSxlQUFlLENBQUM7O0FBRzdELE1BQU0sT0FBTyxhQUFhO0lBRDFCO1FBRUksWUFBTyxHQUFHLEtBQUssQ0FBQztLQW1DbkI7SUFqQ0csUUFBUTtRQUNKLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBQ0QsV0FBVztRQUNQLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUk7UUFDTixJQUFJLENBQUM7WUFDRCxJQUFJLElBQUksQ0FBQyxPQUFPO2dCQUFFLE9BQU87WUFFekIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDcEIsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbEIsTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDdkIsTUFBTSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUNsQyxNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUM1QixNQUFNLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ3BDLENBQUM7Z0JBQ08sQ0FBQztZQUNMLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLENBQUM7UUFFRCxNQUFNLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBQ0QsSUFBSSxLQUFLLENBQUM7SUFDVixTQUFTLEtBQUssQ0FBQztJQUNmLG9CQUFvQixLQUFLLENBQUM7SUFDMUIsY0FBYyxLQUFLLENBQUM7SUFDcEIsa0JBQWtCLEtBQUssQ0FBQztJQUN4QixlQUFlLEtBQUssQ0FBQztJQUVyQixLQUFLLENBQUMsT0FBTztJQUNiLENBQUM7OEdBbkNRLGFBQWE7a0dBQWIsYUFBYTs7MkZBQWIsYUFBYTtrQkFEekIsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9uSW5pdCwgRGlyZWN0aXZlLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBEaXJlY3RpdmUoKVxyXG5leHBvcnQgY2xhc3MgQ29yZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAgIGxvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLmxvYWQoKTtcclxuICAgIH1cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMuZGVzdHJveSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGxvYWQoKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMubG9hZGluZykgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5pbml0KCk7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYmluZE1vZGVsKCk7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMub25CaW5kTW9kZWxDb21wbGV0ZWQoKTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5iaW5kRGljdGlvbmFyeSgpO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLm9uQmluZGluZ0NvbXBsZXRlZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhd2FpdCB0aGlzLm9uTG9hZENvbXBsZXRlZCgpO1xyXG4gICAgfVxyXG4gICAgaW5pdCgpIHsgfVxyXG4gICAgYmluZE1vZGVsKCkgeyB9XHJcbiAgICBvbkJpbmRNb2RlbENvbXBsZXRlZCgpIHsgfVxyXG4gICAgYmluZERpY3Rpb25hcnkoKSB7IH1cclxuICAgIG9uQmluZGluZ0NvbXBsZXRlZCgpIHsgfVxyXG4gICAgb25Mb2FkQ29tcGxldGVkKCkgeyB9XHJcblxyXG4gICAgYXN5bmMgZGVzdHJveSgpIHtcclxuICAgIH1cclxufSJdfQ==
@@ -1,13 +1,19 @@
1
- import { ViewChild, Directive, inject } from '@angular/core';
1
+ import { ViewChild, Directive, inject, Input } from '@angular/core';
2
2
  import { TranslateService } from '@ngx-translate/core';
3
3
  import { BaseComponent } from './base.component';
4
4
  import { FilterBase, Pager } from '../models';
5
5
  import { AlertService } from '../services/alert.service';
6
- import { FilterHelper, PagerHelper, StorageHelper, StringHelper, UrlHelper } from '../utils';
6
+ import { ArrayHelper, Convert, FilterHelper, PagerHelper, StorageHelper, StringHelper, UrlHelper } from '../utils';
7
7
  import { firstValueFrom } from 'rxjs';
8
8
  import * as i0 from "@angular/core";
9
9
  // declare let bootstrap: any;
10
10
  export class ListBaseComponent extends BaseComponent {
11
+ get initItems() {
12
+ return this._initItems;
13
+ }
14
+ set initItems(v) {
15
+ this._initItems = Convert.toBooleanProperty(v);
16
+ }
11
17
  constructor(service) {
12
18
  super();
13
19
  this.service = service;
@@ -16,8 +22,10 @@ export class ListBaseComponent extends BaseComponent {
16
22
  this.internalFilter = new FilterBase();
17
23
  this.isFiltered = false;
18
24
  this.selectedIds = [];
25
+ this.selectedItems = [];
19
26
  this.pager = new Pager();
20
27
  this.tableId = 'table';
28
+ this._initItems = true;
21
29
  this.approveModel = {};
22
30
  this.approvedMesage = 'Alert.Approved';
23
31
  this.disapprovedMesage = 'Alert.Disapproved';
@@ -30,11 +38,9 @@ export class ListBaseComponent extends BaseComponent {
30
38
  this.initDefaultFilter();
31
39
  this.initStoredFilter();
32
40
  this.assignFilter();
33
- //this.selectedIds = [];
34
- //this.pagedList = new PagedList();
35
41
  }
36
42
  async bindModel() {
37
- this.selectedIds = [];
43
+ // this.selectedIds = [];
38
44
  this.model = await firstValueFrom(this.apiGetAll(this.internalFilter));
39
45
  if (this.model) {
40
46
  let totalCount = this.model.totalItemCount;
@@ -54,6 +60,16 @@ export class ListBaseComponent extends BaseComponent {
54
60
  const el = document.getElementById(this.tableId);
55
61
  el?.scrollIntoView({ behavior: 'smooth', block: 'start', inline: 'nearest' });
56
62
  }
63
+ onBindModelCompleted() {
64
+ if (this.initItems) {
65
+ if (this.model && ArrayHelper.isArray(this.model.items) && ArrayHelper.isArray(this.selectedIds)) {
66
+ for (const item of this.model.items) {
67
+ const tmp = item;
68
+ tmp.selected = this.selectedIds.includes(tmp.id);
69
+ }
70
+ }
71
+ }
72
+ }
57
73
  initDefaultFilter() {
58
74
  }
59
75
  initStoredFilter() {
@@ -161,10 +177,14 @@ export class ListBaseComponent extends BaseComponent {
161
177
  const id = item.id;
162
178
  if (id) {
163
179
  if (item.selected) {
164
- this.selectedIds.push(id);
180
+ if (!this.selectedIds.includes(id)) {
181
+ this.selectedIds.push(id);
182
+ this.selectedItems.push(item);
183
+ }
165
184
  }
166
185
  else {
167
186
  this.selectedIds = this.selectedIds.filter(item => item !== id);
187
+ this.selectedItems = this.selectedItems.filter(item => item.id !== id);
168
188
  }
169
189
  }
170
190
  }
@@ -270,11 +290,13 @@ export class ListBaseComponent extends BaseComponent {
270
290
  }
271
291
  }
272
292
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: ListBaseComponent, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive }); }
273
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.4", type: ListBaseComponent, viewQueries: [{ propertyName: "filterModal", first: true, predicate: ["filterModal"], descendants: true }, { propertyName: "approveModal", first: true, predicate: ["approveModal"], descendants: true }, { propertyName: "disapproveModal", first: true, predicate: ["disapproveModal"], descendants: true }], usesInheritance: true, ngImport: i0 }); }
293
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.4", type: ListBaseComponent, inputs: { initItems: "initItems" }, viewQueries: [{ propertyName: "filterModal", first: true, predicate: ["filterModal"], descendants: true }, { propertyName: "approveModal", first: true, predicate: ["approveModal"], descendants: true }, { propertyName: "disapproveModal", first: true, predicate: ["disapproveModal"], descendants: true }], usesInheritance: true, ngImport: i0 }); }
274
294
  }
275
295
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: ListBaseComponent, decorators: [{
276
296
  type: Directive
277
- }], ctorParameters: () => [{ type: undefined }], propDecorators: { filterModal: [{
297
+ }], ctorParameters: () => [{ type: undefined }], propDecorators: { initItems: [{
298
+ type: Input
299
+ }], filterModal: [{
278
300
  type: ViewChild,
279
301
  args: ['filterModal', { static: false }]
280
302
  }], approveModal: [{
@@ -284,4 +306,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImpor
284
306
  type: ViewChild,
285
307
  args: ['disapproveModal', { static: false }]
286
308
  }] } });
287
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1iYXNlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3play9zcmMvbGliL2NvbXBvbmVudHMvbGlzdC1iYXNlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBZ0IsVUFBVSxFQUFhLEtBQUssRUFBYSxNQUFNLFdBQVcsQ0FBQztBQUVsRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDN0YsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFDdEMsOEJBQThCO0FBRzlCLE1BQU0sT0FBTyxpQkFBOEUsU0FBUSxhQUF3QztJQW9CdkksWUFBK0IsT0FBaUI7UUFDNUMsS0FBSyxFQUFFLENBQUM7UUFEbUIsWUFBTyxHQUFQLE9BQU8sQ0FBVTtRQW5CaEQsV0FBTSxHQUFRLElBQUksVUFBVSxFQUFFLENBQUM7UUFDL0IsZUFBVSxHQUFHLElBQUksQ0FBQztRQUVSLG1CQUFjLEdBQVEsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUNqRCxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLGdCQUFXLEdBQVUsRUFBRSxDQUFDO1FBQ3hCLFVBQUssR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO1FBRXBCLFlBQU8sR0FBRyxPQUFPLENBQUM7UUFJbEIsaUJBQVksR0FBaUIsRUFBRSxDQUFDO1FBRXRCLG1CQUFj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Q0QsTUFBTSxDQUFDLE1BQVc7UUFDZCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxNQUFNLENBQUMsVUFBa0I7UUFDckIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxVQUFVLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDbEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFLG1FQUFtRSxDQUFDLENBQUM7UUFDaEgsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBR1EsS0FBSyxDQUFDLFNBQXFCO1FBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLO1lBQUUsT0FBTztRQUU3QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDbEMsS0FBSyxNQUFNLEVBQUUsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNuQixLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUMvQixDQUFDO0lBQ0wsQ0FBQzs4R0FoVFEsaUJBQWlCO2tHQUFqQixpQkFBaUI7OzJGQUFqQixpQkFBaUI7a0JBRDdCLFNBQVM7MkVBWTBELFdBQVc7c0JBQTFFLFNBQVM7dUJBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFHc0IsWUFBWTtzQkFBNUUsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUd3QixlQUFlO3NCQUFsRixTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFZpZXdDaGlsZCwgRGlyZWN0aXZlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgSVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IEJhc2VDb21wb25lbnQgfSBmcm9tICcuL2Jhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQXBwcm92ZU1vZGVsLCBGaWx0ZXJCYXNlLCBQYWdlZExpc3QsIFBhZ2VyLCBQcmludFR5cGUgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBaZWtNb2RhbCB9IGZyb20gJy4uL21vZHVsZXMvbW9kYWwvbW9kYWwvbW9kYWwuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYWxlcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IEZpbHRlckhlbHBlciwgUGFnZXJIZWxwZXIsIFN0b3JhZ2VIZWxwZXIsIFN0cmluZ0hlbHBlciwgVXJsSGVscGVyIH0gZnJvbSAnLi4vdXRpbHMnO1xyXG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xyXG4vLyBkZWNsYXJlIGxldCBib290c3RyYXA6IGFueTtcclxuXHJcbkBEaXJlY3RpdmUoKVxyXG5leHBvcnQgY2xhc3MgTGlzdEJhc2VDb21wb25lbnQ8VFNlcnZpY2UgZXh0ZW5kcyBJU2VydmljZSA9IElTZXJ2aWNlLCBUUGFnZWRMaXN0RGF0YSA9IGFueT4gZXh0ZW5kcyBCYXNlQ29tcG9uZW50PFBhZ2VkTGlzdDxUUGFnZWRMaXN0RGF0YT4+IHtcclxuICAgIGZpbHRlcjogYW55ID0gbmV3IEZpbHRlckJhc2UoKTtcclxuICAgIHNhdmVGaWx0ZXIgPSB0cnVlO1xyXG4gICAgc29ydEZpZWxkczogYW55O1xyXG4gICAgcHJvdGVjdGVkIGludGVybmFsRmlsdGVyOiBhbnkgPSBuZXcgRmlsdGVyQmFzZSgpO1xyXG4gICAgaXNGaWx0ZXJlZCA9IGZhbHNlO1xyXG4gICAgc2VsZWN0ZWRJZHM6IGFueVtdID0gW107XHJcbiAgICBwYWdlciA9IG5ldyBQYWdlcigpO1xyXG4gICAgc3VtTW9kZWw6IGFueTtcclxuICAgIHRhYmxlSWQgPSAndGFibGUnO1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ2ZpbHRlck1vZGFsJywgeyBzdGF0aWM6IGZhbHNlIH0pIHByb3RlY3RlZCByZWFkb25seSBmaWx0ZXJNb2RhbD86IFpla01vZGFsIHwgbnVsbDtcclxuXHJcbiAgICBhcHByb3ZlTW9kZWw6IEFwcHJvdmVNb2RlbCA9IHt9O1xyXG4gICAgQFZpZXdDaGlsZCgnYXBwcm92ZU1vZGFsJywgeyBzdGF0aWM6IGZhbHNlIH0pIHByb3RlY3RlZCByZWFkb25seSBhcHByb3ZlTW9kYWw/OiBaZWtNb2RhbCB8IG51bGw7XHJcbiAgICBwcm90ZWN0ZWQgYXBwcm92ZWRNZXNhZ2UgPSAnQWxlcnQuQXBwcm92ZWQnO1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ2Rpc2FwcHJvdmVNb2RhbCcsIHsgc3RhdGljOiBmYWxzZSB9KSBwcm90ZWN0ZWQgcmVhZG9ubHkgZGlzYXBwcm92ZU1vZGFsPzogWmVrTW9kYWwgfCBudWxsO1xyXG4gICAgcHJvdGVjdGVkIGRpc2FwcHJvdmVkTWVzYWdlID0gJ0FsZXJ0LkRpc2FwcHJvdmVkJztcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcmVhZG9ubHkgc2VydmljZTogVFNlcnZpY2UpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICByZWFkb25seSB0cmFuc2xhdGUgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XHJcbiAgICByZWFkb25seSBhbGVydCA9IGluamVjdChBbGVydFNlcnZpY2UpO1xyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gICAgb3ZlcnJpZGUgaW5pdCgpIHtcclxuICAgICAgICBzdXBlci5pbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMucmVzZXQoKTtcclxuICAgICAgICB0aGlzLmluaXREZWZhdWx0RmlsdGVyKCk7XHJcbiAgICAgICAgdGhpcy5pbml0U3RvcmVkRmlsdGVyKCk7XHJcbiAgICAgICAgdGhpcy5hc3NpZ25GaWx0ZXIoKTtcclxuXHJcbiAgICAgICAgLy90aGlzLnNlbGVjdGVkSWRzID0gW107XHJcbiAgICAgICAgLy90aGlzLnBhZ2VkTGlzdCA9IG5ldyBQYWdlZExpc3QoKTtcclxuICAgIH1cclxuICAgIG92ZXJyaWRlIGFzeW5jIGJpbmRNb2RlbCgpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSWRzID0gW107XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuYXBpR2V0QWxsKHRoaXMuaW50ZXJuYWxGaWx0ZXIpKTtcclxuICAgICAgICBpZiAodGhpcy5tb2RlbCkge1xyXG4gICAgICAgICAgICBsZXQgdG90YWxDb3VudCA9IHRoaXMubW9kZWwudG90YWxJdGVtQ291bnQ7XHJcbiAgICAgICAgICAgIGlmICghdG90YWxDb3VudCAmJiB0aGlzLm1vZGVsLnBhZ2VyKSB7XHJcbiAgICAgICAgICAgICAgICB0b3RhbENvdW50ID0gdGhpcy5tb2RlbC5wYWdlciA/ICh0aGlzLm1vZGVsLnBhZ2VyLnRvdGFsSXRlbUNvdW50IHx8IDApIDogMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnBhZ2VyID0gUGFnZXJIZWxwZXIuZ2V0KHRvdGFsQ291bnQsIHRoaXMuaW50ZXJuYWxGaWx0ZXIucGFnZSwgdGhpcy5pbnRlcm5hbEZpbHRlci5wYWdlU2l6ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5wYWdlciA9IG5ldyBQYWdlcigpO1xyXG4gICAgICAgIC8vdGhpcy5wYWdlZExpc3QucGFnZXIgPSB0aGlzLnBhZ2VyO1xyXG4gICAgfVxyXG4gICAgYXBpR2V0QWxsKGZpbHRlcjogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZS5nZXRBbGwoZmlsdGVyKTtcclxuICAgIH1cclxuICAgIHNjcm9sbFRvcCgpIHtcclxuICAgICAgICBjb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMudGFibGVJZCk7XHJcbiAgICAgICAgZWw/LnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ3N0YXJ0JywgaW5saW5lOiAnbmVhcmVzdCcgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHByb3RlY3RlZCBpbml0RGVmYXVsdEZpbHRlcigpIHtcclxuICAgIH1cclxuICAgIHByaXZhdGUgaW5pdFN0b3JlZEZpbHRlcigpIHtcclxuICAgICAgICBjb25zdCBmaWx0ZXJQYXJhbSA9IHRoaXMuZ2V0UXVlcnlQYXJhbSgnZmlsdGVyJykgfHwgdGhpcy5nZXRQYXJhbSgnZmlsdGVyJyk7XHJcblxyXG4gICAgICAgIGlmIChmaWx0ZXJQYXJhbSkge1xyXG4gICAgICAgICAgICBjb25zdCB0bXAgPSBTdG9yYWdlSGVscGVyLmdldCgnZmlsdGVyJyk7XHJcbiAgICAgICAgICAgIGlmICh0bXAgJiYgdG1wLnVybCAmJiB0bXAudXJsID09PSB0aGlzLnVybCAmJiB0bXAuZmlsdGVyKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlciA9IE9iamVjdC5hc3NpZ24oe30sIHRtcC5maWx0ZXIpO1xyXG4gICAgICAgICAgICAgICAgLy93ZSBkb250IG5lZWQgdGhpcy5hc3NpZ25GaWx0ZXIoKTsgYmVjYXVzZSBhZnRlciBpbml0U3RvcmVkRmlsdGVyKCk7IHdpbGwgYmUgYXNzaWduZWQuXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnZmlsdGVyJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnZmlsdGVyJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgYXN5bmMgY2hhbmdlUGFnZShwYWdlOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLmludGVybmFsRmlsdGVyLnBhZ2UgPSBwYWdlO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyLnBhZ2UgPSBwYWdlO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuYmluZE1vZGVsKCk7XHJcbiAgICAgICAgdGhpcy5hdXRvU2F2ZUZpbHRlcigpO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsVG9wKCk7XHJcbiAgICB9XHJcbiAgICBjaGFuZ2VQYWdlU2l6ZShwYWdlU2l6ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5pbnRlcm5hbEZpbHRlci5wYWdlU2l6ZSA9IHBhZ2VTaXplO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyLnBhZ2VTaXplID0gcGFnZVNpemU7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VQYWdlKDEpO1xyXG4gICAgfVxyXG4gICAgc2hvd0ZpbHRlcigpIHtcclxuICAgICAgICB0aGlzLmZpbHRlck1vZGFsPy5zaG93KCk7XHJcbiAgICB9XHJcbiAgICBzZWFyY2goKSB7XHJcbiAgICAgICAgdGhpcy5hc3NpZ25GaWx0ZXIoKTtcclxuXHJcbiAgICAgICAgLy8gdGhpcy5jaGFuZ2VQYWdlKDEpO1xyXG4gICAgICAgIC8vY2FuJ3QgdXNlIHRoaXMgYmVjYXVzZSBkb24ndCB3YW50IHRvIGV4ZWN1dGUgc2Nyb2xsVG9wXHJcbiAgICAgICAgdGhpcy5pbnRlcm5hbEZpbHRlci5wYWdlID0gMTtcclxuICAgICAgICB0aGlzLmZpbHRlci5wYWdlID0gMTtcclxuICAgICAgICB0aGlzLmJpbmRNb2RlbCgpO1xyXG4gICAgICAgIHRoaXMuYXV0b1NhdmVGaWx0ZXIoKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBhc3NpZ25GaWx0ZXIoKSB7XHJcbiAgICAgICAgdGhpcy5pbnRlcm5hbEZpbHRlciA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZmlsdGVyKTtcclxuICAgICAgICB0aGlzLmlzRmlsdGVyZWQgPSAhRmlsdGVySGVscGVyLmlzRW1wdHkodGhpcy5pbnRlcm5hbEZpbHRlcik7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGF1dG9TYXZlRmlsdGVyKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnNhdmVGaWx0ZXIpXHJcbiAgICAgICAgICAgIHRoaXMuaW50ZXJuYWxTYXZlRmlsdGVyKClcclxuICAgIH1cclxuICAgIHByaXZhdGUgaW50ZXJuYWxTYXZlRmlsdGVyKCkge1xyXG4gICAgICAgIFN0b3JhZ2VIZWxwZXIuc2V0KCdmaWx0ZXInLCB7XHJcbiAgICAgICAgICAgIHVybDogdGhpcy51cmwsXHJcbiAgICAgICAgICAgIGZpbHRlcjogdGhpcy5pbnRlcm5hbEZpbHRlclxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmVzZXQoKSB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXIgPSB7IHBhZ2U6IDEsIHBhZ2VTaXplOiAyNSB9O1xyXG4gICAgICAgIHRoaXMuYXNzaWduRmlsdGVyKCk7XHJcbiAgICB9XHJcbiAgICByZWZyZXNoKCkge1xyXG4gICAgICAgIHRoaXMuYmluZE1vZGVsKCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGNyZWF0ZSgpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSBVcmxIZWxwZXIuZ2V0Tm9QYXJhbSh0aGlzLnJvdXRlci51cmwpO1xyXG4gICAgICAgIC8vIHRoaXMucm91dGVyLm5hdmlnYXRlKFt1cmwsICdjcmVhdGUnLCB7IHJldHVyblVybDogdXJsICsgJztmaWx0ZXI9MScgfV0pO1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt1cmwsICdjcmVhdGUnXSxcclxuICAgICAgICAgICAgeyBxdWVyeVBhcmFtczogeyByZXR1cm5Vcmw6IHVybCArICc/ZmlsdGVyPTEnIH0gfVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgICBhc3luYyBkZWxldGUoaWQ6IGFueSkge1xyXG4gICAgICAgIHRoaXMuYWxlcnQuY2xlYXIoKTtcclxuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5hcGlEZWxldGUoaWQpKTtcclxuICAgICAgICBpZiAoZGF0YT8uc3VjY2Vzcykge1xyXG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy50cmFuc2xhdGUuZ2V0KCdBbGVydC5EZWxldGVkJykpO1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0LmVycm9yKG1lc3NhZ2UsIG51bGwsICdmYS1zb2xpZCBmYS10cmFzaCcpXHJcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGFwaURlbGV0ZShpZDogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZS5kZWxldGUoaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRlbGV0ZTIoaWQ6IGFueSwgaWQyOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmFsZXJ0LmNsZWFyKCk7XHJcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuYXBpRGVsZXRlMihpZCwgaWQyKSlcclxuICAgICAgICBpZiAoZGF0YT8uc3VjY2Vzcykge1xyXG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy50cmFuc2xhdGUuZ2V0KCdBbGVydC5EZWxldGVkJykpO1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0LmVycm9yKG1lc3NhZ2UsIG51bGwsICdmYS1zb2xpZCBmYS10cmFzaCcpXHJcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGFwaURlbGV0ZTIoaWQ6IGFueSwgaWQyOiBhbnkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlLmRlbGV0ZTIoaWQsIGlkMik7XHJcbiAgICB9XHJcblxyXG4gICAgZWRpdChpZDogbnVtYmVyKSB7XHJcbiAgICAgICAgLy8gdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMudXJsLCBpZF0sXHJcbiAgICAgICAgLy8gICAgIHsgcXVlcnlQYXJhbXM6IHsgcmV0dXJuVXJsOiB0aGlzLnVybCArICc7ZmlsdGVyPTEnIH0gfVxyXG4gICAgICAgIC8vICk7XHJcblxyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLnVybCwgaWRdLFxyXG4gICAgICAgICAgICB7IHF1ZXJ5UGFyYW1zOiB7IHJldHVyblVybDogdGhpcy51cmwgKyAnP2ZpbHRlcj0xJyB9IH1cclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgZWRpdDIoaWQ6IG51bWJlciwgaWQyOiBudW1iZXIpIHtcclxuICAgICAgICAvLyB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy51cmwsIGlkLCBpZDIsIHsgcmV0dXJuVXJsOiB0aGlzLnVybCArICc7ZmlsdGVyPTEnIH1dKTtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy51cmwsIGlkLCBpZDJdLFxyXG4gICAgICAgICAgICB7IHF1ZXJ5UGFyYW1zOiB7IHJldHVyblVybDogdGhpcy51cmwgKyAnP2ZpbHRlcj0xJyB9IH1cclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgc2VsZWN0KGl0ZW06IGFueSkge1xyXG4gICAgICAgIGl0ZW0uc2VsZWN0ZWQgPSAhaXRlbS5zZWxlY3RlZDtcclxuICAgICAgICBjb25zdCBpZCA9IGl0ZW0uaWQ7XHJcbiAgICAgICAgaWYgKGlkKSB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtLnNlbGVjdGVkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSWRzLnB1c2goaWQpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZElkcyA9IHRoaXMuc2VsZWN0ZWRJZHMuZmlsdGVyKGl0ZW0gPT4gaXRlbSAhPT0gaWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgc2hvd0FwcHJvdmVNb2RhbChpZDogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKCFpZCB8fCAhdGhpcy5hcHByb3ZlTW9kYWwpIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgdG1wID0geyBpZHM6IFtpZF0gfTtcclxuICAgICAgICB0aGlzLmFwcHJvdmVNb2RlbCA9IHt9O1xyXG4gICAgICAgIHRoaXMuYXBwcm92ZU1vZGFsLnNob3codG1wKTtcclxuICAgIH1cclxuICAgIHNob3dBcHByb3ZlU2VsZWN0ZWRNb2RhbCgpIHtcclxuICAgICAgICBjb25zdCB0bXAgPSB7IGlkczogdGhpcy5nZXRTZWxlY3RlZElkcygpIH07XHJcbiAgICAgICAgaWYgKCF0bXAuaWRzIHx8IHRtcC5pZHMubGVuZ3RoID09PSAwIHx8ICF0aGlzLmFwcHJvdmVNb2RhbCkgcmV0dXJuO1xyXG5cclxuICAgICAgICB0aGlzLmFwcHJvdmVNb2RlbCA9IHt9O1xyXG4gICAgICAgIHRoaXMuYXBwcm92ZU1vZGFsLnNob3codG1wKTtcclxuICAgIH1cclxuICAgIGFzeW5jIGFwcHJvdmUobW9kZWw6IGFueSkge1xyXG4gICAgICAgIGlmICghbW9kZWwpIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5hbGVydC5jbGVhcigpO1xyXG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmFwaUFwcHJvdmUobW9kZWwpKTtcclxuICAgICAgICBpZiAoIWRhdGEgfHwgZGF0YS5sZW5ndGggPT09IDApXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMudHJhbnNsYXRlLmdldCh0aGlzLmFwcHJvdmVkTWVzYWdlKSk7XHJcbiAgICAgICAgdGhpcy5hbGVydC5zdWNjZXNzKG1lc3NhZ2UsIG51bGwsICdmYS1zb2xpZCBmYS10aHVtYnMtdXAnKVxyXG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xyXG4gICAgfVxyXG4gICAgYXBpQXBwcm92ZShtb2RlbDogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZS5hcHByb3ZlKG1vZGVsKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgc2hvd0Rpc2FwcHJvdmVNb2RhbChpZDogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKCFpZCB8fCAhdGhpcy5kaXNhcHByb3ZlTW9kYWwpIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgdG1wID0geyBpZHM6IFtpZF0gfTtcclxuICAgICAgICB0aGlzLmFwcHJvdmVNb2RlbCA9IHt9O1xyXG4gICAgICAgIHRoaXMuZGlzYXBwcm92ZU1vZGFsLnNob3codG1wKTtcclxuICAgIH1cclxuICAgIHNob3dEaXNhcHByb3ZlU2VsZWN0ZWRNb2RhbCgpIHtcclxuICAgICAgICBjb25zdCB0bXAgPSB7IGlkczogdGhpcy5nZXRTZWxlY3RlZElkcygpIH07XHJcbiAgICAgICAgaWYgKCF0bXAuaWRzIHx8IHRtcC5pZHMubGVuZ3RoID09PSAwIHx8ICF0aGlzLmRpc2FwcHJvdmVNb2RhbCkgcmV0dXJuO1xyXG5cclxuICAgICAgICB0aGlzLmFwcHJvdmVNb2RlbCA9IHt9O1xyXG4gICAgICAgIHRoaXMuZGlzYXBwcm92ZU1vZGFsLnNob3codG1wKTtcclxuICAgIH1cclxuICAgIGFzeW5jIGRpc2FwcHJvdmUobW9kZWw6IGFueSkge1xyXG4gICAgICAgIGlmICghbW9kZWwgfHwgIXRoaXMuYXBwcm92ZU1vZGVsKSByZXR1cm47XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgbW9kZWwgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgIG1vZGVsLnN0YXR1cyA9IHRoaXMuYXBwcm92ZU1vZGVsLnN0YXR1cztcclxuICAgICAgICAgICAgbW9kZWwuY29tbWVudCA9IFN0cmluZ0hlbHBlci50cnlUcmltKHRoaXMuYXBwcm92ZU1vZGVsLmNvbW1lbnQpO1xyXG4gICAgICAgICAgICBpZiAoIW1vZGVsLmNvbW1lbnQpIGRlbGV0ZSBtb2RlbC5jb21tZW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5hbGVydC5jbGVhcigpO1xyXG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmFwaURpc2FwcHJvdmUobW9kZWwpKTtcclxuICAgICAgICBpZiAoIWRhdGEgfHwgZGF0YS5sZW5ndGggPT09IDApXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMudHJhbnNsYXRlLmdldCh0aGlzLmRpc2FwcHJvdmVkTWVzYWdlKSk7XHJcbiAgICAgICAgdGhpcy5hbGVydC5zdWNjZXNzKG1lc3NhZ2UsIG51bGwsICdmYS1zb2xpZCBmYS10aHVtYnMtZG93bicpXHJcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICB9XHJcbiAgICBhcGlEaXNhcHByb3ZlKG1vZGVsOiBhbnkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlLmRpc2FwcHJvdmUobW9kZWwpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFNlbGVjdGVkSWRzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSWRzO1xyXG4gICAgICAgIC8vIGlmICghdGhpcy5wYWdlZExpc3QgfHwgIXRoaXMucGFnZWRMaXN0Lml0ZW1zKSByZXR1cm4gW107XHJcblxyXG4gICAgICAgIC8vIGxldCBpZHMgPSBbXTtcclxuICAgICAgICAvLyBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5wYWdlZExpc3QuaXRlbXMpIHtcclxuICAgICAgICAvLyAgICAgaWYgKCFpdGVtLnNlbGVjdGVkIHx8ICFpdGVtLmlkKSBjb250aW51ZTtcclxuXHJcbiAgICAgICAgLy8gICAgIGlkcy5wdXNoKGl0ZW0uaWQpO1xyXG4gICAgICAgIC8vIH1cclxuICAgICAgICAvLyByZXR1cm4gaWRzO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dTdW0oKSB7IH1cclxuICAgIGFzeW5jIHN1bSgpIHtcclxuICAgICAgICB0aGlzLnN1bU1vZGVsID0gbnVsbDtcclxuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5hcGlTdW0odGhpcy5pbnRlcm5hbEZpbHRlcikpO1xyXG4gICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3VtTW9kZWwgPSBkYXRhO1xyXG4gICAgICAgICAgICB0aGlzLnNob3dTdW0oKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy50cmFuc2xhdGUuZ2V0KCdBbGVydC5TdW1FcnJvcicpKTtcclxuICAgICAgICAgICAgdGhpcy5hbGVydC5lcnJvcihtZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBhcGlTdW0oZmlsdGVyOiBhbnkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlLnN1bShmaWx0ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGV4cG9ydChmaWxlVHlwZUlkOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLnNlcnZpY2UuZXhwb3J0KHRoaXMuaW50ZXJuYWxGaWx0ZXIsIGZpbGVUeXBlSWQpLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgICAgICAgdGhpcy5kb3dubG9hZEZpbGUoZGF0YSwgJ2V4cG9ydC54bHN4JywgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0Jyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIG92ZXJyaWRlIHByaW50KHByaW50VHlwZT86IFByaW50VHlwZSkge1xyXG4gICAgICAgIGlmICghdGhpcy5tb2RlbCB8fCAhdGhpcy5tb2RlbC5pdGVtcykgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCBpZHMgPSB0aGlzLmdldFNlbGVjdGVkSWRzKCk7XHJcbiAgICAgICAgZm9yIChjb25zdCBpZCBvZiBpZHMpIHtcclxuICAgICAgICAgICAgc3VwZXIucHJpbnQoaWQsIHByaW50VHlwZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59Il19
309
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1iYXNlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3play9zcmMvbGliL2NvbXBvbmVudHMvbGlzdC1iYXNlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBR3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQWdCLFVBQVUsRUFBYSxLQUFLLEVBQWEsTUFBTSxXQUFXLENBQUM7QUFFbEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbkgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFFdEMsOEJBQThCO0FBRzlCLE1BQU0sT0FBTyxpQkFBOEUsU0FBUSxhQUF3QztJQWF2SSxJQUFJLFNBQVM7UUFDVCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDM0IsQ0FBQztJQUNELElBQ0ksU0FBUyxDQUFDLENBQWU7UUFDekIsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQVdELFlBQStCLE9BQWlCO1FBQzVDLEtBQUssRUFBRSxDQUFDO1FBRG1CLFlBQU8sR0FBUCxPQUFPLENBQVU7UUE3QmhELFdBQU0sR0FBUSxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQy9CLGVBQVUsR0FBRyxJQUFJLENBQUM7UUFFUixt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QUFDO0lBQ3BDLENBQUM7SUFFRCxNQUFNLENBQUMsVUFBa0I7UUFDckIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxVQUFVLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDbEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFLG1FQUFtRSxDQUFDLENBQUM7UUFDaEgsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBR1EsS0FBSyxDQUFDLFNBQXFCO1FBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLO1lBQUUsT0FBTztRQUU3QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDbEMsS0FBSyxNQUFNLEVBQUUsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNuQixLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUMvQixDQUFDO0lBQ0wsQ0FBQzs4R0F2VVEsaUJBQWlCO2tHQUFqQixpQkFBaUI7OzJGQUFqQixpQkFBaUI7a0JBRDdCLFNBQVM7MkVBa0JGLFNBQVM7c0JBRFosS0FBSztnQkFLMEQsV0FBVztzQkFBMUUsU0FBUzt1QkFBQyxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUdzQixZQUFZO3NCQUE1RSxTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBR3dCLGVBQWU7c0JBQWxGLFNBQVM7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVmlld0NoaWxkLCBEaXJlY3RpdmUsIGluamVjdCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgSVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IEJhc2VDb21wb25lbnQgfSBmcm9tICcuL2Jhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQXBwcm92ZU1vZGVsLCBGaWx0ZXJCYXNlLCBQYWdlZExpc3QsIFBhZ2VyLCBQcmludFR5cGUgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBaZWtNb2RhbCB9IGZyb20gJy4uL21vZHVsZXMvbW9kYWwvbW9kYWwvbW9kYWwuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYWxlcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IEFycmF5SGVscGVyLCBDb252ZXJ0LCBGaWx0ZXJIZWxwZXIsIFBhZ2VySGVscGVyLCBTdG9yYWdlSGVscGVyLCBTdHJpbmdIZWxwZXIsIFVybEhlbHBlciB9IGZyb20gJy4uL3V0aWxzJztcclxuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQm9vbGVhbklucHV0IH0gZnJvbSAnLi90eXBlcyc7XHJcbi8vIGRlY2xhcmUgbGV0IGJvb3RzdHJhcDogYW55O1xyXG5cclxuQERpcmVjdGl2ZSgpXHJcbmV4cG9ydCBjbGFzcyBMaXN0QmFzZUNvbXBvbmVudDxUU2VydmljZSBleHRlbmRzIElTZXJ2aWNlID0gSVNlcnZpY2UsIFRQYWdlZExpc3RJdGVtID0gYW55PiBleHRlbmRzIEJhc2VDb21wb25lbnQ8UGFnZWRMaXN0PFRQYWdlZExpc3RJdGVtPj4ge1xyXG4gICAgZmlsdGVyOiBhbnkgPSBuZXcgRmlsdGVyQmFzZSgpO1xyXG4gICAgc2F2ZUZpbHRlciA9IHRydWU7XHJcbiAgICBzb3J0RmllbGRzOiBhbnk7XHJcbiAgICBwcm90ZWN0ZWQgaW50ZXJuYWxGaWx0ZXI6IGFueSA9IG5ldyBGaWx0ZXJCYXNlKCk7XHJcbiAgICBpc0ZpbHRlcmVkID0gZmFsc2U7XHJcbiAgICBzZWxlY3RlZElkczogYW55W10gPSBbXTtcclxuICAgIHNlbGVjdGVkSXRlbXM6IGFueVtdID0gW107XHJcbiAgICBwYWdlciA9IG5ldyBQYWdlcigpO1xyXG4gICAgc3VtTW9kZWw6IGFueTtcclxuICAgIHRhYmxlSWQgPSAndGFibGUnO1xyXG5cclxuICAgIHByaXZhdGUgX2luaXRJdGVtcyA9IHRydWU7XHJcbiAgICBnZXQgaW5pdEl0ZW1zKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pbml0SXRlbXM7XHJcbiAgICB9XHJcbiAgICBASW5wdXQoKVxyXG4gICAgc2V0IGluaXRJdGVtcyh2OiBCb29sZWFuSW5wdXQpIHtcclxuICAgICAgICB0aGlzLl9pbml0SXRlbXMgPSBDb252ZXJ0LnRvQm9vbGVhblByb3BlcnR5KHYpO1xyXG4gICAgfVxyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ2ZpbHRlck1vZGFsJywgeyBzdGF0aWM6IGZhbHNlIH0pIHByb3RlY3RlZCByZWFkb25seSBmaWx0ZXJNb2RhbD86IFpla01vZGFsIHwgbnVsbDtcclxuXHJcbiAgICBhcHByb3ZlTW9kZWw6IEFwcHJvdmVNb2RlbCA9IHt9O1xyXG4gICAgQFZpZXdDaGlsZCgnYXBwcm92ZU1vZGFsJywgeyBzdGF0aWM6IGZhbHNlIH0pIHByb3RlY3RlZCByZWFkb25seSBhcHByb3ZlTW9kYWw/OiBaZWtNb2RhbCB8IG51bGw7XHJcbiAgICBwcm90ZWN0ZWQgYXBwcm92ZWRNZXNhZ2UgPSAnQWxlcnQuQXBwcm92ZWQnO1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ2Rpc2FwcHJvdmVNb2RhbCcsIHsgc3RhdGljOiBmYWxzZSB9KSBwcm90ZWN0ZWQgcmVhZG9ubHkgZGlzYXBwcm92ZU1vZGFsPzogWmVrTW9kYWwgfCBudWxsO1xyXG4gICAgcHJvdGVjdGVkIGRpc2FwcHJvdmVkTWVzYWdlID0gJ0FsZXJ0LkRpc2FwcHJvdmVkJztcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcmVhZG9ubHkgc2VydmljZTogVFNlcnZpY2UpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICByZWFkb25seSB0cmFuc2xhdGUgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XHJcbiAgICByZWFkb25seSBhbGVydCA9IGluamVjdChBbGVydFNlcnZpY2UpO1xyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gICAgb3ZlcnJpZGUgaW5pdCgpIHtcclxuICAgICAgICBzdXBlci5pbml0KCk7XHJcblxyXG4gICAgICAgIHRoaXMucmVzZXQoKTtcclxuICAgICAgICB0aGlzLmluaXREZWZhdWx0RmlsdGVyKCk7XHJcbiAgICAgICAgdGhpcy5pbml0U3RvcmVkRmlsdGVyKCk7XHJcbiAgICAgICAgdGhpcy5hc3NpZ25GaWx0ZXIoKTtcclxuICAgIH1cclxuICAgIG92ZXJyaWRlIGFzeW5jIGJpbmRNb2RlbCgpIHtcclxuICAgICAgICAvLyB0aGlzLnNlbGVjdGVkSWRzID0gW107XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuYXBpR2V0QWxsKHRoaXMuaW50ZXJuYWxGaWx0ZXIpKTtcclxuICAgICAgICBpZiAodGhpcy5tb2RlbCkge1xyXG4gICAgICAgICAgICBsZXQgdG90YWxDb3VudCA9IHRoaXMubW9kZWwudG90YWxJdGVtQ291bnQ7XHJcbiAgICAgICAgICAgIGlmICghdG90YWxDb3VudCAmJiB0aGlzLm1vZGVsLnBhZ2VyKSB7XHJcbiAgICAgICAgICAgICAgICB0b3RhbENvdW50ID0gdGhpcy5tb2RlbC5wYWdlciA/ICh0aGlzLm1vZGVsLnBhZ2VyLnRvdGFsSXRlbUNvdW50IHx8IDApIDogMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnBhZ2VyID0gUGFnZXJIZWxwZXIuZ2V0KHRvdGFsQ291bnQsIHRoaXMuaW50ZXJuYWxGaWx0ZXIucGFnZSwgdGhpcy5pbnRlcm5hbEZpbHRlci5wYWdlU2l6ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5wYWdlciA9IG5ldyBQYWdlcigpO1xyXG4gICAgICAgIC8vdGhpcy5wYWdlZExpc3QucGFnZXIgPSB0aGlzLnBhZ2VyO1xyXG4gICAgfVxyXG4gICAgYXBpR2V0QWxsKGZpbHRlcjogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZS5nZXRBbGwoZmlsdGVyKTtcclxuICAgIH1cclxuICAgIHNjcm9sbFRvcCgpIHtcclxuICAgICAgICBjb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMudGFibGVJZCk7XHJcbiAgICAgICAgZWw/LnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ3N0YXJ0JywgaW5saW5lOiAnbmVhcmVzdCcgfSk7XHJcbiAgICB9XHJcbiAgICBvdmVycmlkZSBvbkJpbmRNb2RlbENvbXBsZXRlZCgpIHtcclxuICAgICAgICBpZiAodGhpcy5pbml0SXRlbXMpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMubW9kZWwgJiYgQXJyYXlIZWxwZXIuaXNBcnJheSh0aGlzLm1vZGVsLml0ZW1zKSAmJiBBcnJheUhlbHBlci5pc0FycmF5KHRoaXMuc2VsZWN0ZWRJZHMpKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5tb2RlbC5pdGVtcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRtcCA9IGl0ZW0gYXMgYW55O1xyXG4gICAgICAgICAgICAgICAgICAgIHRtcC5zZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRJZHMuaW5jbHVkZXModG1wLmlkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgcHJvdGVjdGVkIGluaXREZWZhdWx0RmlsdGVyKCkge1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBpbml0U3RvcmVkRmlsdGVyKCkge1xyXG4gICAgICAgIGNvbnN0IGZpbHRlclBhcmFtID0gdGhpcy5nZXRRdWVyeVBhcmFtKCdmaWx0ZXInKSB8fCB0aGlzLmdldFBhcmFtKCdmaWx0ZXInKTtcclxuXHJcbiAgICAgICAgaWYgKGZpbHRlclBhcmFtKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRtcCA9IFN0b3JhZ2VIZWxwZXIuZ2V0KCdmaWx0ZXInKTtcclxuICAgICAgICAgICAgaWYgKHRtcCAmJiB0bXAudXJsICYmIHRtcC51cmwgPT09IHRoaXMudXJsICYmIHRtcC5maWx0ZXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyID0gT2JqZWN0LmFzc2lnbih7fSwgdG1wLmZpbHRlcik7XHJcbiAgICAgICAgICAgICAgICAvL3dlIGRvbnQgbmVlZCB0aGlzLmFzc2lnbkZpbHRlcigpOyBiZWNhdXNlIGFmdGVyIGluaXRTdG9yZWRGaWx0ZXIoKTsgd2lsbCBiZSBhc3NpZ25lZC5cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdmaWx0ZXInKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdmaWx0ZXInKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBhc3luYyBjaGFuZ2VQYWdlKHBhZ2U6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMuaW50ZXJuYWxGaWx0ZXIucGFnZSA9IHBhZ2U7XHJcbiAgICAgICAgdGhpcy5maWx0ZXIucGFnZSA9IHBhZ2U7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5iaW5kTW9kZWwoKTtcclxuICAgICAgICB0aGlzLmF1dG9TYXZlRmlsdGVyKCk7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxUb3AoKTtcclxuICAgIH1cclxuICAgIGNoYW5nZVBhZ2VTaXplKHBhZ2VTaXplOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLmludGVybmFsRmlsdGVyLnBhZ2VTaXplID0gcGFnZVNpemU7XHJcbiAgICAgICAgdGhpcy5maWx0ZXIucGFnZVNpemUgPSBwYWdlU2l6ZTtcclxuICAgICAgICB0aGlzLmNoYW5nZVBhZ2UoMSk7XHJcbiAgICB9XHJcbiAgICBzaG93RmlsdGVyKCkge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyTW9kYWw/LnNob3coKTtcclxuICAgIH1cclxuICAgIHNlYXJjaCgpIHtcclxuICAgICAgICB0aGlzLmFzc2lnbkZpbHRlcigpO1xyXG5cclxuICAgICAgICAvLyB0aGlzLmNoYW5nZVBhZ2UoMSk7XHJcbiAgICAgICAgLy9jYW4ndCB1c2UgdGhpcyBiZWNhdXNlIGRvbid0IHdhbnQgdG8gZXhlY3V0ZSBzY3JvbGxUb3BcclxuICAgICAgICB0aGlzLmludGVybmFsRmlsdGVyLnBhZ2UgPSAxO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyLnBhZ2UgPSAxO1xyXG4gICAgICAgIHRoaXMuYmluZE1vZGVsKCk7XHJcbiAgICAgICAgdGhpcy5hdXRvU2F2ZUZpbHRlcigpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIGFzc2lnbkZpbHRlcigpIHtcclxuICAgICAgICB0aGlzLmludGVybmFsRmlsdGVyID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5maWx0ZXIpO1xyXG4gICAgICAgIHRoaXMuaXNGaWx0ZXJlZCA9ICFGaWx0ZXJIZWxwZXIuaXNFbXB0eSh0aGlzLmludGVybmFsRmlsdGVyKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgYXV0b1NhdmVGaWx0ZXIoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2F2ZUZpbHRlcilcclxuICAgICAgICAgICAgdGhpcy5pbnRlcm5hbFNhdmVGaWx0ZXIoKVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBpbnRlcm5hbFNhdmVGaWx0ZXIoKSB7XHJcbiAgICAgICAgU3RvcmFnZUhlbHBlci5zZXQoJ2ZpbHRlcicsIHtcclxuICAgICAgICAgICAgdXJsOiB0aGlzLnVybCxcclxuICAgICAgICAgICAgZmlsdGVyOiB0aGlzLmludGVybmFsRmlsdGVyXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXNldCgpIHtcclxuICAgICAgICB0aGlzLmZpbHRlciA9IHsgcGFnZTogMSwgcGFnZVNpemU6IDI1IH07XHJcbiAgICAgICAgdGhpcy5hc3NpZ25GaWx0ZXIoKTtcclxuICAgIH1cclxuICAgIHJlZnJlc2goKSB7XHJcbiAgICAgICAgdGhpcy5iaW5kTW9kZWwoKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgY3JlYXRlKCkge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IFVybEhlbHBlci5nZXROb1BhcmFtKHRoaXMucm91dGVyLnVybCk7XHJcbiAgICAgICAgLy8gdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3VybCwgJ2NyZWF0ZScsIHsgcmV0dXJuVXJsOiB1cmwgKyAnO2ZpbHRlcj0xJyB9XSk7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3VybCwgJ2NyZWF0ZSddLFxyXG4gICAgICAgICAgICB7IHF1ZXJ5UGFyYW1zOiB7IHJldHVyblVybDogdXJsICsgJz9maWx0ZXI9MScgfSB9XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICAgIGFzeW5jIGRlbGV0ZShpZDogYW55KSB7XHJcbiAgICAgICAgdGhpcy5hbGVydC5jbGVhcigpO1xyXG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmFwaURlbGV0ZShpZCkpO1xyXG4gICAgICAgIGlmIChkYXRhPy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLnRyYW5zbGF0ZS5nZXQoJ0FsZXJ0LkRlbGV0ZWQnKSk7XHJcbiAgICAgICAgICAgIHRoaXMuYWxlcnQuZXJyb3IobWVzc2FnZSwgbnVsbCwgJ2ZhLXNvbGlkIGZhLXRyYXNoJylcclxuICAgICAgICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgYXBpRGVsZXRlKGlkOiBhbnkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlLmRlbGV0ZShpZCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZGVsZXRlMihpZDogYW55LCBpZDI6IGFueSkge1xyXG4gICAgICAgIHRoaXMuYWxlcnQuY2xlYXIoKTtcclxuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5hcGlEZWxldGUyKGlkLCBpZDIpKVxyXG4gICAgICAgIGlmIChkYXRhPy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLnRyYW5zbGF0ZS5nZXQoJ0FsZXJ0LkRlbGV0ZWQnKSk7XHJcbiAgICAgICAgICAgIHRoaXMuYWxlcnQuZXJyb3IobWVzc2FnZSwgbnVsbCwgJ2ZhLXNvbGlkIGZhLXRyYXNoJylcclxuICAgICAgICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgYXBpRGVsZXRlMihpZDogYW55LCBpZDI6IGFueSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2UuZGVsZXRlMihpZCwgaWQyKTtcclxuICAgIH1cclxuXHJcbiAgICBlZGl0KGlkOiBudW1iZXIpIHtcclxuICAgICAgICAvLyB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy51cmwsIGlkXSxcclxuICAgICAgICAvLyAgICAgeyBxdWVyeVBhcmFtczogeyByZXR1cm5Vcmw6IHRoaXMudXJsICsgJztmaWx0ZXI9MScgfSB9XHJcbiAgICAgICAgLy8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMudXJsLCBpZF0sXHJcbiAgICAgICAgICAgIHsgcXVlcnlQYXJhbXM6IHsgcmV0dXJuVXJsOiB0aGlzLnVybCArICc/ZmlsdGVyPTEnIH0gfVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgICBlZGl0MihpZDogbnVtYmVyLCBpZDI6IG51bWJlcikge1xyXG4gICAgICAgIC8vIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLnVybCwgaWQsIGlkMiwgeyByZXR1cm5Vcmw6IHRoaXMudXJsICsgJztmaWx0ZXI9MScgfV0pO1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLnVybCwgaWQsIGlkMl0sXHJcbiAgICAgICAgICAgIHsgcXVlcnlQYXJhbXM6IHsgcmV0dXJuVXJsOiB0aGlzLnVybCArICc/ZmlsdGVyPTEnIH0gfVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgICBzZWxlY3QoaXRlbTogYW55KSB7XHJcbiAgICAgICAgaXRlbS5zZWxlY3RlZCA9ICFpdGVtLnNlbGVjdGVkO1xyXG4gICAgICAgIGNvbnN0IGlkID0gaXRlbS5pZDtcclxuICAgICAgICBpZiAoaWQpIHtcclxuICAgICAgICAgICAgaWYgKGl0ZW0uc2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZElkcy5pbmNsdWRlcyhpZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSWRzLnB1c2goaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMgPSB0aGlzLnNlbGVjdGVkSWRzLmZpbHRlcihpdGVtID0+IGl0ZW0gIT09IGlkKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuc2VsZWN0ZWRJdGVtcy5maWx0ZXIoaXRlbSA9PiBpdGVtLmlkICE9PSBpZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG4gICAgc2hvd0FwcHJvdmVNb2RhbChpZDogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKCFpZCB8fCAhdGhpcy5hcHByb3ZlTW9kYWwpIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgdG1wID0geyBpZHM6IFtpZF0gfTtcclxuICAgICAgICB0aGlzLmFwcHJvdmVNb2RlbCA9IHt9O1xyXG4gICAgICAgIHRoaXMuYXBwcm92ZU1vZGFsLnNob3codG1wKTtcclxuICAgIH1cclxuICAgIHNob3dBcHByb3ZlU2VsZWN0ZWRNb2RhbCgpIHtcclxuICAgICAgICBjb25zdCB0bXAgPSB7IGlkczogdGhpcy5nZXRTZWxlY3RlZElkcygpIH07XHJcbiAgICAgICAgaWYgKCF0bXAuaWRzIHx8IHRtcC5pZHMubGVuZ3RoID09PSAwIHx8ICF0aGlzLmFwcHJvdmVNb2RhbCkgcmV0dXJuO1xyXG5cclxuICAgICAgICB0aGlzLmFwcHJvdmVNb2RlbCA9IHt9O1xyXG4gICAgICAgIHRoaXMuYXBwcm92ZU1vZGFsLnNob3codG1wKTtcclxuICAgIH1cclxuICAgIGFzeW5jIGFwcHJvdmUobW9kZWw6IGFueSkge1xyXG4gICAgICAgIGlmICghbW9kZWwpIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5hbGVydC5jbGVhcigpO1xyXG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmFwaUFwcHJvdmUobW9kZWwpKTtcclxuICAgICAgICBpZiAoIWRhdGEgfHwgZGF0YS5sZW5ndGggPT09IDApXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMudHJhbnNsYXRlLmdldCh0aGlzLmFwcHJvdmVkTWVzYWdlKSk7XHJcbiAgICAgICAgdGhpcy5hbGVydC5zdWNjZXNzKG1lc3NhZ2UsIG51bGwsICdmYS1zb2xpZCBmYS10aHVtYnMtdXAnKVxyXG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xyXG4gICAgfVxyXG4gICAgYXBpQXBwcm92ZShtb2RlbDogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZS5hcHByb3ZlKG1vZGVsKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgc2hvd0Rpc2FwcHJvdmVNb2RhbChpZDogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKCFpZCB8fCAhdGhpcy5kaXNhcHByb3ZlTW9kYWwpIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgdG1wID0geyBpZHM6IFtpZF0gfTtcclxuICAgICAgICB0aGlzLmFwcHJvdmVNb2RlbCA9IHt9O1xyXG4gICAgICAgIHRoaXMuZGlzYXBwcm92ZU1vZGFsLnNob3codG1wKTtcclxuICAgIH1cclxuICAgIHNob3dEaXNhcHByb3ZlU2VsZWN0ZWRNb2RhbCgpIHtcclxuICAgICAgICBjb25zdCB0bXAgPSB7IGlkczogdGhpcy5nZXRTZWxlY3RlZElkcygpIH07XHJcbiAgICAgICAgaWYgKCF0bXAuaWRzIHx8IHRtcC5pZHMubGVuZ3RoID09PSAwIHx8ICF0aGlzLmRpc2FwcHJvdmVNb2RhbCkgcmV0dXJuO1xyXG5cclxuICAgICAgICB0aGlzLmFwcHJvdmVNb2RlbCA9IHt9O1xyXG4gICAgICAgIHRoaXMuZGlzYXBwcm92ZU1vZGFsLnNob3codG1wKTtcclxuICAgIH1cclxuICAgIGFzeW5jIGRpc2FwcHJvdmUobW9kZWw6IGFueSkge1xyXG4gICAgICAgIGlmICghbW9kZWwgfHwgIXRoaXMuYXBwcm92ZU1vZGVsKSByZXR1cm47XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgbW9kZWwgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgIG1vZGVsLnN0YXR1cyA9IHRoaXMuYXBwcm92ZU1vZGVsLnN0YXR1cztcclxuICAgICAgICAgICAgbW9kZWwuY29tbWVudCA9IFN0cmluZ0hlbHBlci50cnlUcmltKHRoaXMuYXBwcm92ZU1vZGVsLmNvbW1lbnQpO1xyXG4gICAgICAgICAgICBpZiAoIW1vZGVsLmNvbW1lbnQpIGRlbGV0ZSBtb2RlbC5jb21tZW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5hbGVydC5jbGVhcigpO1xyXG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmFwaURpc2FwcHJvdmUobW9kZWwpKTtcclxuICAgICAgICBpZiAoIWRhdGEgfHwgZGF0YS5sZW5ndGggPT09IDApXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMudHJhbnNsYXRlLmdldCh0aGlzLmRpc2FwcHJvdmVkTWVzYWdlKSk7XHJcbiAgICAgICAgdGhpcy5hbGVydC5zdWNjZXNzKG1lc3NhZ2UsIG51bGwsICdmYS1zb2xpZCBmYS10aHVtYnMtZG93bicpXHJcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICB9XHJcbiAgICBhcGlEaXNhcHByb3ZlKG1vZGVsOiBhbnkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlLmRpc2FwcHJvdmUobW9kZWwpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFNlbGVjdGVkSWRzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSWRzO1xyXG4gICAgICAgIC8vIGlmICghdGhpcy5wYWdlZExpc3QgfHwgIXRoaXMucGFnZWRMaXN0Lml0ZW1zKSByZXR1cm4gW107XHJcblxyXG4gICAgICAgIC8vIGxldCBpZHMgPSBbXTtcclxuICAgICAgICAvLyBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5wYWdlZExpc3QuaXRlbXMpIHtcclxuICAgICAgICAvLyAgICAgaWYgKCFpdGVtLnNlbGVjdGVkIHx8ICFpdGVtLmlkKSBjb250aW51ZTtcclxuXHJcbiAgICAgICAgLy8gICAgIGlkcy5wdXNoKGl0ZW0uaWQpO1xyXG4gICAgICAgIC8vIH1cclxuICAgICAgICAvLyByZXR1cm4gaWRzO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dTdW0oKSB7IH1cclxuICAgIGFzeW5jIHN1bSgpIHtcclxuICAgICAgICB0aGlzLnN1bU1vZGVsID0gbnVsbDtcclxuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5hcGlTdW0odGhpcy5pbnRlcm5hbEZpbHRlcikpO1xyXG4gICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3VtTW9kZWwgPSBkYXRhO1xyXG4gICAgICAgICAgICB0aGlzLnNob3dTdW0oKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy50cmFuc2xhdGUuZ2V0KCdBbGVydC5TdW1FcnJvcicpKTtcclxuICAgICAgICAgICAgdGhpcy5hbGVydC5lcnJvcihtZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBhcGlTdW0oZmlsdGVyOiBhbnkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlLnN1bShmaWx0ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGV4cG9ydChmaWxlVHlwZUlkOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLnNlcnZpY2UuZXhwb3J0KHRoaXMuaW50ZXJuYWxGaWx0ZXIsIGZpbGVUeXBlSWQpLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgICAgICAgdGhpcy5kb3dubG9hZEZpbGUoZGF0YSwgJ2V4cG9ydC54bHN4JywgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0Jyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIG92ZXJyaWRlIHByaW50KHByaW50VHlwZT86IFByaW50VHlwZSkge1xyXG4gICAgICAgIGlmICghdGhpcy5tb2RlbCB8fCAhdGhpcy5tb2RlbC5pdGVtcykgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCBpZHMgPSB0aGlzLmdldFNlbGVjdGVkSWRzKCk7XHJcbiAgICAgICAgZm9yIChjb25zdCBpZCBvZiBpZHMpIHtcclxuICAgICAgICAgICAgc3VwZXIucHJpbnQoaWQsIHByaW50VHlwZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59Il19
package/fesm2022/zek.mjs CHANGED
@@ -1962,6 +1962,7 @@ class CoreComponent {
1962
1962
  this.loading = true;
1963
1963
  await this.init();
1964
1964
  await this.bindModel();
1965
+ await this.onBindModelCompleted();
1965
1966
  await this.bindDictionary();
1966
1967
  await this.onBindingCompleted();
1967
1968
  }
@@ -1972,6 +1973,7 @@ class CoreComponent {
1972
1973
  }
1973
1974
  init() { }
1974
1975
  bindModel() { }
1976
+ onBindModelCompleted() { }
1975
1977
  bindDictionary() { }
1976
1978
  onBindingCompleted() { }
1977
1979
  onLoadCompleted() { }
@@ -2593,6 +2595,12 @@ class ValidEventArgs {
2593
2595
 
2594
2596
  // declare let bootstrap: any;
2595
2597
  class ListBaseComponent extends BaseComponent {
2598
+ get initItems() {
2599
+ return this._initItems;
2600
+ }
2601
+ set initItems(v) {
2602
+ this._initItems = Convert.toBooleanProperty(v);
2603
+ }
2596
2604
  constructor(service) {
2597
2605
  super();
2598
2606
  this.service = service;
@@ -2601,8 +2609,10 @@ class ListBaseComponent extends BaseComponent {
2601
2609
  this.internalFilter = new FilterBase();
2602
2610
  this.isFiltered = false;
2603
2611
  this.selectedIds = [];
2612
+ this.selectedItems = [];
2604
2613
  this.pager = new Pager();
2605
2614
  this.tableId = 'table';
2615
+ this._initItems = true;
2606
2616
  this.approveModel = {};
2607
2617
  this.approvedMesage = 'Alert.Approved';
2608
2618
  this.disapprovedMesage = 'Alert.Disapproved';
@@ -2615,11 +2625,9 @@ class ListBaseComponent extends BaseComponent {
2615
2625
  this.initDefaultFilter();
2616
2626
  this.initStoredFilter();
2617
2627
  this.assignFilter();
2618
- //this.selectedIds = [];
2619
- //this.pagedList = new PagedList();
2620
2628
  }
2621
2629
  async bindModel() {
2622
- this.selectedIds = [];
2630
+ // this.selectedIds = [];
2623
2631
  this.model = await firstValueFrom(this.apiGetAll(this.internalFilter));
2624
2632
  if (this.model) {
2625
2633
  let totalCount = this.model.totalItemCount;
@@ -2639,6 +2647,16 @@ class ListBaseComponent extends BaseComponent {
2639
2647
  const el = document.getElementById(this.tableId);
2640
2648
  el?.scrollIntoView({ behavior: 'smooth', block: 'start', inline: 'nearest' });
2641
2649
  }
2650
+ onBindModelCompleted() {
2651
+ if (this.initItems) {
2652
+ if (this.model && ArrayHelper.isArray(this.model.items) && ArrayHelper.isArray(this.selectedIds)) {
2653
+ for (const item of this.model.items) {
2654
+ const tmp = item;
2655
+ tmp.selected = this.selectedIds.includes(tmp.id);
2656
+ }
2657
+ }
2658
+ }
2659
+ }
2642
2660
  initDefaultFilter() {
2643
2661
  }
2644
2662
  initStoredFilter() {
@@ -2746,10 +2764,14 @@ class ListBaseComponent extends BaseComponent {
2746
2764
  const id = item.id;
2747
2765
  if (id) {
2748
2766
  if (item.selected) {
2749
- this.selectedIds.push(id);
2767
+ if (!this.selectedIds.includes(id)) {
2768
+ this.selectedIds.push(id);
2769
+ this.selectedItems.push(item);
2770
+ }
2750
2771
  }
2751
2772
  else {
2752
2773
  this.selectedIds = this.selectedIds.filter(item => item !== id);
2774
+ this.selectedItems = this.selectedItems.filter(item => item.id !== id);
2753
2775
  }
2754
2776
  }
2755
2777
  }
@@ -2855,11 +2877,13 @@ class ListBaseComponent extends BaseComponent {
2855
2877
  }
2856
2878
  }
2857
2879
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: ListBaseComponent, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive }); }
2858
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.4", type: ListBaseComponent, viewQueries: [{ propertyName: "filterModal", first: true, predicate: ["filterModal"], descendants: true }, { propertyName: "approveModal", first: true, predicate: ["approveModal"], descendants: true }, { propertyName: "disapproveModal", first: true, predicate: ["disapproveModal"], descendants: true }], usesInheritance: true, ngImport: i0 }); }
2880
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.4", type: ListBaseComponent, inputs: { initItems: "initItems" }, viewQueries: [{ propertyName: "filterModal", first: true, predicate: ["filterModal"], descendants: true }, { propertyName: "approveModal", first: true, predicate: ["approveModal"], descendants: true }, { propertyName: "disapproveModal", first: true, predicate: ["disapproveModal"], descendants: true }], usesInheritance: true, ngImport: i0 }); }
2859
2881
  }
2860
2882
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: ListBaseComponent, decorators: [{
2861
2883
  type: Directive
2862
- }], ctorParameters: () => [{ type: undefined }], propDecorators: { filterModal: [{
2884
+ }], ctorParameters: () => [{ type: undefined }], propDecorators: { initItems: [{
2885
+ type: Input
2886
+ }], filterModal: [{
2863
2887
  type: ViewChild,
2864
2888
  args: ['filterModal', { static: false }]
2865
2889
  }], approveModal: [{