tuain-ng-forms-lib 14.4.93 → 14.4.96

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.
Files changed (108) hide show
  1. package/esm2020/lib/classes/forms/action.mjs +36 -0
  2. package/esm2020/lib/classes/forms/element.mjs +26 -0
  3. package/esm2020/lib/classes/forms/field.mjs +445 -0
  4. package/esm2020/lib/classes/forms/form.constants.mjs +26 -0
  5. package/esm2020/lib/classes/forms/form.mjs +431 -0
  6. package/esm2020/lib/classes/forms/piece-propagate.mjs +37 -0
  7. package/esm2020/lib/classes/forms/piece.mjs +95 -0
  8. package/esm2020/lib/classes/forms/section.mjs +138 -0
  9. package/esm2020/lib/classes/forms/subsection.mjs +81 -0
  10. package/esm2020/lib/classes/forms/table/action.mjs +18 -0
  11. package/esm2020/lib/classes/forms/table/column.mjs +74 -0
  12. package/esm2020/lib/classes/forms/table/row-data.mjs +116 -0
  13. package/esm2020/lib/classes/forms/table/table.mjs +416 -0
  14. package/esm2020/lib/components/elements/action.component.mjs +71 -0
  15. package/esm2020/lib/components/elements/field.component.mjs +81 -0
  16. package/esm2020/lib/components/elements/layout/element.component.mjs +20 -0
  17. package/esm2020/lib/components/elements/layout/form-error.component.mjs +20 -0
  18. package/esm2020/lib/components/elements/layout/form-header.component.mjs +31 -0
  19. package/esm2020/lib/components/elements/layout/piece.component.mjs +39 -0
  20. package/esm2020/lib/components/elements/layout/section.component.mjs +37 -0
  21. package/esm2020/lib/components/elements/layout/sub-section.component.mjs +37 -0
  22. package/esm2020/lib/components/elements/tables/table-record-action.component.mjs +56 -0
  23. package/esm2020/lib/components/elements/tables/table-record-field.component.mjs +30 -0
  24. package/esm2020/lib/components/elements/tables/table.component.mjs +89 -0
  25. package/esm2020/lib/components/forms/basic-form.mjs +1530 -0
  26. package/esm2020/lib/services/event-manager.service.mjs +18 -0
  27. package/esm2020/lib/services/file-manager.service.mjs +6 -0
  28. package/esm2020/lib/services/form-manager.service.mjs +80 -0
  29. package/esm2020/lib/tuain-ng-forms-lib.module.mjs +71 -0
  30. package/esm2020/public-api.mjs +19 -0
  31. package/esm2020/tuain-ng-forms-lib.mjs +5 -0
  32. package/fesm2015/tuain-ng-forms-lib.mjs +4276 -0
  33. package/fesm2015/tuain-ng-forms-lib.mjs.map +1 -0
  34. package/fesm2020/tuain-ng-forms-lib.mjs +4090 -0
  35. package/fesm2020/tuain-ng-forms-lib.mjs.map +1 -0
  36. package/lib/classes/forms/action.d.ts +22 -0
  37. package/lib/classes/forms/element.d.ts +17 -0
  38. package/lib/classes/forms/field.d.ts +205 -0
  39. package/lib/classes/forms/form.constants.d.ts +25 -0
  40. package/lib/classes/forms/form.d.ts +137 -0
  41. package/lib/classes/forms/piece-propagate.d.ts +13 -0
  42. package/lib/classes/forms/piece.d.ts +41 -0
  43. package/lib/classes/forms/section.d.ts +32 -0
  44. package/lib/classes/forms/subsection.d.ts +24 -0
  45. package/lib/classes/forms/table/action.d.ts +15 -0
  46. package/lib/classes/forms/table/column.d.ts +33 -0
  47. package/lib/classes/forms/table/row-data.d.ts +14 -0
  48. package/lib/classes/forms/table/table.d.ts +100 -0
  49. package/lib/components/elements/action.component.d.ts +17 -0
  50. package/lib/components/elements/field.component.d.ts +38 -0
  51. package/lib/components/elements/layout/element.component.d.ts +9 -0
  52. package/lib/components/elements/layout/form-error.component.d.ts +8 -0
  53. package/lib/components/elements/layout/form-header.component.d.ts +12 -0
  54. package/lib/components/elements/layout/piece.component.d.ts +12 -0
  55. package/lib/components/elements/layout/section.component.d.ts +11 -0
  56. package/lib/components/elements/layout/sub-section.component.d.ts +11 -0
  57. package/lib/components/elements/tables/table-record-action.component.d.ts +16 -0
  58. package/lib/components/elements/tables/table-record-field.component.d.ts +12 -0
  59. package/lib/components/elements/tables/table.component.d.ts +35 -0
  60. package/lib/components/forms/basic-form.d.ts +355 -0
  61. package/lib/services/event-manager.service.d.ts +9 -0
  62. package/lib/services/file-manager.service.d.ts +5 -0
  63. package/lib/services/form-manager.service.d.ts +28 -0
  64. package/lib/tuain-ng-forms-lib.module.d.ts +20 -0
  65. package/package.json +24 -6
  66. package/{src/public-api.ts → public-api.d.ts} +0 -5
  67. package/tuain-ng-forms-lib.d.ts +5 -0
  68. package/.browserslistrc +0 -16
  69. package/.yarn/cache/nanoid-npm-4.0.0-924f5c6312-7d5946df5c.zip +0 -0
  70. package/.yarn/cache/tslib-npm-2.4.1-36f0ed04db-19480d6e03.zip +0 -0
  71. package/.yarn/cache/yn-npm-5.0.0-b001dab23c-f0ec7710d3.zip +0 -0
  72. package/.yarn/install-state.gz +0 -0
  73. package/karma.conf.js +0 -44
  74. package/ng-package.json +0 -11
  75. package/src/lib/classes/forms/action.ts +0 -56
  76. package/src/lib/classes/forms/element.ts +0 -29
  77. package/src/lib/classes/forms/field.ts +0 -500
  78. package/src/lib/classes/forms/form.constants.ts +0 -28
  79. package/src/lib/classes/forms/form.ts +0 -508
  80. package/src/lib/classes/forms/piece-propagate.ts +0 -46
  81. package/src/lib/classes/forms/piece.ts +0 -122
  82. package/src/lib/classes/forms/section.ts +0 -152
  83. package/src/lib/classes/forms/subsection.ts +0 -90
  84. package/src/lib/classes/forms/table/action.ts +0 -32
  85. package/src/lib/classes/forms/table/column.ts +0 -94
  86. package/src/lib/classes/forms/table/row-data.ts +0 -121
  87. package/src/lib/classes/forms/table/table.ts +0 -478
  88. package/src/lib/components/elements/action.component.ts +0 -59
  89. package/src/lib/components/elements/field.component.ts +0 -92
  90. package/src/lib/components/elements/layout/element.component.ts +0 -13
  91. package/src/lib/components/elements/layout/form-error.component.ts +0 -11
  92. package/src/lib/components/elements/layout/form-header.component.ts +0 -17
  93. package/src/lib/components/elements/layout/piece.component.ts +0 -34
  94. package/src/lib/components/elements/layout/section.component.ts +0 -31
  95. package/src/lib/components/elements/layout/sub-section.component.ts +0 -31
  96. package/src/lib/components/elements/tables/table-record-action.component.ts +0 -50
  97. package/src/lib/components/elements/tables/table-record-field.component.ts +0 -20
  98. package/src/lib/components/elements/tables/table.component.ts +0 -86
  99. package/src/lib/components/forms/basic-form.ts +0 -1588
  100. package/src/lib/services/event-manager.service.ts +0 -21
  101. package/src/lib/services/file-manager.service.ts +0 -6
  102. package/src/lib/services/form-manager.service.ts +0 -89
  103. package/src/lib/services/icon-dictionary.service.ts +0 -159
  104. package/src/lib/tuain-ng-forms-lib.module.ts +0 -40
  105. package/src/test.ts +0 -27
  106. package/tsconfig.lib.json +0 -15
  107. package/tsconfig.lib.prod.json +0 -10
  108. package/tsconfig.spec.json +0 -17
@@ -0,0 +1,416 @@
1
+ import { Subject } from 'rxjs';
2
+ import { elementTypes } from '../form.constants';
3
+ import { FormElement } from '../element';
4
+ import { RecordTableColumn } from './column';
5
+ import { TableAction } from './action';
6
+ import { TableRecordData } from './row-data';
7
+ const TABLE_SORT_ASCENDING = 'asc';
8
+ const TABLE_SORT_DESCENDING = 'desc';
9
+ const attrs = {
10
+ allSelected: { name: 'allSelected', propagate: 'allSelected' },
11
+ tableCode: { name: 'tableCode', propagate: 'code' },
12
+ clientPaging: { name: 'clientPaging', propagate: null },
13
+ globalSearch: { name: 'globalSearch', propagate: 'globalSearch' },
14
+ globalFilterString: { name: 'globalFilterString', propagate: 'globalFilterString' },
15
+ sorting: { name: 'sorting', propagate: null },
16
+ recordsPerPage: { name: 'recordsPerPage', propagate: 'recordsPerPage' },
17
+ layout: { name: 'layout', propagate: 'layout' },
18
+ columns: { name: 'columns', propagate: 'columns' },
19
+ selectedRecords: { name: 'selectedRecords', propagate: 'selectedRecords' },
20
+ currentPage: { name: 'currentPage', propagate: 'currentPage' },
21
+ totalRecordsNumber: { name: 'totalRecordsNumber', propagate: 'totalRecordsNumber' },
22
+ visibleRecords: { name: 'visibleRecords', propagate: 'visibleRecords' },
23
+ };
24
+ export class RecordTable extends FormElement {
25
+ constructor(tableReceived, formConfig) {
26
+ super(tableReceived, formConfig);
27
+ this._inlineActionTrigger = new Subject();
28
+ this._globalActionTrigger = new Subject();
29
+ this._recordSelectionTrigger = new Subject();
30
+ this._selectionActionTrigger = new Subject();
31
+ this._getDataTrigger = new Subject();
32
+ this._tableColumnObj = {};
33
+ this._actionsObj = {};
34
+ // Mecanismos de filtrado nueva versión
35
+ this.globalFilterString = '';
36
+ this.globalFilterStrings = [];
37
+ this.layout = null;
38
+ this.tableRecordObj = {};
39
+ this.visibleRecords = null;
40
+ this.allSelected = false;
41
+ this.tableCode = '';
42
+ this.recordsPerPage = 10;
43
+ this.totalRecordsNumber = 0;
44
+ this.recordsNumber = 0;
45
+ this.clientPaging = true;
46
+ this.propagationCustomAttributes = this._formConfig?.propagationCustomAttributes?.tables ?? [];
47
+ this.elementType = elementTypes.table;
48
+ this.waiting = false;
49
+ this.currentPage = 1;
50
+ this.totalPages = 1;
51
+ this.requestedPage = 1;
52
+ this.columns = [];
53
+ this._tableColumnObj = {};
54
+ this._actions = [];
55
+ this._actionsObj = {};
56
+ this.tableRecords = [];
57
+ this.globalSearch = false;
58
+ this.restrictedId = null;
59
+ this.tableTitle = tableReceived.tableTitle;
60
+ this._appendPages = tableReceived?.append ?? false;
61
+ this.selectable = tableReceived?.selectable ?? false;
62
+ this.selectionBackend = tableReceived?.selectionBackend ?? false;
63
+ this.sortable = tableReceived?.sortable ?? false;
64
+ this.setAttr(attrs.allSelected, false);
65
+ this.setAttr(attrs.tableCode, tableReceived.tableCode);
66
+ this.setAttr(attrs.clientPaging, tableReceived?.clientPaging ?? true);
67
+ this.setAttr(attrs.globalSearch, tableReceived?.simpleFilter ?? false);
68
+ this.setAttr(attrs.globalFilterString, '');
69
+ this.setAttr(attrs.sorting, { columnName: '', direction: '' });
70
+ this.setAttr(attrs.recordsPerPage, formConfig.defaultRecordsPerPage);
71
+ this.setAttr(attrs.layout, '');
72
+ if (tableReceived.fields) {
73
+ const columns = [];
74
+ for (const columnReceived of tableReceived.fields) {
75
+ const columnEnriched = {
76
+ ...columnReceived,
77
+ visibleStates: this.visibleStates,
78
+ enabledStates: this.enabledStates
79
+ };
80
+ const columnDefinition = new RecordTableColumn(columnEnriched, this._formConfig);
81
+ columns.push(columnDefinition);
82
+ this._tableColumnObj[columnDefinition.fieldCode] = columnDefinition;
83
+ }
84
+ this.setAttr(attrs.columns, columns);
85
+ }
86
+ if (tableReceived.actions) {
87
+ const tableActions = tableReceived.actions.map(objDef => {
88
+ let visibleStates = objDef.visibleStates;
89
+ let enabledStates = objDef.enabledStates;
90
+ if (!visibleStates) {
91
+ visibleStates = (objDef.actionModes || '').split(',')
92
+ .map(state => state.trim())
93
+ .filter(state => state.length > 0);
94
+ enabledStates = (objDef.actionModes || '').split(',')
95
+ .map(state => state.trim())
96
+ .filter(state => state.length > 0);
97
+ }
98
+ return { ...objDef, visibleStates, enabledStates };
99
+ });
100
+ for (const actionReceived of tableActions) {
101
+ const inlineAction = new TableAction(actionReceived, this._formConfig);
102
+ this._actions.push(inlineAction);
103
+ this._actionsObj[inlineAction.actionCode] = inlineAction;
104
+ }
105
+ }
106
+ this.selectionField = (this.selectable) ? tableReceived?.selectionField : null;
107
+ // Filtros predefinidos en el formulario
108
+ if (tableReceived.filters) {
109
+ for (let index = 0; index < tableReceived.filters.length; index++) {
110
+ this.addFilterDefinition(tableReceived.filters[index].fieldCode, tableReceived.filters[index]);
111
+ }
112
+ }
113
+ }
114
+ get columnNames() { return Object.keys(this._tableColumnObj); }
115
+ get inlineActionTrigger() { return this._inlineActionTrigger; }
116
+ get globalActionTrigger() { return this._globalActionTrigger; }
117
+ get selectionActionTrigger() { return this._selectionActionTrigger; }
118
+ get recordSelectionTrigger() { return this._recordSelectionTrigger; }
119
+ get getDataTrigger() { return this._getDataTrigger; }
120
+ getLayout() { return this.layout; }
121
+ setLayout(layout) { this.setAttr(attrs.layout, layout); }
122
+ hasActions() { return (this._actions.length > 0); }
123
+ getSelectedRecords() { return this.tableRecords.filter(rec => rec.selected).map(rec => rec.recordId); }
124
+ activateGlobalSearch() { this.globalSearch = true; }
125
+ inactivateGlobalSearch() { this.globalSearch = false; }
126
+ columnDefinition(fieldCode) { return this._tableColumnObj[fieldCode]; }
127
+ putOnWait() { this.waiting = true; }
128
+ freeWaiting() { this.waiting = false; }
129
+ notifyGlobalAction(actionCode) {
130
+ const tableEvent = {
131
+ tableCode: this.tableCode,
132
+ actionCode,
133
+ actionDetail: null
134
+ };
135
+ this._globalActionTrigger.next(tableEvent);
136
+ }
137
+ notifyInlineAction(tableActionEvent) {
138
+ const tableEvent = {
139
+ tableCode: this.tableCode,
140
+ actionCode: tableActionEvent.actionCode,
141
+ actionDetail: {
142
+ recordId: tableActionEvent.recordId,
143
+ recordData: tableActionEvent.recordData
144
+ }
145
+ };
146
+ this._inlineActionTrigger.next(tableEvent);
147
+ }
148
+ notifyRecordSelection(recordId) {
149
+ const record = this.getTableRecord(recordId);
150
+ if (!record) {
151
+ return;
152
+ }
153
+ record.toggleSelect();
154
+ this.requestedPage = this.currentPage ?? 1;
155
+ const tableEvent = {
156
+ tableCode: this.tableCode,
157
+ actionCode: null,
158
+ actionDetail: {
159
+ recordId: record.recordId,
160
+ recordData: record.recordData
161
+ }
162
+ };
163
+ this.recordSelectionTrigger.next(tableEvent);
164
+ }
165
+ notifySelectionAction(actionCode) {
166
+ const tableEvent = {
167
+ tableCode: this.tableCode,
168
+ actionCode,
169
+ actionDetail: {
170
+ selectedRecords: this.selectedRecords
171
+ }
172
+ };
173
+ this._selectionActionTrigger.next(tableEvent);
174
+ }
175
+ notifyGetDataAction(requestedPage = null) {
176
+ this.updateVisibleRecords();
177
+ this.requestedPage = requestedPage || this.currentPage || 1;
178
+ const tableEvent = {
179
+ tableCode: this.tableCode,
180
+ actionCode: null,
181
+ actionDetail: null,
182
+ };
183
+ this._getDataTrigger.next(tableEvent);
184
+ return null;
185
+ }
186
+ clean() {
187
+ this.tableRecords = [];
188
+ this.unSelectAll();
189
+ this.tableRecordObj = {};
190
+ this.updateVisibleRecords();
191
+ }
192
+ selectAll() {
193
+ this.setAttr(attrs.allSelected, true);
194
+ this.tableRecords.forEach(record => record.select());
195
+ this.setAttr(attrs.selectedRecords, this.getSelectedRecords());
196
+ return true;
197
+ }
198
+ unSelectAll() {
199
+ this.setAttr(attrs.allSelected, false);
200
+ this.tableRecords.forEach(record => record.unselect());
201
+ this.setAttr(attrs.selectedRecords, this.getSelectedRecords());
202
+ return true;
203
+ }
204
+ setTableRecords(tableRecords, append) {
205
+ if (!append) {
206
+ this.tableRecords = [];
207
+ this.setAttr(attrs.allSelected, false);
208
+ this.tableRecords.forEach(record => record.unselect());
209
+ this.setAttr(attrs.selectedRecords, []);
210
+ this.tableRecordObj = {};
211
+ }
212
+ const newRecordsObj = { ...this.tableRecordObj };
213
+ const newRecords = [...this.tableRecords];
214
+ for (const tableRecord of tableRecords) {
215
+ const recordReceived = new TableRecordData(tableRecord, this.columns, this.selectionField);
216
+ const recordIdKey = recordReceived.recordIdKey;
217
+ newRecords.push(recordReceived);
218
+ newRecordsObj[recordIdKey] = recordReceived;
219
+ }
220
+ this.tableRecords = newRecords;
221
+ this.setAttr(attrs.selectedRecords, this.getSelectedRecords());
222
+ this.tableRecordObj = newRecordsObj;
223
+ this.updateVisibleRecords();
224
+ }
225
+ appendRecords(records) { this.setTableRecords(records, true); }
226
+ replaceRecords(records) { this.setTableRecords(records, false); }
227
+ setTableAppend(append) { this._appendPages = append; }
228
+ changePage(requestedPage) {
229
+ if (this.clientPaging) {
230
+ this.setAttr(attrs.currentPage, requestedPage);
231
+ this.updateVisibleRecords();
232
+ }
233
+ else {
234
+ this.notifyGetDataAction(requestedPage);
235
+ }
236
+ }
237
+ updateVisibleRecords() {
238
+ let visibleRecords;
239
+ if (this.clientPaging) {
240
+ let filteredRecords = this.getFilteredRecords();
241
+ this.setAttr(attrs.totalRecordsNumber, filteredRecords.length);
242
+ const sliceNumber1 = (this.currentPage - 1) * this.recordsPerPage;
243
+ const sliceNumber2 = (this.currentPage - 1) * this.recordsPerPage + this.recordsPerPage;
244
+ visibleRecords = filteredRecords.slice(sliceNumber1, sliceNumber2);
245
+ const recordsLastPage = this.totalRecordsNumber % this.recordsPerPage;
246
+ const totalPages = Math.trunc(this.totalRecordsNumber / this.recordsPerPage + (recordsLastPage ? 1 : 0));
247
+ if (this.currentPage > totalPages) {
248
+ this.currentPage = totalPages || 1;
249
+ }
250
+ }
251
+ else {
252
+ visibleRecords = this.tableRecords;
253
+ }
254
+ this.setAttr(attrs.visibleRecords, visibleRecords);
255
+ }
256
+ updateFromServer(tableReceived) {
257
+ this.requestedPage = 1;
258
+ this.visible = tableReceived?.visible || true;
259
+ this.totalPages = tableReceived.totalPages || 1;
260
+ this.recordsNumber = tableReceived.recordsNumber;
261
+ this.setAttr(attrs.currentPage, +tableReceived?.currentPage || 1);
262
+ this.setAttr(attrs.recordsPerPage, +tableReceived.recordsPerPage);
263
+ this.setAttr(attrs.totalRecordsNumber, (this.clientPaging) ? tableReceived.tableRecords.length : +tableReceived.totalRecordsNumber);
264
+ this.setAttr(attrs.sorting, {
265
+ columnName: tableReceived.sortingColumn || '',
266
+ direction: tableReceived.sortingDirection || ''
267
+ });
268
+ this.waiting = false;
269
+ if (!this._appendPages) {
270
+ this.replaceRecords(tableReceived.tableRecords);
271
+ }
272
+ else {
273
+ this.appendRecords(tableReceived.tableRecords);
274
+ }
275
+ this.updateVisibleRecords();
276
+ }
277
+ getTableRecord(recordId) {
278
+ const recordIdKey = (typeof recordId === 'object') ? JSON.stringify(recordId) : recordId;
279
+ return (this.tableRecordObj && recordId && this.tableRecordObj[recordId])
280
+ ? this.tableRecordObj[recordId] : null;
281
+ }
282
+ getAction(actionCode) {
283
+ return (this._actionsObj && actionCode && this._actionsObj[actionCode])
284
+ ? this._actionsObj[actionCode] : null;
285
+ }
286
+ getActions(actionClass = this._formConfig.tableActions.inline, actionTypes = null) {
287
+ return this._actions.filter(actionDef => {
288
+ const typeIncluded = (actionTypes) ? actionTypes.includes(actionDef.actionType) : true;
289
+ return actionDef.actionClass === actionClass && typeIncluded;
290
+ });
291
+ }
292
+ // Filtros
293
+ setFilterById(id) {
294
+ if (this.restrictedId === id) {
295
+ return;
296
+ }
297
+ this.restrictedId = id;
298
+ this.updateVisibleRecords();
299
+ }
300
+ cleanIdFilter() {
301
+ if (this.restrictedId === null) {
302
+ return;
303
+ }
304
+ this.restrictedId = null;
305
+ this.updateVisibleRecords();
306
+ }
307
+ setGlobalFilterString(text, notifyComponent = true) {
308
+ this.globalFilterStrings = text.split(' ').filter(t => t && t.trim().length > 0).map(t => t.trim()) ?? [];
309
+ if (this.clientPaging) {
310
+ this.changePage(1);
311
+ }
312
+ if (notifyComponent) {
313
+ this.setAttr(attrs.globalFilterString, text.trim());
314
+ }
315
+ }
316
+ addFilterDefinition(columnName, filterDefinition) {
317
+ const tableColumn = this.columnDefinition(columnName);
318
+ tableColumn && tableColumn.addFilterDefinition(filterDefinition);
319
+ }
320
+ getFilteredRecords() {
321
+ let filteredRecords = this.tableRecords;
322
+ if (this.restrictedId) {
323
+ filteredRecords = filteredRecords.filter(record => record.recordId === this.restrictedId);
324
+ }
325
+ if (this.globalFilterStrings.length > 0) {
326
+ filteredRecords = filteredRecords.filter(record => record.hasPattern(this.globalFilterStrings, this._tableColumnObj));
327
+ }
328
+ const columnFilters = this.columns.filter(column => column.filter).map(column => column.filter);
329
+ if (columnFilters.length > 0) {
330
+ filteredRecords = filteredRecords.filter(record => record.hasCondition(columnFilters));
331
+ }
332
+ return filteredRecords;
333
+ }
334
+ getColumnFilter(columnName) {
335
+ const tableColumn = this.columnDefinition(columnName);
336
+ return tableColumn?.filter ?? null;
337
+ }
338
+ addColumnFilter(columnName, columnValues, operator = null) {
339
+ const tableColumn = this.columnDefinition(columnName);
340
+ const columnFilterDefinition = tableColumn?.filterDefinition ?? null;
341
+ if (!columnFilterDefinition) {
342
+ return;
343
+ }
344
+ tableColumn && tableColumn.addFilter(columnValues, operator);
345
+ this.updateVisibleRecords();
346
+ }
347
+ removeColumnFilter(columnName) {
348
+ const tableColumn = this.columnDefinition(columnName);
349
+ tableColumn && tableColumn.removeFilter();
350
+ this.updateVisibleRecords();
351
+ }
352
+ get currentFilter() {
353
+ const compactFilter = {
354
+ simpleFilterWords: this.globalFilterStrings,
355
+ advancedFilter: [],
356
+ };
357
+ const columnFilters = this.columns.filter(column => column.filter).map(column => column.filter);
358
+ for (let index = 0; index < columnFilters.length; index++) {
359
+ const columnFilter = columnFilters[index];
360
+ compactFilter.advancedFilter.push({
361
+ fieldCode: columnFilter?.fieldCode,
362
+ operator: columnFilter?.operator,
363
+ fieldValue1: columnFilter?.values[0],
364
+ fieldValue2: columnFilter?.values[1],
365
+ });
366
+ }
367
+ return compactFilter;
368
+ }
369
+ // Ordenamiento de registros local
370
+ sort(columnName, direction) {
371
+ this.setRequiredOrder(columnName, direction);
372
+ if (this.clientPaging) {
373
+ this.localSortData();
374
+ }
375
+ else {
376
+ this.notifyGetDataAction();
377
+ }
378
+ }
379
+ setRequiredOrder(columnField, direction = null) {
380
+ this.setAttr(attrs.sorting, {
381
+ columnName: columnField,
382
+ direction: (direction === 'ascend') ? TABLE_SORT_ASCENDING : TABLE_SORT_DESCENDING,
383
+ });
384
+ }
385
+ localSortData() {
386
+ if (!this.sorting.columnName || !this.sorting.direction) {
387
+ return;
388
+ }
389
+ this.tableRecords.sort((a, b) => this.recordCompare(a, b, this.sorting.columnName, this.sorting.direction));
390
+ //this.unSelectAll();
391
+ this.updateVisibleRecords();
392
+ }
393
+ recordCompare(recordA, recordB, columnCompare, direction) {
394
+ const recordAValue = recordA.getFieldValue(columnCompare);
395
+ const recordBValue = recordB.getFieldValue(columnCompare);
396
+ const recordAColumn = isNaN(recordAValue) ? recordAValue.toLocaleLowerCase() : +recordAValue;
397
+ const recordBColumn = isNaN(recordBValue) ? recordBValue.toLocaleLowerCase() : +recordBValue;
398
+ let result = 0;
399
+ if (recordAColumn < recordBColumn) {
400
+ result = -1;
401
+ }
402
+ else if (recordAColumn > recordBColumn) {
403
+ result = 1;
404
+ }
405
+ return direction === TABLE_SORT_ASCENDING ? result : -result;
406
+ }
407
+ formStateChangeCustomSubscribe(formChangeSubject) {
408
+ this.columns?.forEach(column => {
409
+ column?.subscribeFormStateChange(formChangeSubject);
410
+ });
411
+ this._actions?.forEach(action => {
412
+ action?.subscribeFormStateChange(formChangeSubject);
413
+ });
414
+ }
415
+ }
416
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWFpbi1uZy1mb3Jtcy1saWIvc3JjL2xpYi9jbGFzc2VzL2Zvcm1zL3RhYmxlL3RhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDekMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDdkMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUU3QyxNQUFNLG9CQUFvQixHQUFHLEtBQUssQ0FBQztBQUNuQyxNQUFNLHFCQUFxQixHQUFHLE1BQU0sQ0FBQztBQUVyQyxNQUFNLEtBQUssR0FBRztJQUNaLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRTtJQUM5RCxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUU7SUFDbkQsWUFBWSxFQUFFLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFO0lBQ3ZELFlBQVksRUFBRSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRTtJQUNqRSxrQkFBa0IsRUFBRSxFQUFFLElBQUksRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsb0JBQW9CLEVBQUU7SUFDbkYsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFO0lBQzdDLGNBQWMsRUFBRSxFQUFFLElB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YSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO1FBQzdGLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNmLElBQUksYUFBYSxHQUFHLGFBQWEsRUFBRTtZQUNqQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDYjthQUFNLElBQUksYUFBYSxHQUFHLGFBQWEsRUFBRTtZQUN4QyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1NBQ1o7UUFDRCxPQUFPLFNBQVMsS0FBSyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUMvRCxDQUFDO0lBRVEsOEJBQThCLENBQUMsaUJBQWlCO1FBQ3ZELElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzdCLE1BQU0sRUFBRSx3QkFBd0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3RELENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDOUIsTUFBTSxFQUFFLHdCQUF3QixDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDdEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBlbGVtZW50VHlwZXMgfSBmcm9tICcuLi9mb3JtLmNvbnN0YW50cyc7XG5pbXBvcnQgeyBGb3JtRWxlbWVudCB9IGZyb20gJy4uL2VsZW1lbnQnO1xuaW1wb3J0IHsgUmVjb3JkVGFibGVDb2x1bW4gfSBmcm9tICcuL2NvbHVtbic7XG5pbXBvcnQgeyBUYWJsZUFjdGlvbiB9IGZyb20gJy4vYWN0aW9uJztcbmltcG9ydCB7IFRhYmxlUmVjb3JkRGF0YSB9IGZyb20gJy4vcm93LWRhdGEnO1xuXG5jb25zdCBUQUJMRV9TT1JUX0FTQ0VORElORyA9ICdhc2MnO1xuY29uc3QgVEFCTEVfU09SVF9ERVNDRU5ESU5HID0gJ2Rlc2MnO1xuXG5jb25zdCBhdHRycyA9IHtcbiAgYWxsU2VsZWN0ZWQ6IHsgbmFtZTogJ2FsbFNlbGVjdGVkJywgcHJvcGFnYXRlOiAnYWxsU2VsZWN0ZWQnIH0sXG4gIHRhYmxlQ29kZTogeyBuYW1lOiAndGFibGVDb2RlJywgcHJvcGFnYXRlOiAnY29kZScgfSxcbiAgY2xpZW50UGFnaW5nOiB7IG5hbWU6ICdjbGllbnRQYWdpbmcnLCBwcm9wYWdhdGU6IG51bGwgfSxcbiAgZ2xvYmFsU2VhcmNoOiB7IG5hbWU6ICdnbG9iYWxTZWFyY2gnLCBwcm9wYWdhdGU6ICdnbG9iYWxTZWFyY2gnIH0sXG4gIGdsb2JhbEZpbHRlclN0cmluZzogeyBuYW1lOiAnZ2xvYmFsRmlsdGVyU3RyaW5nJywgcHJvcGFnYXRlOiAnZ2xvYmFsRmlsdGVyU3RyaW5nJyB9LFxuICBzb3J0aW5nOiB7IG5hbWU6ICdzb3J0aW5nJywgcHJvcGFnYXRlOiBudWxsIH0sXG4gIHJlY29yZHNQZXJQYWdlOiB7IG5hbWU6ICdyZWNvcmRzUGVyUGFnZScsIHByb3BhZ2F0ZTogJ3JlY29yZHNQZXJQYWdlJyB9LFxuICBsYXlvdXQ6IHsgbmFtZTogJ2xheW91dCcsIHByb3BhZ2F0ZTogJ2xheW91dCcgfSxcbiAgY29sdW1uczogeyBuYW1lOiAnY29sdW1ucycsIHByb3BhZ2F0ZTogJ2NvbHVtbnMnIH0sXG4gIHNlbGVjdGVkUmVjb3JkczogeyBuYW1lOiAnc2VsZWN0ZWRSZWNvcmRzJywgcHJvcGFnYXRlOiAnc2VsZWN0ZWRSZWNvcmRzJyB9LFxuICBjdXJyZW50UGFnZTogeyBuYW1lOiAnY3VycmVudFBhZ2UnLCBwcm9wYWdhdGU6ICdjdXJyZW50UGFnZScgfSxcbiAgdG90YWxSZWNvcmRzTnVtYmVyOiB7IG5hbWU6ICd0b3RhbFJlY29yZHNOdW1iZXInLCBwcm9wYWdhdGU6ICd0b3RhbFJlY29yZHNOdW1iZXInIH0sXG4gIHZpc2libGVSZWNvcmRzOiB7IG5hbWU6ICd2aXNpYmxlUmVjb3JkcycsIHByb3BhZ2F0ZTogJ3Zpc2libGVSZWNvcmRzJyB9LFxufTtcblxuZXhwb3J0IGludGVyZmFjZSBUYWJsZUFjdGlvbkV2ZW50IHtcbiAgYWN0aW9uQ29kZTogc3RyaW5nO1xuICByZWNvcmRJZDogYW55O1xuICByZWNvcmREYXRhOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVFdmVudCB7XG4gIHRhYmxlQ29kZTogc3RyaW5nO1xuICBhY3Rpb25Db2RlOiBzdHJpbmcgfCBudWxsO1xuICBhY3Rpb25EZXRhaWw6IGFueTtcbn1cblxuZXhwb3J0IGNsYXNzIFJlY29yZFRhYmxlIGV4dGVuZHMgRm9ybUVsZW1lbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IF9pbmxpbmVBY3Rpb25UcmlnZ2VyID0gbmV3IFN1YmplY3Q8VGFibGVFdmVudD4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZ2xvYmFsQWN0aW9uVHJpZ2dlciA9IG5ldyBTdWJqZWN0PFRhYmxlRXZlbnQ+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlY29yZFNlbGVjdGlvblRyaWdnZXIgPSBuZXcgU3ViamVjdDxUYWJsZUV2ZW50PigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZWxlY3Rpb25BY3Rpb25UcmlnZ2VyID0gbmV3IFN1YmplY3Q8VGFibGVFdmVudD4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZ2V0RGF0YVRyaWdnZXIgPSBuZXcgU3ViamVjdDxUYWJsZUV2ZW50PigpO1xuICBwcml2YXRlIF90YWJsZUNvbHVtbk9iaiA9IHt9O1xuICBwcml2YXRlIF9hcHBlbmRQYWdlczogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfYWN0aW9uczogVGFibGVBY3Rpb25bXTtcbiAgcHJpdmF0ZSBfYWN0aW9uc09iaiA9IHt9O1xuXG4gIC8vIE1lY2FuaXNtb3MgZGUgZmlsdHJhZG8gbnVldmEgdmVyc2nDs25cbiAgcHJpdmF0ZSBnbG9iYWxGaWx0ZXJTdHJpbmc6IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIGdsb2JhbEZpbHRlclN0cmluZ3M6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgc2VsZWN0ZWRSZWNvcmRzOiBhbnk7XG4gIHByaXZhdGUgcmVzdHJpY3RlZElkOiBhbnk7XG4gIHByaXZhdGUgbGF5b3V0OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBnbG9iYWxTZWFyY2g6IGJvb2xlYW47XG4gIHRhYmxlUmVjb3JkczogVGFibGVSZWNvcmREYXRhW107XG4gIHRhYmxlUmVjb3JkT2JqID0ge307XG4gIHZpc2libGVSZWNvcmRzOiBUYWJsZVJlY29yZERhdGFbXSB8IG51bGwgPSBudWxsO1xuICBjb2x1bW5zOiBSZWNvcmRUYWJsZUNvbHVtbltdO1xuICBzZWxlY3RhYmxlOiBib29sZWFuO1xuICBzZWxlY3Rpb25CYWNrZW5kOiBib29sZWFuO1xuICBzZWxlY3Rpb25GaWVsZDogc3RyaW5nO1xuICBhbGxTZWxlY3RlZCA9IGZhbHNlO1xuXG4gIHRhYmxlQ29kZTogc3RyaW5nID0gJyc7XG4gIHRhYmxlVGl0bGU6IHN0cmluZztcbiAgY3VycmVudFBhZ2U6IG51bWJlcjtcbiAgdG90YWxQYWdlczogbnVtYmVyO1xuICByZXF1ZXN0ZWRQYWdlOiBudW1iZXI7XG4gIHJlY29yZHNQZXJQYWdlOiBudW1iZXIgPSAxMDtcbiAgdG90YWxSZWNvcmRzTnVtYmVyOiBudW1iZXIgPSAwO1xuICByZWNvcmRzTnVtYmVyOiBudW1iZXIgPSAwO1xuICBzb3J0aW5nOiBhbnk7XG5cbiAgd2FpdGluZzogYm9vbGVhbjtcbiAgY2xpZW50UGFnaW5nOiBib29sZWFuID0gdHJ1ZTtcbiAgc29ydGFibGU6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IodGFibGVSZWNlaXZlZCwgZm9ybUNvbmZpZykge1xuICAgIHN1cGVyKHRhYmxlUmVjZWl2ZWQsIGZvcm1Db25maWcpO1xuICAgIHRoaXMucHJvcGFnYXRpb25DdXN0b21BdHRyaWJ1dGVzID0gdGhpcy5fZm9ybUNvbmZpZz8ucHJvcGFnYXRpb25DdXN0b21BdHRyaWJ1dGVzPy50YWJsZXMgPz8gW107XG4gICAgdGhpcy5lbGVtZW50VHlwZSA9IGVsZW1lbnRUeXBlcy50YWJsZTtcbiAgICB0aGlzLndhaXRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcbiAgICB0aGlzLnRvdGFsUGFnZXMgPSAxO1xuICAgIHRoaXMucmVxdWVzdGVkUGFnZSA9IDE7XG4gICAgdGhpcy5jb2x1bW5zID0gW107XG4gICAgdGhpcy5fdGFibGVDb2x1bW5PYmogPSB7fTtcbiAgICB0aGlzLl9hY3Rpb25zID0gW107XG4gICAgdGhpcy5fYWN0aW9uc09iaiA9IHt9O1xuICAgIHRoaXMudGFibGVSZWNvcmRzID0gW107XG4gICAgdGhpcy5nbG9iYWxTZWFyY2ggPSBmYWxzZTtcbiAgICB0aGlzLnJlc3RyaWN0ZWRJZCA9IG51bGw7XG5cbiAgICB0aGlzLnRhYmxlVGl0bGUgPSB0YWJsZVJlY2VpdmVkLnRhYmxlVGl0bGU7XG4gICAgdGhpcy5fYXBwZW5kUGFnZXMgPSB0YWJsZVJlY2VpdmVkPy5hcHBlbmQgPz8gZmFsc2U7XG4gICAgdGhpcy5zZWxlY3RhYmxlID0gdGFibGVSZWNlaXZlZD8uc2VsZWN0YWJsZSA/PyBmYWxzZTtcbiAgICB0aGlzLnNlbGVjdGlvbkJhY2tlbmQgPSB0YWJsZVJlY2VpdmVkPy5zZWxlY3Rpb25CYWNrZW5kID8/IGZhbHNlO1xuICAgIHRoaXMuc29ydGFibGUgPSB0YWJsZVJlY2VpdmVkPy5zb3J0YWJsZSA/PyBmYWxzZTtcblxuICAgIHRoaXMuc2V0QXR0cihhdHRycy5hbGxTZWxlY3RlZCwgZmFsc2UpO1xuICAgIHRoaXMuc2V0QXR0cihhdHRycy50YWJsZUNvZGUsIHRhYmxlUmVjZWl2ZWQudGFibGVDb2RlKTtcbiAgICB0aGlzLnNldEF0dHIoYXR0cnMuY2xpZW50UGFnaW5nLCB0YWJsZVJlY2VpdmVkPy5jbGllbnRQYWdpbmcgPz8gdHJ1ZSk7XG4gICAgdGhpcy5zZXRBdHRyKGF0dHJzLmdsb2JhbFNlYXJjaCwgdGFibGVSZWNlaXZlZD8uc2ltcGxlRmlsdGVyID8/IGZhbHNlKTtcbiAgICB0aGlzLnNldEF0dHIoYXR0cnMuZ2xvYmFsRmlsdGVyU3RyaW5nLCAnJyk7XG4gICAgdGhpcy5zZXRBdHRyKGF0dHJzLnNvcnRpbmcsIHsgY29sdW1uTmFtZTogJycsIGRpcmVjdGlvbjogJycgfSk7XG4gICAgdGhpcy5zZXRBdHRyKGF0dHJzLnJlY29yZHNQZXJQYWdlLCBmb3JtQ29uZmlnLmRlZmF1bHRSZWNvcmRzUGVyUGFnZSk7XG4gICAgdGhpcy5zZXRBdHRyKGF0dHJzLmxheW91dCwgJycpO1xuXG4gICAgaWYgKHRhYmxlUmVjZWl2ZWQuZmllbGRzKSB7XG4gICAgICBjb25zdCBjb2x1bW5zOiBSZWNvcmRUYWJsZUNvbHVtbltdID0gW107XG4gICAgICBmb3IgKGNvbnN0IGNvbHVtblJlY2VpdmVkIG9mIHRhYmxlUmVjZWl2ZWQuZmllbGRzKSB7XG4gICAgICAgIGNvbnN0IGNvbHVtbkVucmljaGVkID0ge1xuICAgICAgICAgIC4uLmNvbHVtblJlY2VpdmVkLFxuICAgICAgICAgIHZpc2libGVTdGF0ZXM6IHRoaXMudmlzaWJsZVN0YXRlcyxcbiAgICAgICAgICBlbmFibGVkU3RhdGVzOiB0aGlzLmVuYWJsZWRTdGF0ZXNcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgY29sdW1uRGVmaW5pdGlvbjogUmVjb3JkVGFibGVDb2x1bW4gPSBuZXcgUmVjb3JkVGFibGVDb2x1bW4oY29sdW1uRW5yaWNoZWQsIHRoaXMuX2Zvcm1Db25maWcpO1xuICAgICAgICBjb2x1bW5zLnB1c2goY29sdW1uRGVmaW5pdGlvbik7XG4gICAgICAgIHRoaXMuX3RhYmxlQ29sdW1uT2JqW2NvbHVtbkRlZmluaXRpb24uZmllbGRDb2RlXSA9IGNvbHVtbkRlZmluaXRpb247XG4gICAgICB9XG4gICAgICB0aGlzLnNldEF0dHIoYXR0cnMuY29sdW1ucywgY29sdW1ucyk7XG4gICAgfVxuICAgIGlmICh0YWJsZVJlY2VpdmVkLmFjdGlvbnMpIHtcbiAgICAgIGNvbnN0IHRhYmxlQWN0aW9ucyA9IHRhYmxlUmVjZWl2ZWQuYWN0aW9ucy5tYXAob2JqRGVmID0+IHtcbiAgICAgICAgbGV0IHZpc2libGVTdGF0ZXMgPSBvYmpEZWYudmlzaWJsZVN0YXRlcztcbiAgICAgICAgbGV0IGVuYWJsZWRTdGF0ZXMgPSBvYmpEZWYuZW5hYmxlZFN0YXRlcztcbiAgICAgICAgaWYgKCF2aXNpYmxlU3RhdGVzKSB7XG4gICAgICAgICAgdmlzaWJsZVN0YXRlcyA9IChvYmpEZWYuYWN0aW9uTW9kZXMgfHwgJycpLnNwbGl0KCcsJylcbiAgICAgICAgICAgIC5tYXAoc3RhdGUgPT4gc3RhdGUudHJpbSgpKVxuICAgICAgICAgICAgLmZpbHRlcihzdGF0ZSA9PiBzdGF0ZS5sZW5ndGggPiAwKTtcbiAgICAgICAgICBlbmFibGVkU3RhdGVzID0gKG9iakRlZi5hY3Rpb25Nb2RlcyB8fCAnJykuc3BsaXQoJywnKVxuICAgICAgICAgICAgLm1hcChzdGF0ZSA9PiBzdGF0ZS50cmltKCkpXG4gICAgICAgICAgICAuZmlsdGVyKHN0YXRlID0+IHN0YXRlLmxlbmd0aCA+IDApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IC4uLm9iakRlZiwgdmlzaWJsZVN0YXRlcywgZW5hYmxlZFN0YXRlcyB9O1xuICAgICAgfSk7XG4gICAgICBmb3IgKGNvbnN0IGFjdGlvblJlY2VpdmVkIG9mIHRhYmxlQWN0aW9ucykge1xuICAgICAgICBjb25zdCBpbmxpbmVBY3Rpb24gPSBuZXcgVGFibGVBY3Rpb24oYWN0aW9uUmVjZWl2ZWQsIHRoaXMuX2Zvcm1Db25maWcpO1xuICAgICAgICB0aGlzLl9hY3Rpb25zLnB1c2goaW5saW5lQWN0aW9uKTtcbiAgICAgICAgdGhpcy5fYWN0aW9uc09ialtpbmxpbmVBY3Rpb24uYWN0aW9uQ29kZV0gPSBpbmxpbmVBY3Rpb247XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0aW9uRmllbGQgPSAodGhpcy5zZWxlY3RhYmxlKSA/IHRhYmxlUmVjZWl2ZWQ/LnNlbGVjdGlvbkZpZWxkIDogbnVsbDtcbiAgICAvLyBGaWx0cm9zIHByZWRlZmluaWRvcyBlbiBlbCBmb3JtdWxhcmlvXG4gICAgaWYgKHRhYmxlUmVjZWl2ZWQuZmlsdGVycykge1xuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRhYmxlUmVjZWl2ZWQuZmlsdGVycy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgdGhpcy5hZGRGaWx0ZXJEZWZpbml0aW9uKHRhYmxlUmVjZWl2ZWQuZmlsdGVyc1tpbmRleF0uZmllbGRDb2RlLCB0YWJsZVJlY2VpdmVkLmZpbHRlcnNbaW5kZXhdKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgY29sdW1uTmFtZXMoKSB7IHJldHVybiBPYmplY3Qua2V5cyh0aGlzLl90YWJsZUNvbHVtbk9iaik7IH1cbiAgZ2V0IGlubGluZUFjdGlvblRyaWdnZXIoKSB7IHJldHVybiB0aGlzLl9pbmxpbmVBY3Rpb25UcmlnZ2VyOyB9XG4gIGdldCBnbG9iYWxBY3Rpb25UcmlnZ2VyKCkgeyByZXR1cm4gdGhpcy5fZ2xvYmFsQWN0aW9uVHJpZ2dlcjsgfVxuICBnZXQgc2VsZWN0aW9uQWN0aW9uVHJpZ2dlcigpIHsgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbkFjdGlvblRyaWdnZXI7IH1cbiAgZ2V0IHJlY29yZFNlbGVjdGlvblRyaWdnZXIoKSB7IHJldHVybiB0aGlzLl9yZWNvcmRTZWxlY3Rpb25UcmlnZ2VyOyB9XG4gIGdldCBnZXREYXRhVHJpZ2dlcigpIHsgcmV0dXJuIHRoaXMuX2dldERhdGFUcmlnZ2VyOyB9XG5cbiAgZ2V0TGF5b3V0KCkgeyByZXR1cm4gdGhpcy5sYXlvdXQ7IH1cbiAgc2V0TGF5b3V0KGxheW91dCkgeyB0aGlzLnNldEF0dHIoYXR0cnMubGF5b3V0LCBsYXlvdXQpOyB9XG4gIGhhc0FjdGlvbnMoKSB7IHJldHVybiAodGhpcy5fYWN0aW9ucy5sZW5ndGggPiAwKTsgfVxuICBnZXRTZWxlY3RlZFJlY29yZHMoKSB7IHJldHVybiB0aGlzLnRhYmxlUmVjb3Jkcy5maWx0ZXIocmVjID0+IHJlYy5zZWxlY3RlZCkubWFwKHJlYyA9PiByZWMucmVjb3JkSWQpOyB9XG4gIGFjdGl2YXRlR2xvYmFsU2VhcmNoKCkgeyB0aGlzLmdsb2JhbFNlYXJjaCA9IHRydWU7IH1cbiAgaW5hY3RpdmF0ZUdsb2JhbFNlYXJjaCgpIHsgdGhpcy5nbG9iYWxTZWFyY2ggPSBmYWxzZTsgfVxuICBjb2x1bW5EZWZpbml0aW9uKGZpZWxkQ29kZSk6IFJlY29yZFRhYmxlQ29sdW1uIHsgcmV0dXJuIHRoaXMuX3RhYmxlQ29sdW1uT2JqW2ZpZWxkQ29kZV07IH1cbiAgcHV0T25XYWl0KCkgeyB0aGlzLndhaXRpbmcgPSB0cnVlOyB9XG4gIGZyZWVXYWl0aW5nKCkgeyB0aGlzLndhaXRpbmcgPSBmYWxzZTsgfVxuXG4gIG5vdGlmeUdsb2JhbEFjdGlvbihhY3Rpb25Db2RlKSB7XG4gICAgY29uc3QgdGFibGVFdmVudDogVGFibGVFdmVudCA9IHtcbiAgICAgIHRhYmxlQ29kZTogdGhpcy50YWJsZUNvZGUsXG4gICAgICBhY3Rpb25Db2RlLFxuICAgICAgYWN0aW9uRGV0YWlsOiBudWxsXG4gICAgfTtcbiAgICB0aGlzLl9nbG9iYWxBY3Rpb25UcmlnZ2VyLm5leHQodGFibGVFdmVudCk7XG4gIH1cblxuICBub3RpZnlJbmxpbmVBY3Rpb24odGFibGVBY3Rpb25FdmVudDogVGFibGVBY3Rpb25FdmVudCkge1xuICAgIGNvbnN0IHRhYmxlRXZlbnQ6IFRhYmxlRXZlbnQgPSB7XG4gICAgICB0YWJsZUNvZGU6IHRoaXMudGFibGVDb2RlLFxuICAgICAgYWN0aW9uQ29kZTogdGFibGVBY3Rpb25FdmVudC5hY3Rpb25Db2RlLFxuICAgICAgYWN0aW9uRGV0YWlsOiB7XG4gICAgICAgIHJlY29yZElkOiB0YWJsZUFjdGlvbkV2ZW50LnJlY29yZElkLFxuICAgICAgICByZWNvcmREYXRhOiB0YWJsZUFjdGlvbkV2ZW50LnJlY29yZERhdGFcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuX2lubGluZUFjdGlvblRyaWdnZXIubmV4dCh0YWJsZUV2ZW50KTtcbiAgfVxuXG4gIG5vdGlmeVJlY29yZFNlbGVjdGlvbihyZWNvcmRJZCkge1xuICAgIGNvbnN0IHJlY29yZCA9IHRoaXMuZ2V0VGFibGVSZWNvcmQocmVjb3JkSWQpO1xuICAgIGlmICghcmVjb3JkKSB7IHJldHVybjsgfVxuICAgIHJlY29yZC50b2dnbGVTZWxlY3QoKTtcbiAgICB0aGlzLnJlcXVlc3RlZFBhZ2UgPSB0aGlzLmN1cnJlbnRQYWdlID8/IDE7XG4gICAgY29uc3QgdGFibGVFdmVudDogVGFibGVFdmVudCA9IHtcbiAgICAgIHRhYmxlQ29kZTogdGhpcy50YWJsZUNvZGUsXG4gICAgICBhY3Rpb25Db2RlOiBudWxsLFxuICAgICAgYWN0aW9uRGV0YWlsOiB7XG4gICAgICAgIHJlY29yZElkOiByZWNvcmQucmVjb3JkSWQsXG4gICAgICAgIHJlY29yZERhdGE6IHJlY29yZC5yZWNvcmREYXRhXG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLnJlY29yZFNlbGVjdGlvblRyaWdnZXIubmV4dCh0YWJsZUV2ZW50KTtcbiAgfVxuXG4gIG5vdGlmeVNlbGVjdGlvbkFjdGlvbihhY3Rpb25Db2RlKSB7XG4gICAgY29uc3QgdGFibGVFdmVudDogVGFibGVFdmVudCA9IHtcbiAgICAgIHRhYmxlQ29kZTogdGhpcy50YWJsZUNvZGUsXG4gICAgICBhY3Rpb25Db2RlLFxuICAgICAgYWN0aW9uRGV0YWlsOiB7XG4gICAgICAgIHNlbGVjdGVkUmVjb3JkczogdGhpcy5zZWxlY3RlZFJlY29yZHNcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuX3NlbGVjdGlvbkFjdGlvblRyaWdnZXIubmV4dCh0YWJsZUV2ZW50KTtcbiAgfVxuXG4gIG5vdGlmeUdldERhdGFBY3Rpb24ocmVxdWVzdGVkUGFnZSA9IG51bGwpIHtcbiAgICB0aGlzLnVwZGF0ZVZpc2libGVSZWNvcmRzKCk7XG4gICAgdGhpcy5yZXF1ZXN0ZWRQYWdlID0gcmVxdWVzdGVkUGFnZSB8fCB0aGlzLmN1cnJlbnRQYWdlIHx8IDE7XG4gICAgY29uc3QgdGFibGVFdmVudDogVGFibGVFdmVudCA9IHtcbiAgICAgIHRhYmxlQ29kZTogdGhpcy50YWJsZUNvZGUsXG4gICAgICBhY3Rpb25Db2RlOiBudWxsLFxuICAgICAgYWN0aW9uRGV0YWlsOiBudWxsLFxuICAgIH07XG4gICAgdGhpcy5fZ2V0RGF0YVRyaWdnZXIubmV4dCh0YWJsZUV2ZW50KTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNsZWFuKCkge1xuICAgIHRoaXMudGFibGVSZWNvcmRzID0gW107XG4gICAgdGhpcy51blNlbGVjdEFsbCgpO1xuICAgIHRoaXMudGFibGVSZWNvcmRPYmogPSB7fTtcbiAgICB0aGlzLnVwZGF0ZVZpc2libGVSZWNvcmRzKCk7XG4gIH1cblxuICBzZWxlY3RBbGwoKSB7XG4gICAgdGhpcy5zZXRBdHRyKGF0dHJzLmFsbFNlbGVjdGVkLCB0cnVlKTtcbiAgICB0aGlzLnRhYmxlUmVjb3Jkcy5mb3JFYWNoKHJlY29yZCA9PiByZWNvcmQuc2VsZWN0KCkpO1xuICAgIHRoaXMuc2V0QXR0cihhdHRycy5zZWxlY3RlZFJlY29yZHMsIHRoaXMuZ2V0U2VsZWN0ZWRSZWNvcmRzKCkpO1xuICAgIHJldHVybiB0cnVlO1xuXG4gIH1cblxuICB1blNlbGVjdEFsbCgpIHtcbiAgICB0aGlzLnNldEF0dHIoYXR0cnMuYWxsU2VsZWN0ZWQsIGZhbHNlKTtcbiAgICB0aGlzLnRhYmxlUmVjb3Jkcy5mb3JFYWNoKHJlY29yZCA9PiByZWNvcmQudW5zZWxlY3QoKSk7XG4gICAgdGhpcy5zZXRBdHRyKGF0dHJzLnNlbGVjdGVkUmVjb3JkcywgdGhpcy5nZXRTZWxlY3RlZFJlY29yZHMoKSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBzZXRUYWJsZVJlY29yZHModGFibGVSZWNvcmRzLCBhcHBlbmQpIHtcbiAgICBpZiAoIWFwcGVuZCkge1xuICAgICAgdGhpcy50YWJsZVJlY29yZHMgPSBbXTtcbiAgICAgIHRoaXMuc2V0QXR0cihhdHRycy5hbGxTZWxlY3RlZCwgZmFsc2UpO1xuICAgICAgdGhpcy50YWJsZVJlY29yZHMuZm9yRWFjaChyZWNvcmQgPT4gcmVjb3JkLnVuc2VsZWN0KCkpO1xuICAgICAgdGhpcy5zZXRBdHRyKGF0dHJzLnNlbGVjdGVkUmVjb3JkcywgW10pO1xuICAgICAgdGhpcy50YWJsZVJlY29yZE9iaiA9IHt9O1xuICAgIH1cbiAgICBjb25zdCBuZXdSZWNvcmRzT2JqID0geyAuLi50aGlzLnRhYmxlUmVjb3JkT2JqIH07XG4gICAgY29uc3QgbmV3UmVjb3JkcyA9IFsuLi50aGlzLnRhYmxlUmVjb3Jkc107XG4gICAgZm9yIChjb25zdCB0YWJsZVJlY29yZCBvZiB0YWJsZVJlY29yZHMpIHtcbiAgICAgIGNvbnN0IHJlY29yZFJlY2VpdmVkOiBUYWJsZVJlY29yZERhdGEgPSBuZXcgVGFibGVSZWNvcmREYXRhKHRhYmxlUmVjb3JkLCB0aGlzLmNvbHVtbnMsIHRoaXMuc2VsZWN0aW9uRmllbGQpO1xuICAgICAgY29uc3QgcmVjb3JkSWRLZXkgPSByZWNvcmRSZWNlaXZlZC5yZWNvcmRJZEtleTtcbiAgICAgIG5ld1JlY29yZHMucHVzaChyZWNvcmRSZWNlaXZlZCk7XG4gICAgICBuZXdSZWNvcmRzT2JqW3JlY29yZElkS2V5XSA9IHJlY29yZFJlY2VpdmVkO1xuICAgIH1cbiAgICB0aGlzLnRhYmxlUmVjb3JkcyA9IG5ld1JlY29yZHM7XG4gICAgdGhpcy5zZXRBdHRyKGF0dHJzLnNlbGVjdGVkUmVjb3JkcywgdGhpcy5nZXRTZWxlY3RlZFJlY29yZHMoKSk7XG4gICAgdGhpcy50YWJsZVJlY29yZE9iaiA9IG5ld1JlY29yZHNPYmo7XG4gICAgdGhpcy51cGRhdGVWaXNpYmxlUmVjb3JkcygpO1xuICB9XG5cbiAgYXBwZW5kUmVjb3JkcyhyZWNvcmRzKSB7IHRoaXMuc2V0VGFibGVSZWNvcmRzKHJlY29yZHMsIHRydWUpOyB9XG4gIHJlcGxhY2VSZWNvcmRzKHJlY29yZHMpIHsgdGhpcy5zZXRUYWJsZVJlY29yZHMocmVjb3JkcywgZmFsc2UpOyB9XG5cbiAgc2V0VGFibGVBcHBlbmQoYXBwZW5kOiBib29sZWFuKSB7IHRoaXMuX2FwcGVuZFBhZ2VzID0gYXBwZW5kIH1cblxuICBjaGFuZ2VQYWdlKHJlcXVlc3RlZFBhZ2UpIHtcbiAgICBpZiAodGhpcy5jbGllbnRQYWdpbmcpIHtcbiAgICAgIHRoaXMuc2V0QXR0cihhdHRycy5jdXJyZW50UGFnZSwgcmVxdWVzdGVkUGFnZSk7XG4gICAgICB0aGlzLnVwZGF0ZVZpc2libGVSZWNvcmRzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubm90aWZ5R2V0RGF0YUFjdGlvbihyZXF1ZXN0ZWRQYWdlKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVWaXNpYmxlUmVjb3JkcygpIHtcbiAgICBsZXQgdmlzaWJsZVJlY29yZHM6IGFueVtdO1xuICAgIGlmICh0aGlzLmNsaWVudFBhZ2luZykge1xuICAgICAgbGV0IGZpbHRlcmVkUmVjb3JkcyA9IHRoaXMuZ2V0RmlsdGVyZWRSZWNvcmRzKCk7XG4gICAgICB0aGlzLnNldEF0dHIoYXR0cnMudG90YWxSZWNvcmRzTnVtYmVyLCBmaWx0ZXJlZFJlY29yZHMubGVuZ3RoKTtcbiAgICAgIGNvbnN0IHNsaWNlTnVtYmVyMSA9ICh0aGlzLmN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLnJlY29yZHNQZXJQYWdlO1xuICAgICAgY29uc3Qgc2xpY2VOdW1iZXIyID0gKHRoaXMuY3VycmVudFBhZ2UgLSAxKSAqIHRoaXMucmVjb3Jkc1BlclBhZ2UgKyB0aGlzLnJlY29yZHNQZXJQYWdlXG4gICAgICB2aXNpYmxlUmVjb3JkcyA9IGZpbHRlcmVkUmVjb3Jkcy5zbGljZShzbGljZU51bWJlcjEsIHNsaWNlTnVtYmVyMik7XG4gICAgICBjb25zdCByZWNvcmRzTGFzdFBhZ2UgPSB0aGlzLnRvdGFsUmVjb3Jkc051bWJlciAlIHRoaXMucmVjb3Jkc1BlclBhZ2U7XG4gICAgICBjb25zdCB0b3RhbFBhZ2VzID0gTWF0aC50cnVuYyh0aGlzLnRvdGFsUmVjb3Jkc051bWJlciAvIHRoaXMucmVjb3Jkc1BlclBhZ2UgKyAocmVjb3Jkc0xhc3RQYWdlID8gMSA6IDApKTtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlID4gdG90YWxQYWdlcykge1xuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdG90YWxQYWdlcyB8fCAxO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2aXNpYmxlUmVjb3JkcyA9IHRoaXMudGFibGVSZWNvcmRzO1xuICAgIH1cbiAgICB0aGlzLnNldEF0dHIoYXR0cnMudmlzaWJsZVJlY29yZHMsIHZpc2libGVSZWNvcmRzKTtcbiAgfVxuXG4gIHVwZGF0ZUZyb21TZXJ2ZXIodGFibGVSZWNlaXZlZCkge1xuICAgIHRoaXMucmVxdWVzdGVkUGFnZSA9IDE7XG4gICAgdGhpcy52aXNpYmxlID0gdGFibGVSZWNlaXZlZD8udmlzaWJsZSB8fCB0cnVlO1xuICAgIHRoaXMudG90YWxQYWdlcyA9IHRhYmxlUmVjZWl2ZWQudG90YWxQYWdlcyB8fCAxO1xuICAgIHRoaXMucmVjb3Jkc051bWJlciA9IHRhYmxlUmVjZWl2ZWQucmVjb3Jkc051bWJlcjtcbiAgICB0aGlzLnNldEF0dHIoYXR0cnMuY3VycmVudFBhZ2UsICt0YWJsZVJlY2VpdmVkPy5jdXJyZW50UGFnZSB8fCAxKTtcbiAgICB0aGlzLnNldEF0dHIoYXR0cnMucmVjb3Jkc1BlclBhZ2UsICt0YWJsZVJlY2VpdmVkLnJlY29yZHNQZXJQYWdlKTtcbiAgICB0aGlzLnNldEF0dHIoYXR0cnMudG90YWxSZWNvcmRzTnVtYmVyLCAodGhpcy5jbGllbnRQYWdpbmcpID8gdGFibGVSZWNlaXZlZC50YWJsZVJlY29yZHMubGVuZ3RoIDogK3RhYmxlUmVjZWl2ZWQudG90YWxSZWNvcmRzTnVtYmVyKTtcbiAgICB0aGlzLnNldEF0dHIoYXR0cnMuc29ydGluZywge1xuICAgICAgY29sdW1uTmFtZTogdGFibGVSZWNlaXZlZC5zb3J0aW5nQ29sdW1uIHx8ICcnLFxuICAgICAgZGlyZWN0aW9uOiB0YWJsZVJlY2VpdmVkLnNvcnRpbmdEaXJlY3Rpb24gfHwgJydcbiAgICB9KTtcbiAgICB0aGlzLndhaXRpbmcgPSBmYWxzZTtcbiAgICBpZiAoIXRoaXMuX2FwcGVuZFBhZ2VzKSB7XG4gICAgICB0aGlzLnJlcGxhY2VSZWNvcmRzKHRhYmxlUmVjZWl2ZWQudGFibGVSZWNvcmRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hcHBlbmRSZWNvcmRzKHRhYmxlUmVjZWl2ZWQudGFibGVSZWNvcmRzKTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVWaXNpYmxlUmVjb3JkcygpO1xuICB9XG5cbiAgZ2V0VGFibGVSZWNvcmQocmVjb3JkSWQpIHtcbiAgICBjb25zdCByZWNvcmRJZEtleSA9ICh0eXBlb2YgcmVjb3JkSWQgPT09ICdvYmplY3QnKSA/IEpTT04uc3RyaW5naWZ5KHJlY29yZElkKSA6IHJlY29yZElkO1xuICAgIHJldHVybiAodGhpcy50YWJsZVJlY29yZE9iaiAmJiByZWNvcmRJZCAmJiB0aGlzLnRhYmxlUmVjb3JkT2JqW3JlY29yZElkXSlcbiAgICAgID8gdGhpcy50YWJsZVJlY29yZE9ialtyZWNvcmRJZF0gOiBudWxsO1xuICB9XG5cbiAgZ2V0QWN0aW9uKGFjdGlvbkNvZGUpIHtcbiAgICByZXR1cm4gKHRoaXMuX2FjdGlvbnNPYmogJiYgYWN0aW9uQ29kZSAmJiB0aGlzLl9hY3Rpb25zT2JqW2FjdGlvbkNvZGVdKVxuICAgICAgPyB0aGlzLl9hY3Rpb25zT2JqW2FjdGlvbkNvZGVdIDogbnVsbDtcbiAgfVxuXG4gIGdldEFjdGlvbnMoYWN0aW9uQ2xhc3M6IHN0cmluZyA9IHRoaXMuX2Zvcm1Db25maWcudGFibGVBY3Rpb25zLmlubGluZSwgYWN0aW9uVHlwZXM6IHN0cmluZ1tdID0gbnVsbCkge1xuICAgIHJldHVybiB0aGlzLl9hY3Rpb25zLmZpbHRlcihhY3Rpb25EZWYgPT4ge1xuICAgICAgY29uc3QgdHlwZUluY2x1ZGVkID0gKGFjdGlvblR5cGVzKSA/IGFjdGlvblR5cGVzLmluY2x1ZGVzKGFjdGlvbkRlZi5hY3Rpb25UeXBlKSA6IHRydWU7XG4gICAgICByZXR1cm4gYWN0aW9uRGVmLmFjdGlvbkNsYXNzID09PSBhY3Rpb25DbGFzcyAmJiB0eXBlSW5jbHVkZWQ7XG4gICAgfSk7XG4gIH1cblxuICAvLyBGaWx0cm9zXG5cbiAgc2V0RmlsdGVyQnlJZChpZCkge1xuICAgIGlmICh0aGlzLnJlc3RyaWN0ZWRJZCA9PT0gaWQpIHsgcmV0dXJuOyB9XG4gICAgdGhpcy5yZXN0cmljdGVkSWQgPSBpZDtcbiAgICB0aGlzLnVwZGF0ZVZpc2libGVSZWNvcmRzKCk7XG4gIH1cblxuICBjbGVhbklkRmlsdGVyKCkge1xuICAgIGlmICh0aGlzLnJlc3RyaWN0ZWRJZCA9PT0gbnVsbCkgeyByZXR1cm47IH1cbiAgICB0aGlzLnJlc3RyaWN0ZWRJZCA9IG51bGw7XG4gICAgdGhpcy51cGRhdGVWaXNpYmxlUmVjb3JkcygpO1xuICB9XG5cbiAgc2V0R2xvYmFsRmlsdGVyU3RyaW5nKHRleHQsIG5vdGlmeUNvbXBvbmVudCA9IHRydWUpIHtcbiAgICB0aGlzLmdsb2JhbEZpbHRlclN0cmluZ3MgPSB0ZXh0LnNwbGl0KCcgJykuZmlsdGVyKHQgPT4gdCAmJiB0LnRyaW0oKS5sZW5ndGggPiAwKS5tYXAodCA9PiB0LnRyaW0oKSkgPz8gW107XG4gICAgaWYgKHRoaXMuY2xpZW50UGFnaW5nKSB7XG4gICAgICB0aGlzLmNoYW5nZVBhZ2UoMSk7XG4gICAgfVxuICAgIGlmIChub3RpZnlDb21wb25lbnQpIHtcbiAgICAgIHRoaXMuc2V0QXR0cihhdHRycy5nbG9iYWxGaWx0ZXJTdHJpbmcsIHRleHQudHJpbSgpKTtcbiAgICB9XG4gIH1cblxuICBhZGRGaWx0ZXJEZWZpbml0aW9uKGNvbHVtbk5hbWUsIGZpbHRlckRlZmluaXRpb24pIHtcbiAgICBjb25zdCB0YWJsZUNvbHVtbiA9IHRoaXMuY29sdW1uRGVmaW5pdGlvbihjb2x1bW5OYW1lKTtcbiAgICB0YWJsZUNvbHVtbiAmJiB0YWJsZUNvbHVtbi5hZGRGaWx0ZXJEZWZpbml0aW9uKGZpbHRlckRlZmluaXRpb24pO1xuICB9XG5cbiAgZ2V0RmlsdGVyZWRSZWNvcmRzKCkge1xuICAgIGxldCBmaWx0ZXJlZFJlY29yZHMgPSB0aGlzLnRhYmxlUmVjb3JkcztcbiAgICBpZiAodGhpcy5yZXN0cmljdGVkSWQpIHtcbiAgICAgIGZpbHRlcmVkUmVjb3JkcyA9IGZpbHRlcmVkUmVjb3Jkcy5maWx0ZXIocmVjb3JkID0+IHJlY29yZC5yZWNvcmRJZCA9PT0gdGhpcy5yZXN0cmljdGVkSWQpO1xuICAgIH1cbiAgICBpZiAodGhpcy5nbG9iYWxGaWx0ZXJTdHJpbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgIGZpbHRlcmVkUmVjb3JkcyA9IGZpbHRlcmVkUmVjb3Jkcy5maWx0ZXIocmVjb3JkID0+IHJlY29yZC5oYXNQYXR0ZXJuKHRoaXMuZ2xvYmFsRmlsdGVyU3RyaW5ncywgdGhpcy5fdGFibGVDb2x1bW5PYmopKTtcbiAgICB9XG4gICAgY29uc3QgY29sdW1uRmlsdGVycyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5maWx0ZXIpLm1hcChjb2x1bW4gPT4gY29sdW1uLmZpbHRlcik7XG4gICAgaWYgKGNvbHVtbkZpbHRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgZmlsdGVyZWRSZWNvcmRzID0gZmlsdGVyZWRSZWNvcmRzLmZpbHRlcihyZWNvcmQgPT4gcmVjb3JkLmhhc0NvbmRpdGlvbihjb2x1bW5GaWx0ZXJzKSk7XG4gICAgfVxuICAgIHJldHVybiBmaWx0ZXJlZFJlY29yZHM7XG4gIH1cblxuICBnZXRDb2x1bW5GaWx0ZXIoY29sdW1uTmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgdGFibGVDb2x1bW4gPSB0aGlzLmNvbHVtbkRlZmluaXRpb24oY29sdW1uTmFtZSk7XG4gICAgcmV0dXJuIHRhYmxlQ29sdW1uPy5maWx0ZXIgPz8gbnVsbDtcbiAgfVxuXG4gIGFkZENvbHVtbkZpbHRlcihjb2x1bW5OYW1lOiBzdHJpbmcsIGNvbHVtblZhbHVlczogYW55IHwgYW55W10sIG9wZXJhdG9yOiBzdHJpbmcgPSBudWxsKSB7XG4gICAgY29uc3QgdGFibGVDb2x1bW4gPSB0aGlzLmNvbHVtbkRlZmluaXRpb24oY29sdW1uTmFtZSk7XG4gICAgY29uc3QgY29sdW1uRmlsdGVyRGVmaW5pdGlvbiA9IHRhYmxlQ29sdW1uPy5maWx0ZXJEZWZpbml0aW9uID8/IG51bGw7XG4gICAgaWYgKCFjb2x1bW5GaWx0ZXJEZWZpbml0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRhYmxlQ29sdW1uICYmIHRhYmxlQ29sdW1uLmFkZEZpbHRlcihjb2x1bW5WYWx1ZXMsIG9wZXJhdG9yKTtcbiAgICB0aGlzLnVwZGF0ZVZpc2libGVSZWNvcmRzKCk7XG4gIH1cblxuICByZW1vdmVDb2x1bW5GaWx0ZXIoY29sdW1uTmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgdGFibGVDb2x1bW4gPSB0aGlzLmNvbHVtbkRlZmluaXRpb24oY29sdW1uTmFtZSk7XG4gICAgdGFibGVDb2x1bW4gJiYgdGFibGVDb2x1bW4ucmVtb3ZlRmlsdGVyKCk7XG4gICAgdGhpcy51cGRhdGVWaXNpYmxlUmVjb3JkcygpO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRGaWx0ZXIoKSB7XG4gICAgY29uc3QgY29tcGFjdEZpbHRlcjogYW55ID0ge1xuICAgICAgc2ltcGxlRmlsdGVyV29yZHM6IHRoaXMuZ2xvYmFsRmlsdGVyU3RyaW5ncyxcbiAgICAgIGFkdmFuY2VkRmlsdGVyOiBbXSxcbiAgICB9O1xuICAgIGNvbnN0IGNvbHVtbkZpbHRlcnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uZmlsdGVyKS5tYXAoY29sdW1uID0+IGNvbHVtbi5maWx0ZXIpO1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBjb2x1bW5GaWx0ZXJzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgY29uc3QgY29sdW1uRmlsdGVyID0gY29sdW1uRmlsdGVyc1tpbmRleF07XG4gICAgICBjb21wYWN0RmlsdGVyLmFkdmFuY2VkRmlsdGVyLnB1c2goe1xuICAgICAgICBmaWVsZENvZGU6IGNvbHVtbkZpbHRlcj8uZmllbGRDb2RlLFxuICAgICAgICBvcGVyYXRvcjogY29sdW1uRmlsdGVyPy5vcGVyYXRvcixcbiAgICAgICAgZmllbGRWYWx1ZTE6IGNvbHVtbkZpbHRlcj8udmFsdWVzWzBdLFxuICAgICAgICBmaWVsZFZhbHVlMjogY29sdW1uRmlsdGVyPy52YWx1ZXNbMV0sXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbXBhY3RGaWx0ZXI7XG4gIH1cblxuICAvLyBPcmRlbmFtaWVudG8gZGUgcmVnaXN0cm9zIGxvY2FsXG5cbiAgc29ydChjb2x1bW5OYW1lLCBkaXJlY3Rpb24pIHtcbiAgICB0aGlzLnNldFJlcXVpcmVkT3JkZXIoY29sdW1uTmFtZSwgZGlyZWN0aW9uKTtcbiAgICBpZiAodGhpcy5jbGllbnRQYWdpbmcpIHtcbiAgICAgIHRoaXMubG9jYWxTb3J0RGF0YSgpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubm90aWZ5R2V0RGF0YUFjdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIHNldFJlcXVpcmVkT3JkZXIoY29sdW1uRmllbGQsIGRpcmVjdGlvbiA9IG51bGwpIHtcbiAgICB0aGlzLnNldEF0dHIoYXR0cnMuc29ydGluZywge1xuICAgICAgY29sdW1uTmFtZTogY29sdW1uRmllbGQsXG4gICAgICBkaXJlY3Rpb246IChkaXJlY3Rpb24gPT09ICdhc2NlbmQnKSA/IFRBQkxFX1NPUlRfQVNDRU5ESU5HIDogVEFCTEVfU09SVF9ERVNDRU5ESU5HLFxuICAgIH0pO1xuICB9XG5cbiAgbG9jYWxTb3J0RGF0YSgpIHtcbiAgICBpZiAoIXRoaXMuc29ydGluZy5jb2x1bW5OYW1lIHx8ICF0aGlzLnNvcnRpbmcuZGlyZWN0aW9uKSB7IHJldHVybjsgfVxuICAgIHRoaXMudGFibGVSZWNvcmRzLnNvcnQoKGEsIGIpID0+IHRoaXMucmVjb3JkQ29tcGFyZShhLCBiLCB0aGlzLnNvcnRpbmcuY29sdW1uTmFtZSwgdGhpcy5zb3J0aW5nLmRpcmVjdGlvbikpO1xuICAgIC8vdGhpcy51blNlbGVjdEFsbCgpO1xuICAgIHRoaXMudXBkYXRlVmlzaWJsZVJlY29yZHMoKTtcbiAgfVxuXG4gIHJlY29yZENvbXBhcmUocmVjb3JkQTogVGFibGVSZWNvcmREYXRhLCByZWNvcmRCOiBUYWJsZVJlY29yZERhdGEsIGNvbHVtbkNvbXBhcmUsIGRpcmVjdGlvbikge1xuICAgIGNvbnN0IHJlY29yZEFWYWx1ZSA9IHJlY29yZEEuZ2V0RmllbGRWYWx1ZShjb2x1bW5Db21wYXJlKTtcbiAgICBjb25zdCByZWNvcmRCVmFsdWUgPSByZWNvcmRCLmdldEZpZWxkVmFsdWUoY29sdW1uQ29tcGFyZSk7XG4gICAgY29uc3QgcmVjb3JkQUNvbHVtbiA9IGlzTmFOKHJlY29yZEFWYWx1ZSkgPyByZWNvcmRBVmFsdWUudG9Mb2NhbGVMb3dlckNhc2UoKSA6ICtyZWNvcmRBVmFsdWU7XG4gICAgY29uc3QgcmVjb3JkQkNvbHVtbiA9IGlzTmFOKHJlY29yZEJWYWx1ZSkgPyByZWNvcmRCVmFsdWUudG9Mb2NhbGVMb3dlckNhc2UoKSA6ICtyZWNvcmRCVmFsdWU7XG4gICAgbGV0IHJlc3VsdCA9IDA7XG4gICAgaWYgKHJlY29yZEFDb2x1bW4gPCByZWNvcmRCQ29sdW1uKSB7XG4gICAgICByZXN1bHQgPSAtMTtcbiAgICB9IGVsc2UgaWYgKHJlY29yZEFDb2x1bW4gPiByZWNvcmRCQ29sdW1uKSB7XG4gICAgICByZXN1bHQgPSAxO1xuICAgIH1cbiAgICByZXR1cm4gZGlyZWN0aW9uID09PSBUQUJMRV9TT1JUX0FTQ0VORElORyA/IHJlc3VsdCA6IC1yZXN1bHQ7XG4gIH1cblxuICBvdmVycmlkZSBmb3JtU3RhdGVDaGFuZ2VDdXN0b21TdWJzY3JpYmUoZm9ybUNoYW5nZVN1YmplY3QpIHtcbiAgICB0aGlzLmNvbHVtbnM/LmZvckVhY2goY29sdW1uID0+IHtcbiAgICAgIGNvbHVtbj8uc3Vic2NyaWJlRm9ybVN0YXRlQ2hhbmdlKGZvcm1DaGFuZ2VTdWJqZWN0KTtcbiAgICB9KTtcbiAgICB0aGlzLl9hY3Rpb25zPy5mb3JFYWNoKGFjdGlvbiA9PiB7XG4gICAgICBhY3Rpb24/LnN1YnNjcmliZUZvcm1TdGF0ZUNoYW5nZShmb3JtQ2hhbmdlU3ViamVjdCk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,71 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import { ElementComponent } from './layout/element.component';
3
+ import * as i0 from "@angular/core";
4
+ export class ActionComponent extends ElementComponent {
5
+ constructor() {
6
+ super(...arguments);
7
+ this.inProgress = false;
8
+ this.action = null;
9
+ this.style = 'primary';
10
+ this.showLabel = true;
11
+ }
12
+ ngOnInit() {
13
+ if (!this.action) {
14
+ return;
15
+ }
16
+ this.formConfig = this.action?._formConfig;
17
+ const mapping = Object.entries(this.formConfig?.actionPropagateAttributes);
18
+ for (let index = 0; index < mapping.length; index++) {
19
+ const actionAttr = mapping[index]?.[0];
20
+ const componentAttr = mapping[index]?.[1]?.toString() ?? '';
21
+ if (componentAttr) {
22
+ const value = this.action?.[actionAttr];
23
+ this.defaultProcessAttributeChange(componentAttr, value);
24
+ this.customProcessAttributeChange(componentAttr, value);
25
+ }
26
+ }
27
+ this.action?.attributeChange?.subscribe(event => {
28
+ const { name: componentAttr, value } = event;
29
+ this.defaultProcessAttributeChange(componentAttr, value);
30
+ this.customProcessAttributeChange(componentAttr, value);
31
+ });
32
+ this.start();
33
+ }
34
+ activate() {
35
+ if (this.action?.notifyActivation) {
36
+ this.action.notifyActivation();
37
+ }
38
+ }
39
+ visibleOnRestriction() {
40
+ if (!this.action?.restrictedOnField) {
41
+ return true;
42
+ }
43
+ if ((this.action?.restrictedOnOperator === '=='
44
+ && this.relatedField === this.action?.restrictedOnValue)
45
+ || (this.action?.restrictedOnOperator === '!='
46
+ && this.relatedField !== this.action?.restrictedOnValue)) {
47
+ return true;
48
+ }
49
+ return false;
50
+ }
51
+ }
52
+ ActionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.6", ngImport: i0, type: ActionComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
53
+ ActionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.6", type: ActionComponent, selector: "lib-action", inputs: { action: "action", busy: "busy", relatedField: "relatedField", style: "style", showLabel: "showLabel" }, usesInheritance: true, ngImport: i0, template: `<ng-content></ng-content>`, isInline: true });
54
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.6", ngImport: i0, type: ActionComponent, decorators: [{
55
+ type: Component,
56
+ args: [{
57
+ selector: 'lib-action',
58
+ template: `<ng-content></ng-content>`
59
+ }]
60
+ }], propDecorators: { action: [{
61
+ type: Input
62
+ }], busy: [{
63
+ type: Input
64
+ }], relatedField: [{
65
+ type: Input
66
+ }], style: [{
67
+ type: Input
68
+ }], showLabel: [{
69
+ type: Input
70
+ }] } });
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1YWluLW5nLWZvcm1zLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvZWxlbWVudHMvYWN0aW9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUV6RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTs7QUFPN0QsTUFBTSxPQUFPLGVBQWdCLFNBQVEsZ0JBQWdCO0lBTHJEOztRQU1FLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFFbkIsV0FBTSxHQUFzQixJQUFJLENBQUM7UUFJakMsVUFBSyxHQUFHLFNBQVMsQ0FBQztRQUNsQixjQUFTLEdBQUcsSUFBSSxDQUFDO0tBeUMzQjtJQXZDQyxRQUFRO1FBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFBRSxPQUFPO1NBQUU7UUFDN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQztRQUMzQyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUseUJBQXlCLENBQUMsQ0FBQztRQUMzRSxLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUNuRCxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2QyxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDNUQsSUFBSSxhQUFhLEVBQUU7Z0JBQ2pCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDeEMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDekQsSUFBSSxDQUFDLDRCQUE0QixDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQzthQUN6RDtTQUNGO1FBQ0QsSUFBSSxDQUFDLE1BQU0sRUFBRSxlQUFlLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzlDLE1BQU0sRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxHQUFHLEtBQUssQ0FBQztZQUM3QyxJQUFJLENBQUMsNkJBQTZCLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDMUQsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDZixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRTtZQUNqQyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQUM7U0FDaEM7SUFDSCxDQUFDO0lBRUQsb0JBQW9CO1FBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLGlCQUFpQixFQUFFO1lBQ25DLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxvQkFBb0IsS0FBSyxJQUFJO2VBQzFDLElBQUksQ0FBQyxZQUFZLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQztlQUNyRCxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsb0JBQW9CLEtBQUssSUFBSTttQkFDekMsSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLGlCQUFpQixDQUFDLEVBQUU7WUFDNUQsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQzs7NEdBaERVLGVBQWU7Z0dBQWYsZUFBZSwyTEFIaEIsMkJBQTJCOzJGQUcxQixlQUFlO2tCQUwzQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxZQUFZO29CQUN0QixRQUFRLEVBQUUsMkJBQTJCO2lCQUN0Qzs4QkFLVSxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUcsS0FBSztzQkFBYixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1BY3Rpb24gfSBmcm9tICcuLi8uLi9jbGFzc2VzL2Zvcm1zL2FjdGlvbic7XG5pbXBvcnQgeyBFbGVtZW50Q29tcG9uZW50IH0gZnJvbSAnLi9sYXlvdXQvZWxlbWVudC5jb21wb25lbnQnXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1hY3Rpb24nLFxuICB0ZW1wbGF0ZTogYDxuZy1jb250ZW50PjwvbmctY29udGVudD5gXG59KVxuXG5leHBvcnQgY2xhc3MgQWN0aW9uQ29tcG9uZW50IGV4dGVuZHMgRWxlbWVudENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGluUHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKSBhY3Rpb246IEZvcm1BY3Rpb24gfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgYnVzeTogYW55O1xuICBASW5wdXQoKSByZWxhdGVkRmllbGQ6IGFueTtcblxuICBASW5wdXQoKSBzdHlsZSA9ICdwcmltYXJ5JztcbiAgQElucHV0KCkgc2hvd0xhYmVsID0gdHJ1ZTtcblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAoIXRoaXMuYWN0aW9uKSB7IHJldHVybjsgfVxuICAgIHRoaXMuZm9ybUNvbmZpZyA9IHRoaXMuYWN0aW9uPy5fZm9ybUNvbmZpZztcbiAgICBjb25zdCBtYXBwaW5nID0gT2JqZWN0LmVudHJpZXModGhpcy5mb3JtQ29uZmlnPy5hY3Rpb25Qcm9wYWdhdGVBdHRyaWJ1dGVzKTtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbWFwcGluZy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGNvbnN0IGFjdGlvbkF0dHIgPSBtYXBwaW5nW2luZGV4XT8uWzBdO1xuICAgICAgY29uc3QgY29tcG9uZW50QXR0ciA9IG1hcHBpbmdbaW5kZXhdPy5bMV0/LnRvU3RyaW5nKCkgPz8gJyc7XG4gICAgICBpZiAoY29tcG9uZW50QXR0cikge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuYWN0aW9uPy5bYWN0aW9uQXR0cl07XG4gICAgICAgIHRoaXMuZGVmYXVsdFByb2Nlc3NBdHRyaWJ1dGVDaGFuZ2UoY29tcG9uZW50QXR0ciwgdmFsdWUpO1xuICAgICAgICB0aGlzLmN1c3RvbVByb2Nlc3NBdHRyaWJ1dGVDaGFuZ2UoY29tcG9uZW50QXR0ciwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmFjdGlvbj8uYXR0cmlidXRlQ2hhbmdlPy5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgY29uc3QgeyBuYW1lOiBjb21wb25lbnRBdHRyLCB2YWx1ZSB9ID0gZXZlbnQ7XG4gICAgICB0aGlzLmRlZmF1bHRQcm9jZXNzQXR0cmlidXRlQ2hhbmdlKGNvbXBvbmVudEF0dHIsIHZhbHVlKTtcbiAgICAgIHRoaXMuY3VzdG9tUHJvY2Vzc0F0dHJpYnV0ZUNoYW5nZShjb21wb25lbnRBdHRyLCB2YWx1ZSk7XG4gICAgfSk7XG4gICAgdGhpcy5zdGFydCgpO1xuICB9XG5cbiAgYWN0aXZhdGUoKSB7XG4gICAgaWYgKHRoaXMuYWN0aW9uPy5ub3RpZnlBY3RpdmF0aW9uKSB7XG4gICAgICB0aGlzLmFjdGlvbi5ub3RpZnlBY3RpdmF0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgdmlzaWJsZU9uUmVzdHJpY3Rpb24oKSB7XG4gICAgaWYgKCF0aGlzLmFjdGlvbj8ucmVzdHJpY3RlZE9uRmllbGQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoKHRoaXMuYWN0aW9uPy5yZXN0cmljdGVkT25PcGVyYXRvciA9PT0gJz09J1xuICAgICAgJiYgdGhpcy5yZWxhdGVkRmllbGQgPT09IHRoaXMuYWN0aW9uPy5yZXN0cmljdGVkT25WYWx1ZSlcbiAgICAgIHx8ICh0aGlzLmFjdGlvbj8ucmVzdHJpY3RlZE9uT3BlcmF0b3IgPT09ICchPSdcbiAgICAgICAgJiYgdGhpcy5yZWxhdGVkRmllbGQgIT09IHRoaXMuYWN0aW9uPy5yZXN0cmljdGVkT25WYWx1ZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn0iXX0=