@wavemaker/app-ng-runtime 11.14.1-18.6421 → 11.14.1-18.6428
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/components/base/bundles/index.umd.js +17 -81
- package/components/base/esm2022/pipes/custom-pipes.mjs +10 -10
- package/components/base/esm2022/utils/widget-utils.mjs +3 -3
- package/components/base/esm2022/widgets/common/base/base.component.mjs +6 -61
- package/components/base/esm2022/widgets/common/lazy-load/lazy-load.directive.mjs +3 -7
- package/components/base/esm2022/widgets/framework/property-change-handler.mjs +2 -7
- package/components/base/fesm2022/index.mjs +18 -82
- package/components/base/fesm2022/index.mjs.map +1 -1
- package/components/base/pipes/custom-pipes.d.ts +5 -5
- package/components/basic/label/bundles/index.umd.js +1 -9
- package/components/basic/label/esm2022/label.directive.mjs +2 -10
- package/components/basic/label/fesm2022/index.mjs +1 -9
- package/components/basic/label/fesm2022/index.mjs.map +1 -1
- package/components/chart/bundles/index.umd.js +2 -2
- package/components/chart/esm2022/chart.utils.mjs +3 -3
- package/components/chart/fesm2022/index.mjs +2 -2
- package/components/chart/fesm2022/index.mjs.map +1 -1
- package/components/containers/wizard/bundles/index.umd.js +2 -21
- package/components/containers/wizard/esm2022/wizard-step/wizard-step.component.mjs +1 -3
- package/components/containers/wizard/esm2022/wizard.component.mjs +3 -20
- package/components/containers/wizard/fesm2022/index.mjs +2 -21
- package/components/containers/wizard/fesm2022/index.mjs.map +1 -1
- package/components/containers/wizard/wizard-step/wizard-step.component.d.ts +0 -2
- package/components/data/pagination/bundles/index.umd.js +0 -4
- package/components/data/pagination/esm2022/pagination.component.mjs +1 -5
- package/components/data/pagination/fesm2022/index.mjs +0 -4
- package/components/data/pagination/fesm2022/index.mjs.map +1 -1
- package/components/data/table/bundles/index.umd.js +14 -370
- package/components/data/table/esm2022/table-action/table-action.directive.mjs +1 -8
- package/components/data/table/esm2022/table-column/table-column.directive.mjs +3 -107
- package/components/data/table/esm2022/table-column-group/table-column-group.directive.mjs +1 -9
- package/components/data/table/esm2022/table-cud.directive.mjs +2 -8
- package/components/data/table/esm2022/table-filter.directive.mjs +2 -12
- package/components/data/table/esm2022/table-row/table-row.directive.mjs +1 -8
- package/components/data/table/esm2022/table-row-action/table-row-action.directive.mjs +1 -8
- package/components/data/table/esm2022/table.component.mjs +12 -219
- package/components/data/table/fesm2022/index.mjs +15 -371
- package/components/data/table/fesm2022/index.mjs.map +1 -1
- package/components/data/table/table-action/table-action.directive.d.ts +2 -3
- package/components/data/table/table-column/table-column.directive.d.ts +2 -3
- package/components/data/table/table-column-group/table-column-group.directive.d.ts +2 -3
- package/components/data/table/table-cud.directive.d.ts +1 -3
- package/components/data/table/table-filter.directive.d.ts +1 -3
- package/components/data/table/table-row/table-row.directive.d.ts +2 -3
- package/components/data/table/table-row-action/table-row-action.directive.d.ts +2 -3
- package/components/data/table/table.component.d.ts +2 -6
- package/components/navigation/menu/bundles/index.umd.js +0 -5
- package/components/navigation/menu/esm2022/menu.component.mjs +1 -6
- package/components/navigation/menu/fesm2022/index.mjs +0 -5
- package/components/navigation/menu/fesm2022/index.mjs.map +1 -1
- package/components/navigation/popover/bundles/index.umd.js +6 -6
- package/components/navigation/popover/esm2022/popover.component.mjs +4 -4
- package/components/navigation/popover/fesm2022/index.mjs +3 -3
- package/components/navigation/popover/fesm2022/index.mjs.map +1 -1
- package/components/navigation/popover/popover.component.d.ts +0 -6
- package/core/bundles/index.umd.js +15 -120
- package/core/esm2022/public_api.mjs +2 -2
- package/core/esm2022/utils/utils.mjs +2 -6
- package/core/esm2022/utils/watcher.mjs +15 -118
- package/core/fesm2022/index.mjs +15 -124
- package/core/fesm2022/index.mjs.map +1 -1
- package/core/public_api.d.ts +1 -1
- package/core/utils/utils.d.ts +0 -1
- package/npm-shrinkwrap.json +2 -2
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/runtime/base/bundles/index.umd.js +2 -3
- package/runtime/base/esm2022/components/base-page.component.mjs +1 -2
- package/runtime/base/esm2022/services/pipe-provider.service.mjs +4 -4
- package/runtime/base/fesm2022/index.mjs +2 -3
- package/runtime/base/fesm2022/index.mjs.map +1 -1
- package/runtime/dynamic/bundles/index.umd.js +0 -4
- package/runtime/dynamic/esm2022/app/app.config.mjs +2 -6
- package/runtime/dynamic/fesm2022/index.mjs +1 -5
- package/runtime/dynamic/fesm2022/index.mjs.map +1 -1
- package/scripts/datatable/datatable.js +15 -103
|
@@ -186,15 +186,8 @@
|
|
|
186
186
|
this.setDataGridOption('colDefs', i2.getClonedObject(this.fieldDefs));
|
|
187
187
|
}
|
|
188
188
|
// If data and colDefs are present, call on before data render event
|
|
189
|
-
// Note: Errors in beforedatarender should not prevent table rendering
|
|
190
189
|
if (!this.isdynamictable && !lodashEs.isEmpty(newValue) && gridOptions.colDefs.length) {
|
|
191
|
-
|
|
192
|
-
this.invokeEventCallback('beforedatarender', { $data: this._gridData, $columns: this.columns, data: this._gridData, columns: this.columns });
|
|
193
|
-
}
|
|
194
|
-
catch (error) {
|
|
195
|
-
// Log error but continue with rendering - beforedatarender errors should not block table rendering
|
|
196
|
-
console.warn('Error in beforedatarender event callback, continuing with table rendering:', error);
|
|
197
|
-
}
|
|
190
|
+
this.invokeEventCallback('beforedatarender', { $data: this._gridData, $columns: this.columns, data: this._gridData, columns: this.columns });
|
|
198
191
|
}
|
|
199
192
|
this.setDataGridOption('data', i2.getClonedObject(this._gridData));
|
|
200
193
|
}
|
|
@@ -587,11 +580,7 @@
|
|
|
587
580
|
this.prevData = i2.getClonedObject(row);
|
|
588
581
|
},
|
|
589
582
|
afterRowUpdate: (row, e, callBack, options) => {
|
|
590
|
-
|
|
591
|
-
this.updateRecord(lodashEs.extend({}, options, { row, 'prevData': options.rowindex ? options.rowindex : this.prevData, 'event': e, 'callBack': callBack }));
|
|
592
|
-
setTimeout(() => {
|
|
593
|
-
i2.unMuteWatchers();
|
|
594
|
-
}, 10);
|
|
583
|
+
this.updateRecord(lodashEs.extend({}, options, { row, 'prevData': this.prevData, 'event': e, 'callBack': callBack }));
|
|
595
584
|
},
|
|
596
585
|
onBeforeRowUpdate: (row, e, options) => {
|
|
597
586
|
return this.invokeEventCallback('beforerowupdate', { $event: e, $data: row, row, options: options });
|
|
@@ -1245,10 +1234,6 @@
|
|
|
1245
1234
|
return this.actualPageSize || 5;
|
|
1246
1235
|
}
|
|
1247
1236
|
watchVariableDataSet(newVal) {
|
|
1248
|
-
// Guard against component destruction
|
|
1249
|
-
if (this.isDestroyed) {
|
|
1250
|
-
return;
|
|
1251
|
-
}
|
|
1252
1237
|
let result;
|
|
1253
1238
|
// Check for Variable filters if applied
|
|
1254
1239
|
if (this.gridOptions.isNavTypeScrollOrOndemand()) {
|
|
@@ -1306,12 +1291,6 @@
|
|
|
1306
1291
|
}
|
|
1307
1292
|
/*Return if data is invalid.*/
|
|
1308
1293
|
if (!this.isDataValid()) {
|
|
1309
|
-
// If data is invalid and variableInflight is still true, clear loading state
|
|
1310
|
-
// This prevents tables from getting stuck in loading when data is invalid
|
|
1311
|
-
if (this.variableInflight) {
|
|
1312
|
-
this.variableInflight = false;
|
|
1313
|
-
this.setGridData([]);
|
|
1314
|
-
}
|
|
1315
1294
|
return;
|
|
1316
1295
|
}
|
|
1317
1296
|
// If value is empty or in studio mode, dont enable the navigation
|
|
@@ -1339,13 +1318,7 @@
|
|
|
1339
1318
|
// @ts-ignore
|
|
1340
1319
|
if (!lodashEs.isObject(newVal) || newVal === '' || (newVal && newVal.dataValue === '')) {
|
|
1341
1320
|
if (!this.variableInflight) {
|
|
1342
|
-
// If variable has finished loading and resultSet is empty,
|
|
1343
|
-
this.setGridData([]);
|
|
1344
|
-
}
|
|
1345
|
-
else {
|
|
1346
|
-
// If variableInflight is still true but we have invalid/empty data, clear loading state
|
|
1347
|
-
// This handles cases where data never arrives or is invalid
|
|
1348
|
-
this.variableInflight = false;
|
|
1321
|
+
// If variable has finished loading and resultSet is empty, ender empty data
|
|
1349
1322
|
this.setGridData([]);
|
|
1350
1323
|
}
|
|
1351
1324
|
return;
|
|
@@ -1355,142 +1328,13 @@
|
|
|
1355
1328
|
}
|
|
1356
1329
|
}
|
|
1357
1330
|
ngOnDestroy() {
|
|
1358
|
-
// MEMORY LEAK FIX: Remove document click listener
|
|
1359
1331
|
document.removeEventListener('click', this.documentClickBind);
|
|
1360
|
-
// MEMORY LEAK FIX: Unsubscribe from navigator watches
|
|
1361
1332
|
if (this.navigatorResultWatch) {
|
|
1362
1333
|
this.navigatorResultWatch.unsubscribe();
|
|
1363
|
-
this.navigatorResultWatch = null;
|
|
1364
1334
|
}
|
|
1365
1335
|
if (this.navigatorMaxResultWatch) {
|
|
1366
1336
|
this.navigatorMaxResultWatch.unsubscribe();
|
|
1367
|
-
this.navigatorMaxResultWatch = null;
|
|
1368
|
-
}
|
|
1369
|
-
// MEMORY LEAK FIX: Clear all ViewContainerRef embedded views
|
|
1370
|
-
// These hold references to row data, custom expressions, and inline widgets
|
|
1371
|
-
if (this.customExprViewRef) {
|
|
1372
|
-
this.customExprViewRef.clear();
|
|
1373
|
-
}
|
|
1374
|
-
if (this.rowActionsViewRef) {
|
|
1375
|
-
this.rowActionsViewRef.clear();
|
|
1376
|
-
}
|
|
1377
|
-
if (this.filterViewRef) {
|
|
1378
|
-
this.filterViewRef.clear();
|
|
1379
|
-
}
|
|
1380
|
-
if (this.inlineEditViewRef) {
|
|
1381
|
-
this.inlineEditViewRef.clear();
|
|
1382
|
-
}
|
|
1383
|
-
if (this.inlineEditNewViewRef) {
|
|
1384
|
-
this.inlineEditNewViewRef.clear();
|
|
1385
|
-
}
|
|
1386
|
-
if (this.rowDetailViewRef) {
|
|
1387
|
-
this.rowDetailViewRef.clear();
|
|
1388
|
-
}
|
|
1389
|
-
if (this.rowExpansionActionViewRef) {
|
|
1390
|
-
this.rowExpansionActionViewRef.clear();
|
|
1391
|
-
}
|
|
1392
|
-
if (this.dynamicTableRef) {
|
|
1393
|
-
this.dynamicTableRef.clear();
|
|
1394
|
-
}
|
|
1395
|
-
// MEMORY LEAK FIX: Clear compiled template caches
|
|
1396
|
-
this.rowActionsCompiledTl = {};
|
|
1397
|
-
this.rowFilterCompliedTl = {};
|
|
1398
|
-
this.inlineCompliedTl = {};
|
|
1399
|
-
this.inlineNewCompliedTl = {};
|
|
1400
|
-
this.customExprCompiledTl = {};
|
|
1401
|
-
this.customExprCompiledSummaryTl = {};
|
|
1402
|
-
this.rowDefInstances = {};
|
|
1403
|
-
this.rowDefMap = {};
|
|
1404
|
-
this.rowExpansionActionTl = {};
|
|
1405
|
-
// MEMORY LEAK FIX: Clear dynamic context
|
|
1406
|
-
if (this._dynamicContext) {
|
|
1407
|
-
Object.keys(this._dynamicContext).forEach(key => {
|
|
1408
|
-
delete this._dynamicContext[key];
|
|
1409
|
-
});
|
|
1410
|
-
this._dynamicContext = null;
|
|
1411
1337
|
}
|
|
1412
|
-
// MEMORY LEAK FIX: Clear data arrays
|
|
1413
|
-
this._gridData = [];
|
|
1414
|
-
this.items = [];
|
|
1415
|
-
this.selectedItems = [];
|
|
1416
|
-
this.fieldDefs = [];
|
|
1417
|
-
this.fullFieldDefs = [];
|
|
1418
|
-
this.__fullData = null;
|
|
1419
|
-
// MEMORY LEAK FIX: Destroy jQuery datatable widget before clearing gridOptions
|
|
1420
|
-
if (this.datagridElement && this.datagridElement.datatable) {
|
|
1421
|
-
try {
|
|
1422
|
-
this.datagridElement.datatable('destroy');
|
|
1423
|
-
}
|
|
1424
|
-
catch (e) {
|
|
1425
|
-
// Ignore errors during destroy
|
|
1426
|
-
}
|
|
1427
|
-
}
|
|
1428
|
-
// MEMORY LEAK FIX: Clear gridOptions to release all function closures and data
|
|
1429
|
-
// gridOptions holds many closures that capture 'this' and prevent GC
|
|
1430
|
-
if (this.gridOptions) {
|
|
1431
|
-
// Clear data array
|
|
1432
|
-
if (this.gridOptions.data) {
|
|
1433
|
-
this.gridOptions.data = [];
|
|
1434
|
-
}
|
|
1435
|
-
// Clear column definitions
|
|
1436
|
-
if (this.gridOptions.colDefs) {
|
|
1437
|
-
this.gridOptions.colDefs = [];
|
|
1438
|
-
}
|
|
1439
|
-
// Clear row actions
|
|
1440
|
-
if (this.gridOptions.rowActions) {
|
|
1441
|
-
this.gridOptions.rowActions = [];
|
|
1442
|
-
}
|
|
1443
|
-
// Clear header config
|
|
1444
|
-
if (this.gridOptions.headerConfig) {
|
|
1445
|
-
this.gridOptions.headerConfig = [];
|
|
1446
|
-
}
|
|
1447
|
-
// Nullify all function references to break closures
|
|
1448
|
-
Object.keys(this.gridOptions).forEach(key => {
|
|
1449
|
-
if (typeof this.gridOptions[key] === 'function') {
|
|
1450
|
-
this.gridOptions[key] = null;
|
|
1451
|
-
}
|
|
1452
|
-
});
|
|
1453
|
-
}
|
|
1454
|
-
// MEMORY LEAK FIX: Clear other data structures
|
|
1455
|
-
this.columns = {};
|
|
1456
|
-
this.formfields = {};
|
|
1457
|
-
this.rowFilter = {};
|
|
1458
|
-
this.actions = [];
|
|
1459
|
-
this._actions = { header: [], footer: [] };
|
|
1460
|
-
this.exportOptions = [];
|
|
1461
|
-
this.headerConfig = [];
|
|
1462
|
-
this.rowActions = [];
|
|
1463
|
-
// MEMORY LEAK FIX: Clear all @ContentChildren QueryLists holding template references
|
|
1464
|
-
// These QueryLists hold TemplateRef instances that create circular references to the parent LView
|
|
1465
|
-
if (this.rowActionTmpl) {
|
|
1466
|
-
this.rowActionTmpl.reset([]);
|
|
1467
|
-
}
|
|
1468
|
-
if (this.filterTmpl) {
|
|
1469
|
-
this.filterTmpl.reset([]);
|
|
1470
|
-
}
|
|
1471
|
-
if (this.inlineWidgetTmpl) {
|
|
1472
|
-
this.inlineWidgetTmpl.reset([]);
|
|
1473
|
-
}
|
|
1474
|
-
if (this.inlineWidgetNewTmpl) {
|
|
1475
|
-
this.inlineWidgetNewTmpl.reset([]);
|
|
1476
|
-
}
|
|
1477
|
-
if (this.customExprTmpl) {
|
|
1478
|
-
this.customExprTmpl.reset([]);
|
|
1479
|
-
}
|
|
1480
|
-
if (this.rowExpansionActionTmpl) {
|
|
1481
|
-
this.rowExpansionActionTmpl.reset([]);
|
|
1482
|
-
}
|
|
1483
|
-
// MEMORY LEAK FIX: Clear @ContentChild template reference
|
|
1484
|
-
this.rowExpansionTmpl = null;
|
|
1485
|
-
// MEMORY LEAK FIX: Complete and clear subjects
|
|
1486
|
-
if (this.selectedItemChange) {
|
|
1487
|
-
this.selectedItemChange.complete();
|
|
1488
|
-
this.selectedItemChange = null;
|
|
1489
|
-
}
|
|
1490
|
-
// MEMORY LEAK FIX: Clear ViewChild references
|
|
1491
|
-
this.dataNavigator = null;
|
|
1492
|
-
this._tableElement = null;
|
|
1493
|
-
// console.log("table component destroyed");
|
|
1494
1338
|
super.ngOnDestroy();
|
|
1495
1339
|
}
|
|
1496
1340
|
addRowIndex(row) {
|
|
@@ -1561,9 +1405,6 @@
|
|
|
1561
1405
|
if (!key.endsWith('_filter') && ((key.endsWith('_new') && newRow) || (!key.endsWith('_new') && !newRow))) {
|
|
1562
1406
|
ctrls[key].setValue('');
|
|
1563
1407
|
this.resetFormControl(ctrls[key]);
|
|
1564
|
-
// MEMORY LEAK FIX: Clear validators to release references
|
|
1565
|
-
ctrls[key].clearValidators();
|
|
1566
|
-
ctrls[key].clearAsyncValidators();
|
|
1567
1408
|
}
|
|
1568
1409
|
});
|
|
1569
1410
|
}
|
|
@@ -1883,14 +1724,7 @@
|
|
|
1883
1724
|
defaultFieldDefs.forEach(col => {
|
|
1884
1725
|
this.columns[col.field] = col;
|
|
1885
1726
|
});
|
|
1886
|
-
|
|
1887
|
-
try {
|
|
1888
|
-
this.invokeEventCallback('beforedatarender', { $data: data, $columns: this.columns, data: data, columns: this.columns });
|
|
1889
|
-
}
|
|
1890
|
-
catch (error) {
|
|
1891
|
-
// Log error but continue with rendering - beforedatarender errors should not block table rendering
|
|
1892
|
-
console.warn('Error in beforedatarender event callback, continuing with table rendering:', error);
|
|
1893
|
-
}
|
|
1727
|
+
this.invokeEventCallback('beforedatarender', { $data: data, $columns: this.columns, data: data, columns: this.columns });
|
|
1894
1728
|
defaultFieldDefs = [];
|
|
1895
1729
|
// Apply the changes made by the user
|
|
1896
1730
|
lodashEs.forEach(this.columns, val => {
|
|
@@ -1929,23 +1763,19 @@
|
|
|
1929
1763
|
return sortExp || '';
|
|
1930
1764
|
}
|
|
1931
1765
|
onPropertyChange(key, nv, ov) {
|
|
1932
|
-
// Guard against property changes after component destruction
|
|
1933
|
-
if (this.isDestroyed) {
|
|
1934
|
-
return;
|
|
1935
|
-
}
|
|
1936
1766
|
let enableNewRow;
|
|
1937
1767
|
switch (key) {
|
|
1938
1768
|
case 'datasource':
|
|
1939
1769
|
// Fix for [WMS-23653] when startUpdate is false (request on page load property is unchecked),
|
|
1940
1770
|
// then set status msg as "No data found"
|
|
1941
|
-
if (this.allowpagesizechange
|
|
1771
|
+
if (this.allowpagesizechange) {
|
|
1942
1772
|
this.datasource.maxResults = this.pagesize || this.datasource.maxResults;
|
|
1943
1773
|
}
|
|
1944
|
-
if (nv
|
|
1774
|
+
if (nv.startUpdate === false) {
|
|
1945
1775
|
this.variableInflight = false;
|
|
1946
1776
|
this.callDataGridMethod('setStatus', 'nodata', this.nodatamessage);
|
|
1947
1777
|
}
|
|
1948
|
-
if (
|
|
1778
|
+
if (lodashEs.get(this.datasource, 'category') !== 'wm.Variable') {
|
|
1949
1779
|
this.headerselectall = false;
|
|
1950
1780
|
this.setDataGridOption("headerselectall", false);
|
|
1951
1781
|
}
|
|
@@ -1957,12 +1787,6 @@
|
|
|
1957
1787
|
this.gridOptions.setIsNextPageData(false);
|
|
1958
1788
|
}
|
|
1959
1789
|
if (this.binddatasource && !this.datasource) {
|
|
1960
|
-
// If datasource is not set yet, clear loading state and show no data
|
|
1961
|
-
// This prevents tables from being stuck in loading state
|
|
1962
|
-
if (this.variableInflight) {
|
|
1963
|
-
this.variableInflight = false;
|
|
1964
|
-
this.callDataGridMethod('setStatus', 'nodata', this.nodatamessage);
|
|
1965
|
-
}
|
|
1966
1790
|
return;
|
|
1967
1791
|
}
|
|
1968
1792
|
// if table is inside list then table dataset will be set as "item.XXX" and there is no datasource.
|
|
@@ -2066,11 +1890,9 @@
|
|
|
2066
1890
|
this.allowpagesizechange = nv;
|
|
2067
1891
|
break;
|
|
2068
1892
|
case 'pagesizeoptions':
|
|
2069
|
-
this.
|
|
2070
|
-
this.
|
|
2071
|
-
this.
|
|
2072
|
-
if (this.allowpagesizechange)
|
|
2073
|
-
this.setDefaultPageSize(nv);
|
|
1893
|
+
this.gridOptions.pagesizeoptions = nv;
|
|
1894
|
+
this.pagesizeoptions = nv;
|
|
1895
|
+
this.setDefaultPageSize(nv);
|
|
2074
1896
|
break;
|
|
2075
1897
|
case 'multiselecttitle':
|
|
2076
1898
|
this.setDataGridOption('multiselecttitle', nv);
|
|
@@ -2114,41 +1936,12 @@
|
|
|
2114
1936
|
this.pagesize = nv;
|
|
2115
1937
|
}
|
|
2116
1938
|
this.updatedPageSize = nv;
|
|
2117
|
-
if (this.isPageSizeOptionsChanged()) {
|
|
2118
|
-
this.dataNavigator.defaultPageSizeOptions = this.pagesizeoptions?.split(',').map(Number).sort((a, b) => a - b) || [];
|
|
2119
|
-
this.dataNavigator.pageSizeOptions = [...this.dataNavigator.defaultPageSizeOptions];
|
|
2120
|
-
}
|
|
2121
1939
|
}
|
|
2122
1940
|
this.dataNavigator.options = {
|
|
2123
1941
|
maxResults: nv
|
|
2124
1942
|
};
|
|
2125
1943
|
this.dataNavigator.widget.maxResults = nv;
|
|
2126
1944
|
this.dataNavigator.maxResults = nv;
|
|
2127
|
-
if (this.datasource) {
|
|
2128
|
-
this.datasource.maxResults = this.pagesize || this.datasource.maxResults;
|
|
2129
|
-
}
|
|
2130
|
-
}
|
|
2131
|
-
isPageSizeOptionsChanged() {
|
|
2132
|
-
return !lodashEs.isEqual(this.prevPagesizeoptions, this.pagesizeoptions);
|
|
2133
|
-
}
|
|
2134
|
-
selectPageSize(pagesize) {
|
|
2135
|
-
if (!this.allowpagesizechange && !pagesize)
|
|
2136
|
-
return;
|
|
2137
|
-
if (pagesize < this.dataNavigator.pageSizeOptions[0] || pagesize > this.dataNavigator.pageSizeOptions[this.dataNavigator.pageSizeOptions.length - 1]
|
|
2138
|
-
|| !this.dataNavigator.pageSizeOptions.includes(Number(pagesize))) {
|
|
2139
|
-
pagesize = this.dataNavigator.pageSizeOptions[0];
|
|
2140
|
-
}
|
|
2141
|
-
this.dataNavigator.onPageSizeChange(undefined, pagesize);
|
|
2142
|
-
}
|
|
2143
|
-
sanitizeCommaSeparatedIntegers(input) {
|
|
2144
|
-
if (!input)
|
|
2145
|
-
return "";
|
|
2146
|
-
const uniqueNumbers = Array.from(new Set(input
|
|
2147
|
-
.split(",")
|
|
2148
|
-
.map(v => v.trim())
|
|
2149
|
-
.filter(v => /^-?\d+$/.test(v))
|
|
2150
|
-
.map(v => Math.abs(parseInt(v, 10)))));
|
|
2151
|
-
return uniqueNumbers.join(",");
|
|
2152
1945
|
}
|
|
2153
1946
|
onDataSourceChange() {
|
|
2154
1947
|
this.fieldDefs.forEach(col => {
|
|
@@ -2674,7 +2467,7 @@
|
|
|
2674
2467
|
this.updateVariable(response, options.callBack);
|
|
2675
2468
|
}
|
|
2676
2469
|
else if (!this.table.datasource.execute(i2.DataSource.Operation.IS_API_AWARE)) {
|
|
2677
|
-
this.table.initiateSelectItem('current', response, undefined,
|
|
2470
|
+
this.table.initiateSelectItem('current', response, undefined, false, options.callBack);
|
|
2678
2471
|
}
|
|
2679
2472
|
i2.triggerFn(options.success, response);
|
|
2680
2473
|
this.table.invokeEventCallback('rowupdate', { $event: options.event, $data: response, row: response });
|
|
@@ -2924,12 +2717,6 @@
|
|
|
2924
2717
|
this.table.callDataGridMethod('cancelEdit', $row);
|
|
2925
2718
|
}
|
|
2926
2719
|
}
|
|
2927
|
-
ngOnDestroy() {
|
|
2928
|
-
// MEMORY LEAK FIX: Clear all references
|
|
2929
|
-
this.table = null;
|
|
2930
|
-
this.dialogService = null;
|
|
2931
|
-
this.app = null;
|
|
2932
|
-
}
|
|
2933
2720
|
static { this.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0__namespace, type: TableCUDDirective, deps: [{ token: TableComponent, self: true }, { token: i2__namespace.AbstractDialogService }, { token: i2__namespace.App }], target: i0__namespace.ɵɵFactoryTarget.Directive }); }
|
|
2934
2721
|
static { this.ɵdir = i0__namespace.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: TableCUDDirective, isStandalone: true, selector: "[wmTableCUD]", ngImport: i0__namespace }); }
|
|
2935
2722
|
}
|
|
@@ -3242,12 +3029,6 @@
|
|
|
3242
3029
|
// Function that checks if a given string is a valid date and returns the timestamp if it is, or NaN if it's not.
|
|
3243
3030
|
parseDateString(dateString) {
|
|
3244
3031
|
const timestamp = Date.parse(dateString);
|
|
3245
|
-
// handling case when string starts with string and end with number
|
|
3246
|
-
const trimmed = dateString.trim();
|
|
3247
|
-
const monthRegex = /\b(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:t(?:ember)?)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\b/i;
|
|
3248
|
-
if (/^[A-Za-z]+/.test(trimmed) && /\d+$/.test(trimmed) && !monthRegex.test(trimmed)) {
|
|
3249
|
-
return NaN;
|
|
3250
|
-
}
|
|
3251
3032
|
if (!isNaN(timestamp)) {
|
|
3252
3033
|
return timestamp;
|
|
3253
3034
|
}
|
|
@@ -3262,7 +3043,7 @@
|
|
|
3262
3043
|
const fieldValue = lodashEs.get(lodashEs.find(data, sortObj.field), sortObj.field);
|
|
3263
3044
|
const isValidDateString = typeof fieldValue === 'string' ? this.parseDateString(fieldValue) : NaN;
|
|
3264
3045
|
if (!isNaN(isValidDateString)) { // if the field is a date string
|
|
3265
|
-
data = lodashEs.orderBy(data, [(item) => this.parseDateString(
|
|
3046
|
+
data = lodashEs.orderBy(data, [(item) => this.parseDateString(item[sortObj.field])], [sortObj.direction]);
|
|
3266
3047
|
}
|
|
3267
3048
|
else if (sortObj.sortBy ? this.table.columns[sortObj.sortBy]?.caseinsensitive : this.table.columns[sortObj.field]?.caseinsensitive) {
|
|
3268
3049
|
//Fix for [WMS-27505]: Added case-insensitive sorting so that uppercase and lowercase letters are treated the same when sorting.
|
|
@@ -3624,10 +3405,6 @@
|
|
|
3624
3405
|
condition: logicalOp
|
|
3625
3406
|
});
|
|
3626
3407
|
}
|
|
3627
|
-
ngOnDestroy() {
|
|
3628
|
-
// MEMORY LEAK FIX: Clear table reference
|
|
3629
|
-
this.table = null;
|
|
3630
|
-
}
|
|
3631
3408
|
static { this.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0__namespace, type: TableFilterSortDirective, deps: [{ token: TableComponent, self: true }], target: i0__namespace.ɵɵFactoryTarget.Directive }); }
|
|
3632
3409
|
static { this.ɵdir = i0__namespace.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: TableFilterSortDirective, isStandalone: true, selector: "[wmTableFilterSort]", ngImport: i0__namespace }); }
|
|
3633
3410
|
}
|
|
@@ -3714,13 +3491,6 @@
|
|
|
3714
3491
|
this.buttonDef[key] = nv;
|
|
3715
3492
|
}
|
|
3716
3493
|
}
|
|
3717
|
-
ngOnDestroy() {
|
|
3718
|
-
// MEMORY LEAK FIX: Clear table and buttonDef references
|
|
3719
|
-
this.table = null;
|
|
3720
|
-
this.buttonDef = null;
|
|
3721
|
-
// Call parent ngOnDestroy (BaseComponent has cleanup)
|
|
3722
|
-
super.ngOnDestroy();
|
|
3723
|
-
}
|
|
3724
3494
|
static { this.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0__namespace, type: TableActionDirective, deps: [{ token: i0__namespace.Injector }, { token: TableComponent, optional: true }, { token: 'EXPLICIT_CONTEXT', optional: true }], target: i0__namespace.ɵɵFactoryTarget.Directive }); }
|
|
3725
3495
|
static { this.ɵdir = i0__namespace.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: TableActionDirective, isStandalone: true, selector: "[wmTableAction]", providers: [
|
|
3726
3496
|
i4.provideAsWidgetRef(TableActionDirective)
|
|
@@ -3885,14 +3655,6 @@
|
|
|
3885
3655
|
const fieldName = this.group && this.group.name;
|
|
3886
3656
|
i4.setHeaderConfigForTable(this.table.headerConfig, this.config, fieldName, fieldName ? colIndex : headerIndex);
|
|
3887
3657
|
}
|
|
3888
|
-
ngOnDestroy() {
|
|
3889
|
-
// MEMORY LEAK FIX: Clear table, group, and config references
|
|
3890
|
-
this.table = null;
|
|
3891
|
-
this.group = null;
|
|
3892
|
-
this.config = null;
|
|
3893
|
-
// Call parent ngOnDestroy (BaseComponent has cleanup)
|
|
3894
|
-
super.ngOnDestroy();
|
|
3895
|
-
}
|
|
3896
3658
|
static { this.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0__namespace, type: TableColumnGroupDirective, deps: [{ token: i0__namespace.Injector }, { token: TableColumnGroupDirective, optional: true, skipSelf: true }, { token: TableComponent, optional: true }, { token: 'EXPLICIT_CONTEXT', optional: true }], target: i0__namespace.ɵɵFactoryTarget.Directive }); }
|
|
3897
3659
|
static { this.ɵdir = i0__namespace.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: TableColumnGroupDirective, isStandalone: true, selector: "[wmTableColumnGroup]", providers: [
|
|
3898
3660
|
i4.provideAsWidgetRef(TableColumnGroupDirective)
|
|
@@ -4087,10 +3849,6 @@
|
|
|
4087
3849
|
}
|
|
4088
3850
|
// Remove validators for the inline widget and set form to untouched
|
|
4089
3851
|
removeValidations() {
|
|
4090
|
-
// Guard against component destruction or table/ngform being null
|
|
4091
|
-
if (this.isDestroyed || !this.table || !this.table.ngform) {
|
|
4092
|
-
return;
|
|
4093
|
-
}
|
|
4094
3852
|
this.table.ngform.markAsUntouched();
|
|
4095
3853
|
const control = this.getFormControl();
|
|
4096
3854
|
if (!control) {
|
|
@@ -4102,10 +3860,6 @@
|
|
|
4102
3860
|
}
|
|
4103
3861
|
// Apply default|sync|async|prop validators for QuickEdit new row form control
|
|
4104
3862
|
applyNewRowValidations() {
|
|
4105
|
-
// Guard against component destruction or table/ngform being null
|
|
4106
|
-
if (this.isDestroyed || !this.table || !this.table.ngform) {
|
|
4107
|
-
return;
|
|
4108
|
-
}
|
|
4109
3863
|
if (!this._checkNewEditableRowControl()) {
|
|
4110
3864
|
return;
|
|
4111
3865
|
}
|
|
@@ -4122,37 +3876,22 @@
|
|
|
4122
3876
|
}
|
|
4123
3877
|
// Remove validators for the QuickEdit new row widget and set form to untouched
|
|
4124
3878
|
removeNewRowValidations() {
|
|
4125
|
-
// Guard against component destruction or table/ngform being null
|
|
4126
|
-
if (this.isDestroyed || !this.table || !this.table.ngform) {
|
|
4127
|
-
return;
|
|
4128
|
-
}
|
|
4129
3879
|
this.table.ngform.markAsUntouched();
|
|
4130
3880
|
if (!this._checkNewEditableRowControl()) {
|
|
4131
3881
|
return;
|
|
4132
3882
|
}
|
|
4133
3883
|
const control = this.getFormControl('_new');
|
|
4134
|
-
if (!control) {
|
|
4135
|
-
return;
|
|
4136
|
-
}
|
|
4137
3884
|
control.clearValidators();
|
|
4138
3885
|
control.clearAsyncValidators();
|
|
4139
3886
|
control.updateValueAndValidity();
|
|
4140
3887
|
}
|
|
4141
3888
|
addFormControl(suffix) {
|
|
4142
|
-
// Guard against component destruction or table/ngform being null
|
|
4143
|
-
if (this.isDestroyed || !this.table || !this.table.ngform) {
|
|
4144
|
-
return;
|
|
4145
|
-
}
|
|
4146
3889
|
const ctrlName = suffix ? (this.binding + suffix) : this.binding;
|
|
4147
3890
|
this.table.ngform.addControl(ctrlName, this.table.fb.control(''));
|
|
4148
3891
|
}
|
|
4149
3892
|
getFormControl(suffix) {
|
|
4150
|
-
// Guard against component destruction or table/ngform being null
|
|
4151
|
-
if (this.isDestroyed || !this.table || !this.table.ngform) {
|
|
4152
|
-
return null;
|
|
4153
|
-
}
|
|
4154
3893
|
const ctrlName = suffix ? (this.binding + suffix) : this.binding;
|
|
4155
|
-
return this.table.ngform.controls[ctrlName]
|
|
3894
|
+
return this.table.ngform.controls[ctrlName];
|
|
4156
3895
|
}
|
|
4157
3896
|
_checkNewEditableRowControl() {
|
|
4158
3897
|
return this._isNewEditableRow && this.getFormControl('_new');
|
|
@@ -4226,16 +3965,12 @@
|
|
|
4226
3965
|
}
|
|
4227
3966
|
// On field value change, apply cascading filter and set validation message
|
|
4228
3967
|
onValueChange(val, widget) {
|
|
4229
|
-
// Guard against component destruction or table being null
|
|
4230
|
-
if (this.isDestroyed || !this.table) {
|
|
4231
|
-
return;
|
|
4232
|
-
}
|
|
4233
3968
|
if (val !== null) {
|
|
4234
3969
|
i4.applyFilterOnField(this.table.datasource, this.widget, this.table.fieldDefs, val, {
|
|
4235
3970
|
widget: 'edit-widget-type'
|
|
4236
3971
|
});
|
|
4237
3972
|
}
|
|
4238
|
-
if (this.table.ngform
|
|
3973
|
+
if (this.table.ngform.touched) {
|
|
4239
3974
|
this.activeControlType = widget;
|
|
4240
3975
|
if (widget === 'inlineInstance') {
|
|
4241
3976
|
this.notifyChanges();
|
|
@@ -4526,83 +4261,6 @@
|
|
|
4526
4261
|
this.table.redraw(true);
|
|
4527
4262
|
}
|
|
4528
4263
|
}
|
|
4529
|
-
ngOnDestroy() {
|
|
4530
|
-
// MEMORY LEAK FIX: Clear ContentChildren QueryLists
|
|
4531
|
-
if (this._filterInstances) {
|
|
4532
|
-
try {
|
|
4533
|
-
this._filterInstances.reset([]);
|
|
4534
|
-
}
|
|
4535
|
-
catch (e) {
|
|
4536
|
-
// Silently handle cleanup errors - QueryList might already be destroyed
|
|
4537
|
-
}
|
|
4538
|
-
}
|
|
4539
|
-
if (this._inlineInstances) {
|
|
4540
|
-
try {
|
|
4541
|
-
this._inlineInstances.reset([]);
|
|
4542
|
-
}
|
|
4543
|
-
catch (e) {
|
|
4544
|
-
// Silently handle cleanup errors - QueryList might already be destroyed
|
|
4545
|
-
}
|
|
4546
|
-
}
|
|
4547
|
-
if (this._inlineInstancesNew) {
|
|
4548
|
-
try {
|
|
4549
|
-
this._inlineInstancesNew.reset([]);
|
|
4550
|
-
}
|
|
4551
|
-
catch (e) {
|
|
4552
|
-
// Silently handle cleanup errors - QueryList might already be destroyed
|
|
4553
|
-
}
|
|
4554
|
-
}
|
|
4555
|
-
// MEMORY LEAK FIX: Clear all widget instance references
|
|
4556
|
-
this.filterInstance = null;
|
|
4557
|
-
this.inlineInstance = null;
|
|
4558
|
-
this.inlineInstanceNew = null;
|
|
4559
|
-
// MEMORY LEAK FIX: Clear template references
|
|
4560
|
-
this.customExprTmpl = null;
|
|
4561
|
-
this.inlineWidthTempRef = null;
|
|
4562
|
-
this.filterTemplateRef = null;
|
|
4563
|
-
// MEMORY LEAK FIX: Clear dataset references
|
|
4564
|
-
this._filterDataSet = null;
|
|
4565
|
-
this.dataset = null;
|
|
4566
|
-
this._dataoptions = null;
|
|
4567
|
-
this._datasource = null;
|
|
4568
|
-
// MEMORY LEAK FIX: Clear validation objects
|
|
4569
|
-
if (this.fieldValidations) {
|
|
4570
|
-
try {
|
|
4571
|
-
this.fieldValidations.destroy();
|
|
4572
|
-
}
|
|
4573
|
-
catch (e) {
|
|
4574
|
-
// Silently handle cleanup errors
|
|
4575
|
-
}
|
|
4576
|
-
this.fieldValidations = null;
|
|
4577
|
-
}
|
|
4578
|
-
if (this.fieldValidations_new) {
|
|
4579
|
-
try {
|
|
4580
|
-
this.fieldValidations_new.destroy();
|
|
4581
|
-
}
|
|
4582
|
-
catch (e) {
|
|
4583
|
-
// Silently handle cleanup errors
|
|
4584
|
-
}
|
|
4585
|
-
this.fieldValidations_new = null;
|
|
4586
|
-
}
|
|
4587
|
-
this.syncValidators = [];
|
|
4588
|
-
this.asyncValidators = [];
|
|
4589
|
-
// MEMORY LEAK FIX: Clear filter control reference
|
|
4590
|
-
this.filterControl = null;
|
|
4591
|
-
// MEMORY LEAK FIX: Clear notify fields array
|
|
4592
|
-
if (this.notifyForFields) {
|
|
4593
|
-
this.notifyForFields = [];
|
|
4594
|
-
}
|
|
4595
|
-
// MEMORY LEAK FIX: Clear observe fields array
|
|
4596
|
-
if (this.observeOnFields) {
|
|
4597
|
-
this.observeOnFields = [];
|
|
4598
|
-
}
|
|
4599
|
-
// MEMORY LEAK FIX: Clear table and group references
|
|
4600
|
-
// Note: These are injected dependencies, but clearing helps GC
|
|
4601
|
-
this.table = null;
|
|
4602
|
-
this.group = null;
|
|
4603
|
-
// Call parent ngOnDestroy
|
|
4604
|
-
super.ngOnDestroy();
|
|
4605
|
-
}
|
|
4606
4264
|
static { this.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0__namespace, type: TableColumnDirective, deps: [{ token: i0__namespace.Injector }, { token: i2__namespace.AppDefaults }, { token: TableComponent, optional: true }, { token: TableColumnGroupDirective, optional: true }, { token: 'filterdataset.bind', attribute: true }, { token: 'dataset.bind', attribute: true }, { token: 'EXPLICIT_CONTEXT', optional: true }], target: i0__namespace.ɵɵFactoryTarget.Directive }); }
|
|
4607
4265
|
static { this.ɵdir = i0__namespace.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: TableColumnDirective, isStandalone: true, selector: "[wmTableColumn]", providers: [
|
|
4608
4266
|
i4.provideAsWidgetRef(TableColumnDirective)
|
|
@@ -4697,13 +4355,6 @@
|
|
|
4697
4355
|
this.config.content = this.content;
|
|
4698
4356
|
}
|
|
4699
4357
|
}
|
|
4700
|
-
ngOnDestroy() {
|
|
4701
|
-
// MEMORY LEAK FIX: Clear table and config references
|
|
4702
|
-
this.table = null;
|
|
4703
|
-
this.config = null;
|
|
4704
|
-
// Call parent ngOnDestroy (BaseComponent has cleanup)
|
|
4705
|
-
super.ngOnDestroy();
|
|
4706
|
-
}
|
|
4707
4358
|
static { this.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0__namespace, type: TableRowDirective, deps: [{ token: i0__namespace.Injector }, { token: TableComponent, optional: true, skipSelf: true }, { token: 'EXPLICIT_CONTEXT', optional: true }], target: i0__namespace.ɵɵFactoryTarget.Directive }); }
|
|
4708
4359
|
static { this.ɵdir = i0__namespace.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: TableRowDirective, isStandalone: true, selector: "[wmTableRow]", providers: [
|
|
4709
4360
|
i4.provideAsWidgetRef(TableRowDirective)
|
|
@@ -4785,13 +4436,6 @@
|
|
|
4785
4436
|
this.populateAction();
|
|
4786
4437
|
this.table.registerRowActions(this.buttonDef);
|
|
4787
4438
|
}
|
|
4788
|
-
ngOnDestroy() {
|
|
4789
|
-
// MEMORY LEAK FIX: Clear table reference and button definition
|
|
4790
|
-
this.table = null;
|
|
4791
|
-
this.buttonDef = null;
|
|
4792
|
-
// Call parent ngOnDestroy (BaseComponent has cleanup)
|
|
4793
|
-
super.ngOnDestroy();
|
|
4794
|
-
}
|
|
4795
4439
|
static { this.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0__namespace, type: TableRowActionDirective, deps: [{ token: i0__namespace.Injector }, { token: TableComponent, optional: true }, { token: i4.Context, self: true }, { token: 'EXPLICIT_CONTEXT', optional: true }], target: i0__namespace.ɵɵFactoryTarget.Directive }); }
|
|
4796
4440
|
static { this.ɵdir = i0__namespace.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: TableRowActionDirective, isStandalone: true, selector: "[wmTableRowAction]", providers: [
|
|
4797
4441
|
i4.provideAsWidgetRef(TableRowActionDirective),
|
|
@@ -51,13 +51,6 @@ export class TableActionDirective extends BaseComponent {
|
|
|
51
51
|
this.buttonDef[key] = nv;
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
|
-
ngOnDestroy() {
|
|
55
|
-
// MEMORY LEAK FIX: Clear table and buttonDef references
|
|
56
|
-
this.table = null;
|
|
57
|
-
this.buttonDef = null;
|
|
58
|
-
// Call parent ngOnDestroy (BaseComponent has cleanup)
|
|
59
|
-
super.ngOnDestroy();
|
|
60
|
-
}
|
|
61
54
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TableActionDirective, deps: [{ token: i0.Injector }, { token: i1.TableComponent, optional: true }, { token: 'EXPLICIT_CONTEXT', optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
62
55
|
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: TableActionDirective, isStandalone: true, selector: "[wmTableAction]", providers: [
|
|
63
56
|
provideAsWidgetRef(TableActionDirective)
|
|
@@ -80,4 +73,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
80
73
|
}, {
|
|
81
74
|
type: Optional
|
|
82
75
|
}] }] });
|
|
83
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtYWN0aW9uLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9kYXRhL3RhYmxlL3NyYy90YWJsZS1hY3Rpb24vdGFibGUtYWN0aW9uLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQVUsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRTVFLE9BQU8sRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV4RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDckQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxXQUFXLENBQUM7OztBQUV0QyxNQUFNLGFBQWEsR0FBRyxFQUFDLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFDLENBQUM7QUFTckUsTUFBTSxPQUFPLG9CQUFxQixTQUFRLGFBQWE7YUFDNUMsb0JBQWUsR0FBRyxhQUFhLEVBQUUsQUFBbEIsQ0FBbUI7SUF3QnpDLFlBQVksR0FBYSxFQUFxQixLQUFxQixFQUEwQyxlQUFvQjtRQUM3SCxLQUFLLENBQUMsR0FBRyxFQUFFLGFBQWEsRUFBRSxlQUFlLENBQUMsQ0FBQztRQURELFVBQUssR0FBTCxLQUFLLENBQWdCO0lBRW5FLENBQUM7SUFFRCxjQUFjO1FBQ1YsSUFBSSxDQUFDLFNBQVMsR0FBRztZQUNiLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRztZQUNiLFdBQVcsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFO1lBQ3ZELElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDdkIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLElBQUksRUFBRTtZQUMvQixLQUFLLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLO1lBQzFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDN0IsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQzdCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLFVBQVUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDO1lBQy9CLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztZQUN6QixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sSUFBSSxFQUFFO1lBQ3pCLGdCQUFnQixFQUFFLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFO1lBQzdDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFO1NBQ2hELENBQUM7UUFDRixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxRQUFRO1FBQ0osS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELGdCQUFnQixDQUFDLEdBQUcsRUFBRSxFQUFFO1FBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUMxQixPQUFPO1FBQ1gsQ0FBQztRQUVELElBQUksR0FBRyxLQUFLLGNBQWMsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUNwQyxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzdCLENBQUM7SUFDTCxDQUFDOytHQXJFUSxvQkFBb0Isd0ZBeUJnRCxrQkFBa0I7bUdBekJ0RixvQkFBb0IsOERBSmxCO1lBQ1Asa0JBQWtCLENBQUMsb0JBQW9CLENBQUM7U0FDM0M7OzRGQUVRLG9CQUFvQjtrQkFQaEMsU0FBUzttQkFBQztvQkFDVCxVQUFVLEVBQUUsSUFBSTtvQkFDZCxRQUFRLEVBQUUsaUJBQWlCO29CQUMzQixTQUFTLEVBQUU7d0JBQ1Asa0JBQWtCLHNCQUFzQjtxQkFDM0M7aUJBQ0o7OzBCQTBCK0IsUUFBUTs7MEJBQWtDLE1BQU07MkJBQUMsa0JBQWtCOzswQkFBRyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEaXJlY3RpdmUsIEluamVjdCwgSW5qZWN0b3IsIE9uSW5pdCwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50LCBwcm92aWRlQXNXaWRnZXRSZWYgfSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNlJztcblxuaW1wb3J0IHsgcmVnaXN0ZXJQcm9wcyB9IGZyb20gJy4vdGFibGUtYWN0aW9uLnByb3BzJztcbmltcG9ydCB7IFRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi4vdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7aXNVbmRlZmluZWR9IGZyb20gXCJsb2Rhc2gtZXNcIjtcblxuY29uc3QgV0lER0VUX0NPTkZJRyA9IHt3aWRnZXRUeXBlOiAnd20tdGFibGUtYWN0aW9uJywgaG9zdENsYXNzOiAnJ307XG5cbkBEaXJlY3RpdmUoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnW3dtVGFibGVBY3Rpb25dJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgcHJvdmlkZUFzV2lkZ2V0UmVmKFRhYmxlQWN0aW9uRGlyZWN0aXZlKVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgVGFibGVBY3Rpb25EaXJlY3RpdmUgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBzdGF0aWMgaW5pdGlhbGl6ZVByb3BzID0gcmVnaXN0ZXJQcm9wcygpO1xuXG4gICAgYWNjZXNzcm9sZXM7XG4gICAgYWN0aW9uO1xuICAgIGNhcHRpb247XG4gICAgY2xhc3M7XG4gICAgZGlzYWJsZWQ7XG4gICAgZGlzcGxheU5hbWU7XG4gICAgaWNvbjtcbiAgICBpY29uY2xhc3M7XG4gICAgcG9zaXRpb247XG4gICAgc2hvcnRjdXRrZXk7XG4gICAgc2hvdztcbiAgICB0YWJpbmRleDtcbiAgICB0aXRsZTtcbiAgICBrZXk7XG4gICAgaHlwZXJsaW5rO1xuICAgIHRhcmdldDtcbiAgICBidXR0b25EZWY7XG4gICAgY29uZGl0aW9uYWxjbGFzcztcbiAgICBjb25kaXRpb25hbHN0eWxlO1xuXG4gICAgcHJpdmF0ZSBfcHJvcHNJbml0aWFsaXplZDogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKGluajogSW5qZWN0b3IsIEBPcHRpb25hbCgpIHB1YmxpYyB0YWJsZTogVGFibGVDb21wb25lbnQsIEBJbmplY3QoJ0VYUExJQ0lUX0NPTlRFWFQnKSBAT3B0aW9uYWwoKSBleHBsaWNpdENvbnRleHQ6IGFueSkge1xuICAgICAgICBzdXBlcihpbmosIFdJREdFVF9DT05GSUcsIGV4cGxpY2l0Q29udGV4dCk7XG4gICAgfVxuXG4gICAgcG9wdWxhdGVBY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuYnV0dG9uRGVmID0ge1xuICAgICAgICAgICAga2V5OiB0aGlzLmtleSxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiB0aGlzWydkaXNwbGF5LW5hbWUnXSB8fCB0aGlzLmNhcHRpb24gfHwgJycsXG4gICAgICAgICAgICBzaG93OiB0aGlzLnNob3csXG4gICAgICAgICAgICBjbGFzczogdGhpcy5jbGFzcyB8fCAnJyxcbiAgICAgICAgICAgIGljb25jbGFzczogdGhpcy5pY29uY2xhc3MgfHwgJycsXG4gICAgICAgICAgICB0aXRsZTogaXNVbmRlZmluZWQodGhpcy50aXRsZSkgPyAodGhpc1snZGlzcGxheS1uYW1lJ10gfHwgJycpIDogdGhpcy50aXRsZSxcbiAgICAgICAgICAgIGFjdGlvbjogdGhpcy5hY3Rpb24sXG4gICAgICAgICAgICBhY2Nlc3Nyb2xlczogdGhpcy5hY2Nlc3Nyb2xlcyxcbiAgICAgICAgICAgIHNob3J0Y3V0a2V5OiB0aGlzLnNob3J0Y3V0a2V5LFxuICAgICAgICAgICAgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWQsXG4gICAgICAgICAgICB0YWJpbmRleDogdGhpcy50YWJpbmRleCxcbiAgICAgICAgICAgIGljb246IHRoaXMuaWNvbixcbiAgICAgICAgICAgIHBvc2l0aW9uOiB0aGlzLnBvc2l0aW9uLFxuICAgICAgICAgICAgd2lkZ2V0VHlwZTogdGhpc1snd2lkZ2V0LXR5cGUnXSxcbiAgICAgICAgICAgIGh5cGVybGluazogdGhpcy5oeXBlcmxpbmssXG4gICAgICAgICAgICB0YXJnZXQ6IHRoaXMudGFyZ2V0IHx8ICcnLFxuICAgICAgICAgICAgY29uZGl0aW9uYWxjbGFzczogdGhpcy5jb25kaXRpb25hbGNsYXNzIHx8ICcnLFxuICAgICAgICAgICAgY29uZGl0aW9uYWxzdHlsZTogdGhpcy5jb25kaXRpb25hbHN0eWxlIHx8IHt9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuX3Byb3BzSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICB0aGlzLnBvcHVsYXRlQWN0aW9uKCk7XG4gICAgICAgIHRoaXMudGFibGUucmVnaXN0ZXJBY3Rpb25zKHRoaXMuYnV0dG9uRGVmKTtcbiAgICB9XG5cbiAgICBvblByb3BlcnR5Q2hhbmdlKGtleSwgbnYpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9wcm9wc0luaXRpYWxpemVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoa2V5ID09PSAnZGlzcGxheS1uYW1lJykge1xuICAgICAgICAgICAgdGhpcy5idXR0b25EZWYuZGlzcGxheU5hbWUgPSBudjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uRGVmW2tleV0gPSBudjtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|