@refinitiv-ui/efx-grid 6.0.67 → 6.0.69

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.
@@ -124,7 +124,6 @@ var ColumnDefinition = function(columnOption, hostGrid) {
124
124
  this._classes = [];
125
125
  this._requiredFields = [];
126
126
  this._children = [];
127
- this._parent = [];
128
127
 
129
128
  if(columnOption) {
130
129
  if(columnOption["parent"]) { // WARNING: This assume time series child, when have a parent
@@ -1030,8 +1029,9 @@ ColumnDefinition.prototype._setField = function(field, columnOption) {
1030
1029
  // We need to cache time series in field definition for improve performance of checking methond
1031
1030
  FieldDefinition.setFieldProperty(field, "timeSeries", FieldDefinition.isTimeSeries(field) ? true : false);
1032
1031
 
1033
- if(columnOption && columnOption["parent"]) {
1034
- FieldDefinition.setFieldProperty(field, "timeSeriesChild", true);
1032
+ var parentColDef = columnOption["parent"];
1033
+ if(columnOption && parentColDef) {
1034
+ FieldDefinition.setFieldProperty(field, "timeSeriesParent", parentColDef.getField());
1035
1035
  }
1036
1036
 
1037
1037
  this._updateContext("field", field);
@@ -280,7 +280,7 @@ FieldDefinition.isRealTimeField = function(field) {
280
280
  * @return {boolean}
281
281
  */
282
282
  FieldDefinition.isTimeSeriesChild = function(field) {
283
- return FieldDefinition.getFieldProperty(field, "timeSeriesChild") ? true : false;
283
+ return FieldDefinition.getFieldProperty(field, "timeSeriesParent") ? true : false;
284
284
  };
285
285
 
286
286
  /** @public
@@ -308,12 +308,12 @@ FieldDefinition.isTimeSeries = function (field) {
308
308
  [\w]+ => any field with string and value
309
309
  [\(] => open bucket (
310
310
  [\w\-\=\,]* => any property name and follow by = EX. SDATE=2011-11-11, PRIOD=123123
311
- EDATE\=+ => EDATE in bucket
311
+ (?:EDATE|SDATE ) => non-capturing group match EDATE or SDATE
312
312
  [\w\-\=\,]+ => another propertie param
313
313
  [\)]$ => end with only )
314
314
  i => for match both upper and lower cases
315
315
  */
316
- var timeSeriesRegex = /^TR.[\w]+[\(][\w\-\=\,]*EDATE\=+[\w\-\=\,]+[\)]$/i;
316
+ var timeSeriesRegex = /^TR\.[\w]+\([\w\-\=\,]*(?:EDATE|SDATE)\=+[\w\-\=\,]*[ \w]*\)$/i;
317
317
  return timeSeriesRegex.test(field);
318
318
  };
319
319
 
@@ -1142,7 +1142,7 @@ Grid.prototype.getConfigObject = function (gridOptions) {
1142
1142
  }
1143
1143
 
1144
1144
 
1145
- var i, len;
1145
+ var i, len, prevTimeSeriesField;
1146
1146
  len = this.getColumnCount();
1147
1147
  for (i = 0; i < len; ++i) {
1148
1148
  var column = columns[i];
@@ -1152,9 +1152,19 @@ Grid.prototype.getConfigObject = function (gridOptions) {
1152
1152
  var colDef = this.getColumnDefinition(i);
1153
1153
  // TODO: Update width and scalability changed by the extensions
1154
1154
  colDef.getConfigObject(column);
1155
- }
1155
+ var parentField = FieldDefinition.getFieldProperty(colDef.getField(), "timeSeriesParent");
1156
+ if(parentField && !prevTimeSeriesField) { // Assume first column of time series child to convert to time series parent
1157
+ prevTimeSeriesField = parentField;
1158
+ column.field = parentField;
1159
+ delete column.name; // WARNING: Name of child should be retained
1160
+ delete column.autoGenerated; // Convert to parent time series field
1161
+ }
1156
1162
 
1157
- obj.columns = columns = columns.filter(_byNonAutoGeneratedColumn);
1163
+ if(!parentField && prevTimeSeriesField) { // Handled duplicate parent time series field in difference position of column
1164
+ prevTimeSeriesField = null;
1165
+ }
1166
+ }
1167
+ obj.columns = columns = columns.filter(_byNonAutoGeneratedColumn); // Time series child will be filtered out
1158
1168
 
1159
1169
  if(this._topNode.style.overflow === "") {
1160
1170
  obj["scrollbar"] = false;
@@ -1409,52 +1419,49 @@ Grid.prototype.insertColumn = function (columnOption, idx) {
1409
1419
  this._grid.insertColumn(idx, configObj); // columnAdded is fired
1410
1420
  };
1411
1421
 
1412
- /** @private
1422
+ /**
1423
+ * @private
1413
1424
  * @param {Object} e snapshort change event object
1414
1425
  */
1415
1426
  Grid.prototype._updateTimeSeriesFields = function (e) {
1416
- var snapShortData = e.data;
1417
- var childFields;
1418
- for (var ric in snapShortData) {
1419
- childFields = snapShortData[ric];
1420
- this.setRicData(ric, snapShortData[ric]);
1427
+ var childField;
1428
+ var snapShotData = e.data;
1429
+ var childFields = {};
1430
+ for (var ric in snapShotData) {
1431
+ // childFields = snapShotData[ric];
1432
+ for (childField in snapShotData[ric]) {
1433
+ childFields[childField] = true; // Merge child fields to parent (Don't truth each ric it will be have some empty data)
1434
+ }
1435
+ this.setRicData(ric, snapShotData[ric]); // update cell data if exist
1421
1436
  }
1422
1437
  var parentField, field, colIndex, parentColDef, childColIndex;
1423
-
1424
- var firstField;
1425
- for (field in childFields) {
1426
- firstField = field;
1427
- break;
1428
- }
1429
-
1430
- parentField = e.childrenFieldToParent[firstField];
1431
- colIndex = this.getColumnIndex(parentField);
1432
- this._grid.setColumnVisibility(colIndex);
1433
- parentColDef = this._getColumnDefinition(colIndex);
1434
-
1435
-
1436
- var children = parentColDef.getChildren();
1437
- var i, len, childDef, childField;
1438
- len = children.length;
1439
- if(len > 0){
1440
- for (i = 0; i < len; i++) {
1441
- childDef = children[i];
1442
- childField = childDef.getField();
1443
- if(!childFields[childField]) {
1444
- this.removeColumn(childField);
1445
- }
1438
+ var parentMap = {}; // map parent time series field and their first child
1439
+ for (field in childFields) { // Warning: data change can be differ time series child field
1440
+ parentField = e.childrenFieldToParent[field];
1441
+ if(!parentMap[parentField]) {
1442
+ parentMap[parentField] = [field];
1443
+ } else {
1444
+ parentMap[parentField].push(field);
1446
1445
  }
1447
1446
  }
1448
1447
 
1449
- for (childField in childFields) {
1450
- parentField = e.childrenFieldToParent[childField];
1448
+ for (parentField in parentMap) { // WARNING: one dataChanged event can be multiple fields
1449
+ var childrenField = parentMap[parentField];
1451
1450
  colIndex = this.getColumnIndex(parentField);
1452
1451
  parentColDef = this._getColumnDefinition(colIndex);
1453
- childColIndex = this.getColumnIndex(childField);
1454
- if(childColIndex < 0) { // not found column index in view tried to clone from parent
1455
- this._cloneTimeSeriesColumn(parentColDef, childField, colIndex);
1456
- FieldDefinition.addTimeSeriesChild(parentField, childField);
1452
+ var i, len;
1453
+ len = childrenField.length;
1454
+ for (i = 0; i < len; i++) {
1455
+ childField = childrenField[i];
1456
+ childColIndex = this.getColumnIndex(childField);
1457
+ if(childColIndex < 0) { // not found column index in view tried to clone from parent
1458
+ colIndex = this.getColumnIndex(parentField);
1459
+ parentColDef = this._getColumnDefinition(colIndex);
1460
+ this._cloneTimeSeriesColumn(parentColDef, childField, colIndex);
1461
+ FieldDefinition.addTimeSeriesChild(parentField, childField); // TODO: time series child can be difference of response even if the input is the same, It should be dynamic add/remove fields
1462
+ }
1457
1463
  }
1464
+ this.removeColumn(parentField);
1458
1465
  }
1459
1466
 
1460
1467
  };
@@ -1474,12 +1481,12 @@ Grid.prototype._populateTimeSeriesChildren = function (colDef) {
1474
1481
  for (i = 0; i < colDefs.length; i++) {
1475
1482
  colDef = colDefs[i];
1476
1483
  idx = this.getColumnIndex(colDef);
1477
- this._grid.setColumnVisibility(idx); // hide parent field
1478
1484
 
1479
1485
  if(!colDef) {
1480
1486
  continue;
1481
1487
  }
1482
- var childFields = FieldDefinition.getTimeSeriesChildren(colDef.getField());
1488
+ var parentField = colDef.getField();
1489
+ var childFields = FieldDefinition.getTimeSeriesChildren(parentField);
1483
1490
  if(!childFields) { // not found time series field
1484
1491
  return;
1485
1492
  }
@@ -1504,18 +1511,14 @@ Grid.prototype._populateTimeSeriesChildren = function (colDef) {
1504
1511
  * @param {number} idx index of insertion column
1505
1512
  */
1506
1513
  Grid.prototype._cloneTimeSeriesColumn = function (parentColDef, childField, idx) {
1507
- var parentConfig, columnOption, obj, key;
1514
+ var parentConfig, columnOption;
1508
1515
  parentConfig = parentColDef.getConfigObject();
1509
- obj = {};
1510
- for (key in parentConfig) {
1511
- if(key !== "hidden") {
1512
- obj[key] = parentConfig[key];
1513
- }
1514
- }
1515
- columnOption = cloneObject(obj);
1516
+ columnOption = cloneObject(parentConfig);
1516
1517
  columnOption["field"] = childField.replace("TR.", ""); // We need to remove the 'TR' prefix from the field to avoid confusion with time series fields.
1517
1518
  columnOption["name"] = childField.split("_")[1].split("T")[0]; // Currently, response server format utc date ex "2022-11-23T00:00:00"
1518
1519
  columnOption["parent"] = parentColDef;
1520
+ columnOption["timeSeriesName"] = parentColDef.getName();
1521
+ columnOption["timeSeriesId"] = parentColDef.getId();
1519
1522
  this.insertColumn(columnOption, idx++);
1520
1523
 
1521
1524
  };
@@ -1581,10 +1584,6 @@ Grid.prototype.replaceColumn = function (columnOption, colRef) {
1581
1584
  }
1582
1585
 
1583
1586
  var colDef = this.getColumnDefinition(colIndex);
1584
- if(colDef && colDef.getChildren().length > 0) { // Parent time series field doesn't provide hidden property
1585
- colConfig["hidden"] = false;
1586
- }
1587
-
1588
1587
  if(colDef && colConfig.id == null) {
1589
1588
  colConfig.id = colDef.getId(); // retain ID
1590
1589
  }
@@ -1920,18 +1919,6 @@ Grid.prototype.removeColumn = function(colRef) {
1920
1919
  }
1921
1920
 
1922
1921
  var colDef = this.getColumnDefinition(colIndex);
1923
- var children = colDef.getChildren();
1924
- if(children) {
1925
- var len = children.length;
1926
- if(len > 0) { // remove time series child
1927
- var i, childDef;
1928
- for (i = 0; i < len; i++) {
1929
- childDef = children[i];
1930
- this.removeColumn(childDef);
1931
- }
1932
- colIndex = this.getColumnIndex(colRef); // children in parent will be remove the parent should be get new index
1933
- }
1934
- }
1935
1922
 
1936
1923
  if(!colDef.isRealTimeField()) {
1937
1924
  if(this._dc) {
@@ -2064,18 +2051,7 @@ Grid.prototype.hideColumn = function(colRef, hidden) {
2064
2051
  if(colIndex < 0) { // not found
2065
2052
  return;
2066
2053
  }
2067
- var colDef = this.getColumnDefinition(colIndex);
2068
- var children = colDef.getChildren();
2069
- var len = children.length;
2070
- if(len > 0) { // remove time series child, and parent shouldn't unHide
2071
- var i, childDef;
2072
- for (i = 0; i < len; i++) {
2073
- childDef = children[i];
2074
- this.hideColumn(childDef, hidden);
2075
- }
2076
- } else {
2077
- this._grid.hideColumn(colIndex, hidden);
2078
- }
2054
+ this._grid.hideColumn(colIndex, hidden);
2079
2055
 
2080
2056
  };
2081
2057
  /** Hide multiple columns at once. The hidden columns still occupy the same index.
@@ -8,8 +8,16 @@ declare class SnapshotFiller extends EventDispatcher {
8
8
 
9
9
  constructor();
10
10
 
11
+ public static readonly _mockAdc: any;
12
+
11
13
  public setRTK(rtk: any): void;
12
14
 
15
+ public static setMockAdc(str: string, value: any): void;
16
+
17
+ public static getMockAdc(str: string): any;
18
+
19
+ public static clearMockAdc(): void;
20
+
13
21
  public setADCOptions(adcOptions: Grid.ADCOptions|null): void;
14
22
 
15
23
  public addRic(ric: string): void;
@@ -50,6 +50,43 @@ SnapshotFiller.prototype.setRTK = function (rtk) {
50
50
  this._rtk = rtk;
51
51
  };
52
52
 
53
+ /**
54
+ * @public
55
+ * @type {Object}
56
+ */
57
+ SnapshotFiller._mockAdc = null;
58
+
59
+ /**
60
+ * @public
61
+ * @param {string} str
62
+ * @param {*} value
63
+ */
64
+ SnapshotFiller.setMockAdc = function(str, value) {
65
+ if(!SnapshotFiller._mockAdc) {
66
+ SnapshotFiller._mockAdc = {};
67
+ }
68
+ SnapshotFiller._mockAdc[str] = value;
69
+ };
70
+
71
+ /**
72
+ * @public
73
+ * @param {string} str
74
+ * @return {*}
75
+ */
76
+ SnapshotFiller.getMockAdc = function(str) {
77
+ if(!SnapshotFiller._mockAdc) {
78
+ return null;
79
+ }
80
+ return SnapshotFiller._mockAdc[str];
81
+ };
82
+
83
+ /**
84
+ * @public
85
+ */
86
+ SnapshotFiller.clearMockAdc = function() {
87
+ SnapshotFiller._mockAdc = null;
88
+ }
89
+
53
90
  /** @public
54
91
  * @param {Grid~ADCOptions} adcOptions ADC requesting level parameter options
55
92
  */
@@ -215,12 +252,19 @@ SnapshotFiller.prototype._onRequest = function () {
215
252
  "output": "Col,date|,Row,In|,va,T,NoEmptyTickers" // For customize output server, for more information please visit "https://confluence.refinitiv.com/display/ADC/Data+Cloud+Output+Format"
216
253
  };
217
254
  onSuccess = this._onRTKTimeSeriesSuccess.bind(this, timeSeriesFields);
218
- this._rtk.Data.Adc
255
+ var responseMockAdc = SnapshotFiller.getMockAdc(payload.formula);
256
+ if(responseMockAdc) {
257
+ setTimeout(function() {
258
+ onSuccess(responseMockAdc);
259
+ }, 10); // Mock Async operation
260
+ } else {
261
+ this._rtk.Data.Adc
219
262
  .request(payload)
220
263
  .then(onSuccess)
221
264
  .catch(function (err) {
222
265
  console.log(err);
223
266
  });
267
+ }
224
268
  }
225
269
 
226
270
  // Request normal adc field
@@ -421,61 +465,66 @@ SnapshotFiller.prototype._onRTKTimeSeriesSuccess = function (fields, serverResul
421
465
  if (!Array.isArray(data2D) || !Array.isArray(svHeaders)) {
422
466
  return; // TODO: Return Promise.reject(errMsg);
423
467
  }
424
-
425
- var headerLen = svHeaders.length;
426
-
427
- var headerDates = [];
428
- var i, j;
429
-
430
- for (i = 2; i < headerLen; i++) { // Start with 2 (Skip instrunment and date header)
431
- headerDates.push(svHeaders[i].v);
432
- }
433
-
434
- var ric, j, field;
435
- var len = data2D.length;
436
- var ricMap = {};
437
- var childrenFieldToParent = {};
438
-
468
+ // Extract header dates
469
+ var headerDates = svHeaders.slice(2).map(header => header.v);
470
+ // Create necessary variables
439
471
  var fileNameToTSField = {};
440
472
  var count = 0;
441
- for (let i = 1; i < len; i++) {
473
+ // Convert map to fieldMap
474
+ var data2DLength = data2D.length;
475
+ for (var i = 1; i < data2DLength; i++) {
442
476
  var dataRow = data2D[i];
443
477
  var fieldName = dataRow[1];
444
- if(!fileNameToTSField[fieldName]) {
478
+ if (!fileNameToTSField[fieldName]) {
445
479
  fileNameToTSField[fieldName] = fields[count++];
446
- }
480
+ }
447
481
  }
448
-
449
- // TODO: Freeze the data view before setting multiple data
450
- for (i = 1; i < len; i++) { // to skip column header index, use i = 1
482
+ // Process data and populate ricMap and childrenFieldToParent
483
+ var ricMap = {};
484
+ var childrenFieldToParent = {};
485
+ for (var i = 1; i < data2DLength; i++) {
451
486
  var dataRow = data2D[i];
452
- ric = dataRow[0];
453
- var fieldName = dataRow[1]; // ex. PRICECLOSE
454
- if(!ricMap[ric]) {
487
+ var ric = dataRow[0];
488
+ var fieldName = dataRow[1];
489
+
490
+ if (!ricMap[ric]) {
455
491
  ricMap[ric] = {};
456
492
  }
457
493
  var snapData = ricMap[ric];
458
- for (var k = 0; k < headerDates.length; k++) {
459
- field = fileNameToTSField[fieldName].replace("TR.", "") + "_" + headerDates[k]; // TODO: make support time series field definition cache
460
- childrenFieldToParent[field] = fileNameToTSField[fieldName];
461
- snapData[field] = dataRow[2 + k]; // Start with field value
494
+ if (headerDates.length === 1) {
495
+ // Time series with only 1 column, it will be a normal adc field
496
+ snapData[fileNameToTSField[fieldName]] = dataRow[2];
497
+ } else {
498
+ // Multiple columns, it will be a time series field
499
+ for (var k = 0; k < headerDates.length; k++) {
500
+ var field = fileNameToTSField[fieldName].replace("TR.", "") + "_" + headerDates[k];
501
+ var celLData = dataRow[2 + k];
502
+ if(celLData !== null) {
503
+ childrenFieldToParent[field] = fileNameToTSField[fieldName];
504
+ snapData[field] = celLData;
505
+ }
506
+ }
462
507
  }
463
508
  }
464
509
 
465
- // return result only ric that has update data
510
+ // Return result only for ric that has updated data
466
511
  var dataMapping = {};
467
- for (ric in ricMap) {
512
+ for (var ric in ricMap) {
468
513
  var obj = ricMap[ric];
469
514
  if (!isEmptyObject(obj)) {
470
515
  dataMapping[ric] = obj;
471
516
  }
472
517
  }
473
518
 
474
- this._dispatch("dataChanged", {
519
+ // Dispatch events based on the header length
520
+ var eventData = {
475
521
  data: dataMapping,
476
- timeSeries: true,
477
- childrenFieldToParent: childrenFieldToParent
478
- });
522
+ };
523
+ if (headerDates.length > 1) {
524
+ eventData.timeSeries = true;
525
+ eventData.childrenFieldToParent = childrenFieldToParent;
526
+ }
527
+ this._dispatch("dataChanged", eventData);
479
528
  };
480
529
 
481
530
  export { SnapshotFiller };
@@ -36,7 +36,6 @@ var ColumnGroupingPlugin = function ColumnGroupingPlugin(options) {
36
36
  t._requestApplyAddChildGroup = t._requestApplyAddChildGroup.bind(this);
37
37
  t._onPostSectionRender = t._onPostSectionRender.bind(t);
38
38
  t._onBeforeColumnBoundUpdate = t._onBeforeColumnBoundUpdate.bind(t);
39
- t._onPinningChanged = t._onPinningChanged.bind(this);
40
39
  t._groupDefs = new GroupDefinitions();
41
40
  if (options) {
42
41
  t.config({
@@ -84,10 +83,6 @@ ColumnGroupingPlugin.prototype._addingEvents = null;
84
83
  * @private
85
84
  */
86
85
  ColumnGroupingPlugin.prototype._legacyColumnGroups = null;
87
- /** @type {boolean}
88
- * @private
89
- */
90
- ColumnGroupingPlugin.prototype._inPinning = false;
91
86
  /** @type {!Object.<string, boolean>}
92
87
  * @description A map of selected groups
93
88
  * @private
@@ -211,6 +206,15 @@ ColumnGroupingPlugin._recursivelyFlatten = function (groupDef, groupDefs) {
211
206
  }
212
207
  };
213
208
 
209
+ /** Filter time series group out
210
+ * @private
211
+ * @param {Object} groupDef
212
+ * @return {boolean}
213
+ */
214
+ ColumnGroupingPlugin._isNotTimeSeriesGroup = function (groupDef) {
215
+ return groupDef.timeSeriesGroup ? false : true;
216
+ };
217
+
214
218
  /** @public
215
219
  * @return {string}
216
220
  */
@@ -247,7 +251,6 @@ ColumnGroupingPlugin.prototype.initialize = function (host, options) {
247
251
  host.listen("columnVisibilityChanged", this._onColumnChanged);
248
252
  host.listen("postSectionRender", this._onPostSectionRender);
249
253
  host.listen("beforeColumnBoundUpdate", this._onBeforeColumnBoundUpdate);
250
- host.listen("pinningChanged", this._onPinningChanged);
251
254
  }
252
255
  this.config(options);
253
256
  this._legacyColumnGroups = null;
@@ -301,7 +304,6 @@ ColumnGroupingPlugin.prototype.unload = function (host) {
301
304
  host.unlisten("columnRemoved", this._onColumnRemoved);
302
305
  host.unlisten("postSectionRender", this._onPostSectionRender);
303
306
  host.unlisten("beforeColumnBoundUpdate", this._onBeforeColumnBoundUpdate);
304
- host.unlisten("pinningChanged", this._onPinningChanged);
305
307
  if (!this._hosts.length) {
306
308
  if (this._rerenderTimerId) {
307
309
  clearTimeout(this._rerenderTimerId);
@@ -350,6 +352,7 @@ ColumnGroupingPlugin.prototype.getConfigObject = function (gridOptions) {
350
352
 
351
353
  // TODO: Handle legacyRender method that has been migrated
352
354
  var groupDefs = this.getGroupDefinitions();
355
+ groupDefs = groupDefs.filter(ColumnGroupingPlugin._isNotTimeSeriesGroup);
353
356
  if (groupDefs.length) {
354
357
  obj.columnGrouping = groupDefs;
355
358
  }
@@ -429,12 +432,10 @@ ColumnGroupingPlugin.prototype._migrateLegacyStructure = function (groupDefs, co
429
432
  * @param {number=} numRightColumn
430
433
  */
431
434
  ColumnGroupingPlugin.prototype._freezeColumn = function (frozenColIndex, numRightColumn) {
432
- this._inPinning = true;
433
435
  var hosts = this._hosts;
434
436
  for (var i = 0; i < hosts.length; i++) {
435
437
  hosts[i].freezeColumn(frozenColIndex, numRightColumn);
436
438
  }
437
- this._inPinning = false;
438
439
  };
439
440
  /** @private
440
441
  */
@@ -893,28 +894,38 @@ ColumnGroupingPlugin.prototype._requestApplyAddChildGroup = function (e) {
893
894
  };
894
895
 
895
896
  /** @private
896
- * @param {Object} e dispatching of columnAdded event object
897
- */
897
+ * @param {Object} e dispatching of columnAdded event object
898
+ */
898
899
  ColumnGroupingPlugin.prototype._applyTimeSeries = function (e) {
899
900
  this._addingTimerId = 0; // clear timer
900
901
  var addingEvents = this._addingEvents;
901
902
  this._addingEvents = [];
902
903
  if (addingEvents.length > 0) {
903
904
  var children = [];
904
- var tsParentDef;
905
+ var timeSeriesId, timeSeriesName;
906
+ var tsgChild = {};
905
907
  for (var i = 0; i < addingEvents.length; i++) {
908
+ // WARNING: addingEvents column can be difference group
906
909
  var addingEvent = addingEvents[i];
907
- tsParentDef = addingEvent.context.parent;
908
- if (tsParentDef) {
909
- var childIndex = addingEvent.colIndex; // Assume time series column ordered
910
- var childId = this.getColumnId(childIndex);
911
- children.push(childId);
910
+ timeSeriesName = addingEvent.context.timeSeriesName;
911
+ timeSeriesId = addingEvent.context.timeSeriesId;
912
+ var childIndex, childId;
913
+ if (!tsgChild[timeSeriesId]) {
914
+ tsgChild[timeSeriesId] = {
915
+ name: timeSeriesName,
916
+ children: []
917
+ };
918
+ childIndex = addingEvent.colIndex;
919
+ childId = this.getColumnId(childIndex);
920
+ tsgChild[timeSeriesId].children.push(childId);
921
+ } else {
922
+ childIndex = addingEvent.colIndex;
923
+ childId = this.getColumnId(childIndex);
924
+ tsgChild[timeSeriesId].children.push(childId);
912
925
  }
913
926
  }
914
- if (tsParentDef) {
915
- var parentName = tsParentDef.getName();
916
- var parentId = tsParentDef.getId();
917
- var groupId = "timeSerieGroup_" + parentId;
927
+ for (timeSeriesId in tsgChild) {
928
+ var groupId = "timeSerieGroup_" + timeSeriesId;
918
929
  var groupDef = this._groupDefs.getGroup(groupId);
919
930
  if (groupDef) {
920
931
  // add children time series field to parent
@@ -925,12 +936,14 @@ ColumnGroupingPlugin.prototype._applyTimeSeries = function (e) {
925
936
  // create new group
926
937
  this.addGroup({
927
938
  id: groupId,
928
- title: parentName,
929
- children: children
939
+ title: tsgChild[timeSeriesId].name,
940
+ children: tsgChild[timeSeriesId].children,
941
+ timeSeriesGroup: true // For remove it when getConfigObject
930
942
  });
931
943
  }
932
944
  }
933
945
  }
946
+
934
947
  this._requestApplyGrouping();
935
948
  };
936
949
 
@@ -979,22 +992,6 @@ ColumnGroupingPlugin.prototype._onColumnRemoved = function (e) {
979
992
  /** @private
980
993
  * @param {Object} e
981
994
  */
982
- ColumnGroupingPlugin.prototype._onPinningChanged = function (e) {
983
- if (!this._inPinning) {
984
- // Clear current pinning states
985
- var groupMap = this._visibleGroupMap;
986
- for (var groupId in groupMap) {
987
- var groupDef = groupMap[groupId];
988
- groupDef.leftPinned = false;
989
- groupDef.rightPinned = false;
990
- }
991
- this._verifyColumnPinning();
992
- this._applyPinning();
993
- }
994
- };
995
- /** @private
996
- * @param {Object} e
997
- */
998
995
  ColumnGroupingPlugin.prototype._onBeforeColumnBoundUpdate = function (e) {
999
996
  var selectedColumns = e.selectedColumns; // Hidden columns are included
1000
997
 
@@ -1392,6 +1392,58 @@ ColumnSelectionPlugin.prototype.dispatchSelectionChanged = function () {
1392
1392
  "grid": this._activeGrid
1393
1393
  });
1394
1394
  };
1395
+ /** @public
1396
+ * @description Select a specified column by a simulated mouse click input. This is for testing purpose.
1397
+ * @ignore
1398
+ * @param {number} colIndex
1399
+ * @param {Object=} mouseEvt
1400
+ */
1401
+
1402
+
1403
+ ColumnSelectionPlugin.prototype.selectByMouse = function (colIndex, mouseEvt) {
1404
+ if (!mouseEvt) {
1405
+ mouseEvt = {};
1406
+ }
1407
+
1408
+ if (colIndex >= 0) {
1409
+ var grid = this._activeGrid || this._hosts[0];
1410
+ var cell = grid ? grid.getCell("title", colIndex, 0) : null;
1411
+ mouseEvt.target = cell ? cell.getElement() : null;
1412
+ }
1413
+
1414
+ this._onClick(mouseEvt);
1415
+ };
1416
+ /** @public
1417
+ * @description Select a specified column by a keyboard input. This is for testing purpose.
1418
+ * @ignore
1419
+ * @param {number|string} keyCode Use "left" , "right" or "tab"
1420
+ * @param {Object=} keyboardEvt
1421
+ */
1422
+
1423
+
1424
+ ColumnSelectionPlugin.prototype.selectByKey = function (keyCode, keyboardEvt) {
1425
+ if (!keyboardEvt) {
1426
+ keyboardEvt = {};
1427
+ }
1428
+
1429
+ if (keyCode) {
1430
+ if (keyCode === "left") {
1431
+ keyboardEvt.keyCode = 37;
1432
+ } else if (keyCode === "right") {
1433
+ keyboardEvt.keyCode = 39;
1434
+ } else if (keyCode === "tab") {
1435
+ keyboardEvt.keyCode = 9;
1436
+ } else if (typeof keyCode === "number") {
1437
+ keyboardEvt.keyCode = keyCode;
1438
+ }
1439
+ }
1440
+
1441
+ keyboardEvt.preventDefault = function () {};
1442
+
1443
+ keyboardEvt.stopPropagation = function () {};
1444
+
1445
+ this._onKeyDown(keyboardEvt);
1446
+ };
1395
1447
 
1396
1448
  export default ColumnSelectionPlugin;
1397
1449
  export { ColumnSelectionPlugin, ColumnSelectionPlugin as ColumnSelection, ColumnSelectionPlugin as ColumnSelectionExtension };
@@ -299,14 +299,23 @@ ConditionalColoringPlugin.prototype.config = function (options) {
299
299
  ConditionalColoringPlugin.prototype.getConfigObject = function (gridOptions) {
300
300
  var obj = gridOptions || {};
301
301
 
302
+ var extOptions = obj["conditionalColoring"];
303
+ if(!extOptions) {
304
+ extOptions = obj["conditionalColoring"] = {};
305
+ }
306
+
302
307
  if(this._predefinedColors != null) {
303
- var extOptions = obj["conditionalColoring"];
304
- if(!extOptions) {
305
- extOptions = obj["conditionalColoring"] = {};
306
- }
307
308
  extOptions["predefinedColors"] = this._predefinedColors;
308
309
  }
309
310
 
311
+ if(this._blinkingDuration !== 250) {
312
+ extOptions["blinkingDuration"] = this._blinkingDuration;
313
+ }
314
+
315
+ if(this._insertionBlinking !== false) {
316
+ extOptions["insertionBlinking"] = this._insertionBlinking;
317
+ }
318
+
310
319
  var columns = obj.columns;
311
320
  if (!columns) {
312
321
  columns = obj.columns = [];