@refinitiv-ui/efx-grid 6.0.35 → 6.0.37

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/lib/core/dist/core.css +1 -1
  2. package/lib/core/dist/core.js +150 -6
  3. package/lib/core/dist/core.min.js +1 -1
  4. package/lib/core/es6/data/DataCache.js +20 -1
  5. package/lib/core/es6/grid/Core.js +25 -2
  6. package/lib/core/es6/grid/ILayoutGrid.js +4 -0
  7. package/lib/core/es6/grid/LayoutGrid.d.ts +4 -0
  8. package/lib/core/es6/grid/LayoutGrid.js +95 -3
  9. package/lib/core/es6/grid/VirtualizedLayoutGrid.js +6 -0
  10. package/lib/core/es6/tr-grid-theme.js +1 -1
  11. package/lib/grid/index.js +1 -1
  12. package/lib/grid/themes/base.less +1 -0
  13. package/lib/grid/themes/halo/dark/efx-grid.js +1 -1
  14. package/lib/grid/themes/halo/dark/es5/all-elements.js +1 -1
  15. package/lib/grid/themes/halo/efx-grid.less +2 -0
  16. package/lib/grid/themes/halo/light/efx-grid.js +1 -1
  17. package/lib/grid/themes/halo/light/es5/all-elements.js +1 -1
  18. package/lib/grid/themes/solar/charcoal/efx-grid.js +1 -1
  19. package/lib/grid/themes/solar/charcoal/es5/all-elements.js +1 -1
  20. package/lib/grid/themes/solar/pearl/efx-grid.js +1 -1
  21. package/lib/grid/themes/solar/pearl/es5/all-elements.js +1 -1
  22. package/lib/rt-grid/dist/rt-grid.js +302 -107
  23. package/lib/rt-grid/dist/rt-grid.min.js +1 -1
  24. package/lib/rt-grid/es6/FieldDefinition.js +0 -41
  25. package/lib/rt-grid/es6/Grid.js +4 -5
  26. package/lib/rt-grid/es6/RowDefinition.d.ts +2 -2
  27. package/lib/rt-grid/es6/RowDefinition.js +102 -52
  28. package/lib/tr-grid-column-stack/es6/ColumnStack.d.ts +1 -0
  29. package/lib/tr-grid-column-stack/es6/ColumnStack.js +579 -607
  30. package/lib/tr-grid-range-bar/es6/RangeBar.d.ts +4 -1
  31. package/lib/tr-grid-range-bar/es6/RangeBar.js +99 -39
  32. package/lib/tr-grid-util/es6/GroupDefinitions.d.ts +7 -1
  33. package/lib/tr-grid-util/es6/GroupDefinitions.js +39 -3
  34. package/lib/tr-grid-util/es6/jet/MockQuotes2.js +7 -0
  35. package/lib/types/es6/ColumnStack.d.ts +1 -0
  36. package/lib/types/es6/Core/grid/Core.d.ts +12 -0
  37. package/lib/types/es6/Core/grid/LayoutGrid.d.ts +4 -0
  38. package/lib/types/es6/RealtimeGrid/RowDefinition.d.ts +2 -2
  39. package/lib/versions.json +3 -3
  40. package/package.json +1 -1
@@ -9380,7 +9380,8 @@ DataCache_DataCache.prototype._insertRic = function (subId, ric, values) {
9380
9380
  // We cannot cache event arguments because user may want to collect all the updates
9381
9381
  this._onADCForNewRic(subId, ric);
9382
9382
 
9383
- if (!this.getRowData(rid)) { // Ensure that we have subscription id and ric from Quotes2
9383
+ var rowData = this.getRowData(rid);
9384
+ if (!rowData) { // Ensure that we have subscription id and ric from Quotes2
9384
9385
  var tmp = values;
9385
9386
 
9386
9387
  values = {}; // Clone a new object for duplicated ric
@@ -9391,6 +9392,11 @@ DataCache_DataCache.prototype._insertRic = function (subId, ric, values) {
9391
9392
 
9392
9393
  values["SUB_ID"] = subId;
9393
9394
  values["RIC"] = ric;
9395
+ } else {
9396
+ var rowDef = rowData["ROW_DEF"];
9397
+ if(rowDef && rowDef.isChain()){
9398
+ values["SUB_ID"] = subId;
9399
+ }
9394
9400
  }
9395
9401
 
9396
9402
  this.setRowData(rid, values);
@@ -9427,6 +9433,12 @@ DataCache_DataCache.prototype._onQ2SubAdded = function (e) {
9427
9433
  var sub = subs[i];
9428
9434
  var ric = sub["ric"];
9429
9435
 
9436
+ // chain subId fires twice, one with "_ci_" and one without "_ci_"
9437
+ // the subId with "_ci_" should be ignore
9438
+ if(sub["id"].indexOf("_ci_") >= 0){
9439
+ continue;
9440
+ }
9441
+
9430
9442
  this.addSubscription(sub, ric);
9431
9443
 
9432
9444
  if (duplicateSubIds) { // There will be no network request for duplicate subs, and hence we need to update the data from our cache
@@ -9451,6 +9463,13 @@ DataCache_DataCache.prototype._onQ2SubRemoved = function (e) {
9451
9463
 
9452
9464
  for (var i = 0; i < len; ++i) {
9453
9465
  var sub = subs[i];
9466
+
9467
+ // chain subId fires twice, one with "_ci_" and one without "_ci_"
9468
+ // the subId with "_ci_" should be ignore
9469
+ if(sub["id"].indexOf("_ci_") >= 0){
9470
+ continue;
9471
+ }
9472
+
9454
9473
  this.removeSubscription(sub);
9455
9474
  }
9456
9475
  };
@@ -13176,9 +13195,10 @@ DataTable._proto = DataTable.prototype;
13176
13195
  * @property {Array.<string>=} fields=null Field that corresponds to the given static values
13177
13196
  * @property {boolean=} asChain=false The given ric will be treated as a chain
13178
13197
  * @property {string=} chainRic="" RIC to be used for chain request (overiding ric property)
13179
- * @property {boolean=} collapsed=false Chain is expanded by default
13198
+ * @property {boolean=} collapsed=true Chain is collapsed by default
13180
13199
  * @property {(string|null)=} label=null
13181
13200
  * @property {boolean=} hidden=true When this row is hidden
13201
+ * @pro // realTime
13182
13202
  */
13183
13203
 
13184
13204
  /** @typedef {Object} RowDefinition~RowTypes
@@ -13254,18 +13274,18 @@ RowDefinition.prototype._ric = ""; // Contains no 0#
13254
13274
  * @private
13255
13275
  */
13256
13276
  RowDefinition.prototype._permId = "";
13257
- /** @type {string}
13258
- * @private
13259
- */
13260
- RowDefinition.prototype._displayText = "";
13261
13277
  /** @type {string|null}
13262
13278
  * @private
13263
13279
  */
13264
13280
  RowDefinition.prototype._label = null; // Label overrides _ric and _displayText
13281
+ /** @type {boolean|null}
13282
+ * @private
13283
+ */
13284
+ RowDefinition.prototype._isChain = null;
13265
13285
  /** @type {boolean}
13266
13286
  * @private
13267
13287
  */
13268
- RowDefinition.prototype._isChain = false;
13288
+ RowDefinition.prototype._realTime = true;
13269
13289
 
13270
13290
  /** @type {string}
13271
13291
  * @private
@@ -13289,10 +13309,10 @@ RowDefinition.prototype._view = null;
13289
13309
  */
13290
13310
  RowDefinition.prototype._subId = "";
13291
13311
 
13292
- /** @type {boolean}
13312
+ /** @type {boolean|null}
13293
13313
  * @private
13294
13314
  */
13295
- RowDefinition.prototype._expanded = false;
13315
+ RowDefinition.prototype._expanded = null;
13296
13316
  /** @type {boolean}
13297
13317
  * @private
13298
13318
  */
@@ -13380,18 +13400,19 @@ RowDefinition.prototype.initialize = function(rowOptions) {
13380
13400
  return;
13381
13401
  }
13382
13402
 
13383
- var val = rowOptions["ric"];
13403
+ var val = rowOptions["permId"];
13384
13404
  if(val != null) {
13385
- this._ric = val;
13405
+ this._permId = val;
13386
13406
  }
13387
- val = rowOptions["permId"];
13407
+ val = rowOptions["ric"];
13388
13408
  if(val != null) {
13389
- this._permId = val;
13409
+ this._ric = val;
13390
13410
  }
13391
- if(this._ric || this._permId){
13392
- this.setContent(this._ric, this._permId); // this._dataId is modified
13411
+ val = rowOptions["label"];
13412
+ // eslint-disable-next-line no-undefined
13413
+ if(val !== undefined) { // Empty string and null are allowed
13414
+ this._label = val;
13393
13415
  }
13394
-
13395
13416
  val = rowOptions["chainRic"];
13396
13417
  if(val != null) {
13397
13418
  this._chainRic = val;
@@ -13403,26 +13424,40 @@ RowDefinition.prototype.initialize = function(rowOptions) {
13403
13424
  }
13404
13425
 
13405
13426
  val = rowOptions["asChain"];
13406
- if(val) {
13407
- this._isChain = true;
13408
- this._expanded = !rowOptions["collapsed"];
13409
- } else if(this._isChain) {
13410
- var collapsed = rowOptions["collapsed"];
13411
- if(collapsed != null) {
13412
- this._expanded = !collapsed;
13413
- }
13427
+ if(val !== null) {
13428
+ this._isChain = val;
13414
13429
  }
13415
13430
 
13416
- val = rowOptions["label"];
13417
- // eslint-disable-next-line no-undefined
13418
- if(val !== undefined) { // Empty string and null are allowed
13419
- this._label = val;
13431
+ val = rowOptions["realTime"];
13432
+ if(val != null) {
13433
+ this._realTime = val;
13420
13434
  }
13421
13435
 
13436
+ val = rowOptions["collapsed"];
13437
+ if(val != null){
13438
+ this._expanded = !val;
13439
+ }
13422
13440
  val = rowOptions["keepModel"];
13423
13441
  if(val) {
13424
13442
  this._userModel = rowOptions;
13425
13443
  }
13444
+
13445
+ var expanded = this._expanded;
13446
+ var symbol = this._ric || this._chainRic;
13447
+ var asChain = rowOptions["asChain"] || !!this._chainRic;
13448
+ if(this._ric && this._ric.indexOf("0#") >= 0){
13449
+ asChain = true;
13450
+ expanded = true;
13451
+ }
13452
+ if(rowOptions["asChain"] === false){
13453
+ asChain = false;
13454
+ }
13455
+ if(rowOptions["collapsed"] === true){
13456
+ expanded = false;
13457
+ }
13458
+ if(symbol || this._permId){
13459
+ this.setContent(symbol, this._permId, asChain, expanded); // this._dataId is modified
13460
+ }
13426
13461
  };
13427
13462
  /** @private
13428
13463
  * @param {!Object} rowOptions
@@ -13432,7 +13467,6 @@ RowDefinition.prototype._initializeAsConstituent = function(rowOptions) {
13432
13467
  var parentDef = /** @type{RowDefinition} */(rowOptions["parent"]);
13433
13468
  if(this.setParent(parentDef)) {
13434
13469
  this._dataId = /** @type{string} */(rowOptions["dataId"]); // Constituent will have the same subId as its parent but with different ric
13435
- this._displayText = this._ric = /** @type{string} */(rowOptions["ric"]);
13436
13470
 
13437
13471
  this._dc = parentDef._dc; // Parent chain must have data cache
13438
13472
  if(this._dc) {
@@ -13451,9 +13485,12 @@ RowDefinition.prototype._initializeAsConstituent = function(rowOptions) {
13451
13485
  /** @public
13452
13486
  * @param {string} userInput RIC
13453
13487
  * @param {string=} permId=null Organization PermId, which use for getting ADC data for private company
13488
+ * @param {boolean=} asChain
13489
+ * @param {boolean=} expanded
13490
+ * @param {boolean=} realTime
13454
13491
  * @return {boolean} True if there is any change otherwise false
13455
13492
  */
13456
- RowDefinition.prototype.setContent = function(userInput, permId) {
13493
+ RowDefinition.prototype.setContent = function(userInput, permId, asChain, expanded) {
13457
13494
  if(this._autoGenerated) { // AutoGenerated RowDefinition cannot be changed by user input
13458
13495
  return false;
13459
13496
  }
@@ -13467,10 +13504,7 @@ RowDefinition.prototype.setContent = function(userInput, permId) {
13467
13504
  var dirty = (this._userInput !== userInput);
13468
13505
  if(this._permId !== permId){
13469
13506
  this._permId = permId || "";
13470
- if(!userInput){
13471
- this._displayText = this._permId;
13472
- dirty = true;
13473
- }
13507
+ dirty = true;
13474
13508
  }
13475
13509
  if(!dirty) {
13476
13510
  return false;
@@ -13479,34 +13513,44 @@ RowDefinition.prototype.setContent = function(userInput, permId) {
13479
13513
  this.unsubscribeForUpdates();
13480
13514
  this.resetUpdates(); // Remove all previous data updates because a new content is just entered
13481
13515
 
13516
+ // TODO: handle changing between chain and ric row
13482
13517
  this._userInput = userInput;
13483
13518
  if(this._userInput.charAt(0) === "'") { // This is a row header
13484
- this._displayText = this._userInput.substr(1);
13485
13519
  this._ric = this._chainRic = ""; // No ric for realtime request
13486
13520
  } else {
13487
13521
  if(this._userInput.indexOf("0#") >= 0) {
13488
- this._ric = this._userInput.replace("0#", "");
13489
- this._isChain = this._expanded = true; // Only chain can be expanded by 0# TODO: RIC with 0# is not necessarily a chain
13490
- this._chainRic = this._userInput;
13491
- if(this._view) {
13492
- this._view.setSegmentSeparator(this._rowId);
13493
- this.expandChain();
13522
+ if(asChain === false){
13523
+ this._ric = this._userInput;
13524
+ } else {
13525
+ this._ric = expanded ? this._userInput.replace("0#", "") : this._userInput;
13526
+ this._expanded = expanded;
13527
+ this._isChain = true; // Only chain can be expanded by 0#
13528
+ this._chainRic = this._userInput;
13529
+ if(this._view) {
13530
+ this._view.setSegmentSeparator(this._rowId);
13531
+ this.expandChain();
13532
+ }
13494
13533
  }
13495
13534
  } else {
13496
13535
  this._ric = this._userInput;
13497
- this._chainRic = "";
13536
+ if(asChain){
13537
+ this._isChain = true;
13538
+ }
13498
13539
  }
13499
- this._displayText = this._ric; // No 0#
13500
13540
  }
13501
13541
 
13502
13542
  this._dataId = this._rowId + this.getSymbol(); // JET/RTK will generate data id to be rowId (given from this rowDef) + ric;
13503
13543
 
13504
- // This will work for runtime ric modification, but not for first initilization.
13544
+
13505
13545
  if(!this.subscribeForUpdates()) {
13506
- // Avoid losing the ROW_DEF pointer.
13507
- var rowData = {};
13508
- rowData[ROW_DEF] = this; // Enable tracking back and updating data
13509
- this.setRowData(rowData);
13546
+ if(this._dc) {
13547
+ // This will work for runtime ric modification, but not for first initilization.
13548
+ // Avoid losing the ROW_DEF pointer.
13549
+ var rowData = {};
13550
+ rowData[ROW_DEF] = this; // Enable tracking back and updating data
13551
+ rowData["X_RIC_NAME"] = this.getDisplayText();
13552
+ this.setRowData(rowData);
13553
+ }
13510
13554
  }
13511
13555
  return true;
13512
13556
  };
@@ -13527,6 +13571,16 @@ RowDefinition.prototype.getConfigObject = function(rowOptions) {
13527
13571
  obj["ric"] = val;
13528
13572
  }
13529
13573
 
13574
+ // The user passed a single quote (') case
13575
+ if(!this._ric && this._userInput.charAt(0) === "'") {
13576
+ obj["ric"] = this._userInput;
13577
+ }
13578
+
13579
+ val = this._realTime;
13580
+ if(val !== true) {
13581
+ obj["realTime"] = val;
13582
+ }
13583
+
13530
13584
  val = this._permId;
13531
13585
  if(val) {
13532
13586
  obj["permId"] = val;
@@ -13548,12 +13602,12 @@ RowDefinition.prototype.getConfigObject = function(rowOptions) {
13548
13602
  }
13549
13603
 
13550
13604
  val = this._isChain;
13551
- if(val) {
13605
+ if(val != null) {
13552
13606
  obj["asChain"] = val;
13553
13607
  }
13554
13608
 
13555
13609
  val = this._expanded;
13556
- if(val) {
13610
+ if(val != null) {
13557
13611
  obj["collapsed"] = !val;
13558
13612
  }
13559
13613
 
@@ -13651,6 +13705,7 @@ RowDefinition.prototype.setDataSource = function(dataSource) {
13651
13705
  if(!rowData) {
13652
13706
  rowData = {};
13653
13707
  rowData[ROW_DEF] = this; // Enable tracking back and updating data
13708
+ rowData["X_RIC_NAME"] = this.getDisplayText();
13654
13709
  this.setRowData(rowData); // TODO: This will dispatch dataChanged event and caused update to be added, which should not happen
13655
13710
  }
13656
13711
 
@@ -13793,7 +13848,16 @@ RowDefinition.prototype.getDisplayText = function() {
13793
13848
  if(this._label != null) { // Empty string is allowed
13794
13849
  return this._label;
13795
13850
  }
13796
- return this._displayText;
13851
+
13852
+ if(this._ric) {
13853
+ return this._ric;
13854
+ }
13855
+
13856
+ if(this._permId) {
13857
+ return this._permId;
13858
+ }
13859
+
13860
+ return this._userInput;
13797
13861
  };
13798
13862
  /** @public
13799
13863
  * @return {string|null}
@@ -13857,13 +13921,18 @@ RowDefinition.prototype.isRealTimeRow = function() {
13857
13921
  if(!this.getRic()) { // Empty row
13858
13922
  return false;
13859
13923
  }
13860
- if(this.isRowHeader()) {
13924
+ if(!this._realTime) {
13861
13925
  return false;
13862
13926
  }
13927
+
13863
13928
  if(this._autoGenerated) { // Constituents in chain are not real-time row
13864
13929
  return false;
13865
13930
  }
13866
13931
 
13932
+ if(this.isRowHeader()) {
13933
+ return false;
13934
+ }
13935
+
13867
13936
  return true;
13868
13937
  };
13869
13938
 
@@ -13892,7 +13961,7 @@ RowDefinition.prototype.subscribeForUpdates = function() {
13892
13961
  if(prevRowData) {
13893
13962
  this._dc.setRowData(this._dataId, prevRowData); // TODO: We may need to create a new object instead of prevRowData for data correctness
13894
13963
  } else {
13895
- this._dc.setRowData(this._dataId, {"X_RIC_NAME": this.getSymbol(), "ROW_DEF": this}); // Trigger data update immediately
13964
+ this._dc.setRowData(this._dataId, {"X_RIC_NAME": this.getDisplayText(), "ROW_DEF": this}); // Trigger data update immediately
13896
13965
  }
13897
13966
  return true;
13898
13967
  };
@@ -14353,40 +14422,6 @@ var SYNAPSE_URL =
14353
14422
  + 'hits=1' // search only 1 result
14354
14423
  + '&profile=' + encodeURIComponent('Field Selector');
14355
14424
 
14356
- /** @function
14357
- * @private
14358
- * @param {Object} e
14359
- */
14360
- function xRicNameRenderer(e) {
14361
- e.cell.setContent(e.rowDef.getDisplayText());
14362
- }
14363
- /** @function
14364
- * @private
14365
- * @param {RowDefinition} rowA
14366
- * @param {RowDefinition} rowB
14367
- * @param {number} order
14368
- * @returns {number}
14369
- */
14370
- function xRicNameSorter(rowA, rowB, order) {
14371
- var A = rowA.getDisplayText();
14372
- var B = rowB.getDisplayText();
14373
- if(A === B) {
14374
- return 0;
14375
- }
14376
- if(!A) {
14377
- return 1;
14378
- }
14379
- if(!B) {
14380
- return -1;
14381
- }
14382
- if(A < B) {
14383
- return -order;
14384
- }
14385
-
14386
- return order;
14387
- }
14388
-
14389
-
14390
14425
  /* @namespace */
14391
14426
  var FieldDefinition = {};
14392
14427
 
@@ -14394,13 +14429,6 @@ var FieldDefinition = {};
14394
14429
  * @private
14395
14430
  */
14396
14431
  FieldDefinition._defs = {
14397
- "X_RIC_NAME": {
14398
- name: "RIC",
14399
- IsRealtimeField: false,
14400
- width: 100,
14401
- binding: xRicNameRenderer,
14402
- sortLogic: xRicNameSorter
14403
- },
14404
14432
  "CF_NAME": {
14405
14433
  name: "Name",
14406
14434
  rank: 2800003,
@@ -16795,6 +16823,13 @@ GroupDefinitions.prototype.getGroups = function () {
16795
16823
  }
16796
16824
  return groupDefs;
16797
16825
  };
16826
+ /** Get array of all existing group ids
16827
+ * @public
16828
+ * @return {!Array.<string>}
16829
+ */
16830
+ GroupDefinitions.prototype.getGroupIds = function () {
16831
+ return Object.keys(this._groupMap);
16832
+ };
16798
16833
  /** @public
16799
16834
  * @return {!Object.<string, Object>}
16800
16835
  */
@@ -16901,7 +16936,18 @@ GroupDefinitions.prototype.getParentId = function (childId, groupLevel) {
16901
16936
  return parentId || "";
16902
16937
  };
16903
16938
 
16904
-
16939
+ /** Remove all existing group definitions
16940
+ * @public
16941
+ * @return {boolean}
16942
+ */
16943
+ GroupDefinitions.prototype.removeAllGroups = function () {
16944
+ for(var groupId in this._groupMap) { // eslint-disable-line
16945
+ this._groupMap = {};
16946
+ this._childToParent = {};
16947
+ return true;
16948
+ }
16949
+ return false;
16950
+ };
16905
16951
  /** Remove all existing group definitions and replace them with the given definitions.
16906
16952
  * @public
16907
16953
  * @param {Array.<Object>=} groupDefs Use null or empty array to remove all existing groups
@@ -17046,9 +17092,10 @@ GroupDefinitions.prototype.hasGroupChild = function (parentId, childId) {
17046
17092
  /** @public
17047
17093
  * @param {string} parentId Group id
17048
17094
  * @param {string} childId
17095
+ * @param {number=} position
17049
17096
  * @return {boolean}
17050
17097
  */
17051
- GroupDefinitions.prototype.addGroupChild = function (parentId, childId) {
17098
+ GroupDefinitions.prototype.addGroupChild = function (parentId, childId, position) {
17052
17099
  var groupDef = this._groupMap[parentId];
17053
17100
 
17054
17101
  if(childId && groupDef) {
@@ -17061,7 +17108,11 @@ GroupDefinitions.prototype.addGroupChild = function (parentId, childId) {
17061
17108
  if(childDef) {
17062
17109
  childDef.parentId = parentId;
17063
17110
  }
17064
- chdr.push(childId);
17111
+ if(position != null && position >= 0) {
17112
+ chdr.splice(position, 0, childId);
17113
+ } else {
17114
+ chdr.push(childId);
17115
+ }
17065
17116
  return true;
17066
17117
  }
17067
17118
  }
@@ -17170,6 +17221,18 @@ GroupDefinitions.prototype.setGroupChildren = function (groupId, newChildList) {
17170
17221
  }
17171
17222
  return false;
17172
17223
  };
17224
+
17225
+ /** @public
17226
+ * @param {string} groupId
17227
+ * @return {string}
17228
+ */
17229
+ GroupDefinitions.prototype.getGroupName = function (groupId) {
17230
+ var groupDef = this._groupMap[groupId];
17231
+ if(groupDef) {
17232
+ return groupDef.name || "";
17233
+ }
17234
+ return "";
17235
+ };
17173
17236
  /** @public
17174
17237
  * @param {string} groupId
17175
17238
  * @param {string} groupName
@@ -17186,6 +17249,7 @@ GroupDefinitions.prototype.setGroupName = function (groupId, groupName) {
17186
17249
 
17187
17250
  return false;
17188
17251
  };
17252
+
17189
17253
  /* harmony default export */ var es6_GroupDefinitions = (GroupDefinitions);
17190
17254
 
17191
17255
 
@@ -20347,6 +20411,10 @@ ILayoutGrid.prototype.calculateColumnBounds = function (lftIdx, rgtIdx, outPosit
20347
20411
  * @param {number=} topPx Top position of bound
20348
20412
  */
20349
20413
  ILayoutGrid.prototype.updateColumnBounds = function (posAry, noBorderAry, topPx) {};
20414
+ /** @public
20415
+ * @ignore
20416
+ */
20417
+ ILayoutGrid.prototype.updateColumnSeparators = function () {};
20350
20418
 
20351
20419
  /* harmony default export */ var grid_ILayoutGrid = (ILayoutGrid);
20352
20420
 
@@ -24336,7 +24404,14 @@ LayoutGrid.prototype._colSelDirty = false;
24336
24404
  * @private
24337
24405
  */
24338
24406
  LayoutGrid.prototype._hscrollbar = null;
24339
-
24407
+ /** @type {Element}
24408
+ * @private
24409
+ */
24410
+ LayoutGrid.prototype._leftColumnSeparator = null;
24411
+ /** @type {Element}
24412
+ * @private
24413
+ */
24414
+ LayoutGrid.prototype._rightColumnSeparator = null;
24340
24415
 
24341
24416
  /**
24342
24417
  * {@link ElementWrapper#dispose}
@@ -26303,8 +26378,7 @@ LayoutGrid.prototype.selectColumn = function (colIndex, selected) {
26303
26378
 
26304
26379
  var boundLayer = this._boundLayer;
26305
26380
  if(!boundLayer) {
26306
- boundLayer = this._boundLayer = document.createElement("div");
26307
- boundLayer.className = "cover-layer";
26381
+ this._initBoundLayer();
26308
26382
  this._updateLayers();
26309
26383
  }
26310
26384
  }
@@ -26476,6 +26550,92 @@ LayoutGrid.prototype.updateColumnBounds = function (posAry, noBorderAry, topPx)
26476
26550
  }
26477
26551
  };
26478
26552
 
26553
+ /** @public
26554
+ */
26555
+ LayoutGrid.prototype.updateColumnSeparators = function () {
26556
+ var pinnedLeftCount = this._hscrollbar.getPinnedLeftColumnCount();
26557
+ var pinnedRightCount = this._hscrollbar.getPinnedRightColumnCount();
26558
+ if ((pinnedLeftCount || pinnedRightCount) && !this._boundLayer) {
26559
+ this._initBoundLayer();
26560
+ }
26561
+
26562
+ var isScrollbarActive = false;
26563
+ if(this._hscrollbar) {
26564
+ isScrollbarActive = this._hscrollbar.isActive();
26565
+ }
26566
+
26567
+ var boundLayer = this._boundLayer;
26568
+
26569
+ var colSeparator = this._leftColumnSeparator;
26570
+ if (isScrollbarActive && pinnedLeftCount) {
26571
+ if (!colSeparator) {
26572
+ colSeparator = this._leftColumnSeparator = this._createColumnSeparator();
26573
+ }
26574
+ if (!colSeparator.parentNode) {
26575
+ if (boundLayer.children.length) {
26576
+ boundLayer.insertBefore(colSeparator, boundLayer.children[0]);
26577
+ } else {
26578
+ boundLayer.appendChild(colSeparator);
26579
+ }
26580
+ }
26581
+
26582
+ var rightPos = this._trackX.getLaneStart(pinnedLeftCount);
26583
+ colSeparator.style.left = (rightPos - 1) + "px";
26584
+ colSeparator.style.height = this._trackY.getTrackSize() + "px";
26585
+ } else {
26586
+ if (colSeparator && colSeparator.parentNode) {
26587
+ this._boundLayer.removeChild(colSeparator);
26588
+ }
26589
+ }
26590
+
26591
+ colSeparator = this._rightColumnSeparator;
26592
+ if (isScrollbarActive && pinnedRightCount) {
26593
+ if (!colSeparator) {
26594
+ colSeparator = this._rightColumnSeparator = this._createColumnSeparator();
26595
+ }
26596
+
26597
+ if (!colSeparator.parentNode) {
26598
+ if (boundLayer.children.length) {
26599
+ boundLayer.insertBefore(colSeparator, boundLayer.children[0]);
26600
+ } else {
26601
+ boundLayer.appendChild(colSeparator);
26602
+ }
26603
+ }
26604
+ var colCount = this.getColumnCount();
26605
+ var colWidth = this._trackX.getLaneEnd(colCount - 1) - this._trackX.getLaneStart(colCount - pinnedRightCount);
26606
+ var viewSize = this._getViewSize();
26607
+
26608
+ colSeparator.style.left = (viewSize - colWidth - this._rightSpaceSize) + "px";
26609
+ colSeparator.style.height = this._trackY.getTrackSize() + "px";
26610
+ } else {
26611
+ if (colSeparator && colSeparator.parentNode) {
26612
+ this._boundLayer.removeChild(colSeparator);
26613
+ }
26614
+ }
26615
+ };
26616
+
26617
+ /** @private
26618
+ * @return {Element}
26619
+ */
26620
+ LayoutGrid.prototype._createColumnSeparator = function() {
26621
+ var colSeparator = document.createElement("div");
26622
+ colSeparator.classList.add("column-separator");
26623
+ return colSeparator;
26624
+ };
26625
+
26626
+ /** @private
26627
+ * @return {Element}
26628
+ */
26629
+ LayoutGrid.prototype._initBoundLayer = function () {
26630
+ var boundLayer = this._boundLayer;
26631
+ if(!boundLayer) {
26632
+ boundLayer = this._boundLayer = document.createElement("div");
26633
+ boundLayer.className = "cover-layer";
26634
+ this._element.appendChild(boundLayer);
26635
+ }
26636
+ return boundLayer;
26637
+ };
26638
+
26479
26639
  /**
26480
26640
  * @private
26481
26641
  * @param {number} indexX
@@ -34995,6 +35155,12 @@ VirtualizedLayoutGrid.prototype.updateColumnBounds = function (posAry, noBorderA
34995
35155
  this._grid.updateColumnBounds(posAry, noBorderAry, topPx);
34996
35156
  this._updateRowBounds();
34997
35157
  };
35158
+ /** @public
35159
+ * @ignore
35160
+ */
35161
+ VirtualizedLayoutGrid.prototype.updateColumnSeparators = function () {
35162
+ this._grid.updateColumnSeparators();
35163
+ };
34998
35164
  /** @private
34999
35165
  */
35000
35166
  VirtualizedLayoutGrid.prototype._initBoundLayer = function () {
@@ -35760,7 +35926,7 @@ Core.prototype._batches = null;
35760
35926
  * @return {string}
35761
35927
  */
35762
35928
  Core.getVersion = function () {
35763
- return "5.1.48";
35929
+ return "5.1.50";
35764
35930
  };
35765
35931
  /** {@link ElementWrapper#dispose}
35766
35932
  * @override
@@ -36973,6 +37139,7 @@ Core.prototype._moveColumn = function (fromCol, destCol) {
36973
37139
  }
36974
37140
  }
36975
37141
  this._updateColumnBounds();
37142
+ this._updateColumnSeparators();
36976
37143
  return true;
36977
37144
  };
36978
37145
 
@@ -37303,6 +37470,7 @@ Core.prototype.setDefaultRowHeight = function (val, opt_includeTitle) {
37303
37470
  this._syncRowHeights();
37304
37471
  this._rowHeightSync = true;
37305
37472
  this.setRowScrollingStep(this._rowScrollingStep);
37473
+ this._updateColumnSeparators();
37306
37474
  }
37307
37475
  };
37308
37476
 
@@ -38137,6 +38305,7 @@ Core.prototype.freezeColumn = function (frozenColIndex, numRightColumn) {
38137
38305
 
38138
38306
  this._onColumnCountChanged(); // Activate horizontal scrollbar and column virtualization
38139
38307
  this._updateScrollbarWidth(true, true);
38308
+ this._updateColumnSeparators();
38140
38309
  };
38141
38310
 
38142
38311
  /** @private
@@ -39378,6 +39547,21 @@ Core.prototype._updateColumnBounds = function () {
39378
39547
  section.updateColumnBounds(posAry, noBorderAry);
39379
39548
  }
39380
39549
  };
39550
+ /* @private
39551
+ */
39552
+ Core.prototype._updateColumnSeparators = function() {
39553
+ var sectCount = this._settings.length;
39554
+ if(!sectCount) {
39555
+ return;
39556
+ }
39557
+
39558
+ for(var i = 0; i < sectCount; i++) {
39559
+ var section = this._settings[i].getSection();
39560
+ if (section) {
39561
+ section.updateColumnSeparators();
39562
+ }
39563
+ }
39564
+ };
39381
39565
 
39382
39566
  /** @public
39383
39567
  * @param {number} startColIndex INCLUSIVE
@@ -40447,6 +40631,8 @@ Core.prototype._onRowCountChanged = function (e) {
40447
40631
  if(!forceUpdate) {
40448
40632
  this._updateVScrollbar(); // Asynchronous
40449
40633
  }
40634
+
40635
+ this._updateColumnSeparators();
40450
40636
  if(prevRowCount < newRowCount) {
40451
40637
  this._dispatch("rowAdded", e);
40452
40638
  } else if(prevRowCount > newRowCount) {
@@ -40504,7 +40690,7 @@ Core.prototype._onRowHeightChanged = function (e) {
40504
40690
  minSectionIndex >= this._startVScrollbarIndex);
40505
40691
  }
40506
40692
  }
40507
-
40693
+ this._updateColumnSeparators();
40508
40694
  this._dispatchRowPositionChanged();
40509
40695
  };
40510
40696
  /** @private
@@ -40569,6 +40755,7 @@ Core.prototype._onColumnCountChanged = function () {
40569
40755
  var pinnedRight = this._countPinnedRightColumns();
40570
40756
 
40571
40757
  this._updateColumnBounds();
40758
+ this._updateColumnSeparators();
40572
40759
 
40573
40760
  if (this._hScrollbarEnabled && pinnedLeft + pinnedRight < this.getColumnCount()) {
40574
40761
  this._hscrollbar.enable();
@@ -40850,6 +41037,7 @@ Core.prototype._syncLayoutToColumns = function (from, to, opt_forceDispatching)
40850
41037
  var paneChanged = forceUpdate || (from < this.getHScrollStartIndex()) || (to > this.getFirstPinnedRightIndex());
40851
41038
  this._updateScrollbarWidth(paneChanged, true /* contentChanged */);
40852
41039
  this._updateColumnBounds();
41040
+ this._updateColumnSeparators();
40853
41041
  this._dispatchColumnPositionChanged();
40854
41042
 
40855
41043
  if (dirty || opt_forceDispatching) {
@@ -40945,6 +41133,7 @@ Core.prototype._updateLayout = function () {
40945
41133
  var section = this._settings[s].getSection();
40946
41134
  section.updateLayout(); // Notify section about forced recalculation of the layout
40947
41135
  }
41136
+ this._updateColumnSeparators();
40948
41137
  };
40949
41138
 
40950
41139
  /** @private */
@@ -43907,6 +44096,7 @@ var Grid = function(placeholder, config) {
43907
44096
  t._dc = new DataCache_DataCache();
43908
44097
  t._dc.listen("dataChanged", t._onDataChanged);
43909
44098
  t._dc.listen("dataComposed", t._onDataComposed);
44099
+ t._dc.addStaticFields([ROW_DEF, SUB_ID]); // Static fields are deprecated, set fields to be ignore during clone in DataCache
43910
44100
 
43911
44101
  t._dt = new DataTable();
43912
44102
  t._dt.setSortingLogic(/** @type{Function} */(t._mainSorter));
@@ -45107,8 +45297,11 @@ Grid.prototype.replaceColumn = function (columnOption, colRef) {
45107
45297
  if(colDef.getChildren()) { // Parent time series field doesn't provide hidden property
45108
45298
  colConfig["hidden"] = false;
45109
45299
  }
45300
+
45301
+ this._grid.startBatch("reset");
45110
45302
  this.insertColumn(colConfig, colIndex);
45111
45303
  this.removeColumn(colIndex + 1); // remove existing column after insert
45304
+ this._grid.stopBatch("reset");
45112
45305
  };
45113
45306
 
45114
45307
  /** to update column name when field info is loaded
@@ -45369,11 +45562,6 @@ Grid.prototype._onColumnAdded = function(e) {
45369
45562
  this._grid.enableColumnClass(idx, classes[i]);
45370
45563
  }
45371
45564
  var colField = colDef.getField();
45372
- if (!colDef.isRealTimeField()) {
45373
- if(this._dc) {
45374
- this._dc.addStaticFields([colField]);
45375
- }
45376
- }
45377
45565
  this._grid.setDataColumnName(idx, ROW_DEF); // This make ColumnDefinition renderer work
45378
45566
  var fields = colDef.getAllFields();
45379
45567
  var referrer = colDef.getId();
@@ -49555,6 +49743,13 @@ MockSubscriptions.prototype._generateQuoteData = function(sub, fields) {
49555
49743
  values[field] = data.value;
49556
49744
  values[formattedField] = data.formattedValue;
49557
49745
  }
49746
+
49747
+ // The delay symbol for X_RIC_NAME will depend on the INDICATOR field.
49748
+ if(values["X_RIC_NAME"] != null && values["INDICATOR"] != null) {
49749
+ if(values["INDICATOR"] > 0) {
49750
+ values["X_RIC_NAME"] = "/" + values["X_RIC_NAME"];
49751
+ }
49752
+ }
49558
49753
  return values;
49559
49754
  };
49560
49755