tuain-ng-forms-lib 15.2.12 → 17.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/classes/forms/action.mjs +78 -0
- package/esm2022/lib/classes/forms/element.mjs +18 -0
- package/esm2022/lib/classes/forms/field.mjs +458 -0
- package/esm2022/lib/classes/forms/form.mjs +581 -0
- package/esm2022/lib/classes/forms/piece-propagate.mjs +39 -0
- package/esm2022/lib/classes/forms/piece.mjs +126 -0
- package/esm2022/lib/classes/forms/section.mjs +139 -0
- package/esm2022/lib/classes/forms/subsection.mjs +81 -0
- package/esm2022/lib/classes/forms/table/action.mjs +38 -0
- package/esm2022/lib/classes/forms/table/column.mjs +74 -0
- package/esm2022/lib/classes/forms/table/row-data.mjs +116 -0
- package/esm2022/lib/classes/forms/table/table.mjs +481 -0
- package/esm2022/lib/components/elements/action.component.mjs +52 -0
- package/esm2022/lib/components/elements/field.component.mjs +112 -0
- package/esm2022/lib/components/elements/layout/element.component.mjs +21 -0
- package/esm2022/lib/components/elements/layout/form-error.component.mjs +23 -0
- package/esm2022/lib/components/elements/layout/form-header.component.mjs +23 -0
- package/esm2022/lib/components/elements/layout/piece.component.mjs +40 -0
- package/esm2022/lib/components/elements/layout/section.component.mjs +40 -0
- package/esm2022/lib/components/elements/layout/sub-section.component.mjs +40 -0
- package/esm2022/lib/components/elements/tables/table-record-action.component.mjs +67 -0
- package/esm2022/lib/components/elements/tables/table-record-field.component.mjs +31 -0
- package/esm2022/lib/components/elements/tables/table.component.mjs +95 -0
- package/esm2022/lib/components/forms/basic-form.mjs +1314 -0
- package/esm2022/lib/services/event-manager.service.mjs +43 -0
- package/esm2022/lib/services/form-manager.service.mjs +81 -0
- package/{esm2020 → esm2022}/lib/tuain-ng-forms-lib.module.mjs +29 -29
- package/{fesm2020 → fesm2022}/tuain-ng-forms-lib.mjs +331 -260
- package/{fesm2020 → fesm2022}/tuain-ng-forms-lib.mjs.map +1 -1
- package/lib/components/elements/action.component.d.ts +1 -1
- package/lib/components/elements/field.component.d.ts +1 -1
- package/lib/components/elements/layout/element.component.d.ts +1 -1
- package/lib/components/elements/layout/form-error.component.d.ts +1 -1
- package/lib/components/elements/layout/form-header.component.d.ts +1 -1
- package/lib/components/elements/layout/piece.component.d.ts +1 -1
- package/lib/components/elements/layout/section.component.d.ts +1 -1
- package/lib/components/elements/layout/sub-section.component.d.ts +1 -1
- package/lib/components/elements/tables/table-record-action.component.d.ts +1 -1
- package/lib/components/elements/tables/table-record-field.component.d.ts +1 -1
- package/lib/components/elements/tables/table.component.d.ts +1 -1
- package/lib/components/forms/basic-form.d.ts +1 -1
- package/package.json +7 -13
- package/esm2020/lib/classes/forms/action.mjs +0 -72
- package/esm2020/lib/classes/forms/element.mjs +0 -18
- package/esm2020/lib/classes/forms/field.mjs +0 -454
- package/esm2020/lib/classes/forms/form.mjs +0 -574
- package/esm2020/lib/classes/forms/piece-propagate.mjs +0 -38
- package/esm2020/lib/classes/forms/piece.mjs +0 -123
- package/esm2020/lib/classes/forms/section.mjs +0 -138
- package/esm2020/lib/classes/forms/subsection.mjs +0 -81
- package/esm2020/lib/classes/forms/table/action.mjs +0 -30
- package/esm2020/lib/classes/forms/table/column.mjs +0 -74
- package/esm2020/lib/classes/forms/table/row-data.mjs +0 -116
- package/esm2020/lib/classes/forms/table/table.mjs +0 -464
- package/esm2020/lib/components/elements/action.component.mjs +0 -55
- package/esm2020/lib/components/elements/field.component.mjs +0 -99
- package/esm2020/lib/components/elements/layout/element.component.mjs +0 -20
- package/esm2020/lib/components/elements/layout/form-error.component.mjs +0 -20
- package/esm2020/lib/components/elements/layout/form-header.component.mjs +0 -24
- package/esm2020/lib/components/elements/layout/piece.component.mjs +0 -40
- package/esm2020/lib/components/elements/layout/section.component.mjs +0 -39
- package/esm2020/lib/components/elements/layout/sub-section.component.mjs +0 -39
- package/esm2020/lib/components/elements/tables/table-record-action.component.mjs +0 -67
- package/esm2020/lib/components/elements/tables/table-record-field.component.mjs +0 -30
- package/esm2020/lib/components/elements/tables/table.component.mjs +0 -92
- package/esm2020/lib/components/forms/basic-form.mjs +0 -1310
- package/esm2020/lib/services/event-manager.service.mjs +0 -43
- package/esm2020/lib/services/form-manager.service.mjs +0 -80
- package/fesm2015/tuain-ng-forms-lib.mjs +0 -4305
- package/fesm2015/tuain-ng-forms-lib.mjs.map +0 -1
- /package/{esm2020 → esm2022}/lib/classes/forms/form.constants.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/file-manager.service.mjs +0 -0
- /package/{esm2020 → esm2022}/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/tuain-ng-forms-lib.mjs +0 -0
- /package/{tuain-ng-forms-lib.d.ts → index.d.ts} +0 -0
|
@@ -0,0 +1,481 @@
|
|
|
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
|
+
_inlineActionTrigger = new Subject();
|
|
26
|
+
_globalActionTrigger = new Subject();
|
|
27
|
+
_recordSelectionTrigger = new Subject();
|
|
28
|
+
_selectionActionTrigger = new Subject();
|
|
29
|
+
_getDataTrigger = new Subject();
|
|
30
|
+
_tableColumnObj = {};
|
|
31
|
+
_appendPages;
|
|
32
|
+
_actions;
|
|
33
|
+
_actionsObj = {};
|
|
34
|
+
// Mecanismos de filtrado nueva versión
|
|
35
|
+
globalFilterString = '';
|
|
36
|
+
globalFilterStrings = [];
|
|
37
|
+
selectedRecords;
|
|
38
|
+
restrictedId;
|
|
39
|
+
layout = null;
|
|
40
|
+
globalSearch;
|
|
41
|
+
tableRecords;
|
|
42
|
+
tableRecordObj = {};
|
|
43
|
+
visibleRecords = null;
|
|
44
|
+
columns;
|
|
45
|
+
selectable;
|
|
46
|
+
selectionBackend;
|
|
47
|
+
selectionField;
|
|
48
|
+
allSelected = false;
|
|
49
|
+
tableCode = '';
|
|
50
|
+
tableTitle;
|
|
51
|
+
currentPage;
|
|
52
|
+
totalPages;
|
|
53
|
+
requestedPage;
|
|
54
|
+
recordsPerPage = 10;
|
|
55
|
+
totalRecordsNumber = 0;
|
|
56
|
+
recordsNumber = 0;
|
|
57
|
+
sorting;
|
|
58
|
+
waiting;
|
|
59
|
+
clientPaging = true;
|
|
60
|
+
sortable;
|
|
61
|
+
constructor(tableReceived, formConfig) {
|
|
62
|
+
super(tableReceived, formConfig);
|
|
63
|
+
this.propagationCustomAttributes = this._formConfig?.propagationCustomAttributes?.tables ?? [];
|
|
64
|
+
this.elementType = elementTypes.table;
|
|
65
|
+
this.waiting = false;
|
|
66
|
+
this.currentPage = 1;
|
|
67
|
+
this.totalPages = 1;
|
|
68
|
+
this.requestedPage = 1;
|
|
69
|
+
this.columns = [];
|
|
70
|
+
this._tableColumnObj = {};
|
|
71
|
+
this._actions = [];
|
|
72
|
+
this._actionsObj = {};
|
|
73
|
+
this.tableRecords = [];
|
|
74
|
+
this.globalSearch = false;
|
|
75
|
+
this.restrictedId = null;
|
|
76
|
+
this.tableTitle = tableReceived.tableTitle;
|
|
77
|
+
this._appendPages = tableReceived?.append ?? false;
|
|
78
|
+
this.selectable = tableReceived?.selectable ?? false;
|
|
79
|
+
this.selectionBackend = tableReceived?.selectionBackend ?? false;
|
|
80
|
+
this.sortable = tableReceived?.sortable ?? false;
|
|
81
|
+
this.setAttr(attrs.allSelected, false);
|
|
82
|
+
this.setAttr(attrs.tableCode, tableReceived.tableCode);
|
|
83
|
+
this.setAttr(attrs.clientPaging, tableReceived?.clientPaging ?? true);
|
|
84
|
+
this.setAttr(attrs.globalSearch, tableReceived?.simpleFilter ?? false);
|
|
85
|
+
this.setAttr(attrs.globalFilterString, '');
|
|
86
|
+
this.setAttr(attrs.sorting, { columnName: '', direction: '' });
|
|
87
|
+
this.setAttr(attrs.recordsPerPage, formConfig.defaultRecordsPerPage);
|
|
88
|
+
this.setAttr(attrs.layout, '');
|
|
89
|
+
if (tableReceived.fields) {
|
|
90
|
+
const columns = [];
|
|
91
|
+
for (const columnReceived of tableReceived.fields) {
|
|
92
|
+
const columnEnriched = {
|
|
93
|
+
...columnReceived,
|
|
94
|
+
visibleStates: this.visibleStates,
|
|
95
|
+
enabledStates: this.enabledStates
|
|
96
|
+
};
|
|
97
|
+
const columnDefinition = new RecordTableColumn(columnEnriched, this._formConfig);
|
|
98
|
+
columns.push(columnDefinition);
|
|
99
|
+
this._tableColumnObj[columnDefinition.fieldCode] = columnDefinition;
|
|
100
|
+
}
|
|
101
|
+
this.setAttr(attrs.columns, columns);
|
|
102
|
+
}
|
|
103
|
+
if (tableReceived.actions) {
|
|
104
|
+
const tableActions = tableReceived.actions.map(objDef => {
|
|
105
|
+
let visibleStates = objDef.visibleStates;
|
|
106
|
+
let enabledStates = objDef.enabledStates;
|
|
107
|
+
if (!visibleStates) {
|
|
108
|
+
visibleStates = (objDef.actionModes || '').split(',')
|
|
109
|
+
.map(state => state.trim())
|
|
110
|
+
.filter(state => state.length > 0);
|
|
111
|
+
enabledStates = (objDef.actionModes || '').split(',')
|
|
112
|
+
.map(state => state.trim())
|
|
113
|
+
.filter(state => state.length > 0);
|
|
114
|
+
}
|
|
115
|
+
return { ...objDef, visibleStates, enabledStates };
|
|
116
|
+
});
|
|
117
|
+
for (const actionReceived of tableActions) {
|
|
118
|
+
const inlineAction = new TableAction(actionReceived, this._formConfig);
|
|
119
|
+
this._actions.push(inlineAction);
|
|
120
|
+
this._actionsObj[inlineAction.actionCode] = inlineAction;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
this.selectionField = (this.selectable) ? tableReceived?.selectionField : null;
|
|
124
|
+
// Filtros predefinidos en el formulario
|
|
125
|
+
if (tableReceived.filters) {
|
|
126
|
+
for (let index = 0; index < tableReceived.filters.length; index++) {
|
|
127
|
+
this.addFilterDefinition(tableReceived.filters[index].fieldCode, tableReceived.filters[index]);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
get columnNames() { return Object.keys(this._tableColumnObj); }
|
|
132
|
+
get inlineActionTrigger() { return this._inlineActionTrigger; }
|
|
133
|
+
get globalActionTrigger() { return this._globalActionTrigger; }
|
|
134
|
+
get selectionActionTrigger() { return this._selectionActionTrigger; }
|
|
135
|
+
get recordSelectionTrigger() { return this._recordSelectionTrigger; }
|
|
136
|
+
get getDataTrigger() { return this._getDataTrigger; }
|
|
137
|
+
getLayout() { return this.layout; }
|
|
138
|
+
setLayout(layout) { this.setAttr(attrs.layout, layout); }
|
|
139
|
+
hasActions() { return (this._actions.length > 0); }
|
|
140
|
+
getSelectedRecords() { return this.tableRecords.filter(rec => rec.selected).map(rec => rec.recordId); }
|
|
141
|
+
activateGlobalSearch() { this.globalSearch = true; }
|
|
142
|
+
inactivateGlobalSearch() { this.globalSearch = false; }
|
|
143
|
+
columnDefinition(fieldCode) { return this._tableColumnObj[fieldCode]; }
|
|
144
|
+
putOnWait() { this.waiting = true; }
|
|
145
|
+
freeWaiting() { this.waiting = false; }
|
|
146
|
+
setWidget(widget) { this.widget = widget; }
|
|
147
|
+
notifyGlobalAction(actionCode) {
|
|
148
|
+
const tableEvent = {
|
|
149
|
+
tableCode: this.tableCode,
|
|
150
|
+
actionCode,
|
|
151
|
+
actionDetail: null
|
|
152
|
+
};
|
|
153
|
+
this._globalActionTrigger.next(tableEvent);
|
|
154
|
+
}
|
|
155
|
+
notifyInlineAction(tableActionEvent) {
|
|
156
|
+
const tableEvent = {
|
|
157
|
+
tableCode: this.tableCode,
|
|
158
|
+
actionCode: tableActionEvent.actionCode,
|
|
159
|
+
actionDetail: {
|
|
160
|
+
recordId: tableActionEvent.recordId,
|
|
161
|
+
recordData: tableActionEvent.recordData
|
|
162
|
+
}
|
|
163
|
+
};
|
|
164
|
+
this._inlineActionTrigger.next(tableEvent);
|
|
165
|
+
}
|
|
166
|
+
notifyRecordSelection(recordId) {
|
|
167
|
+
const record = this.getTableRecord(recordId);
|
|
168
|
+
if (!record) {
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
record.toggleSelect();
|
|
172
|
+
this.requestedPage = this.currentPage ?? 1;
|
|
173
|
+
const tableEvent = {
|
|
174
|
+
tableCode: this.tableCode,
|
|
175
|
+
actionCode: null,
|
|
176
|
+
actionDetail: {
|
|
177
|
+
recordId: record.recordId,
|
|
178
|
+
recordData: record.recordData
|
|
179
|
+
}
|
|
180
|
+
};
|
|
181
|
+
this.recordSelectionTrigger.next(tableEvent);
|
|
182
|
+
}
|
|
183
|
+
notifySelectionAction(actionCode) {
|
|
184
|
+
const tableEvent = {
|
|
185
|
+
tableCode: this.tableCode,
|
|
186
|
+
actionCode,
|
|
187
|
+
actionDetail: {
|
|
188
|
+
selectedRecords: this.selectedRecords
|
|
189
|
+
}
|
|
190
|
+
};
|
|
191
|
+
this._selectionActionTrigger.next(tableEvent);
|
|
192
|
+
}
|
|
193
|
+
notifyGetDataAction(requestedPage = null) {
|
|
194
|
+
this.updateVisibleRecords();
|
|
195
|
+
this.requestedPage = requestedPage || this.currentPage || 1;
|
|
196
|
+
const tableEvent = {
|
|
197
|
+
tableCode: this.tableCode,
|
|
198
|
+
actionCode: null,
|
|
199
|
+
actionDetail: null,
|
|
200
|
+
};
|
|
201
|
+
this._getDataTrigger.next(tableEvent);
|
|
202
|
+
return null;
|
|
203
|
+
}
|
|
204
|
+
clean() {
|
|
205
|
+
this.tableRecords = [];
|
|
206
|
+
this.unSelectAll();
|
|
207
|
+
this.tableRecordObj = {};
|
|
208
|
+
this.updateVisibleRecords();
|
|
209
|
+
}
|
|
210
|
+
selectAll() {
|
|
211
|
+
this.setAttr(attrs.allSelected, true);
|
|
212
|
+
this.tableRecords.forEach(record => record.select());
|
|
213
|
+
this.setAttr(attrs.selectedRecords, this.getSelectedRecords());
|
|
214
|
+
return true;
|
|
215
|
+
}
|
|
216
|
+
unSelectAll() {
|
|
217
|
+
this.setAttr(attrs.allSelected, false);
|
|
218
|
+
this.tableRecords.forEach(record => record.unselect());
|
|
219
|
+
this.setAttr(attrs.selectedRecords, this.getSelectedRecords());
|
|
220
|
+
return true;
|
|
221
|
+
}
|
|
222
|
+
setTableRecords(tableRecords, append) {
|
|
223
|
+
if (!append) {
|
|
224
|
+
this.tableRecords = [];
|
|
225
|
+
this.setAttr(attrs.allSelected, false);
|
|
226
|
+
this.tableRecords.forEach(record => record.unselect());
|
|
227
|
+
this.setAttr(attrs.selectedRecords, []);
|
|
228
|
+
this.tableRecordObj = {};
|
|
229
|
+
}
|
|
230
|
+
const newRecordsObj = { ...this.tableRecordObj };
|
|
231
|
+
const newRecords = [...this.tableRecords];
|
|
232
|
+
for (const tableRecord of tableRecords) {
|
|
233
|
+
const recordReceived = new TableRecordData(tableRecord, this.columns, this.selectionField);
|
|
234
|
+
const recordIdKey = recordReceived.recordIdKey;
|
|
235
|
+
newRecords.push(recordReceived);
|
|
236
|
+
newRecordsObj[recordIdKey] = recordReceived;
|
|
237
|
+
}
|
|
238
|
+
this.tableRecords = newRecords;
|
|
239
|
+
this.setAttr(attrs.selectedRecords, this.getSelectedRecords());
|
|
240
|
+
this.tableRecordObj = newRecordsObj;
|
|
241
|
+
this.updateVisibleRecords();
|
|
242
|
+
}
|
|
243
|
+
appendRecords(records) { this.setTableRecords(records, true); }
|
|
244
|
+
replaceRecords(records) { this.setTableRecords(records, false); }
|
|
245
|
+
setTableAppend(append) { this._appendPages = append; }
|
|
246
|
+
changePage(requestedPage) {
|
|
247
|
+
if (this.clientPaging) {
|
|
248
|
+
this.setAttr(attrs.currentPage, requestedPage);
|
|
249
|
+
this.updateVisibleRecords();
|
|
250
|
+
}
|
|
251
|
+
else {
|
|
252
|
+
this.notifyGetDataAction(requestedPage);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
updateVisibleRecords() {
|
|
256
|
+
let visibleRecords;
|
|
257
|
+
if (this.clientPaging) {
|
|
258
|
+
let filteredRecords = this.getFilteredRecords();
|
|
259
|
+
this.setAttr(attrs.totalRecordsNumber, filteredRecords.length);
|
|
260
|
+
const sliceNumber1 = (this.currentPage - 1) * this.recordsPerPage;
|
|
261
|
+
const sliceNumber2 = (this.currentPage - 1) * this.recordsPerPage + this.recordsPerPage;
|
|
262
|
+
visibleRecords = filteredRecords.slice(sliceNumber1, sliceNumber2);
|
|
263
|
+
const recordsLastPage = this.totalRecordsNumber % this.recordsPerPage;
|
|
264
|
+
const totalPages = Math.trunc(this.totalRecordsNumber / this.recordsPerPage + (recordsLastPage ? 1 : 0));
|
|
265
|
+
if (this.currentPage > totalPages) {
|
|
266
|
+
this.currentPage = totalPages || 1;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
else {
|
|
270
|
+
visibleRecords = this.tableRecords;
|
|
271
|
+
}
|
|
272
|
+
this.setAttr(attrs.visibleRecords, visibleRecords);
|
|
273
|
+
}
|
|
274
|
+
updateFromServer(tableReceived) {
|
|
275
|
+
this.requestedPage = 1;
|
|
276
|
+
const { visible = true, totalPages = 1, recordsNumber, currentPage = 1, recordsPerPage, totalRecordsNumber, sortingColumn, sortingDirection, tableRecords, actions, fields, } = tableReceived;
|
|
277
|
+
this.visible = visible;
|
|
278
|
+
if (actions) {
|
|
279
|
+
Object.keys(actions).forEach(actionCode => {
|
|
280
|
+
const tblAction = this.getAction(actionCode);
|
|
281
|
+
const actionReceived = actions[actionCode];
|
|
282
|
+
if (actionReceived.visible === true || actionReceived.visible === false) {
|
|
283
|
+
(actionReceived.visible === true) && tblAction.show();
|
|
284
|
+
(actionReceived.visible === false) && tblAction.hide();
|
|
285
|
+
}
|
|
286
|
+
if (actionReceived.enabled === true || actionReceived.enabled === false) {
|
|
287
|
+
(actionReceived.enabled === true) && tblAction.enable();
|
|
288
|
+
(actionReceived.enabled === false) && tblAction.disable();
|
|
289
|
+
}
|
|
290
|
+
if (actionReceived.showOnStates) {
|
|
291
|
+
actionReceived.showOnStates?.forEach(newState => {
|
|
292
|
+
tblAction.addVisibleState(newState);
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
if (actionReceived.hideOnStates) {
|
|
296
|
+
actionReceived.hideOnStates?.forEach(newState => {
|
|
297
|
+
tblAction.removeVisibleState(newState);
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
if (actionReceived.enableOnStates) {
|
|
301
|
+
actionReceived.enableOnStates?.forEach(newState => {
|
|
302
|
+
tblAction.addEnabledState(newState);
|
|
303
|
+
});
|
|
304
|
+
}
|
|
305
|
+
if (actionReceived.disableOnStates) {
|
|
306
|
+
actionReceived.disableOnStates?.forEach(newState => {
|
|
307
|
+
tblAction.removeEnabledState(newState);
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
if (fields) {
|
|
313
|
+
Object.keys(fields).forEach(fieldCode => {
|
|
314
|
+
const tblField = this.columnDefinition(fieldCode);
|
|
315
|
+
const fieldReceived = fields[fieldCode];
|
|
316
|
+
if (fieldReceived.visible === true || fieldReceived.visible === false) {
|
|
317
|
+
(fieldReceived.visible === true) && tblField.show();
|
|
318
|
+
(fieldReceived.visible === false) && tblField.hide();
|
|
319
|
+
}
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
if (tableRecords) {
|
|
323
|
+
this.totalPages = totalPages;
|
|
324
|
+
this.recordsNumber = recordsNumber;
|
|
325
|
+
this.setAttr(attrs.currentPage, +currentPage);
|
|
326
|
+
this.setAttr(attrs.recordsPerPage, +recordsPerPage);
|
|
327
|
+
this.setAttr(attrs.totalRecordsNumber, (this.clientPaging) ? tableRecords.length : +totalRecordsNumber);
|
|
328
|
+
this.setAttr(attrs.sorting, {
|
|
329
|
+
columnName: sortingColumn || '',
|
|
330
|
+
direction: sortingDirection || ''
|
|
331
|
+
});
|
|
332
|
+
if (!this._appendPages) {
|
|
333
|
+
this.replaceRecords(tableRecords);
|
|
334
|
+
}
|
|
335
|
+
else {
|
|
336
|
+
this.appendRecords(tableRecords);
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
this.waiting = false;
|
|
340
|
+
this.updateVisibleRecords();
|
|
341
|
+
}
|
|
342
|
+
getTableRecord(recordId) {
|
|
343
|
+
const recordIdKey = (typeof recordId === 'object') ? JSON.stringify(recordId) : recordId;
|
|
344
|
+
return (this.tableRecordObj && recordId && this.tableRecordObj[recordId])
|
|
345
|
+
? this.tableRecordObj[recordId] : null;
|
|
346
|
+
}
|
|
347
|
+
getAction(actionCode) {
|
|
348
|
+
return (this._actionsObj && actionCode && this._actionsObj[actionCode])
|
|
349
|
+
? this._actionsObj[actionCode] : null;
|
|
350
|
+
}
|
|
351
|
+
getActions(actionClass = this._formConfig.tableActions.inline, actionTypes = null) {
|
|
352
|
+
return this._actions.filter(actionDef => {
|
|
353
|
+
const typeIncluded = (actionTypes) ? actionTypes.includes(actionDef.actionType) : true;
|
|
354
|
+
return actionDef.actionClass === actionClass && typeIncluded;
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
// Filtros
|
|
358
|
+
setFilterById(id) {
|
|
359
|
+
if (this.restrictedId === id) {
|
|
360
|
+
return;
|
|
361
|
+
}
|
|
362
|
+
this.restrictedId = id;
|
|
363
|
+
this.updateVisibleRecords();
|
|
364
|
+
}
|
|
365
|
+
cleanIdFilter() {
|
|
366
|
+
if (this.restrictedId === null) {
|
|
367
|
+
return;
|
|
368
|
+
}
|
|
369
|
+
this.restrictedId = null;
|
|
370
|
+
this.updateVisibleRecords();
|
|
371
|
+
}
|
|
372
|
+
setGlobalFilterString(text, notifyComponent = true) {
|
|
373
|
+
this.globalFilterStrings = text.split(' ').filter(t => t && t.trim().length > 0).map(t => t.trim()) ?? [];
|
|
374
|
+
if (this.clientPaging) {
|
|
375
|
+
this.changePage(1);
|
|
376
|
+
}
|
|
377
|
+
if (notifyComponent) {
|
|
378
|
+
this.setAttr(attrs.globalFilterString, text.trim());
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
addFilterDefinition(columnName, filterDefinition) {
|
|
382
|
+
const tableColumn = this.columnDefinition(columnName);
|
|
383
|
+
tableColumn && tableColumn.addFilterDefinition(filterDefinition);
|
|
384
|
+
}
|
|
385
|
+
getFilteredRecords() {
|
|
386
|
+
let filteredRecords = this.tableRecords;
|
|
387
|
+
if (this.restrictedId) {
|
|
388
|
+
filteredRecords = filteredRecords.filter(record => record.recordId === this.restrictedId);
|
|
389
|
+
}
|
|
390
|
+
if (this.globalFilterStrings.length > 0) {
|
|
391
|
+
filteredRecords = filteredRecords.filter(record => record.hasPattern(this.globalFilterStrings, this._tableColumnObj));
|
|
392
|
+
}
|
|
393
|
+
const columnFilters = this.columns.filter(column => column.filter).map(column => column.filter);
|
|
394
|
+
if (columnFilters.length > 0) {
|
|
395
|
+
filteredRecords = filteredRecords.filter(record => record.hasCondition(columnFilters));
|
|
396
|
+
}
|
|
397
|
+
return filteredRecords;
|
|
398
|
+
}
|
|
399
|
+
getColumnFilter(columnName) {
|
|
400
|
+
const tableColumn = this.columnDefinition(columnName);
|
|
401
|
+
return tableColumn?.filter ?? null;
|
|
402
|
+
}
|
|
403
|
+
addColumnFilter(columnName, columnValues, operator = null) {
|
|
404
|
+
const tableColumn = this.columnDefinition(columnName);
|
|
405
|
+
const columnFilterDefinition = tableColumn?.filterDefinition ?? null;
|
|
406
|
+
if (!columnFilterDefinition) {
|
|
407
|
+
return;
|
|
408
|
+
}
|
|
409
|
+
tableColumn && tableColumn.addFilter(columnValues, operator);
|
|
410
|
+
this.updateVisibleRecords();
|
|
411
|
+
}
|
|
412
|
+
removeColumnFilter(columnName) {
|
|
413
|
+
const tableColumn = this.columnDefinition(columnName);
|
|
414
|
+
tableColumn && tableColumn.removeFilter();
|
|
415
|
+
this.updateVisibleRecords();
|
|
416
|
+
}
|
|
417
|
+
get currentFilter() {
|
|
418
|
+
const compactFilter = {
|
|
419
|
+
simpleFilterWords: this.globalFilterStrings,
|
|
420
|
+
advancedFilter: [],
|
|
421
|
+
};
|
|
422
|
+
const columnFilters = this.columns.filter(column => column.filter).map(column => column.filter);
|
|
423
|
+
for (let index = 0; index < columnFilters.length; index++) {
|
|
424
|
+
const columnFilter = columnFilters[index];
|
|
425
|
+
compactFilter.advancedFilter.push({
|
|
426
|
+
fieldCode: columnFilter?.fieldCode,
|
|
427
|
+
operator: columnFilter?.operator,
|
|
428
|
+
fieldValue1: columnFilter?.values[0],
|
|
429
|
+
fieldValue2: columnFilter?.values[1],
|
|
430
|
+
});
|
|
431
|
+
}
|
|
432
|
+
return compactFilter;
|
|
433
|
+
}
|
|
434
|
+
// Ordenamiento de registros local
|
|
435
|
+
sort(columnName, direction) {
|
|
436
|
+
this.setRequiredOrder(columnName, direction);
|
|
437
|
+
if (this.clientPaging) {
|
|
438
|
+
this.localSortData();
|
|
439
|
+
}
|
|
440
|
+
else {
|
|
441
|
+
this.notifyGetDataAction();
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
setRequiredOrder(columnField, direction = null) {
|
|
445
|
+
this.setAttr(attrs.sorting, {
|
|
446
|
+
columnName: columnField,
|
|
447
|
+
direction: (direction === 'ascend') ? TABLE_SORT_ASCENDING : TABLE_SORT_DESCENDING,
|
|
448
|
+
});
|
|
449
|
+
}
|
|
450
|
+
localSortData() {
|
|
451
|
+
if (!this.sorting.columnName || !this.sorting.direction) {
|
|
452
|
+
return;
|
|
453
|
+
}
|
|
454
|
+
this.tableRecords.sort((a, b) => this.recordCompare(a, b, this.sorting.columnName, this.sorting.direction));
|
|
455
|
+
//this.unSelectAll();
|
|
456
|
+
this.updateVisibleRecords();
|
|
457
|
+
}
|
|
458
|
+
recordCompare(recordA, recordB, columnCompare, direction) {
|
|
459
|
+
const recordAValue = recordA.getFieldValue(columnCompare);
|
|
460
|
+
const recordBValue = recordB.getFieldValue(columnCompare);
|
|
461
|
+
const recordAColumn = isNaN(recordAValue) ? recordAValue.toLocaleLowerCase() : +recordAValue;
|
|
462
|
+
const recordBColumn = isNaN(recordBValue) ? recordBValue.toLocaleLowerCase() : +recordBValue;
|
|
463
|
+
let result = 0;
|
|
464
|
+
if (recordAColumn < recordBColumn) {
|
|
465
|
+
result = -1;
|
|
466
|
+
}
|
|
467
|
+
else if (recordAColumn > recordBColumn) {
|
|
468
|
+
result = 1;
|
|
469
|
+
}
|
|
470
|
+
return direction === TABLE_SORT_ASCENDING ? result : -result;
|
|
471
|
+
}
|
|
472
|
+
formStateChangeCustomSubscribe(form, formChangeSubject) {
|
|
473
|
+
this.columns?.forEach(column => {
|
|
474
|
+
column?.connectWithParentForm(form, formChangeSubject);
|
|
475
|
+
});
|
|
476
|
+
this._actions?.forEach(action => {
|
|
477
|
+
action?.connectWithParentForm(form, formChangeSubject);
|
|
478
|
+
});
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWFpbi1uZy1mb3Jtcy1saWIvc3JjL2xpYi9jbGFzc2VzL2Zvcm1zL3RhYmxlL3RhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDekMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDdkMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUU3QyxNQUFNLG9CQUFvQixHQUFHLEtBQUssQ0FBQztBQUNuQyxNQUFNLHFCQUFxQixHQUFHLE1BQU0sQ0FBQztBQUVyQyxNQUFNLEtBQUssR0FBRztJQUNaLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRTtJQUM5RCxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUU7SUFDbkQsWUFBWSxFQUFFLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFO0lBQ3ZELFlBQVksRUFBRSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRTtJQUNqRSxrQkFBa0IsRUFBRSxFQUFFLElBQUksRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsb0JBQW9CLEVBQUU7SUFDbkYsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFO0lBQzdDLGNBQWMsRUFBRSxFQUFFLElB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Q0FBQzthQUFNLElBQUksYUFBYSxHQUFHLGFBQWEsRUFBRSxDQUFDO1lBQ3pDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDYixDQUFDO1FBQ0QsT0FBTyxTQUFTLEtBQUssb0JBQW9CLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDL0QsQ0FBQztJQUVRLDhCQUE4QixDQUFDLElBQUksRUFBRSxpQkFBaUI7UUFDN0QsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDN0IsTUFBTSxFQUFFLHFCQUFxQixDQUFDLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3pELENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDOUIsTUFBTSxFQUFFLHFCQUFxQixDQUFDLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3pELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZWxlbWVudFR5cGVzIH0gZnJvbSAnLi4vZm9ybS5jb25zdGFudHMnO1xuaW1wb3J0IHsgRm9ybUVsZW1lbnQgfSBmcm9tICcuLi9lbGVtZW50JztcbmltcG9ydCB7IFJlY29yZFRhYmxlQ29sdW1uIH0gZnJvbSAnLi9jb2x1bW4nO1xuaW1wb3J0IHsgVGFibGVBY3Rpb24gfSBmcm9tICcuL2FjdGlvbic7XG5pbXBvcnQgeyBUYWJsZVJlY29yZERhdGEgfSBmcm9tICcuL3Jvdy1kYXRhJztcblxuY29uc3QgVEFCTEVfU09SVF9BU0NFTkRJTkcgPSAnYXNjJztcbmNvbnN0IFRBQkxFX1NPUlRfREVTQ0VORElORyA9ICdkZXNjJztcblxuY29uc3QgYXR0cnMgPSB7XG4gIGFsbFNlbGVjdGVkOiB7IG5hbWU6ICdhbGxTZWxlY3RlZCcsIHByb3BhZ2F0ZTogJ2FsbFNlbGVjdGVkJyB9LFxuICB0YWJsZUNvZGU6IHsgbmFtZTogJ3RhYmxlQ29kZScsIHByb3BhZ2F0ZTogJ2NvZGUnIH0sXG4gIGNsaWVudFBhZ2luZzogeyBuYW1lOiAnY2xpZW50UGFnaW5nJywgcHJvcGFnYXRlOiBudWxsIH0sXG4gIGdsb2JhbFNlYXJjaDogeyBuYW1lOiAnZ2xvYmFsU2VhcmNoJywgcHJvcGFnYXRlOiAnZ2xvYmFsU2VhcmNoJyB9LFxuICBnbG9iYWxGaWx0ZXJTdHJpbmc6IHsgbmFtZTogJ2dsb2JhbEZpbHRlclN0cmluZycsIHByb3BhZ2F0ZTogJ2dsb2JhbEZpbHRlclN0cmluZycgfSxcbiAgc29ydGluZzogeyBuYW1lOiAnc29ydGluZycsIHByb3BhZ2F0ZTogbnVsbCB9LFxuICByZWNvcmRzUGVyUGFnZTogeyBuYW1lOiAncmVjb3Jkc1BlclBhZ2UnLCBwcm9wYWdhdGU6ICdyZWNvcmRzUGVyUGFnZScgfSxcbiAgbGF5b3V0OiB7IG5hbWU6ICdsYXlvdXQnLCBwcm9wYWdhdGU6ICdsYXlvdXQnIH0sXG4gIGNvbHVtbnM6IHsgbmFtZTogJ2NvbHVtbnMnLCBwcm9wYWdhdGU6ICdjb2x1bW5zJyB9LFxuICBzZWxlY3RlZFJlY29yZHM6IHsgbmFtZTogJ3NlbGVjdGVkUmVjb3JkcycsIHByb3BhZ2F0ZTogJ3NlbGVjdGVkUmVjb3JkcycgfSxcbiAgY3VycmVudFBhZ2U6IHsgbmFtZTogJ2N1cnJlbnRQYWdlJywgcHJvcGFnYXRlOiAnY3VycmVudFBhZ2UnIH0sXG4gIHRvdGFsUmVjb3Jkc051bWJlcjogeyBuYW1lOiAndG90YWxSZWNvcmRzTnVtYmVyJywgcHJvcGFnYXRlOiAndG90YWxSZWNvcmRzTnVtYmVyJyB9LFxuICB2aXNpYmxlUmVjb3JkczogeyBuYW1lOiAndmlzaWJsZVJlY29yZHMnLCBwcm9wYWdhdGU6ICd2aXNpYmxlUmVjb3JkcycgfSxcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVBY3Rpb25FdmVudCB7XG4gIGFjdGlvbkNvZGU6IHN0cmluZztcbiAgcmVjb3JkSWQ6IGFueTtcbiAgcmVjb3JkRGF0YTogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlRXZlbnQge1xuICB0YWJsZUNvZGU6IHN0cmluZztcbiAgYWN0aW9uQ29kZTogc3RyaW5nIHwgbnVsbDtcbiAgYWN0aW9uRGV0YWlsOiBhbnk7XG59XG5cbmV4cG9ydCBjbGFzcyBSZWNvcmRUYWJsZSBleHRlbmRzIEZvcm1FbGVtZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfaW5saW5lQWN0aW9uVHJpZ2dlciA9IG5ldyBTdWJqZWN0PFRhYmxlRXZlbnQ+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2dsb2JhbEFjdGlvblRyaWdnZXIgPSBuZXcgU3ViamVjdDxUYWJsZUV2ZW50PigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWNvcmRTZWxlY3Rpb25UcmlnZ2VyID0gbmV3IFN1YmplY3Q8VGFibGVFdmVudD4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2VsZWN0aW9uQWN0aW9uVHJpZ2dlciA9IG5ldyBTdWJqZWN0PFRhYmxlRXZlbnQ+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2dldERhdGFUcmlnZ2VyID0gbmV3IFN1YmplY3Q8VGFibGVFdmVudD4oKTtcbiAgcHJpdmF0ZSBfdGFibGVDb2x1bW5PYmogPSB7fTtcbiAgcHJpdmF0ZSBfYXBwZW5kUGFnZXM6IGJvb2xlYW47XG4gIHByaXZhdGUgX2FjdGlvbnM6IFRhYmxlQWN0aW9uW107XG4gIHByaXZhdGUgX2FjdGlvbnNPYmogPSB7fTtcblxuICAvLyBNZWNhbmlzbW9zIGRlIGZpbHRyYWRvIG51ZXZhIHZlcnNpw7NuXG4gIHByaXZhdGUgZ2xvYmFsRmlsdGVyU3RyaW5nOiBzdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSBnbG9iYWxGaWx0ZXJTdHJpbmdzOiBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIHNlbGVjdGVkUmVjb3JkczogYW55O1xuICBwcml2YXRlIHJlc3RyaWN0ZWRJZDogYW55O1xuICBwcml2YXRlIGxheW91dDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgZ2xvYmFsU2VhcmNoOiBib29sZWFuO1xuICB0YWJsZVJlY29yZHM6IFRhYmxlUmVjb3JkRGF0YVtdO1xuICB0YWJsZVJlY29yZE9iaiA9IHt9O1xuICB2aXNpYmxlUmVjb3JkczogVGFibGVSZWNvcmREYXRhW10gfCBudWxsID0gbnVsbDtcbiAgY29sdW1uczogUmVjb3JkVGFibGVDb2x1bW5bXTtcbiAgc2VsZWN0YWJsZTogYm9vbGVhbjtcbiAgc2VsZWN0aW9uQmFja2VuZDogYm9vbGVhbjtcbiAgc2VsZWN0aW9uRmllbGQ6IHN0cmluZztcbiAgYWxsU2VsZWN0ZWQgPSBmYWxzZTtcblxuICB0YWJsZUNvZGU6IHN0cmluZyA9ICcnO1xuICB0YWJsZVRpdGxlOiBzdHJpbmc7XG4gIGN1cnJlbnRQYWdlOiBudW1iZXI7XG4gIHRvdGFsUGFnZXM6IG51bWJlcjtcbiAgcmVxdWVzdGVkUGFnZTogbnVtYmVyO1xuICByZWNvcmRzUGVyUGFnZTogbnVtYmVyID0gMTA7XG4gIHRvdGFsUmVjb3Jkc051bWJlcjogbnVtYmVyID0gMDtcbiAgcmVjb3Jkc051bWJlcjogbnVtYmVyID0gMDtcbiAgc29ydGluZzogYW55O1xuXG4gIHdhaXRpbmc6IGJvb2xlYW47XG4gIGNsaWVudFBhZ2luZzogYm9vbGVhbiA9IHRydWU7XG4gIHNvcnRhYmxlOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHRhYmxlUmVjZWl2ZWQsIGZvcm1Db25maWcpIHtcbiAgICBzdXBlcih0YWJsZVJlY2VpdmVkLCBmb3JtQ29uZmlnKTtcbiAgICB0aGlzLnByb3BhZ2F0aW9uQ3VzdG9tQXR0cmlidXRlcyA9IHRoaXMuX2Zvcm1Db25maWc/LnByb3BhZ2F0aW9uQ3VzdG9tQXR0cmlidXRlcz8udGFibGVzID8/IFtdO1xuICAgIHRoaXMuZWxlbWVudFR5cGUgPSBlbGVtZW50VHlwZXMudGFibGU7XG4gICAgdGhpcy53YWl0aW5nID0gZmFsc2U7XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XG4gICAgdGhpcy50b3RhbFBhZ2VzID0gMTtcbiAgICB0aGlzLnJlcXVlc3RlZFBhZ2UgPSAxO1xuICAgIHRoaXMuY29sdW1ucyA9IFtdO1xuICAgIHRoaXMuX3RhYmxlQ29sdW1uT2JqID0ge307XG4gICAgdGhpcy5fYWN0aW9ucyA9IFtdO1xuICAgIHRoaXMuX2FjdGlvbnNPYmogPSB7fTtcbiAgICB0aGlzLnRhYmxlUmVjb3JkcyA9IFtdO1xuICAgIHRoaXMuZ2xvYmFsU2VhcmNoID0gZmFsc2U7XG4gICAgdGhpcy5yZXN0cmljdGVkSWQgPSBudWxsO1xuXG4gICAgdGhpcy50YWJsZVRpdGxlID0gdGFibGVSZWNlaXZlZC50YWJsZVRpdGxlO1xuICAgIHRoaXMuX2FwcGVuZFBhZ2VzID0gdGFibGVSZWNlaXZlZD8uYXBwZW5kID8/IGZhbHNlO1xuICAgIHRoaXMuc2VsZWN0YWJsZSA9IHRhYmxlUmVjZWl2ZWQ/LnNlbGVjdGFibGUgPz8gZmFsc2U7XG4gICAgdGhpcy5zZWxlY3Rpb25CYWNrZW5kID0gdGFibGVSZWNlaXZlZD8uc2VsZWN0aW9uQmFja2VuZCA/PyBmYWxzZTtcbiAgICB0aGlzLnNvcnRhYmxlID0gdGFibGVSZWNlaXZlZD8uc29ydGFibGUgPz8gZmFsc2U7XG5cbiAgICB0aGlzLnNldEF0dHIoYXR0cnMuYWxsU2VsZWN0ZWQsIGZhbHNlKTtcbiAgICB0aGlzLnNldEF0dHIoYXR0cnMudGFibGVDb2RlLCB0YWJsZVJlY2VpdmVkLnRhYmxlQ29kZSk7XG4gICAgdGhpcy5zZXRBdHRyKGF0dHJzLmNsaWVudFBhZ2luZywgdGFibGVSZWNlaXZlZD8uY2xpZW50UGFnaW5nID8/IHRydWUpO1xuICAgIHRoaXMuc2V0QXR0cihhdHRycy5nbG9iYWxTZWFyY2gsIHRhYmxlUmVjZWl2ZWQ/LnNpbXBsZUZpbHRlciA/PyBmYWxzZSk7XG4gICAgdGhpcy5zZXRBdHRyKGF0dHJzLmdsb2JhbEZpbHRlclN0cmluZywgJycpO1xuICAgIHRoaXMuc2V0QXR0cihhdHRycy5zb3J0aW5nLCB7IGNvbHVtbk5hbWU6ICcnLCBkaXJlY3Rpb246ICcnIH0pO1xuICAgIHRoaXMuc2V0QXR0cihhdHRycy5yZWNvcmRzUGVyUGFnZSwgZm9ybUNvbmZpZy5kZWZhdWx0UmVjb3Jkc1BlclBhZ2UpO1xuICAgIHRoaXMuc2V0QXR0cihhdHRycy5sYXlvdXQsICcnKTtcblxuICAgIGlmICh0YWJsZVJlY2VpdmVkLmZpZWxkcykge1xuICAgICAgY29uc3QgY29sdW1uczogUmVjb3JkVGFibGVDb2x1bW5bXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCBjb2x1bW5SZWNlaXZlZCBvZiB0YWJsZVJlY2VpdmVkLmZpZWxkcykge1xuICAgICAgICBjb25zdCBjb2x1bW5FbnJpY2hlZCA9IHtcbiAgICAgICAgICAuLi5jb2x1bW5SZWNlaXZlZCxcbiAgICAgICAgICB2aXNpYmxlU3RhdGVzOiB0aGlzLnZpc2libGVTdGF0ZXMsXG4gICAgICAgICAgZW5hYmxlZFN0YXRlczogdGhpcy5lbmFibGVkU3RhdGVzXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGNvbHVtbkRlZmluaXRpb246IFJlY29yZFRhYmxlQ29sdW1uID0gbmV3IFJlY29yZFRhYmxlQ29sdW1uKGNvbHVtbkVucmljaGVkLCB0aGlzLl9mb3JtQ29uZmlnKTtcbiAgICAgICAgY29sdW1ucy5wdXNoKGNvbHVtbkRlZmluaXRpb24pO1xuICAgICAgICB0aGlzLl90YWJsZUNvbHVtbk9ialtjb2x1bW5EZWZpbml0aW9uLmZpZWxkQ29kZV0gPSBjb2x1bW5EZWZpbml0aW9uO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRBdHRyKGF0dHJzLmNvbHVtbnMsIGNvbHVtbnMpO1xuICAgIH1cbiAgICBpZiAodGFibGVSZWNlaXZlZC5hY3Rpb25zKSB7XG4gICAgICBjb25zdCB0YWJsZUFjdGlvbnMgPSB0YWJsZVJlY2VpdmVkLmFjdGlvbnMubWFwKG9iakRlZiA9PiB7XG4gICAgICAgIGxldCB2aXNpYmxlU3RhdGVzID0gb2JqRGVmLnZpc2libGVTdGF0ZXM7XG4gICAgICAgIGxldCBlbmFibGVkU3RhdGVzID0gb2JqRGVmLmVuYWJsZWRTdGF0ZXM7XG4gICAgICAgIGlmICghdmlzaWJsZVN0YXRlcykge1xuICAgICAgICAgIHZpc2libGVTdGF0ZXMgPSAob2JqRGVmLmFjdGlvbk1vZGVzIHx8ICcnKS5zcGxpdCgnLCcpXG4gICAgICAgICAgICAubWFwKHN0YXRlID0+IHN0YXRlLnRyaW0oKSlcbiAgICAgICAgICAgIC5maWx0ZXIoc3RhdGUgPT4gc3RhdGUubGVuZ3RoID4gMCk7XG4gICAgICAgICAgZW5hYmxlZFN0YXRlcyA9IChvYmpEZWYuYWN0aW9uTW9kZXMgfHwgJycpLnNwbGl0KCcsJylcbiAgICAgICAgICAgIC5tYXAoc3RhdGUgPT4gc3RhdGUudHJpbSgpKVxuICAgICAgICAgICAgLmZpbHRlcihzdGF0ZSA9PiBzdGF0ZS5sZW5ndGggPiAwKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyAuLi5vYmpEZWYsIHZpc2libGVTdGF0ZXMsIGVuYWJsZWRTdGF0ZXMgfTtcbiAgICAgIH0pO1xuICAgICAgZm9yIChjb25zdCBhY3Rpb25SZWNlaXZlZCBvZiB0YWJsZUFjdGlvbnMpIHtcbiAgICAgICAgY29uc3QgaW5saW5lQWN0aW9uID0gbmV3IFRhYmxlQWN0aW9uKGFjdGlvblJlY2VpdmVkLCB0aGlzLl9mb3JtQ29uZmlnKTtcbiAgICAgICAgdGhpcy5fYWN0aW9ucy5wdXNoKGlubGluZUFjdGlvbik7XG4gICAgICAgIHRoaXMuX2FjdGlvbnNPYmpbaW5saW5lQWN0aW9uLmFjdGlvbkNvZGVdID0gaW5saW5lQWN0aW9uO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnNlbGVjdGlvbkZpZWxkID0gKHRoaXMuc2VsZWN0YWJsZSkgPyB0YWJsZVJlY2VpdmVkPy5zZWxlY3Rpb25GaWVsZCA6IG51bGw7XG4gICAgLy8gRmlsdHJvcyBwcmVkZWZpbmlkb3MgZW4gZWwgZm9ybXVsYXJpb1xuICAgIGlmICh0YWJsZVJlY2VpdmVkLmZpbHRlcnMpIHtcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0YWJsZVJlY2VpdmVkLmZpbHRlcnMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIHRoaXMuYWRkRmlsdGVyRGVmaW5pdGlvbih0YWJsZVJlY2VpdmVkLmZpbHRlcnNbaW5kZXhdLmZpZWxkQ29kZSwgdGFibGVSZWNlaXZlZC5maWx0ZXJzW2luZGV4XSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IGNvbHVtbk5hbWVzKCkgeyByZXR1cm4gT2JqZWN0LmtleXModGhpcy5fdGFibGVDb2x1bW5PYmopOyB9XG4gIGdldCBpbmxpbmVBY3Rpb25UcmlnZ2VyKCkgeyByZXR1cm4gdGhpcy5faW5saW5lQWN0aW9uVHJpZ2dlcjsgfVxuICBnZXQgZ2xvYmFsQWN0aW9uVHJpZ2dlcigpIHsgcmV0dXJuIHRoaXMuX2dsb2JhbEFjdGlvblRyaWdnZXI7IH1cbiAgZ2V0IHNlbGVjdGlvbkFjdGlvblRyaWdnZXIoKSB7IHJldHVybiB0aGlzLl9zZWxlY3Rpb25BY3Rpb25UcmlnZ2VyOyB9XG4gIGdldCByZWNvcmRTZWxlY3Rpb25UcmlnZ2VyKCkgeyByZXR1cm4gdGhpcy5fcmVjb3JkU2VsZWN0aW9uVHJpZ2dlcjsgfVxuICBnZXQgZ2V0RGF0YVRyaWdnZXIoKSB7IHJldHVybiB0aGlzLl9nZXREYXRhVHJpZ2dlcjsgfVxuXG4gIGdldExheW91dCgpIHsgcmV0dXJuIHRoaXMubGF5b3V0OyB9XG4gIHNldExheW91dChsYXlvdXQpIHsgdGhpcy5zZXRBdHRyKGF0dHJzLmxheW91dCwgbGF5b3V0KTsgfVxuICBoYXNBY3Rpb25zKCkgeyByZXR1cm4gKHRoaXMuX2FjdGlvbnMubGVuZ3RoID4gMCk7IH1cbiAgZ2V0U2VsZWN0ZWRSZWNvcmRzKCkgeyByZXR1cm4gdGhpcy50YWJsZVJlY29yZHMuZmlsdGVyKHJlYyA9PiByZWMuc2VsZWN0ZWQpLm1hcChyZWMgPT4gcmVjLnJlY29yZElkKTsgfVxuICBhY3RpdmF0ZUdsb2JhbFNlYXJjaCgpIHsgdGhpcy5nbG9iYWxTZWFyY2ggPSB0cnVlOyB9XG4gIGluYWN0aXZhdGVHbG9iYWxTZWFyY2goKSB7IHRoaXMuZ2xvYmFsU2VhcmNoID0gZmFsc2U7IH1cbiAgY29sdW1uRGVmaW5pdGlvbihmaWVsZENvZGUpOiBSZWNvcmRUYWJsZUNvbHVtbiB7IHJldHVybiB0aGlzLl90YWJsZUNvbHVtbk9ialtmaWVsZENvZGVdOyB9XG4gIHB1dE9uV2FpdCgpIHsgdGhpcy53YWl0aW5nID0gdHJ1ZTsgfVxuICBmcmVlV2FpdGluZygpIHsgdGhpcy53YWl0aW5nID0gZmFsc2U7IH1cbiAgc2V0V2lkZ2V0KHdpZGdldCkgeyB0aGlzLndpZGdldCA9IHdpZGdldDsgfVxuXG4gIG5vdGlmeUdsb2JhbEFjdGlvbihhY3Rpb25Db2RlKSB7XG4gICAgY29uc3QgdGFibGVFdmVudDogVGFibGVFdmVudCA9IHtcbiAgICAgIHRhYmxlQ29kZTogdGhpcy50YWJsZUNvZGUsXG4gICAgICBhY3Rpb25Db2RlLFxuICAgICAgYWN0aW9uRGV0YWlsOiBudWxsXG4gICAgfTtcbiAgICB0aGlzLl9nbG9iYWxBY3Rpb25UcmlnZ2VyLm5leHQodGFibGVFdmVudCk7XG4gIH1cblxuICBub3RpZnlJbmxpbmVBY3Rpb24odGFibGVBY3Rpb25FdmVudDogVGFibGVBY3Rpb25FdmVudCkge1xuICAgIGNvbnN0IHRhYmxlRXZlbnQ6IFRhYmxlRXZlbnQgPSB7XG4gICAgICB0YWJsZUNvZGU6IHRoaXMudGFibGVDb2RlLFxuICAgICAgYWN0aW9uQ29kZTogdGFibGVBY3Rpb25FdmVudC5hY3Rpb25Db2RlLFxuICAgICAgYWN0aW9uRGV0YWlsOiB7XG4gICAgICAgIHJlY29yZElkOiB0YWJsZUFjdGlvbkV2ZW50LnJlY29yZElkLFxuICAgICAgICByZWNvcmREYXRhOiB0YWJsZUFjdGlvbkV2ZW50LnJlY29yZERhdGFcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuX2lubGluZUFjdGlvblRyaWdnZXIubmV4dCh0YWJsZUV2ZW50KTtcbiAgfVxuXG4gIG5vdGlmeVJlY29yZFNlbGVjdGlvbihyZWNvcmRJZCkge1xuICAgIGNvbnN0IHJlY29yZCA9IHRoaXMuZ2V0VGFibGVSZWNvcmQocmVjb3JkSWQpO1xuICAgIGlmICghcmVjb3JkKSB7IHJldHVybjsgfVxuICAgIHJlY29yZC50b2dnbGVTZWxlY3QoKTtcbiAgICB0aGlzLnJlcXVlc3RlZFBhZ2UgPSB0aGlzLmN1cnJlbnRQYWdlID8/IDE7XG4gICAgY29uc3QgdGFibGVFdmVudDogVGFibGVFdmVudCA9IHtcbiAgICAgIHRhYmxlQ29kZTogdGhpcy50YWJsZUNvZGUsXG4gICAgICBhY3Rpb25Db2RlOiBudWxsLFxuICAgICAgYWN0aW9uRGV0YWlsOiB7XG4gICAgICAgIHJlY29yZElkOiByZWNvcmQucmVjb3JkSWQsXG4gICAgICAgIHJlY29yZERhdGE6IHJlY29yZC5yZWNvcmREYXRhXG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLnJlY29yZFNlbGVjdGlvblRyaWdnZXIubmV4dCh0YWJsZUV2ZW50KTtcbiAgfVxuXG4gIG5vdGlmeVNlbGVjdGlvbkFjdGlvbihhY3Rpb25Db2RlKSB7XG4gICAgY29uc3QgdGFibGVFdmVudDogVGFibGVFdmVudCA9IHtcbiAgICAgIHRhYmxlQ29kZTogdGhpcy50YWJsZUNvZGUsXG4gICAgICBhY3Rpb25Db2RlLFxuICAgICAgYWN0aW9uRGV0YWlsOiB7XG4gICAgICAgIHNlbGVjdGVkUmVjb3JkczogdGhpcy5zZWxlY3RlZFJlY29yZHNcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuX3NlbGVjdGlvbkFjdGlvblRyaWdnZXIubmV4dCh0YWJsZUV2ZW50KTtcbiAgfVxuXG4gIG5vdGlmeUdldERhdGFBY3Rpb24ocmVxdWVzdGVkUGFnZSA9IG51bGwpIHtcbiAgICB0aGlzLnVwZGF0ZVZpc2libGVSZWNvcmRzKCk7XG4gICAgdGhpcy5yZXF1ZXN0ZWRQYWdlID0gcmVxdWVzdGVkUGFnZSB8fCB0aGlzLmN1cnJlbnRQYWdlIHx8IDE7XG4gICAgY29uc3QgdGFibGVFdmVudDogVGFibGVFdmVudCA9IHtcbiAgICAgIHRhYmxlQ29kZTogdGhpcy50YWJsZUNvZGUsXG4gICAgICBhY3Rpb25Db2RlOiBudWxsLFxuICAgICAgYWN0aW9uRGV0YWlsOiBudWxsLFxuICAgIH07XG4gICAgdGhpcy5fZ2V0RGF0YVRyaWdnZXIubmV4dCh0YWJsZUV2ZW50KTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNsZWFuKCkge1xuICAgIHRoaXMudGFibGVSZWNvcmRzID0gW107XG4gICAgdGhpcy51blNlbGVjdEFsbCgpO1xuICAgIHRoaXMudGFibGVSZWNvcmRPYmogPSB7fTtcbiAgICB0aGlzLnVwZGF0ZVZpc2libGVSZWNvcmRzKCk7XG4gIH1cblxuICBzZWxlY3RBbGwoKSB7XG4gICAgdGhpcy5zZXRBdHRyKGF0dHJzLmFsbFNlbGVjdGVkLCB0cnVlKTtcbiAgICB0aGlzLnRhYmxlUmVjb3Jkcy5mb3JFYWNoKHJlY29yZCA9PiByZWNvcmQuc2VsZWN0KCkpO1xuICAgIHRoaXMuc2V0QXR0cihhdHRycy5zZWxlY3RlZFJlY29yZHMsIHRoaXMuZ2V0U2VsZWN0ZWRSZWNvcmRzKCkpO1xuICAgIHJldHVybiB0cnVlO1xuXG4gIH1cblxuICB1blNlbGVjdEFsbCgpIHtcbiAgICB0aGlzLnNldEF0dHIoYXR0cnMuYWxsU2VsZWN0ZWQsIGZhbHNlKTtcbiAgICB0aGlzLnRhYmxlUmVjb3Jkcy5mb3JFYWNoKHJlY29yZCA9PiByZWNvcmQudW5zZWxlY3QoKSk7XG4gICAgdGhpcy5zZXRBdHRyKGF0dHJzLnNlbGVjdGVkUmVjb3JkcywgdGhpcy5nZXRTZWxlY3RlZFJlY29yZHMoKSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBzZXRUYWJsZVJlY29yZHModGFibGVSZWNvcmRzLCBhcHBlbmQpIHtcbiAgICBpZiAoIWFwcGVuZCkge1xuICAgICAgdGhpcy50YWJsZVJlY29yZHMgPSBbXTtcbiAgICAgIHRoaXMuc2V0QXR0cihhdHRycy5hbGxTZWxlY3RlZCwgZmFsc2UpO1xuICAgICAgdGhpcy50YWJsZVJlY29yZHMuZm9yRWFjaChyZWNvcmQgPT4gcmVjb3JkLnVuc2VsZWN0KCkpO1xuICAgICAgdGhpcy5zZXRBdHRyKGF0dHJzLnNlbGVjdGVkUmVjb3JkcywgW10pO1xuICAgICAgdGhpcy50YWJsZVJlY29yZE9iaiA9IHt9O1xuICAgIH1cbiAgICBjb25zdCBuZXdSZWNvcmRzT2JqID0geyAuLi50aGlzLnRhYmxlUmVjb3JkT2JqIH07XG4gICAgY29uc3QgbmV3UmVjb3JkcyA9IFsuLi50aGlzLnRhYmxlUmVjb3Jkc107XG4gICAgZm9yIChjb25zdCB0YWJsZVJlY29yZCBvZiB0YWJsZVJlY29yZHMpIHtcbiAgICAgIGNvbnN0IHJlY29yZFJlY2VpdmVkOiBUYWJsZVJlY29yZERhdGEgPSBuZXcgVGFibGVSZWNvcmREYXRhKHRhYmxlUmVjb3JkLCB0aGlzLmNvbHVtbnMsIHRoaXMuc2VsZWN0aW9uRmllbGQpO1xuICAgICAgY29uc3QgcmVjb3JkSWRLZXkgPSByZWNvcmRSZWNlaXZlZC5yZWNvcmRJZEtleTtcbiAgICAgIG5ld1JlY29yZHMucHVzaChyZWNvcmRSZWNlaXZlZCk7XG4gICAgICBuZXdSZWNvcmRzT2JqW3JlY29yZElkS2V5XSA9IHJlY29yZFJlY2VpdmVkO1xuICAgIH1cbiAgICB0aGlzLnRhYmxlUmVjb3JkcyA9IG5ld1JlY29yZHM7XG4gICAgdGhpcy5zZXRBdHRyKGF0dHJzLnNlbGVjdGVkUmVjb3JkcywgdGhpcy5nZXRTZWxlY3RlZFJlY29yZHMoKSk7XG4gICAgdGhpcy50YWJsZVJlY29yZE9iaiA9IG5ld1JlY29yZHNPYmo7XG4gICAgdGhpcy51cGRhdGVWaXNpYmxlUmVjb3JkcygpO1xuICB9XG5cbiAgYXBwZW5kUmVjb3JkcyhyZWNvcmRzKSB7IHRoaXMuc2V0VGFibGVSZWNvcmRzKHJlY29yZHMsIHRydWUpOyB9XG4gIHJlcGxhY2VSZWNvcmRzKHJlY29yZHMpIHsgdGhpcy5zZXRUYWJsZVJlY29yZHMocmVjb3JkcywgZmFsc2UpOyB9XG5cbiAgc2V0VGFibGVBcHBlbmQoYXBwZW5kOiBib29sZWFuKSB7IHRoaXMuX2FwcGVuZFBhZ2VzID0gYXBwZW5kIH1cblxuICBjaGFuZ2VQYWdlKHJlcXVlc3RlZFBhZ2UpIHtcbiAgICBpZiAodGhpcy5jbGllbnRQYWdpbmcpIHtcbiAgICAgIHRoaXMuc2V0QXR0cihhdHRycy5jdXJyZW50UGFnZSwgcmVxdWVzdGVkUGFnZSk7XG4gICAgICB0aGlzLnVwZGF0ZVZpc2libGVSZWNvcmRzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubm90aWZ5R2V0RGF0YUFjdGlvbihyZXF1ZXN0ZWRQYWdlKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVWaXNpYmxlUmVjb3JkcygpIHtcbiAgICBsZXQgdmlzaWJsZVJlY29yZHM6IGFueVtdO1xuICAgIGlmICh0aGlzLmNsaWVudFBhZ2luZykge1xuICAgICAgbGV0IGZpbHRlcmVkUmVjb3JkcyA9IHRoaXMuZ2V0RmlsdGVyZWRSZWNvcmRzKCk7XG4gICAgICB0aGlzLnNldEF0dHIoYXR0cnMudG90YWxSZWNvcmRzTnVtYmVyLCBmaWx0ZXJlZFJlY29yZHMubGVuZ3RoKTtcbiAgICAgIGNvbnN0IHNsaWNlTnVtYmVyMSA9ICh0aGlzLmN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLnJlY29yZHNQZXJQYWdlO1xuICAgICAgY29uc3Qgc2xpY2VOdW1iZXIyID0gKHRoaXMuY3VycmVudFBhZ2UgLSAxKSAqIHRoaXMucmVjb3Jkc1BlclBhZ2UgKyB0aGlzLnJlY29yZHNQZXJQYWdlXG4gICAgICB2aXNpYmxlUmVjb3JkcyA9IGZpbHRlcmVkUmVjb3Jkcy5zbGljZShzbGljZU51bWJlcjEsIHNsaWNlTnVtYmVyMik7XG4gICAgICBjb25zdCByZWNvcmRzTGFzdFBhZ2UgPSB0aGlzLnRvdGFsUmVjb3Jkc051bWJlciAlIHRoaXMucmVjb3Jkc1BlclBhZ2U7XG4gICAgICBjb25zdCB0b3RhbFBhZ2VzID0gTWF0aC50cnVuYyh0aGlzLnRvdGFsUmVjb3Jkc051bWJlciAvIHRoaXMucmVjb3Jkc1BlclBhZ2UgKyAocmVjb3Jkc0xhc3RQYWdlID8gMSA6IDApKTtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlID4gdG90YWxQYWdlcykge1xuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdG90YWxQYWdlcyB8fCAxO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2aXNpYmxlUmVjb3JkcyA9IHRoaXMudGFibGVSZWNvcmRzO1xuICAgIH1cbiAgICB0aGlzLnNldEF0dHIoYXR0cnMudmlzaWJsZVJlY29yZHMsIHZpc2libGVSZWNvcmRzKTtcbiAgfVxuXG4gIHVwZGF0ZUZyb21TZXJ2ZXIodGFibGVSZWNlaXZlZCkge1xuICAgIHRoaXMucmVxdWVzdGVkUGFnZSA9IDE7XG4gICAgY29uc3QgeyB2aXNpYmxlID0gdHJ1ZSwgdG90YWxQYWdlcyA9IDEsIHJlY29yZHNOdW1iZXIsIGN1cnJlbnRQYWdlID0gMSwgcmVjb3Jkc1BlclBhZ2UsXG4gICAgICB0b3RhbFJlY29yZHNOdW1iZXIsIHNvcnRpbmdDb2x1bW4sIHNvcnRpbmdEaXJlY3Rpb24sIHRhYmxlUmVjb3JkcyxcbiAgICAgIGFjdGlvbnMsIGZpZWxkcyxcbiAgICB9ID0gdGFibGVSZWNlaXZlZDtcbiAgICB0aGlzLnZpc2libGUgPSB2aXNpYmxlO1xuICAgIGlmIChhY3Rpb25zKSB7XG4gICAgICBPYmplY3Qua2V5cyhhY3Rpb25zKS5mb3JFYWNoKGFjdGlvbkNvZGUgPT4ge1xuICAgICAgICBjb25zdCB0YmxBY3Rpb24gPSB0aGlzLmdldEFjdGlvbihhY3Rpb25Db2RlKTtcbiAgICAgICAgY29uc3QgYWN0aW9uUmVjZWl2ZWQgPSBhY3Rpb25zW2FjdGlvbkNvZGVdO1xuICAgICAgICBpZiAoYWN0aW9uUmVjZWl2ZWQudmlzaWJsZSA9PT0gdHJ1ZSB8fCBhY3Rpb25SZWNlaXZlZC52aXNpYmxlID09PSBmYWxzZSkge1xuICAgICAgICAgIChhY3Rpb25SZWNlaXZlZC52aXNpYmxlID09PSB0cnVlKSAmJiB0YmxBY3Rpb24uc2hvdygpO1xuICAgICAgICAgIChhY3Rpb25SZWNlaXZlZC52aXNpYmxlID09PSBmYWxzZSkgJiYgdGJsQWN0aW9uLmhpZGUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWN0aW9uUmVjZWl2ZWQuZW5hYmxlZCA9PT0gdHJ1ZSB8fCBhY3Rpb25SZWNlaXZlZC5lbmFibGVkID09PSBmYWxzZSkge1xuICAgICAgICAgIChhY3Rpb25SZWNlaXZlZC5lbmFibGVkID09PSB0cnVlKSAmJiB0YmxBY3Rpb24uZW5hYmxlKCk7XG4gICAgICAgICAgKGFjdGlvblJlY2VpdmVkLmVuYWJsZWQgPT09IGZhbHNlKSAmJiB0YmxBY3Rpb24uZGlzYWJsZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhY3Rpb25SZWNlaXZlZC5zaG93T25TdGF0ZXMpIHtcbiAgICAgICAgICBhY3Rpb25SZWNlaXZlZC5zaG93T25TdGF0ZXM/LmZvckVhY2gobmV3U3RhdGUgPT4ge1xuICAgICAgICAgICAgdGJsQWN0aW9uLmFkZFZpc2libGVTdGF0ZShuZXdTdGF0ZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFjdGlvblJlY2VpdmVkLmhpZGVPblN0YXRlcykge1xuICAgICAgICAgIGFjdGlvblJlY2VpdmVkLmhpZGVPblN0YXRlcz8uZm9yRWFjaChuZXdTdGF0ZSA9PiB7XG4gICAgICAgICAgICB0YmxBY3Rpb24ucmVtb3ZlVmlzaWJsZVN0YXRlKG5ld1N0YXRlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWN0aW9uUmVjZWl2ZWQuZW5hYmxlT25TdGF0ZXMpIHtcbiAgICAgICAgICBhY3Rpb25SZWNlaXZlZC5lbmFibGVPblN0YXRlcz8uZm9yRWFjaChuZXdTdGF0ZSA9PiB7XG4gICAgICAgICAgICB0YmxBY3Rpb24uYWRkRW5hYmxlZFN0YXRlKG5ld1N0YXRlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWN0aW9uUmVjZWl2ZWQuZGlzYWJsZU9uU3RhdGVzKSB7XG4gICAgICAgICAgYWN0aW9uUmVjZWl2ZWQuZGlzYWJsZU9uU3RhdGVzPy5mb3JFYWNoKG5ld1N0YXRlID0+IHtcbiAgICAgICAgICAgIHRibEFjdGlvbi5yZW1vdmVFbmFibGVkU3RhdGUobmV3U3RhdGUpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9ICAgICAgIFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChmaWVsZHMpIHtcbiAgICAgIE9iamVjdC5rZXlzKGZpZWxkcykuZm9yRWFjaChmaWVsZENvZGUgPT4ge1xuICAgICAgICBjb25zdCB0YmxGaWVsZCA9IHRoaXMuY29sdW1uRGVmaW5pdGlvbihmaWVsZENvZGUpO1xuICAgICAgICBjb25zdCBmaWVsZFJlY2VpdmVkID0gZmllbGRzW2ZpZWxkQ29kZV07XG4gICAgICAgIGlmIChmaWVsZFJlY2VpdmVkLnZpc2libGUgPT09IHRydWUgfHwgZmllbGRSZWNlaXZlZC52aXNpYmxlID09PSBmYWxzZSkge1xuICAgICAgICAgIChmaWVsZFJlY2VpdmVkLnZpc2libGUgPT09IHRydWUpICYmIHRibEZpZWxkLnNob3coKTtcbiAgICAgICAgICAoZmllbGRSZWNlaXZlZC52aXNpYmxlID09PSBmYWxzZSkgJiYgdGJsRmllbGQuaGlkZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRhYmxlUmVjb3Jkcykge1xuICAgICAgdGhpcy50b3RhbFBhZ2VzID0gdG90YWxQYWdlcztcbiAgICAgIHRoaXMucmVjb3Jkc051bWJlciA9IHJlY29yZHNOdW1iZXI7XG4gICAgICB0aGlzLnNldEF0dHIoYXR0cnMuY3VycmVudFBhZ2UsICtjdXJyZW50UGFnZSk7XG4gICAgICB0aGlzLnNldEF0dHIoYXR0cnMucmVjb3Jkc1BlclBhZ2UsICtyZWNvcmRzUGVyUGFnZSk7XG4gICAgICB0aGlzLnNldEF0dHIoYXR0cnMudG90YWxSZWNvcmRzTnVtYmVyLCAodGhpcy5jbGllbnRQYWdpbmcpID8gdGFibGVSZWNvcmRzLmxlbmd0aCA6ICt0b3RhbFJlY29yZHNOdW1iZXIpO1xuICAgICAgdGhpcy5zZXRBdHRyKGF0dHJzLnNvcnRpbmcsIHtcbiAgICAgICAgY29sdW1uTmFtZTogc29ydGluZ0NvbHVtbiB8fCAnJyxcbiAgICAgICAgZGlyZWN0aW9uOiBzb3J0aW5nRGlyZWN0aW9uIHx8ICcnXG4gICAgICB9KTtcbiAgICAgIGlmICghdGhpcy5fYXBwZW5kUGFnZXMpIHtcbiAgICAgICAgdGhpcy5yZXBsYWNlUmVjb3Jkcyh0YWJsZVJlY29yZHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hcHBlbmRSZWNvcmRzKHRhYmxlUmVjb3Jkcyk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMud2FpdGluZyA9IGZhbHNlO1xuICAgIHRoaXMudXBkYXRlVmlzaWJsZVJlY29yZHMoKTtcbiAgfVxuXG4gIGdldFRhYmxlUmVjb3JkKHJlY29yZElkKSB7XG4gICAgY29uc3QgcmVjb3JkSWRLZXkgPSAodHlwZW9mIHJlY29yZElkID09PSAnb2JqZWN0JykgPyBKU09OLnN0cmluZ2lmeShyZWNvcmRJZCkgOiByZWNvcmRJZDtcbiAgICByZXR1cm4gKHRoaXMudGFibGVSZWNvcmRPYmogJiYgcmVjb3JkSWQgJiYgdGhpcy50YWJsZVJlY29yZE9ialtyZWNvcmRJZF0pXG4gICAgICA/IHRoaXMudGFibGVSZWNvcmRPYmpbcmVjb3JkSWRdIDogbnVsbDtcbiAgfVxuXG4gIGdldEFjdGlvbihhY3Rpb25Db2RlKSB7XG4gICAgcmV0dXJuICh0aGlzLl9hY3Rpb25zT2JqICYmIGFjdGlvbkNvZGUgJiYgdGhpcy5fYWN0aW9uc09ialthY3Rpb25Db2RlXSlcbiAgICAgID8gdGhpcy5fYWN0aW9uc09ialthY3Rpb25Db2RlXSA6IG51bGw7XG4gIH1cblxuICBnZXRBY3Rpb25zKGFjdGlvbkNsYXNzOiBzdHJpbmcgPSB0aGlzLl9mb3JtQ29uZmlnLnRhYmxlQWN0aW9ucy5pbmxpbmUsIGFjdGlvblR5cGVzOiBzdHJpbmdbXSA9IG51bGwpIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aW9ucy5maWx0ZXIoYWN0aW9uRGVmID0+IHtcbiAgICAgIGNvbnN0IHR5cGVJbmNsdWRlZCA9IChhY3Rpb25UeXBlcykgPyBhY3Rpb25UeXBlcy5pbmNsdWRlcyhhY3Rpb25EZWYuYWN0aW9uVHlwZSkgOiB0cnVlO1xuICAgICAgcmV0dXJuIGFjdGlvbkRlZi5hY3Rpb25DbGFzcyA9PT0gYWN0aW9uQ2xhc3MgJiYgdHlwZUluY2x1ZGVkO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gRmlsdHJvc1xuXG4gIHNldEZpbHRlckJ5SWQoaWQpIHtcbiAgICBpZiAodGhpcy5yZXN0cmljdGVkSWQgPT09IGlkKSB7IHJldHVybjsgfVxuICAgIHRoaXMucmVzdHJpY3RlZElkID0gaWQ7XG4gICAgdGhpcy51cGRhdGVWaXNpYmxlUmVjb3JkcygpO1xuICB9XG5cbiAgY2xlYW5JZEZpbHRlcigpIHtcbiAgICBpZiAodGhpcy5yZXN0cmljdGVkSWQgPT09IG51bGwpIHsgcmV0dXJuOyB9XG4gICAgdGhpcy5yZXN0cmljdGVkSWQgPSBudWxsO1xuICAgIHRoaXMudXBkYXRlVmlzaWJsZVJlY29yZHMoKTtcbiAgfVxuXG4gIHNldEdsb2JhbEZpbHRlclN0cmluZyh0ZXh0LCBub3RpZnlDb21wb25lbnQgPSB0cnVlKSB7XG4gICAgdGhpcy5nbG9iYWxGaWx0ZXJTdHJpbmdzID0gdGV4dC5zcGxpdCgnICcpLmZpbHRlcih0ID0+IHQgJiYgdC50cmltKCkubGVuZ3RoID4gMCkubWFwKHQgPT4gdC50cmltKCkpID8/IFtdO1xuICAgIGlmICh0aGlzLmNsaWVudFBhZ2luZykge1xuICAgICAgdGhpcy5jaGFuZ2VQYWdlKDEpO1xuICAgIH1cbiAgICBpZiAobm90aWZ5Q29tcG9uZW50KSB7XG4gICAgICB0aGlzLnNldEF0dHIoYXR0cnMuZ2xvYmFsRmlsdGVyU3RyaW5nLCB0ZXh0LnRyaW0oKSk7XG4gICAgfVxuICB9XG5cbiAgYWRkRmlsdGVyRGVmaW5pdGlvbihjb2x1bW5OYW1lLCBmaWx0ZXJEZWZpbml0aW9uKSB7XG4gICAgY29uc3QgdGFibGVDb2x1bW4gPSB0aGlzLmNvbHVtbkRlZmluaXRpb24oY29sdW1uTmFtZSk7XG4gICAgdGFibGVDb2x1bW4gJiYgdGFibGVDb2x1bW4uYWRkRmlsdGVyRGVmaW5pdGlvbihmaWx0ZXJEZWZpbml0aW9uKTtcbiAgfVxuXG4gIGdldEZpbHRlcmVkUmVjb3JkcygpIHtcbiAgICBsZXQgZmlsdGVyZWRSZWNvcmRzID0gdGhpcy50YWJsZVJlY29yZHM7XG4gICAgaWYgKHRoaXMucmVzdHJpY3RlZElkKSB7XG4gICAgICBmaWx0ZXJlZFJlY29yZHMgPSBmaWx0ZXJlZFJlY29yZHMuZmlsdGVyKHJlY29yZCA9PiByZWNvcmQucmVjb3JkSWQgPT09IHRoaXMucmVzdHJpY3RlZElkKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZ2xvYmFsRmlsdGVyU3RyaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICBmaWx0ZXJlZFJlY29yZHMgPSBmaWx0ZXJlZFJlY29yZHMuZmlsdGVyKHJlY29yZCA9PiByZWNvcmQuaGFzUGF0dGVybih0aGlzLmdsb2JhbEZpbHRlclN0cmluZ3MsIHRoaXMuX3RhYmxlQ29sdW1uT2JqKSk7XG4gICAgfVxuICAgIGNvbnN0IGNvbHVtbkZpbHRlcnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uZmlsdGVyKS5tYXAoY29sdW1uID0+IGNvbHVtbi5maWx0ZXIpO1xuICAgIGlmIChjb2x1bW5GaWx0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIGZpbHRlcmVkUmVjb3JkcyA9IGZpbHRlcmVkUmVjb3Jkcy5maWx0ZXIocmVjb3JkID0+IHJlY29yZC5oYXNDb25kaXRpb24oY29sdW1uRmlsdGVycykpO1xuICAgIH1cbiAgICByZXR1cm4gZmlsdGVyZWRSZWNvcmRzO1xuICB9XG5cbiAgZ2V0Q29sdW1uRmlsdGVyKGNvbHVtbk5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IHRhYmxlQ29sdW1uID0gdGhpcy5jb2x1bW5EZWZpbml0aW9uKGNvbHVtbk5hbWUpO1xuICAgIHJldHVybiB0YWJsZUNvbHVtbj8uZmlsdGVyID8/IG51bGw7XG4gIH1cblxuICBhZGRDb2x1bW5GaWx0ZXIoY29sdW1uTmFtZTogc3RyaW5nLCBjb2x1bW5WYWx1ZXM6IGFueSB8IGFueVtdLCBvcGVyYXRvcjogc3RyaW5nIHwgbnVsbCA9IG51bGwpIHtcbiAgICBjb25zdCB0YWJsZUNvbHVtbiA9IHRoaXMuY29sdW1uRGVmaW5pdGlvbihjb2x1bW5OYW1lKTtcbiAgICBjb25zdCBjb2x1bW5GaWx0ZXJEZWZpbml0aW9uID0gdGFibGVDb2x1bW4/LmZpbHRlckRlZmluaXRpb24gPz8gbnVsbDtcbiAgICBpZiAoIWNvbHVtbkZpbHRlckRlZmluaXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGFibGVDb2x1bW4gJiYgdGFibGVDb2x1bW4uYWRkRmlsdGVyKGNvbHVtblZhbHVlcywgb3BlcmF0b3IpO1xuICAgIHRoaXMudXBkYXRlVmlzaWJsZVJlY29yZHMoKTtcbiAgfVxuXG4gIHJlbW92ZUNvbHVtbkZpbHRlcihjb2x1bW5OYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCB0YWJsZUNvbHVtbiA9IHRoaXMuY29sdW1uRGVmaW5pdGlvbihjb2x1bW5OYW1lKTtcbiAgICB0YWJsZUNvbHVtbiAmJiB0YWJsZUNvbHVtbi5yZW1vdmVGaWx0ZXIoKTtcbiAgICB0aGlzLnVwZGF0ZVZpc2libGVSZWNvcmRzKCk7XG4gIH1cblxuICBnZXQgY3VycmVudEZpbHRlcigpIHtcbiAgICBjb25zdCBjb21wYWN0RmlsdGVyOiBhbnkgPSB7XG4gICAgICBzaW1wbGVGaWx0ZXJXb3JkczogdGhpcy5nbG9iYWxGaWx0ZXJTdHJpbmdzLFxuICAgICAgYWR2YW5jZWRGaWx0ZXI6IFtdLFxuICAgIH07XG4gICAgY29uc3QgY29sdW1uRmlsdGVycyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5maWx0ZXIpLm1hcChjb2x1bW4gPT4gY29sdW1uLmZpbHRlcik7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGNvbHVtbkZpbHRlcnMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBjb25zdCBjb2x1bW5GaWx0ZXIgPSBjb2x1bW5GaWx0ZXJzW2luZGV4XTtcbiAgICAgIGNvbXBhY3RGaWx0ZXIuYWR2YW5jZWRGaWx0ZXIucHVzaCh7XG4gICAgICAgIGZpZWxkQ29kZTogY29sdW1uRmlsdGVyPy5maWVsZENvZGUsXG4gICAgICAgIG9wZXJhdG9yOiBjb2x1bW5GaWx0ZXI/Lm9wZXJhdG9yLFxuICAgICAgICBmaWVsZFZhbHVlMTogY29sdW1uRmlsdGVyPy52YWx1ZXNbMF0sXG4gICAgICAgIGZpZWxkVmFsdWUyOiBjb2x1bW5GaWx0ZXI/LnZhbHVlc1sxXSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gY29tcGFjdEZpbHRlcjtcbiAgfVxuXG4gIC8vIE9yZGVuYW1pZW50byBkZSByZWdpc3Ryb3MgbG9jYWxcblxuICBzb3J0KGNvbHVtbk5hbWUsIGRpcmVjdGlvbikge1xuICAgIHRoaXMuc2V0UmVxdWlyZWRPcmRlcihjb2x1bW5OYW1lLCBkaXJlY3Rpb24pO1xuICAgIGlmICh0aGlzLmNsaWVudFBhZ2luZykge1xuICAgICAgdGhpcy5sb2NhbFNvcnREYXRhKClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ub3RpZnlHZXREYXRhQWN0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgc2V0UmVxdWlyZWRPcmRlcihjb2x1bW5GaWVsZCwgZGlyZWN0aW9uID0gbnVsbCkge1xuICAgIHRoaXMuc2V0QXR0cihhdHRycy5zb3J0aW5nLCB7XG4gICAgICBjb2x1bW5OYW1lOiBjb2x1bW5GaWVsZCxcbiAgICAgIGRpcmVjdGlvbjogKGRpcmVjdGlvbiA9PT0gJ2FzY2VuZCcpID8gVEFCTEVfU09SVF9BU0NFTkRJTkcgOiBUQUJMRV9TT1JUX0RFU0NFTkRJTkcsXG4gICAgfSk7XG4gIH1cblxuICBsb2NhbFNvcnREYXRhKCkge1xuICAgIGlmICghdGhpcy5zb3J0aW5nLmNvbHVtbk5hbWUgfHwgIXRoaXMuc29ydGluZy5kaXJlY3Rpb24pIHsgcmV0dXJuOyB9XG4gICAgdGhpcy50YWJsZVJlY29yZHMuc29ydCgoYSwgYikgPT4gdGhpcy5yZWNvcmRDb21wYXJlKGEsIGIsIHRoaXMuc29ydGluZy5jb2x1bW5OYW1lLCB0aGlzLnNvcnRpbmcuZGlyZWN0aW9uKSk7XG4gICAgLy90aGlzLnVuU2VsZWN0QWxsKCk7XG4gICAgdGhpcy51cGRhdGVWaXNpYmxlUmVjb3JkcygpO1xuICB9XG5cbiAgcmVjb3JkQ29tcGFyZShyZWNvcmRBOiBUYWJsZVJlY29yZERhdGEsIHJlY29yZEI6IFRhYmxlUmVjb3JkRGF0YSwgY29sdW1uQ29tcGFyZSwgZGlyZWN0aW9uKSB7XG4gICAgY29uc3QgcmVjb3JkQVZhbHVlID0gcmVjb3JkQS5nZXRGaWVsZFZhbHVlKGNvbHVtbkNvbXBhcmUpO1xuICAgIGNvbnN0IHJlY29yZEJWYWx1ZSA9IHJlY29yZEIuZ2V0RmllbGRWYWx1ZShjb2x1bW5Db21wYXJlKTtcbiAgICBjb25zdCByZWNvcmRBQ29sdW1uID0gaXNOYU4ocmVjb3JkQVZhbHVlKSA/IHJlY29yZEFWYWx1ZS50b0xvY2FsZUxvd2VyQ2FzZSgpIDogK3JlY29yZEFWYWx1ZTtcbiAgICBjb25zdCByZWNvcmRCQ29sdW1uID0gaXNOYU4ocmVjb3JkQlZhbHVlKSA/IHJlY29yZEJWYWx1ZS50b0xvY2FsZUxvd2VyQ2FzZSgpIDogK3JlY29yZEJWYWx1ZTtcbiAgICBsZXQgcmVzdWx0ID0gMDtcbiAgICBpZiAocmVjb3JkQUNvbHVtbiA8IHJlY29yZEJDb2x1bW4pIHtcbiAgICAgIHJlc3VsdCA9IC0xO1xuICAgIH0gZWxzZSBpZiAocmVjb3JkQUNvbHVtbiA+IHJlY29yZEJDb2x1bW4pIHtcbiAgICAgIHJlc3VsdCA9IDE7XG4gICAgfVxuICAgIHJldHVybiBkaXJlY3Rpb24gPT09IFRBQkxFX1NPUlRfQVNDRU5ESU5HID8gcmVzdWx0IDogLXJlc3VsdDtcbiAgfVxuXG4gIG92ZXJyaWRlIGZvcm1TdGF0ZUNoYW5nZUN1c3RvbVN1YnNjcmliZShmb3JtLCBmb3JtQ2hhbmdlU3ViamVjdCkge1xuICAgIHRoaXMuY29sdW1ucz8uZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgICAgY29sdW1uPy5jb25uZWN0V2l0aFBhcmVudEZvcm0oZm9ybSwgZm9ybUNoYW5nZVN1YmplY3QpO1xuICAgIH0pO1xuICAgIHRoaXMuX2FjdGlvbnM/LmZvckVhY2goYWN0aW9uID0+IHtcbiAgICAgIGFjdGlvbj8uY29ubmVjdFdpdGhQYXJlbnRGb3JtKGZvcm0sIGZvcm1DaGFuZ2VTdWJqZWN0KTtcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,52 @@
|
|
|
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
|
+
inProgress = false;
|
|
6
|
+
action = null;
|
|
7
|
+
ngOnInit() {
|
|
8
|
+
if (!this.action) {
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
this.formConfig = this.action?._formConfig;
|
|
12
|
+
const mapping = Object.entries(this.formConfig?.actionPropagateAttributes);
|
|
13
|
+
for (let index = 0; index < mapping.length; index++) {
|
|
14
|
+
const actionAttr = mapping[index]?.[0];
|
|
15
|
+
const componentAttr = mapping[index]?.[1]?.toString() ?? '';
|
|
16
|
+
if (componentAttr) {
|
|
17
|
+
const value = this.action?.[actionAttr];
|
|
18
|
+
this.defaultProcessAttributeChange(componentAttr, value);
|
|
19
|
+
this.customProcessAttributeChange(componentAttr, value);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
this.action?.attributeChange?.subscribe(event => {
|
|
23
|
+
const { name: componentAttr, value } = event;
|
|
24
|
+
this.defaultProcessAttributeChange(componentAttr, value);
|
|
25
|
+
this.customProcessAttributeChange(componentAttr, value);
|
|
26
|
+
});
|
|
27
|
+
if (this.action) {
|
|
28
|
+
this.action.widget = this;
|
|
29
|
+
}
|
|
30
|
+
this.start();
|
|
31
|
+
}
|
|
32
|
+
start() {
|
|
33
|
+
this.setForm(this.action?._form);
|
|
34
|
+
}
|
|
35
|
+
activate() {
|
|
36
|
+
if (this.action?.notifyActivation) {
|
|
37
|
+
this.action.notifyActivation();
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ActionComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
41
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ActionComponent, selector: "lib-action", inputs: { action: "action" }, usesInheritance: true, ngImport: i0, template: `<ng-content></ng-content>`, isInline: true });
|
|
42
|
+
}
|
|
43
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ActionComponent, decorators: [{
|
|
44
|
+
type: Component,
|
|
45
|
+
args: [{
|
|
46
|
+
selector: 'lib-action',
|
|
47
|
+
template: `<ng-content></ng-content>`
|
|
48
|
+
}]
|
|
49
|
+
}], propDecorators: { action: [{
|
|
50
|
+
type: Input
|
|
51
|
+
}] } });
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1YWluLW5nLWZvcm1zLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvZWxlbWVudHMvYWN0aW9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUV6RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTs7QUFPN0QsTUFBTSxPQUFPLGVBQWdCLFNBQVEsZ0JBQWdCO0lBQ25ELFVBQVUsR0FBWSxLQUFLLENBQUM7SUFDbkIsTUFBTSxHQUFzQixJQUFJLENBQUM7SUFFMUMsUUFBUTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFBQyxPQUFPO1FBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDO1FBQzNDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO1FBQzNFLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDcEQsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkMsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO1lBQzVELElBQUksYUFBYSxFQUFFLENBQUM7Z0JBQ2xCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDeEMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDekQsSUFBSSxDQUFDLDRCQUE0QixDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMxRCxDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksQ0FBQyxNQUFNLEVBQUUsZUFBZSxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM5QyxNQUFNLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsR0FBRyxLQUFLLENBQUM7WUFDN0MsSUFBSSxDQUFDLDZCQUE2QixDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN6RCxJQUFJLENBQUMsNEJBQTRCLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzFELENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQzVCLENBQUM7UUFDRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDZixDQUFDO0lBRVEsS0FBSztRQUNaLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUNqQyxDQUFDO0lBQ0gsQ0FBQzt3R0FwQ1UsZUFBZTs0RkFBZixlQUFlLHVHQUhoQiwyQkFBMkI7OzRGQUcxQixlQUFlO2tCQUwzQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxZQUFZO29CQUN0QixRQUFRLEVBQUUsMkJBQTJCO2lCQUN0Qzs4QkFJVSxNQUFNO3NCQUFkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1BY3Rpb24gfSBmcm9tICcuLi8uLi9jbGFzc2VzL2Zvcm1zL2FjdGlvbic7XG5pbXBvcnQgeyBFbGVtZW50Q29tcG9uZW50IH0gZnJvbSAnLi9sYXlvdXQvZWxlbWVudC5jb21wb25lbnQnXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1hY3Rpb24nLFxuICB0ZW1wbGF0ZTogYDxuZy1jb250ZW50PjwvbmctY29udGVudD5gXG59KVxuXG5leHBvcnQgY2xhc3MgQWN0aW9uQ29tcG9uZW50IGV4dGVuZHMgRWxlbWVudENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGluUHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgYWN0aW9uOiBGb3JtQWN0aW9uIHwgbnVsbCA9IG51bGw7XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKCF0aGlzLmFjdGlvbikgeyByZXR1cm47IH1cbiAgICB0aGlzLmZvcm1Db25maWcgPSB0aGlzLmFjdGlvbj8uX2Zvcm1Db25maWc7XG4gICAgY29uc3QgbWFwcGluZyA9IE9iamVjdC5lbnRyaWVzKHRoaXMuZm9ybUNvbmZpZz8uYWN0aW9uUHJvcGFnYXRlQXR0cmlidXRlcyk7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IG1hcHBpbmcubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBjb25zdCBhY3Rpb25BdHRyID0gbWFwcGluZ1tpbmRleF0/LlswXTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudEF0dHIgPSBtYXBwaW5nW2luZGV4XT8uWzFdPy50b1N0cmluZygpID8/ICcnO1xuICAgICAgaWYgKGNvbXBvbmVudEF0dHIpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmFjdGlvbj8uW2FjdGlvbkF0dHJdO1xuICAgICAgICB0aGlzLmRlZmF1bHRQcm9jZXNzQXR0cmlidXRlQ2hhbmdlKGNvbXBvbmVudEF0dHIsIHZhbHVlKTtcbiAgICAgICAgdGhpcy5jdXN0b21Qcm9jZXNzQXR0cmlidXRlQ2hhbmdlKGNvbXBvbmVudEF0dHIsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5hY3Rpb24/LmF0dHJpYnV0ZUNoYW5nZT8uc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgIGNvbnN0IHsgbmFtZTogY29tcG9uZW50QXR0ciwgdmFsdWUgfSA9IGV2ZW50O1xuICAgICAgdGhpcy5kZWZhdWx0UHJvY2Vzc0F0dHJpYnV0ZUNoYW5nZShjb21wb25lbnRBdHRyLCB2YWx1ZSk7XG4gICAgICB0aGlzLmN1c3RvbVByb2Nlc3NBdHRyaWJ1dGVDaGFuZ2UoY29tcG9uZW50QXR0ciwgdmFsdWUpO1xuICAgIH0pO1xuICAgIGlmICh0aGlzLmFjdGlvbikge1xuICAgICAgdGhpcy5hY3Rpb24ud2lkZ2V0ID0gdGhpcztcbiAgICB9XG4gICAgdGhpcy5zdGFydCgpO1xuICB9XG5cbiAgb3ZlcnJpZGUgc3RhcnQoKSB7XG4gICAgdGhpcy5zZXRGb3JtKHRoaXMuYWN0aW9uPy5fZm9ybSk7XG4gIH1cblxuICBhY3RpdmF0ZSgpIHtcbiAgICBpZiAodGhpcy5hY3Rpb24/Lm5vdGlmeUFjdGl2YXRpb24pIHtcbiAgICAgIHRoaXMuYWN0aW9uLm5vdGlmeUFjdGl2YXRpb24oKTtcbiAgICB9XG4gIH1cbn0iXX0=
|