@refinitiv-ui/efx-grid 6.0.22 → 6.0.24

Sign up to get free protection for your applications and to get access to all the features.
package/lib/grid/index.js CHANGED
@@ -1,3 +1,3 @@
1
1
  import {Grid} from "./lib/efx-grid.js";
2
2
  export {Grid}
3
- window.EFX_GRID = { version: "6.0.22" };
3
+ window.EFX_GRID = { version: "6.0.24" };
@@ -14186,7 +14186,7 @@ var FieldDefinition = {};
14186
14186
  FieldDefinition._defs = {
14187
14187
  "X_RIC_NAME": {
14188
14188
  name: "RIC",
14189
- notRealTimeField: true,
14189
+ IsRealtimeField: false,
14190
14190
  width: 100,
14191
14191
  binding: xRicNameRenderer,
14192
14192
  sortLogic: xRicNameSorter
@@ -14324,7 +14324,13 @@ FieldDefinition._loadingField = {};
14324
14324
  * @param {Object} def
14325
14325
  */
14326
14326
  FieldDefinition.set = function(field, def) {
14327
- FieldDefinition._defs[field] = def || null;
14327
+ if (!FieldDefinition._defs[field]) {
14328
+ FieldDefinition._defs[field] = def;
14329
+ } else {
14330
+ for (var key in def) {
14331
+ FieldDefinition._defs[field][key] = def[key];
14332
+ }
14333
+ }
14328
14334
  };
14329
14335
  /** @public
14330
14336
  * @function
@@ -14381,11 +14387,64 @@ FieldDefinition.setFieldCaching = function (caching) {
14381
14387
  FieldDefinition._caching = caching;
14382
14388
  };
14383
14389
 
14390
+ /** @public
14391
+ * @param {string} field
14392
+ * @return {boolean}
14393
+ */
14394
+ FieldDefinition.isFormula = function(field) {
14395
+ return field.charAt(0) === "=";
14396
+ };
14397
+ /** @public
14398
+ * @param {string} field
14399
+ * @return {boolean}
14400
+ */
14401
+ FieldDefinition.isAdc = function(field) {
14402
+ return field.indexOf("TR.") === 0;
14403
+ };
14404
+
14405
+ /** @public
14406
+ * @param {string} field
14407
+ * @return {boolean}
14408
+ */
14409
+ FieldDefinition.isRealTimeField = function(field) {
14410
+ if (!field) {
14411
+ return false;
14412
+ }
14413
+
14414
+ if(FieldDefinition.isAdc(field)) {
14415
+ return false;
14416
+ }
14417
+
14418
+ if(FieldDefinition.isFormula(field)) {
14419
+ return false;
14420
+ }
14421
+
14422
+ if(FieldDefinition.getFieldProperty(field, "timeSeriesChild")) {
14423
+ return false;
14424
+ }
14425
+
14426
+ if(FieldDefinition.isTimeSeries(field)) {
14427
+ return false;
14428
+ }
14429
+
14430
+ return FieldDefinition.getFieldProperty(field, "IsRealtimeField") !== false;
14431
+ };
14432
+
14384
14433
  /** @public
14385
14434
  * @param {string} field
14386
14435
  * @return {boolean}=true if field is time series field
14387
14436
  */
14388
- FieldDefinition.isTimeSeriesField = function (field) {
14437
+ FieldDefinition.isTimeSeries = function (field) {
14438
+ if (!field) {
14439
+ return false;
14440
+ }
14441
+
14442
+ // We can check time series using a cache to avoid duplicating checks in regular expressions.
14443
+ var timeSeriesField = FieldDefinition.getFieldProperty(field, "timeSeries");
14444
+ if (timeSeriesField != null) {
14445
+ return timeSeriesField;
14446
+ }
14447
+
14389
14448
  /*
14390
14449
  ^TR. => start with TR.
14391
14450
  [\w]+ => any field with string and value
@@ -14394,9 +14453,39 @@ FieldDefinition.isTimeSeriesField = function (field) {
14394
14453
  EDATE\=+ => EDATE in bucket
14395
14454
  [\w\-\=\,]+ => another propertie param
14396
14455
  [\)]$ => end with only )
14456
+ i => for match both upper and lower cases
14397
14457
  */
14458
+ var timeSeriesRegex = /^TR.[\w]+[\(][\w\-\=\,]*EDATE\=+[\w\-\=\,]+[\)]$/i;
14459
+ return timeSeriesRegex.test(field);
14460
+ };
14461
+
14462
+ /**
14463
+ * Set property value into field definition
14464
+ * @private
14465
+ * @param {string} field field definition
14466
+ * @param {string} propertyName
14467
+ * @param {*} value
14468
+ */
14469
+ FieldDefinition.setFieldProperty = function(field, propertyName, value) {
14470
+ if(!FieldDefinition._defs[field]) {
14471
+ FieldDefinition._defs[field] = {};
14472
+ }
14473
+ FieldDefinition._defs[field][propertyName] = value;
14474
+ };
14398
14475
 
14399
- return !!field.toUpperCase().match(/^TR.[\w]+[\(][\w\-\=\,]*EDATE\=+[\w\-\=\,]+[\)]$/g);
14476
+ /**
14477
+ * Set property value into field definition
14478
+ * @private
14479
+ * @param {string} field field definition
14480
+ * @param {string} propertyName
14481
+ * @return {*}
14482
+ */
14483
+ FieldDefinition.getFieldProperty = function(field, propertyName) {
14484
+ var fieldDef = FieldDefinition._defs[field];
14485
+ if(fieldDef) {
14486
+ return fieldDef[propertyName];
14487
+ }
14488
+ return null;
14400
14489
  };
14401
14490
 
14402
14491
  /** to get more info about field via synapse service
@@ -14847,10 +14936,6 @@ ColumnDefinition.prototype._eventArg;
14847
14936
  /** @type {boolean}
14848
14937
  * @private
14849
14938
  */
14850
- ColumnDefinition.prototype._realTimeField = false;
14851
- /** @type {boolean}
14852
- * @private
14853
- */
14854
14939
  ColumnDefinition.prototype._autoGenerated = false;
14855
14940
 
14856
14941
  /** @type {!Array.<string>}
@@ -14897,10 +14982,6 @@ ColumnDefinition.prototype._parent = null;
14897
14982
  * @private
14898
14983
  */
14899
14984
  ColumnDefinition.prototype._children = null;
14900
- /** @type {boolean}
14901
- * @private
14902
- */
14903
- ColumnDefinition.prototype._timeSeriesField = false;
14904
14985
  /** @type {Object}
14905
14986
  * @private
14906
14987
  */
@@ -14987,7 +15068,7 @@ ColumnDefinition.prototype.initialize = function(columnOption) {
14987
15068
  }
14988
15069
  }
14989
15070
 
14990
- this._setField(field, columnOption["formula"]); // Perform some field manipulation
15071
+ this._setField(field, columnOption); // Perform some field manipulation
14991
15072
 
14992
15073
  val = columnOption["name"] || columnOption["title"]; // title is migrated from Composite Grid
14993
15074
  if(val != null) { // Name can be empty string
@@ -15002,7 +15083,7 @@ ColumnDefinition.prototype.initialize = function(columnOption) {
15002
15083
 
15003
15084
  val = columnOption["notRealTimeField"];
15004
15085
  if(val != null) {
15005
- this._realTimeField = !val;
15086
+ js_FieldDefinition.setFieldProperty(field, "IsRealtimeField", !val);
15006
15087
  }
15007
15088
 
15008
15089
  val = columnOption["tooltip"];
@@ -15219,17 +15300,13 @@ ColumnDefinition.prototype.getAllFields = function() {
15219
15300
  * @return {boolean}
15220
15301
  */
15221
15302
  ColumnDefinition.prototype.isRealTimeField = function() {
15222
- // TODO: Simplify this logic
15223
- if(this._field && this._realTimeField && !this._formula) {
15224
- return ColumnDefinition.isRealTimeField(this._field);
15225
- }
15226
- return false;
15303
+ return js_FieldDefinition.isRealTimeField(this._field);
15227
15304
  };
15228
15305
  /** @public
15229
15306
  * @return {boolean}
15230
15307
  */
15231
- ColumnDefinition.prototype.isTimeSeriesField = function() {
15232
- return this._timeSeriesField;
15308
+ ColumnDefinition.prototype.isTimeSeries = function() {
15309
+ return js_FieldDefinition.isTimeSeries(this._field);
15233
15310
  };
15234
15311
  /** @public
15235
15312
  * @return {boolean}
@@ -15242,27 +15319,21 @@ ColumnDefinition.prototype.isFormulaField = function() {
15242
15319
  * @return {boolean}
15243
15320
  */
15244
15321
  ColumnDefinition.isFormulaField = function(field) {
15245
- return field.charAt(0) === "=";
15322
+ return js_FieldDefinition.isFormula(field);
15246
15323
  };
15247
15324
  /** @public
15248
15325
  * @param {string} field
15249
15326
  * @return {boolean}
15250
15327
  */
15251
15328
  ColumnDefinition.isAdcField = function(field) {
15252
- return field.indexOf("TR.") === 0;
15329
+ return js_FieldDefinition.isAdc(field);
15253
15330
  };
15254
15331
  /** @public
15255
15332
  * @param {string} field
15256
15333
  * @return {boolean}
15257
15334
  */
15258
15335
  ColumnDefinition.isRealTimeField = function(field) {
15259
- if(field) {
15260
- if(!ColumnDefinition.isFormulaField(field)) {
15261
- return !ColumnDefinition.isAdcField(field);
15262
- }
15263
- }
15264
-
15265
- return false;
15336
+ return js_FieldDefinition.isRealTimeField(field);
15266
15337
  };
15267
15338
  /** @public
15268
15339
  * @function
@@ -15387,8 +15458,10 @@ ColumnDefinition.prototype.getConfigObject = function(colOptions) {
15387
15458
  obj["name"] = this._name;
15388
15459
  }
15389
15460
 
15390
- if(!this._realTimeField) {
15391
- obj["notRealTimeField"] = true;
15461
+ // The 'IsRealtimeField' property will only be set if the user sets 'notRealTimeField' in the column options. It will be returned if the user has this option enabled, otherwise it will not be returned
15462
+ value = js_FieldDefinition.getFieldProperty(this._field, "IsRealtimeField") === false;
15463
+ if(value) {
15464
+ obj["notRealTimeField"] = value;
15392
15465
  }
15393
15466
 
15394
15467
  if(this._tooltip != null) {
@@ -15609,7 +15682,7 @@ ColumnDefinition.prototype.setSorter = function(func) {
15609
15682
  */
15610
15683
  ColumnDefinition.prototype.isRowSorting = function() {
15611
15684
  if(this._rowSorting == null) {
15612
- return !this._realTimeField;
15685
+ return !js_FieldDefinition.getFieldProperty(this._field, "IsRealtimeField");
15613
15686
  }
15614
15687
  return this._rowSorting ? true : false;
15615
15688
  };
@@ -15632,9 +15705,9 @@ ColumnDefinition.prototype.setName = function(str) {
15632
15705
 
15633
15706
  /** @private
15634
15707
  * @param {string|null=} field
15635
- * @param {string} formulaStr
15708
+ * @param {ColumnDefinition~Options=} columnOption
15636
15709
  */
15637
- ColumnDefinition.prototype._setField = function(field, formulaStr) {
15710
+ ColumnDefinition.prototype._setField = function(field, columnOption) {
15638
15711
  var defaultField = (field == null); // undefined or null
15639
15712
  if(!field) {
15640
15713
  field = "";
@@ -15642,6 +15715,7 @@ ColumnDefinition.prototype._setField = function(field, formulaStr) {
15642
15715
  // Trim white spaces -- equivalent to String.trim(), which is not support in IE8
15643
15716
  field = field.replace(/^\s+|\s+$/gm, "");
15644
15717
 
15718
+ var formulaStr = columnOption["formula"];
15645
15719
  if(this._fnEngine) {
15646
15720
  var uppercasedF = field.toUpperCase(); // For comparison only
15647
15721
  var predefinedF = formulaStr || js_PredefinedFormula.get(uppercasedF);
@@ -15669,13 +15743,13 @@ ColumnDefinition.prototype._setField = function(field, formulaStr) {
15669
15743
  this._field = field;
15670
15744
  this._name = field;
15671
15745
  this._emptyField = false;
15672
- this._realTimeField = field ? true : false;
15673
15746
  }
15674
15747
 
15675
- if(js_FieldDefinition.isTimeSeriesField(field)) {
15676
- // children will be clone the config from parent too
15677
- this._realTimeField = false;
15678
- this._timeSeriesField = true;
15748
+ // We need to cache time series in field definition for improve performance of checking methond
15749
+ js_FieldDefinition.setFieldProperty(field, "timeSeries", js_FieldDefinition.isTimeSeries(field) ? true : false);
15750
+
15751
+ if(columnOption["parent"]) {
15752
+ js_FieldDefinition.setFieldProperty(field, "timeSeriesChild", true);
15679
15753
  }
15680
15754
 
15681
15755
  this._isDefaultName = true;
@@ -15984,7 +16058,7 @@ SnapshotFiller.prototype._onRequest = function () {
15984
16058
  var fields = [];
15985
16059
  var timeSeriesFields = [];
15986
16060
  for (var field in this._fields) {
15987
- if(!FieldDefinition.isTimeSeriesField(field)) {
16061
+ if(!FieldDefinition.isTimeSeries(field)) {
15988
16062
  fields.push(field);
15989
16063
  } else {
15990
16064
  timeSeriesFields.push(field);
@@ -42255,8 +42329,7 @@ var Grid = function(placeholder, config) {
42255
42329
  t._recalculateFormulas = t._recalculateFormulas.bind(t);
42256
42330
  t._updateStreamingData = t._updateStreamingData.bind(t);
42257
42331
  t.updateColumnTitle = t.updateColumnTitle.bind(t);
42258
- t._insertTimeSeriesChildren = t._insertTimeSeriesChildren.bind(t);
42259
-
42332
+ t._populateTimeSeriesChildren = t._populateTimeSeriesChildren.bind(t);
42260
42333
 
42261
42334
  t._onPostSectionDataBinding = t._onPostSectionDataBinding.bind(t);
42262
42335
  t._asyncClearDataUpdates = t._asyncClearDataUpdates.bind(t);
@@ -42280,7 +42353,7 @@ var Grid = function(placeholder, config) {
42280
42353
  t._formulaConflator = new Conflator(300, t._onFormulaDataChanged);
42281
42354
  t._chainConflator = new Conflator(100, t._addMemberOfChain);
42282
42355
  t._columnTitleConflator = new Conflator(0, t.updateColumnTitle);
42283
- t._timeSeriesChildConflator = new Conflator(0, t._insertTimeSeriesChildren);
42356
+ t._timeSeriesChildConflator = new Conflator(0, t._populateTimeSeriesChildren);
42284
42357
 
42285
42358
 
42286
42359
  t._defaultColumnOptions = {};
@@ -43238,7 +43311,7 @@ Grid.prototype._onFieldAdded = function(e) {
43238
43311
 
43239
43312
  // JET
43240
43313
  if (this._subs) {
43241
- var realtimeFields = addedFields.filter(ColumnDefinition.isRealTimeField);
43314
+ var realtimeFields = addedFields.filter(js_FieldDefinition.isRealTimeField);
43242
43315
  this._subs["addFields"](realtimeFields);
43243
43316
  }
43244
43317
 
@@ -43347,7 +43420,7 @@ Grid.prototype._updateTimeSeriesFields = function (e) {
43347
43420
  /** @private
43348
43421
  * @param {ColumnDefinition} colDef
43349
43422
  */
43350
- Grid.prototype._insertTimeSeriesChildren = function (colDef) {
43423
+ Grid.prototype._populateTimeSeriesChildren = function (colDef) {
43351
43424
  if(this._timeSeriesChildConflator.conflate(colDef) ) {
43352
43425
  return;
43353
43426
  }
@@ -43397,7 +43470,7 @@ Grid.prototype._cloneTimeSeriesColumn = function (parentColDef, childField, idx)
43397
43470
  }
43398
43471
  }
43399
43472
  columnOption = Object(Util["b" /* cloneObject */])(obj);
43400
- columnOption["field"] = childField.replace("TR.", "");
43473
+ columnOption["field"] = childField.replace("TR.", ""); // We need to remove the 'TR' prefix from the field to avoid confusion with time series fields.
43401
43474
  columnOption["name"] = childField.split("_")[1].split("T")[0]; // Currently, response server format utc date ex "2022-11-23T00:00:00"
43402
43475
  columnOption["parent"] = parentColDef;
43403
43476
  this.insertColumn(columnOption, idx++);
@@ -43504,6 +43577,11 @@ Grid.prototype._onFieldLoadedError = function (err) {
43504
43577
  * @param {string} referrer
43505
43578
  */
43506
43579
  Grid.prototype._onFieldLoaded = function (field, referrer) {
43580
+ // For time series, we need to wait until the field is loadedm, then we can insert a child from the field data.
43581
+ if(js_FieldDefinition.isTimeSeries(field)) {
43582
+ var colDef = this.getColumnDefinitionById(referrer); // The 'referrer' is a column ID that was just added
43583
+ this._populateTimeSeriesChildren(colDef);
43584
+ }
43507
43585
  this._connector.addFields(field, referrer);
43508
43586
  };
43509
43587
 
@@ -43533,7 +43611,7 @@ Grid.prototype._shouldLoadFieldInfo = function (field, isRealTime) {
43533
43611
  var fieldDef = js_FieldDefinition.get(field);
43534
43612
  if (!fieldDef &&
43535
43613
  field !== 'X_RIC_NAME' && // ignore X_RIC_NAME
43536
- (isRealTime || ColumnDefinition.isAdcField(field)) && // realtime field or adc field (Without static field)
43614
+ (isRealTime || js_FieldDefinition.isAdc(field)) && // realtime field or adc field (Without static field)
43537
43615
  (this._RTK || window["JET"]) // have rtk instance or window jet sub
43538
43616
  ) {
43539
43617
  return true;
@@ -43637,14 +43715,13 @@ Grid.prototype._onColumnAdded = function(e) {
43637
43715
  }
43638
43716
  }
43639
43717
  this._grid.setDataColumnName(idx, ROW_DEF); // This make ColumnDefinition renderer work
43640
-
43641
43718
  var fields = colDef.getAllFields();
43642
43719
  var referrer = colDef.getId();
43643
43720
  var len = fields.length;
43644
43721
  var field, dataType, prom, isRealTimeField, onLoaded;
43645
43722
  for(i = 0; i < len; i++) {
43646
43723
  field = fields[i];
43647
- isRealTimeField = ColumnDefinition.isRealTimeField(field);
43724
+ isRealTimeField = js_FieldDefinition.isRealTimeField(field);
43648
43725
  if(this._shouldLoadFieldInfo(field, isRealTimeField)) {
43649
43726
  if(field === colField) {
43650
43727
  dataType = colDef.getDataType(); // Data-type from user's column options
@@ -43660,14 +43737,14 @@ Grid.prototype._onColumnAdded = function(e) {
43660
43737
  onLoaded = this._onFieldLoaded.bind(this, field, referrer);
43661
43738
  prom = prom.then(onLoaded).catch(onLoaded);
43662
43739
  } else {
43663
- if(colDef.isTimeSeriesField()) {
43664
- this._insertTimeSeriesChildren(colDef);
43740
+ if(colDef.isTimeSeries()) {
43741
+ this._populateTimeSeriesChildren(colDef);
43665
43742
  }
43666
43743
  this._connector.addFields(field, referrer);
43667
43744
  }
43668
43745
  } else {
43669
- if(colDef.isTimeSeriesField()) {
43670
- this._insertTimeSeriesChildren(colDef);
43746
+ if(colDef.isTimeSeries()) {
43747
+ this._populateTimeSeriesChildren(colDef);
43671
43748
  }
43672
43749
  this._connector.addFields(field, referrer);
43673
43750
  }
@@ -43949,7 +44026,7 @@ Grid.prototype.addDataFields = function(fieldRef, referrer) {
43949
44026
  var i, field, dataType, prom, isRealTimeField, onLoaded;
43950
44027
  for(i = 0; i < len; i++) {
43951
44028
  field = fields[i];
43952
- isRealTimeField = ColumnDefinition.isRealTimeField(field);
44029
+ isRealTimeField = js_FieldDefinition.isRealTimeField(field);
43953
44030
  if(this._shouldLoadFieldInfo(field, isRealTimeField)) {
43954
44031
  dataType = ColumnDefinition.getDataType(field);
43955
44032
  prom = js_FieldDefinition.loadFieldInfo(field)