@refinitiv-ui/efx-grid 6.0.87 → 6.0.89

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 (37) hide show
  1. package/lib/column-dragging/es6/ColumnDragging.js +55 -0
  2. package/lib/core/dist/core.js +2 -2
  3. package/lib/core/dist/core.min.js +1 -1
  4. package/lib/core/es6/grid/Core.d.ts +0 -2
  5. package/lib/core/es6/grid/Core.js +2 -2
  6. package/lib/grid/index.js +1 -1
  7. package/lib/row-segmenting/es6/RowSegmenting.js +1 -1
  8. package/lib/rt-grid/dist/rt-grid.js +786 -706
  9. package/lib/rt-grid/dist/rt-grid.min.js +1 -1
  10. package/lib/rt-grid/es6/ColumnDefinition.js +68 -68
  11. package/lib/rt-grid/es6/DataConnector.js +26 -26
  12. package/lib/rt-grid/es6/FieldDefinition.js +27 -27
  13. package/lib/rt-grid/es6/Grid.js +390 -378
  14. package/lib/rt-grid/es6/PredefinedFormula.js +1 -1
  15. package/lib/rt-grid/es6/ReferenceCounter.js +15 -15
  16. package/lib/rt-grid/es6/RowDefSorter.js +26 -26
  17. package/lib/rt-grid/es6/RowDefinition.d.ts +5 -6
  18. package/lib/rt-grid/es6/RowDefinition.js +105 -76
  19. package/lib/rt-grid/es6/SnapshotFiller.js +77 -77
  20. package/lib/rt-grid/es6/StyleLoader.js +1 -1
  21. package/lib/statistics-row/es6/StatisticsRow.d.ts +1 -0
  22. package/lib/statistics-row/es6/StatisticsRow.js +18 -2
  23. package/lib/tr-grid-in-cell-editing/es6/InCellEditing.d.ts +0 -4
  24. package/lib/tr-grid-in-cell-editing/es6/InCellEditing.js +2 -2
  25. package/lib/tr-grid-percent-bar/es6/PercentBar.d.ts +18 -18
  26. package/lib/tr-grid-percent-bar/es6/PercentBar.js +7 -1
  27. package/lib/tr-grid-row-filtering/es6/RowFiltering.d.ts +2 -0
  28. package/lib/tr-grid-row-filtering/es6/RowFiltering.js +69 -18
  29. package/lib/tr-grid-titlewrap/es6/TitleWrap.d.ts +0 -2
  30. package/lib/tr-grid-titlewrap/es6/TitleWrap.js +1 -1
  31. package/lib/tr-grid-util/es6/DragUI.js +2 -1
  32. package/lib/types/es6/PercentBar.d.ts +18 -18
  33. package/lib/types/es6/RealtimeGrid/RowDefinition.d.ts +5 -2
  34. package/lib/types/es6/RowFiltering.d.ts +2 -0
  35. package/lib/types/es6/StatisticsRow.d.ts +1 -0
  36. package/lib/versions.json +10 -10
  37. package/package.json +1 -1
@@ -179,13 +179,13 @@ import { ElementWrapper } from "../../core/es6/grid/components/ElementWrapper.js
179
179
  * @private
180
180
  * @const
181
181
  */
182
- var SUB_ID = "SUB_ID";
182
+ const SUB_ID = "SUB_ID";
183
183
 
184
184
  /** @private
185
185
  * @param {RowDefinition} rowDef
186
186
  * @return {Object}
187
187
  */
188
- var toRowData = function(rowDef) {
188
+ let toRowData = function(rowDef) {
189
189
  return rowDef ? rowDef.getRowData() : null;
190
190
  };
191
191
 
@@ -193,7 +193,7 @@ var toRowData = function(rowDef) {
193
193
  * @const
194
194
  * @type {Object.<string, number>}
195
195
  */
196
- var _unclonableFields = {
196
+ let _unclonableFields = {
197
197
  "ROW_DEF": 1,
198
198
  "SUB_ID": 1
199
199
  };
@@ -201,10 +201,10 @@ var _unclonableFields = {
201
201
  * @param {RowDefinition} fromRowDef
202
202
  * @param {RowDefinition} toRowDef
203
203
  */
204
- var cloneRowData = function(fromRowDef, toRowDef) {
205
- var from = toRowData(fromRowDef);
206
- var to = toRowData(toRowDef);
207
- for(var key in from) {
204
+ let cloneRowData = function(fromRowDef, toRowDef) {
205
+ let from = toRowData(fromRowDef);
206
+ let to = toRowData(toRowDef);
207
+ for(let key in from) {
208
208
  if(!_unclonableFields[key]) {
209
209
  to[key] = from[key];
210
210
  }
@@ -215,7 +215,7 @@ var cloneRowData = function(fromRowDef, toRowDef) {
215
215
  * @param {RowDefinition} rowDef
216
216
  * @return {boolean}
217
217
  */
218
- var excludeAutoGenerated = function (rowDef) {
218
+ let excludeAutoGenerated = function (rowDef) {
219
219
  return !rowDef.isAutoGenerated();
220
220
  };
221
221
 
@@ -223,7 +223,7 @@ var excludeAutoGenerated = function (rowDef) {
223
223
  * @param {Object} colConfig column config
224
224
  * @return {boolean}
225
225
  */
226
- var _byNonAutoGeneratedColumn = function (colConfig) {
226
+ let _byNonAutoGeneratedColumn = function (colConfig) {
227
227
  return !colConfig.autoGenerated;
228
228
  };
229
229
  /** @private
@@ -233,7 +233,7 @@ var _byNonAutoGeneratedColumn = function (colConfig) {
233
233
  * @param {string} fieldName
234
234
  * @return {number} The outcome of the value comparison
235
235
  */
236
- var compareNumber = function(rowDefA, rowDefB, sortOrder, fieldName) { // edit name
236
+ let compareNumber = function(rowDefA, rowDefB, sortOrder, fieldName) { // edit name
237
237
  return (rowDefA.getData(fieldName) - rowDefB.getData(fieldName)) * sortOrder; // for numeric comparison
238
238
  };
239
239
 
@@ -244,14 +244,14 @@ var compareNumber = function(rowDefA, rowDefB, sortOrder, fieldName) { // edit n
244
244
  * @param {string} sortOrder
245
245
  * @return {number} The outcome of the value comparison
246
246
  */
247
- var _sortChildrenOfChain = function (rowDefA, rowDefB, sortOrder) {
248
- var parentA = rowDefA.getParent();
247
+ let _sortChildrenOfChain = function (rowDefA, rowDefB, sortOrder) {
248
+ let parentA = rowDefA.getParent();
249
249
 
250
250
  if (!parentA) {
251
251
  return 0;
252
252
  }
253
253
 
254
- var parentB = rowDefB.getParent();
254
+ let parentB = rowDefB.getParent();
255
255
 
256
256
  if (!parentB) {
257
257
  return 0;
@@ -261,13 +261,13 @@ var _sortChildrenOfChain = function (rowDefA, rowDefB, sortOrder) {
261
261
  return 0;
262
262
  }
263
263
 
264
- var a = rowDefA.getData('CHILD_ORDER');
264
+ let a = rowDefA.getData('CHILD_ORDER');
265
265
 
266
266
  if (a == null) {
267
267
  return 0;
268
268
  }
269
269
 
270
- var b = rowDefB.getData('CHILD_ORDER');
270
+ let b = rowDefB.getData('CHILD_ORDER');
271
271
 
272
272
  if (b == null) {
273
273
  return 0;
@@ -280,7 +280,7 @@ var _sortChildrenOfChain = function (rowDefA, rowDefB, sortOrder) {
280
280
  * @param {ColumnDefinition} colDef
281
281
  * @return {string}
282
282
  */
283
- var _getName = function(colDef) {
283
+ let _getName = function(colDef) {
284
284
  if(colDef) {
285
285
  return colDef.getName();
286
286
  }
@@ -291,7 +291,7 @@ var _getName = function(colDef) {
291
291
  * @param {string} str
292
292
  * @return {boolean}
293
293
  */
294
- var _hasFieldOrId = function(colDef, str) {
294
+ let _hasFieldOrId = function(colDef, str) {
295
295
  return (colDef.getField() === str) || (colDef.getId() === str);
296
296
  };
297
297
 
@@ -301,7 +301,7 @@ var _hasFieldOrId = function(colDef, str) {
301
301
  * @param {Object} obj2
302
302
  * @returns {boolean} If the id property of two objects is equal, the return will be true, otherwise it will be false.
303
303
  */
304
- var _hasMatchingId = function(obj1, obj2) {
304
+ let _hasMatchingId = function(obj1, obj2) {
305
305
  if(!obj1 || !obj2 || !obj1.id || !obj2.id) { // Handle nullable, if the object or id have null, it's means difference value
306
306
  return false;
307
307
  }
@@ -313,8 +313,8 @@ var _hasMatchingId = function(obj1, obj2) {
313
313
  * @param {(Element|null)=} placeholder
314
314
  * @param {Grid~GridOptions=} config
315
315
  */
316
- var Grid = function(placeholder, config) {
317
- var t = this; // This is to primarily reduce file size
316
+ let Grid = function(placeholder, config) {
317
+ let t = this; // This is to primarily reduce file size
318
318
 
319
319
  t._onDataChanged = t._onDataChanged.bind(t);
320
320
  t._onQuote2PostUpdate = t._onQuote2PostUpdate.bind(t);
@@ -372,7 +372,7 @@ var Grid = function(placeholder, config) {
372
372
  t._dt = t._dv.getDataTable();
373
373
  t._mainGrid = config["grid"];
374
374
 
375
- var core = t._mainGrid.getCoreGrid();
375
+ let core = t._mainGrid.getCoreGrid();
376
376
  t._stp = core.getPlugin("SortableTitlePlugin");
377
377
  }
378
378
  if(config["SortableTitle"]) { // Exception for built-in plugin
@@ -439,7 +439,6 @@ var Grid = function(placeholder, config) {
439
439
  t._connector.addEventListener("fieldRemoved", t._onFieldRemoved.bind(t));
440
440
 
441
441
  t.initialize(config);
442
- t.initSubscription();
443
442
 
444
443
  StyleLoader.applyStyle(t._grid);
445
444
  };
@@ -667,7 +666,7 @@ Grid.prototype.initSubscription = function() {
667
666
  return;
668
667
  }
669
668
 
670
- var jet, q, s;
669
+ let jet, q, s;
671
670
  jet = window["JET"]; // Assume that JET is already exist.
672
671
  if (this._RTK) {
673
672
  q = this._RTK.Quotes;
@@ -691,10 +690,10 @@ Grid.prototype.initSubscription = function() {
691
690
 
692
691
  // TODO: Subscriptions should be registered per row.
693
692
  // However, chain subscription cannot be integrated with DataConnector in this current implementation.
694
- var rowDefs = this._getAllRowDefinitions();
695
- var len = rowDefs.length;
696
- for(var i = 0; i < len; ++i) {
697
- var rowDef = rowDefs[i];
693
+ let rowDefs = this._getAllRowDefinitions();
694
+ let len = rowDefs.length;
695
+ for(let i = 0; i < len; ++i) {
696
+ let rowDef = rowDefs[i];
698
697
  if(rowDef) {
699
698
  rowDef.subscribeForUpdates();
700
699
  }
@@ -713,7 +712,7 @@ Grid.prototype.updateLayout = function() {
713
712
  */
714
713
  Grid.prototype._updateRowData = function(rowIndex) {
715
714
  if(rowIndex >= 0) {
716
- var rowId = this._dv.getRowId(rowIndex);
715
+ let rowId = this._dv.getRowId(rowIndex);
717
716
  if(rowId) {
718
717
  this._dt.setRowData(rowId, {});
719
718
  }
@@ -730,7 +729,7 @@ Grid.prototype.updateRowData = Grid.prototype._updateRowData;
730
729
  /** @private
731
730
  */
732
731
  Grid.prototype._addGridSections = function () {
733
- var title = this._grid.addSection("title");
732
+ let title = this._grid.addSection("title");
734
733
  if(this._topSection == false){
735
734
  title.setRowCount(0);
736
735
  } else {
@@ -738,10 +737,10 @@ Grid.prototype._addGridSections = function () {
738
737
  }
739
738
  this._grid.addSection("content");
740
739
 
741
- var titleSettings = this._grid.getSectionSettings("title");
740
+ let titleSettings = this._grid.getSectionSettings("title");
742
741
  titleSettings.disableDataBinding();
743
742
 
744
- var contentSettings = this._grid.getSectionSettings("content");
743
+ let contentSettings = this._grid.getSectionSettings("content");
745
744
  contentSettings.setAutoSyncRowCount(true);
746
745
  contentSettings.setParent(titleSettings);
747
746
  };
@@ -750,13 +749,13 @@ Grid.prototype._addGridSections = function () {
750
749
  * @return {*} Return Section instance
751
750
  */
752
751
  Grid.prototype.addHeaderSection = function (sectionName) {
753
- var titleSects = this._grid.getAllSections("title");
752
+ let titleSects = this._grid.getAllSections("title");
754
753
 
755
- var headerSect = this._grid.addSectionAt(titleSects.length, "title", sectionName);
754
+ let headerSect = this._grid.addSectionAt(titleSects.length, "title", sectionName);
756
755
  if(headerSect) {
757
756
  headerSect.setRowCount(1);
758
757
 
759
- var headerSettings = this._grid.getSectionSettings(headerSect);
758
+ let headerSettings = this._grid.getSectionSettings(headerSect);
760
759
  headerSettings.disableDataBinding();
761
760
  }
762
761
 
@@ -767,11 +766,11 @@ Grid.prototype.addHeaderSection = function (sectionName) {
767
766
  * @return {*} Return Section instance
768
767
  */
769
768
  Grid.prototype.addFooterSection = function (sectionName) {
770
- var footerSect = this._grid.addSection("footer", sectionName);
769
+ let footerSect = this._grid.addSection("footer", sectionName);
771
770
  if(footerSect) {
772
771
  footerSect.setRowCount(1);
773
772
 
774
- var footerSettings = this._grid.getSectionSettings(footerSect);
773
+ let footerSettings = this._grid.getSectionSettings(footerSect);
775
774
  footerSettings.disableDataBinding();
776
775
  }
777
776
 
@@ -790,7 +789,7 @@ Grid.prototype.setParent = function (elem) {
790
789
  */
791
790
  Grid.prototype.insertBefore = function (elem) {
792
791
  if(elem) {
793
- var pn = elem.parentNode;
792
+ let pn = elem.parentNode;
794
793
  if(pn) {
795
794
  pn.insertBefore(this._topNode, elem);
796
795
  this.updateLayout();
@@ -824,17 +823,20 @@ Grid.prototype.getCoreGrid = function () {
824
823
  * @param {Grid~GridOptions=} gridOption
825
824
  */
826
825
  Grid.prototype.initialize = function(gridOption) {
827
- if (!gridOption) { return; }
826
+ if (!gridOption) {
827
+ this.initSubscription();
828
+ return;
829
+ }
828
830
  // TODO: clear all data before re-initialization
829
- var t = this; // For minimizing file size
831
+ let t = this; // For minimizing file size
830
832
  t._initializing = true;
831
- var grid = t._grid; // core grid
833
+ let grid = t._grid; // core grid
832
834
  grid.resetInternalState();
833
835
  gridOption = grid.normalizeConfig(gridOption);
834
836
 
835
- var exts = gridOption["plugins"] || gridOption["extensions"];
837
+ let exts = gridOption["plugins"] || gridOption["extensions"];
836
838
 
837
- var cols = /** @type{Array} */(gridOption["fields"] || gridOption["columns"]);
839
+ let cols = /** @type{Array} */(gridOption["fields"] || gridOption["columns"]);
838
840
  if (gridOption["defaultColumnOptions"]) {
839
841
  t._defaultColumnOptions = gridOption["defaultColumnOptions"];
840
842
  t._defaultColumnSetup(t._defaultColumnOptions, cols);
@@ -884,23 +886,23 @@ Grid.prototype.initialize = function(gridOption) {
884
886
  t._fnEngine.addEventListener("dataRequired", t._onFormulaDataRequired);
885
887
  }
886
888
 
887
- var borders = gridOption["borders"];
889
+ let borders = gridOption["borders"];
888
890
  if (borders != null) {
889
891
  grid.toggleBorders(borders);
890
892
  }
891
- var gridlines = gridOption["gridlines"];
893
+ let gridlines = gridOption["gridlines"];
892
894
  if (gridlines != null) {
893
895
  grid.toggleGridlines(gridlines);
894
896
  }
895
- var vLines = gridOption["verticalLines"];
897
+ let vLines = gridOption["verticalLines"];
896
898
  if (vLines != null) {
897
899
  grid.toggleVerticalLines(vLines);
898
900
  }
899
- var cvLines = gridOption["contentVerticalLines"];
901
+ let cvLines = gridOption["contentVerticalLines"];
900
902
  if (cvLines != null) {
901
903
  grid.toggleContentVerticalLines(cvLines);
902
904
  }
903
- var hLines = gridOption["horizontalLines"];
905
+ let hLines = gridOption["horizontalLines"];
904
906
  if (hLines != null) {
905
907
  grid.toggleHorizontalLines(hLines);
906
908
  }
@@ -909,28 +911,28 @@ Grid.prototype.initialize = function(gridOption) {
909
911
  t._dv.setPageSize(+gridOption["pageSize"]);
910
912
  }
911
913
 
912
- var rowHeight = +gridOption["rowHeight"];
914
+ let rowHeight = +gridOption["rowHeight"];
913
915
  if(rowHeight) { // Non empty or zero
914
916
  grid.setDefaultRowHeight(rowHeight);
915
917
  }
916
- var hRowHeight = +gridOption["headerRowHeight"];
918
+ let hRowHeight = +gridOption["headerRowHeight"];
917
919
  if(hRowHeight) { // Non empty or zero
918
920
  grid.getSection("title").setDefaultRowHeight(hRowHeight);
919
921
  }
920
922
 
921
- var val = gridOption["autoLayoutUpdate"];
923
+ let val = gridOption["autoLayoutUpdate"];
922
924
  if(!t._autoLayoutTimer && val) {
923
925
  if(val !== "0" && val !== "false") { // HACK: Temporarily support incorrect data type
924
926
  t._autoLayoutTimer = setInterval(t._onAutoLayoutUpdate.bind(t), 2000);
925
927
  }
926
928
  }
927
929
 
928
- var bool = gridOption["rowHighlighting"];
930
+ let bool = gridOption["rowHighlighting"];
929
931
  if(bool != null) {
930
932
  grid.enableRowHighlighting(!!bool);
931
933
  }
932
934
 
933
- var rowExpansionBinding = gridOption["rowExpansionBinding"];
935
+ let rowExpansionBinding = gridOption["rowExpansionBinding"];
934
936
  if(typeof rowExpansionBinding === "function") {
935
937
  grid.listen("rowExpansionBinding", t._onRowExpansionBinding); // TODO: Support multi-table feature
936
938
  t.listen("rowExpansionBinding", rowExpansionBinding);
@@ -957,7 +959,7 @@ Grid.prototype.initialize = function(gridOption) {
957
959
  if(gridOption["scrollbarParent"] != null) {
958
960
  t._setScrollbarParent(gridOption["scrollbarParent"]);
959
961
  }
960
- var pollingInterval = gridOption["adcPollingInterval"];
962
+ let pollingInterval = gridOption["adcPollingInterval"];
961
963
  if(pollingInterval != null) {
962
964
  t._pollingInterval = pollingInterval ? +pollingInterval : 0;
963
965
  }
@@ -965,7 +967,7 @@ Grid.prototype.initialize = function(gridOption) {
965
967
  // Column operations
966
968
  t.setColumns(cols);
967
969
 
968
- var rowVir = true;
970
+ let rowVir = true;
969
971
  if (gridOption["rowVirtualRendering"] != null) {
970
972
  rowVir = gridOption["rowVirtualRendering"];
971
973
  }
@@ -974,7 +976,7 @@ Grid.prototype.initialize = function(gridOption) {
974
976
  }
975
977
  grid.enableRowVirtualization(!!rowVir);
976
978
 
977
- var colVir = false;
979
+ let colVir = false;
978
980
  if (gridOption["columnVirtualRendering"] != null) {
979
981
  colVir = gridOption["columnVirtualRendering"];
980
982
  }
@@ -983,7 +985,7 @@ Grid.prototype.initialize = function(gridOption) {
983
985
  }
984
986
  grid.enableColumnVirtualization(!!colVir);
985
987
 
986
- var scrollbar = gridOption["scrollbar"] != null ? gridOption["scrollbar"] : true;
988
+ let scrollbar = gridOption["scrollbar"] != null ? gridOption["scrollbar"] : true;
987
989
  if (scrollbar) {
988
990
  t._topNode.style.overflow = "hidden"; // TODO: Move this to CSS Class
989
991
  } else {
@@ -991,16 +993,16 @@ Grid.prototype.initialize = function(gridOption) {
991
993
  t._topNode.style.overflow = "";
992
994
  }
993
995
 
994
- var topFreezingCount = gridOption["topFreezingCount"];
996
+ let topFreezingCount = gridOption["topFreezingCount"];
995
997
  if (typeof topFreezingCount === "number") {
996
998
  topFreezingCount = (topFreezingCount > 0) ? topFreezingCount : 0;
997
- var sectionIndex = topFreezingCount - 1;
999
+ let sectionIndex = topFreezingCount - 1;
998
1000
  grid.freezeSection(sectionIndex);
999
1001
  } else if (topFreezingCount === false) {
1000
1002
  grid.freezeSection(null);
1001
1003
  }
1002
1004
 
1003
- var bottomFreezingCount = gridOption["bottomFreezingCount"];
1005
+ let bottomFreezingCount = gridOption["bottomFreezingCount"];
1004
1006
  if (typeof bottomFreezingCount === "number") {
1005
1007
  bottomFreezingCount = (bottomFreezingCount > 0) ? bottomFreezingCount : 0;
1006
1008
  grid.freezeFooter(bottomFreezingCount);
@@ -1011,11 +1013,11 @@ Grid.prototype.initialize = function(gridOption) {
1011
1013
  // Plugins
1012
1014
  gridOption[ROW_DEF] = true; // Enable ROW_DEF mode
1013
1015
  if (Array.isArray(exts)) {
1014
- for (var i = 0; i < exts.length; ++i) {
1015
- var ext = exts[i];
1016
- var extInstance = null;
1016
+ for (let i = 0; i < exts.length; ++i) {
1017
+ let ext = exts[i];
1018
+ let extInstance = null;
1017
1019
  if (ext) {
1018
- var extName = ext["name"];
1020
+ let extName = ext["name"];
1019
1021
  if(extName) {
1020
1022
  extInstance = grid.loadPlugin(extName, ext); // pass plugin object as an argument for initialization
1021
1023
  } else {
@@ -1023,7 +1025,7 @@ Grid.prototype.initialize = function(gridOption) {
1023
1025
  }
1024
1026
  }
1025
1027
  if (extInstance && extInstance["setGridWrapper"]) {
1026
- var hasApi = (typeof extInstance["getGridApi"] === "function") ? extInstance["getGridApi"]() : false;
1028
+ let hasApi = (typeof extInstance["getGridApi"] === "function") ? extInstance["getGridApi"]() : false;
1027
1029
  if(!hasApi) {
1028
1030
  extInstance["setGridWrapper"]("realTimeGrid", t);
1029
1031
  }
@@ -1032,7 +1034,7 @@ Grid.prototype.initialize = function(gridOption) {
1032
1034
  t._initializing = false;
1033
1035
  }
1034
1036
 
1035
- var lang = gridOption["lang"];
1037
+ let lang = gridOption["lang"];
1036
1038
  if(lang != null) {
1037
1039
  t._lang = lang;
1038
1040
  t._dateTimeUtil.setLocale(lang);
@@ -1042,18 +1044,18 @@ Grid.prototype.initialize = function(gridOption) {
1042
1044
  if(gridOption["childDataField"] != null) {
1043
1045
  this._childDataField = RowDefinition._childDataField = gridOption["childDataField"];
1044
1046
  }
1045
- var rows = gridOption["rows"];
1047
+ let rows = gridOption["rows"];
1046
1048
  if(!rows) {
1047
1049
  rows = gridOption["rics"] || null; // Make "rics" an alias to "rows"
1048
1050
  }
1049
- var bodies = /** @type{Array} */(gridOption["bodies"]);
1051
+ let bodies = /** @type{Array} */(gridOption["bodies"]);
1050
1052
  if(!bodies) {
1051
1053
  bodies = [];
1052
1054
  if(gridOption["body"]) {
1053
1055
  bodies.push(gridOption["body"]);
1054
1056
  }
1055
1057
  if(rows) {
1056
- for(var m = 0; m < rows.length; m++) {
1058
+ for(let m = 0; m < rows.length; m++) {
1057
1059
  if(typeof rows[m] === "string") {
1058
1060
  rows[m] = { "ric": rows[m] };
1059
1061
  }
@@ -1063,13 +1065,13 @@ Grid.prototype.initialize = function(gridOption) {
1063
1065
  }
1064
1066
 
1065
1067
  // Merge rows with static data rows
1066
- var staticRows = gridOption["staticDataRows"] || gridOption["dataModel"];
1068
+ let staticRows = gridOption["staticDataRows"] || gridOption["dataModel"];
1067
1069
  if(rows && staticRows) {
1068
- var ary = staticRows["data"] ? staticRows["data"] : staticRows;
1069
- var fields = staticRows["fields"] || t.getColumnFields();
1070
- var values, data;
1071
- var len = rows.length;
1072
- for(var n = 0; n < len; n++) {
1070
+ let ary = staticRows["data"] ? staticRows["data"] : staticRows;
1071
+ let fields = staticRows["fields"] || t.getColumnFields();
1072
+ let values, data;
1073
+ let len = rows.length;
1074
+ for(let n = 0; n < len; n++) {
1073
1075
  if(rows[n]["values"]) { // merge row's values, values can be object or array
1074
1076
  values = arrayToObject(rows[n]["values"], fields);
1075
1077
  data = arrayToObject(ary[n], fields);
@@ -1086,7 +1088,7 @@ Grid.prototype.initialize = function(gridOption) {
1086
1088
  }
1087
1089
  }
1088
1090
 
1089
- for(var j = 0; j < bodies.length; ++j) {
1091
+ for(let j = 0; j < bodies.length; ++j) {
1090
1092
  t.insertRows(bodies[j]["rows"]);
1091
1093
  // break; // TODO: The first version supports only 1 grid
1092
1094
  }
@@ -1097,7 +1099,7 @@ Grid.prototype.initialize = function(gridOption) {
1097
1099
  grid.setBottomPaddingSection(gridOption.contentBottomPadding);
1098
1100
  }
1099
1101
 
1100
- var contentRightPadding = gridOption.contentRightPadding;
1102
+ let contentRightPadding = gridOption.contentRightPadding;
1101
1103
  if(contentRightPadding) {
1102
1104
  if (typeof contentRightPadding !== "number") {
1103
1105
  contentRightPadding = 6;
@@ -1108,14 +1110,15 @@ Grid.prototype.initialize = function(gridOption) {
1108
1110
 
1109
1111
  // Let everything init first
1110
1112
  // then set conflationRate to grid for better perfomance on rapidly updating
1111
- var dataConflationRate = gridOption['dataConflationRate'];
1113
+ let dataConflationRate = gridOption['dataConflationRate'];
1112
1114
  if (dataConflationRate != null) {
1113
1115
  grid.setDataConflationRate(dataConflationRate);
1114
1116
  }
1115
1117
 
1116
1118
  // Tell all plugins that the initialization phase has ended
1117
- var extObjects = grid.getPluginList().map(grid.getPlugin.bind(grid));
1119
+ let extObjects = grid.getPluginList().map(grid.getPlugin.bind(grid));
1118
1120
  t._processExtension(extObjects, "afterInit");
1121
+ t.initSubscription();
1119
1122
  };
1120
1123
 
1121
1124
  /** @public
@@ -1123,14 +1126,14 @@ Grid.prototype.initialize = function(gridOption) {
1123
1126
  * @return {!Object}
1124
1127
  */
1125
1128
  Grid.prototype.getConfigObject = function (gridOptions) {
1126
- var obj = gridOptions || {};
1129
+ let obj = gridOptions || {};
1127
1130
 
1128
- var columns = obj.columns;
1131
+ let columns = obj.columns;
1129
1132
  if(!columns) {
1130
1133
  columns = obj.columns = [];
1131
1134
  }
1132
1135
 
1133
- var grid = this._grid;
1136
+ let grid = this._grid;
1134
1137
  if(grid.getConfigObject) {
1135
1138
  grid.getConfigObject(obj);
1136
1139
  }
@@ -1157,17 +1160,17 @@ Grid.prototype.getConfigObject = function (gridOptions) {
1157
1160
  }
1158
1161
 
1159
1162
 
1160
- var i, len, prevTimeSeriesField;
1163
+ let i, len, prevTimeSeriesField;
1161
1164
  len = this.getColumnCount();
1162
1165
  for (i = 0; i < len; ++i) {
1163
- var column = columns[i];
1166
+ let column = columns[i];
1164
1167
  if(!column) {
1165
1168
  column = columns[i] = {};
1166
1169
  }
1167
- var colDef = this.getColumnDefinition(i);
1170
+ let colDef = this.getColumnDefinition(i);
1168
1171
  // TODO: Update width and scalability changed by the extensions
1169
1172
  colDef.getConfigObject(column);
1170
- var parentField = FieldDefinition.getFieldProperty(colDef.getField(), "timeSeriesParent");
1173
+ let parentField = FieldDefinition.getFieldProperty(colDef.getField(), "timeSeriesParent");
1171
1174
  if(parentField && !prevTimeSeriesField) { // Assume first column of time series child to convert to time series parent
1172
1175
  prevTimeSeriesField = parentField;
1173
1176
  column.field = parentField;
@@ -1185,7 +1188,7 @@ Grid.prototype.getConfigObject = function (gridOptions) {
1185
1188
  obj["scrollbar"] = false;
1186
1189
  }
1187
1190
 
1188
- var val = this._dv.getPageSize();
1191
+ let val = this._dv.getPageSize();
1189
1192
  if(val > 0) {
1190
1193
  obj["pageSize"] = val;
1191
1194
  }
@@ -1238,9 +1241,9 @@ Grid.prototype.getConfigObject = function (gridOptions) {
1238
1241
  }
1239
1242
 
1240
1243
  // get all rows config
1241
- var rowDefs = this.getAllRowDefinitions();
1242
- var rows = obj["rows"] = [];
1243
- var rowDef, rowConfig;
1244
+ let rowDefs = this.getAllRowDefinitions();
1245
+ let rows = obj["rows"] = [];
1246
+ let rowDef, rowConfig;
1244
1247
  len = rowDefs.length;
1245
1248
  for (i = 0; i < len; i++) {
1246
1249
  rowDef = rowDefs[i];
@@ -1249,9 +1252,9 @@ Grid.prototype.getConfigObject = function (gridOptions) {
1249
1252
  }
1250
1253
 
1251
1254
  // get row config from extensions
1252
- var extensions = grid.getPlugins();
1253
- var pluginInstance, row;
1254
- for(var key in extensions) {
1255
+ let extensions = grid.getPlugins();
1256
+ let pluginInstance, row;
1257
+ for(let key in extensions) {
1255
1258
  pluginInstance = extensions[key];
1256
1259
  if(typeof pluginInstance["getRowConfigObject"] === "function") {
1257
1260
  len = rows.length;
@@ -1303,11 +1306,11 @@ Grid.prototype.setLocale = function(lang) {
1303
1306
  * @param {Array.<Object>} userColumns
1304
1307
  */
1305
1308
  Grid.prototype._defaultColumnSetup = function (defaultCol, userColumns) {
1306
- var c = userColumns.length;
1307
- for (var i = 0; i < c; i++) {
1308
- var column = userColumns[i];
1309
+ let c = userColumns.length;
1310
+ for (let i = 0; i < c; i++) {
1311
+ let column = userColumns[i];
1309
1312
  if (typeof column === 'object') {
1310
- for (var key in defaultCol) {
1313
+ for (let key in defaultCol) {
1311
1314
  if (column[key] == null) {
1312
1315
  column[key] = defaultCol[key];
1313
1316
  }
@@ -1325,7 +1328,7 @@ Grid.prototype._defaultColumnSetup = function (defaultCol, userColumns) {
1325
1328
  */
1326
1329
  Grid.prototype._processExtension = function (exts, field, params) {
1327
1330
  if(Array.isArray(exts)) {
1328
- for (var i = 0; i < exts.length; i++) {
1331
+ for (let i = 0; i < exts.length; i++) {
1329
1332
  if (exts[i][field]) {
1330
1333
  exts[i][field].apply(exts[i], params);
1331
1334
  }
@@ -1337,15 +1340,15 @@ Grid.prototype._processExtension = function (exts, field, params) {
1337
1340
  * @param {Object} e
1338
1341
  */
1339
1342
  Grid.prototype._onRicAdded = function(e) {
1340
- var addedRics = e.addedRics;
1343
+ let addedRics = e.addedRics;
1341
1344
  this._snapshot.addFields(e.fields);
1342
- var len = addedRics.length;
1343
- for (var i = 0; i < len; ++i) {
1344
- var ric = addedRics[i];
1345
- var rowDefs = this._connector.getRowDefByRic(ric);
1346
- var jLen = rowDefs ? rowDefs.length : 0;
1347
- for (var j = 0; j < jLen; ++j) {
1348
- var rowDef = rowDefs[j];
1345
+ let len = addedRics.length;
1346
+ for (let i = 0; i < len; ++i) {
1347
+ let ric = addedRics[i];
1348
+ let rowDefs = this._connector.getRowDefByRic(ric);
1349
+ let jLen = rowDefs ? rowDefs.length : 0;
1350
+ for (let j = 0; j < jLen; ++j) {
1351
+ let rowDef = rowDefs[j];
1349
1352
  if (rowDef.getSymbol() === ric) {
1350
1353
  this._snapshot.addRic(ric); // ADC
1351
1354
  }
@@ -1366,18 +1369,18 @@ Grid.prototype._onRicRemoved = function(e) {
1366
1369
  * @param {Object} e
1367
1370
  */
1368
1371
  Grid.prototype._onFieldAdded = function(e) {
1369
- var rowDefs = e.rowDefs;
1370
- var addedFields = e.addedFields;
1372
+ let rowDefs = e.rowDefs;
1373
+ let addedFields = e.addedFields;
1371
1374
 
1372
1375
  // ADC
1373
- for (var i in rowDefs) {
1376
+ for (let i in rowDefs) {
1374
1377
  this._snapshot.addRic(rowDefs[i].getSymbol());
1375
1378
  }
1376
1379
  this._snapshot.addFields(addedFields);
1377
1380
 
1378
1381
  // JET
1379
1382
  if (this._subs) {
1380
- var realtimeFields = addedFields.filter(FieldDefinition.isRealTimeField);
1383
+ let realtimeFields = addedFields.filter(FieldDefinition.isRealTimeField);
1381
1384
  if(realtimeFields.length > 0) {
1382
1385
  this._subs["addFields"](realtimeFields);
1383
1386
  }
@@ -1389,7 +1392,7 @@ Grid.prototype._onFieldAdded = function(e) {
1389
1392
  * @param {Object} e
1390
1393
  */
1391
1394
  Grid.prototype._onFieldRemoved = function(e) {
1392
- var removedFields = e.removedFields;
1395
+ let removedFields = e.removedFields;
1393
1396
 
1394
1397
  // TODO: ADC fields have an interval load. Currently, we only keep the field but do not delete it.
1395
1398
  // JET
@@ -1405,19 +1408,19 @@ Grid.prototype._onFieldRemoved = function(e) {
1405
1408
  * @param {number=} idx
1406
1409
  */
1407
1410
  Grid.prototype.insertColumn = function (columnOption, idx) {
1408
- var colCount = this.getColumnCount();
1411
+ let colCount = this.getColumnCount();
1409
1412
  if(idx == null || idx > colCount) {
1410
1413
  idx = colCount;
1411
1414
  }
1412
1415
 
1413
1416
  // no need to merge defaultColumn during initialize process
1414
1417
  // because columnOption already mutate by initialize function
1415
- var configObj = (this._initializing) ? {} : cloneObject(this._defaultColumnOptions);
1418
+ let configObj = (this._initializing) ? {} : cloneObject(this._defaultColumnOptions);
1416
1419
 
1417
1420
  if (typeof columnOption === "string") {
1418
1421
  configObj["field"] = columnOption;
1419
1422
  } else { // columnOption is assumed to be an object
1420
- for (var key in columnOption) {
1423
+ for (let key in columnOption) {
1421
1424
  configObj[key] = columnOption[key];
1422
1425
  }
1423
1426
  }
@@ -1426,7 +1429,7 @@ Grid.prototype.insertColumn = function (columnOption, idx) {
1426
1429
  configObj["formulaEngine"] = this._fnEngine; // Adding extra option
1427
1430
  }
1428
1431
 
1429
- var colDef = new ColumnDefinition(configObj, this);
1432
+ let colDef = new ColumnDefinition(configObj, this);
1430
1433
  configObj[COL_DEF] = colDef;
1431
1434
 
1432
1435
  // WARNING: width is processed twice by tr-grid and rt-grid
@@ -1439,18 +1442,18 @@ Grid.prototype.insertColumn = function (columnOption, idx) {
1439
1442
  * @param {Object} e snapshort change event object
1440
1443
  */
1441
1444
  Grid.prototype._updateTimeSeriesFields = function (e) {
1442
- var childField;
1443
- var snapShotData = e.data;
1444
- var childFields = {};
1445
- for (var ric in snapShotData) {
1445
+ let childField;
1446
+ let snapShotData = e.data;
1447
+ let childFields = {};
1448
+ for (let ric in snapShotData) {
1446
1449
  // childFields = snapShotData[ric];
1447
1450
  for (childField in snapShotData[ric]) {
1448
1451
  childFields[childField] = true; // Merge child fields to parent (Don't truth each ric it will be have some empty data)
1449
1452
  }
1450
1453
  this.setRicData(ric, snapShotData[ric]); // update cell data if exist
1451
1454
  }
1452
- var parentField, field, colIndex, parentColDef, childColIndex;
1453
- var parentMap = {}; // map parent time series field and their first child
1455
+ let parentField, field, colIndex, parentColDef, childColIndex;
1456
+ let parentMap = {}; // map parent time series field and their first child
1454
1457
  for (field in childFields) { // Warning: data change can be differ time series child field
1455
1458
  parentField = e.childrenFieldToParent[field];
1456
1459
  if(!parentMap[parentField]) {
@@ -1461,10 +1464,10 @@ Grid.prototype._updateTimeSeriesFields = function (e) {
1461
1464
  }
1462
1465
 
1463
1466
  for (parentField in parentMap) { // WARNING: one dataChanged event can be multiple fields
1464
- var childrenField = parentMap[parentField];
1467
+ let childrenField = parentMap[parentField];
1465
1468
  colIndex = this.getColumnIndex(parentField);
1466
1469
  parentColDef = this._getColumnDefinition(colIndex);
1467
- var i, len;
1470
+ let i, len;
1468
1471
  len = childrenField.length;
1469
1472
  for (i = 0; i < len; i++) {
1470
1473
  childField = childrenField[i];
@@ -1490,8 +1493,8 @@ Grid.prototype._populateTimeSeriesChildren = function (colDef) {
1490
1493
  return;
1491
1494
  }
1492
1495
 
1493
- var colDefs = this._timeSeriesChildConflator.popAllData();
1494
- var i, j, len, childField, idx;
1496
+ let colDefs = this._timeSeriesChildConflator.popAllData();
1497
+ let i, j, len, childField, idx;
1495
1498
 
1496
1499
  for (i = 0; i < colDefs.length; i++) {
1497
1500
  colDef = colDefs[i];
@@ -1500,8 +1503,8 @@ Grid.prototype._populateTimeSeriesChildren = function (colDef) {
1500
1503
  if(!colDef) {
1501
1504
  continue;
1502
1505
  }
1503
- var parentField = colDef.getField();
1504
- var childFields = FieldDefinition.getTimeSeriesChildren(parentField);
1506
+ let parentField = colDef.getField();
1507
+ let childFields = FieldDefinition.getTimeSeriesChildren(parentField);
1505
1508
  if(!childFields) { // not found time series field
1506
1509
  return;
1507
1510
  }
@@ -1526,7 +1529,7 @@ Grid.prototype._populateTimeSeriesChildren = function (colDef) {
1526
1529
  * @param {number} idx index of insertion column
1527
1530
  */
1528
1531
  Grid.prototype._cloneTimeSeriesColumn = function (parentColDef, childField, idx) {
1529
- var parentConfig, columnOption;
1532
+ let parentConfig, columnOption;
1530
1533
  parentConfig = parentColDef.getConfigObject();
1531
1534
  columnOption = cloneObject(parentConfig);
1532
1535
  columnOption["field"] = childField.replace("TR.", ""); // We need to remove the 'TR' prefix from the field to avoid confusion with time series fields.
@@ -1543,15 +1546,15 @@ Grid.prototype._cloneTimeSeriesColumn = function (parentColDef, childField, idx)
1543
1546
  * @param {Grid~ColumnReference} colRef
1544
1547
  */
1545
1548
  Grid.prototype.replaceColumn = function (columnOption, colRef) {
1546
- var colIndex = this.getColumnIndex(colRef);
1549
+ let colIndex = this.getColumnIndex(colRef);
1547
1550
  if(colIndex < 0) {
1548
1551
  return;
1549
1552
  }
1550
- var colConfig = {};
1551
- var core = this._grid;
1552
- var columnDef = core._getColumnDef(colIndex);
1553
+ let colConfig = {};
1554
+ let core = this._grid;
1555
+ let columnDef = core._getColumnDef(colIndex);
1553
1556
 
1554
- var value = core.getColumnScalability(colIndex);
1557
+ let value = core.getColumnScalability(colIndex);
1555
1558
  colConfig["scalable"] = value;
1556
1559
 
1557
1560
  value = core.getColumnCustomLaneSize(colIndex);
@@ -1585,7 +1588,7 @@ Grid.prototype.replaceColumn = function (columnOption, colRef) {
1585
1588
  if(typeof columnOption === "string") {
1586
1589
  colConfig["field"] = columnOption;
1587
1590
  } else { // type object from user
1588
- for (var key in columnOption) {
1591
+ for (let key in columnOption) {
1589
1592
  colConfig[key] = columnOption[key];
1590
1593
  }
1591
1594
  }
@@ -1598,7 +1601,7 @@ Grid.prototype.replaceColumn = function (columnOption, colRef) {
1598
1601
  colConfig["width"] = 1;
1599
1602
  }
1600
1603
 
1601
- var colDef = this.getColumnDefinition(colIndex);
1604
+ let colDef = this.getColumnDefinition(colIndex);
1602
1605
  if(colDef && colConfig.id == null) {
1603
1606
  colConfig.id = colDef.getId(); // retain ID
1604
1607
  }
@@ -1616,7 +1619,7 @@ Grid.prototype.replaceColumn = function (columnOption, colRef) {
1616
1619
  */
1617
1620
  Grid.prototype._onFieldLoadedSuccess = function (field, colDef, response) {
1618
1621
  if (response && response.id) {
1619
- var fieldDef = response;
1622
+ let fieldDef = response;
1620
1623
  if (colDef && colDef.getField() === field) {
1621
1624
  if (colDef.isDefaultName() && fieldDef.name) {
1622
1625
  colDef.setName(fieldDef.name);
@@ -1642,7 +1645,7 @@ Grid.prototype._onFieldLoadedError = function (err) {
1642
1645
  Grid.prototype._onFieldLoaded = function (field, referrer) {
1643
1646
  // For time series, we need to wait until the field is loadedm, then we can insert a child from the field data.
1644
1647
  if(FieldDefinition.isTimeSeries(field)) {
1645
- var colDef = this.getColumnDefinitionById(referrer); // The 'referrer' is a column ID that was just added
1648
+ let colDef = this.getColumnDefinitionById(referrer); // The 'referrer' is a column ID that was just added
1646
1649
  this._populateTimeSeriesChildren(colDef);
1647
1650
  }
1648
1651
  this._connector.addFields(field, referrer);
@@ -1679,14 +1682,14 @@ Grid.prototype.getFieldInfo = function(field) {
1679
1682
  * @param {string} field
1680
1683
  * @return {Promise}
1681
1684
  * @example
1682
- * var gridConfig = {
1685
+ * let gridConfig = {
1683
1686
  * synapse: { // define synapse configuration
1684
1687
  * apiKey: "xxx",
1685
1688
  * contextApp: "xxx",
1686
1689
  * auth: "xxx" (optional)
1687
1690
  * }
1688
1691
  * };
1689
- * var promise = grid.loadFieldInfo("CF_LAST");
1692
+ * let promise = grid.loadFieldInfo("CF_LAST");
1690
1693
  */
1691
1694
  Grid.prototype.loadFieldInfo = function(field) {
1692
1695
  return FieldDefinition.loadFieldInfo(field);
@@ -1699,7 +1702,7 @@ Grid.prototype.loadFieldInfo = function(field) {
1699
1702
  */
1700
1703
  Grid.prototype._shouldLoadFieldInfo = function (field) {
1701
1704
 
1702
- var val = this._RTK || window["JET"]; // Fastest checking can be performed by checking the first condition.
1705
+ let val = this._RTK || window["JET"]; // Fastest checking can be performed by checking the first condition.
1703
1706
  if(!val) {
1704
1707
  return false;
1705
1708
  }
@@ -1726,17 +1729,17 @@ Grid.prototype._shouldLoadFieldInfo = function (field) {
1726
1729
  * @param {Array.<Object>} columns Array of column options
1727
1730
  */
1728
1731
  Grid.prototype.setColumns = function(columns) {
1729
- var grid = this._grid;
1730
- var colCount = (columns) ? columns.length : 0;
1732
+ let grid = this._grid;
1733
+ let colCount = (columns) ? columns.length : 0;
1731
1734
 
1732
1735
  grid.startBatch("reset");
1733
1736
  this.removeAllColumns();
1734
1737
  if(colCount > 0) {
1735
- var prevState = false;
1738
+ let prevState = false;
1736
1739
  if(colCount > 1) {
1737
1740
  prevState = grid.freezeLayout(true); // Insert multiple columns can be a huge time consuming
1738
1741
  }
1739
- for(var i = 0; i < colCount; ++i) {
1742
+ for(let i = 0; i < colCount; ++i) {
1740
1743
  this.insertColumn(columns[i], i);
1741
1744
  }
1742
1745
  if(colCount > 1) {
@@ -1753,20 +1756,20 @@ Grid.prototype.setColumns = function(columns) {
1753
1756
  * @param {boolean=} byId=false, if enable it, this method will only check for differences in the 'id' property
1754
1757
  */
1755
1758
  Grid.prototype.restoreColumns = function(columns, byId) {
1756
- var grid = this._grid;
1759
+ let grid = this._grid;
1757
1760
  grid.startBatch("reset");
1758
- var configObj = this.getConfigObject();
1759
- var previousColumns = configObj.columns;
1761
+ let configObj = this.getConfigObject();
1762
+ let previousColumns = configObj.columns;
1760
1763
 
1761
- var preColLen = previousColumns.length;
1762
- var newColLen = columns.length;
1764
+ let preColLen = previousColumns.length;
1765
+ let newColLen = columns.length;
1763
1766
 
1764
- var compareLogic = byId ? _hasMatchingId : deepEqual;
1765
- var removingFields = [];
1766
- var keepingColumns = [];
1767
- var columnOrdering = [];
1767
+ let compareLogic = byId ? _hasMatchingId : deepEqual;
1768
+ let removingFields = [];
1769
+ let keepingColumns = [];
1770
+ let columnOrdering = [];
1768
1771
 
1769
- var i, j, found;
1772
+ let i, j, found;
1770
1773
  // Slow, time complexity BigO(n ^ 2)
1771
1774
  for (i = 0; i < preColLen; i++) {
1772
1775
  found = false;
@@ -1784,8 +1787,8 @@ Grid.prototype.restoreColumns = function(columns, byId) {
1784
1787
 
1785
1788
  this.removeColumns(removingFields);
1786
1789
 
1787
- var keepingLen = keepingColumns.length;
1788
- var prevState = false;
1790
+ let keepingLen = keepingColumns.length;
1791
+ let prevState = false;
1789
1792
  if(newColLen > 1) {
1790
1793
  prevState = this._grid.freezeLayout(true); // Insert multiple columns can be a huge time consuming
1791
1794
  }
@@ -1794,7 +1797,7 @@ Grid.prototype.restoreColumns = function(columns, byId) {
1794
1797
  for (j = 0; j < keepingLen; j++) { // loop only keeping column
1795
1798
  if(compareLogic(columns[i], keepingColumns[j])) {
1796
1799
  found = true;
1797
- var colIndex = this.getColumnIndex(columns[i].id || columns[i].field); // We cannot use 'i' (colIndex) in this case, as it will sort the columns. Instead, we need to obtain a new column index from the field.
1800
+ let colIndex = this.getColumnIndex(columns[i].id || columns[i].field); // We cannot use 'i' (colIndex) in this case, as it will sort the columns. Instead, we need to obtain a new column index from the field.
1798
1801
  columnOrdering.push(this.getColumnId(colIndex));
1799
1802
  break;
1800
1803
  }
@@ -1825,27 +1828,27 @@ Grid.prototype.setFields = Grid.prototype.setColumns;
1825
1828
  * @param {Object} e
1826
1829
  */
1827
1830
  Grid.prototype._onColumnAdded = function(e) {
1828
- var colDef = /** @type{ColumnDefinition} */(e.context[COL_DEF]);
1831
+ let colDef = /** @type{ColumnDefinition} */(e.context[COL_DEF]);
1829
1832
  delete e.context[COL_DEF];
1830
- var idx = e.colIndex;
1833
+ let idx = e.colIndex;
1831
1834
 
1832
- var coreColDef = this._grid._getColumnDef(idx);
1835
+ let coreColDef = this._grid._getColumnDef(idx);
1833
1836
  colDef._setCoreColumnDef(coreColDef); // For column id and field
1834
1837
 
1835
- var colData = this._grid.getColumnData(idx);
1838
+ let colData = this._grid.getColumnData(idx);
1836
1839
  if(!colData) { // Save column inside grid
1837
1840
  colData = this._grid.setColumnData(idx, {});
1838
1841
  }
1839
1842
  colData[COL_DEF] = colDef;
1840
- var userModel = colDef.getUserModel();
1843
+ let userModel = colDef.getUserModel();
1841
1844
  // binding
1842
1845
  this._grid.setColumnDataBindingHandler(idx, colDef.getRenderer());
1843
1846
  // width and scalable
1844
- var value = userModel["width"];
1847
+ let value = userModel["width"];
1845
1848
  // eslint-disable-next-line no-undefined
1846
1849
  if(value !== undefined) {
1847
1850
  value = +value;
1848
- var scalable;
1851
+ let scalable;
1849
1852
  if(userModel["scalable"] != null) {
1850
1853
  scalable = userModel["scalable"] ? true : false;
1851
1854
  } else {
@@ -1881,16 +1884,16 @@ Grid.prototype._onColumnAdded = function(e) {
1881
1884
  }
1882
1885
 
1883
1886
  // className
1884
- var i, classes = colDef.getClasses();
1887
+ let i, classes = colDef.getClasses();
1885
1888
  for(i = 0; i < classes.length; i++) {
1886
1889
  this._grid.enableColumnClass(idx, classes[i]);
1887
1890
  }
1888
- var colField = colDef.getField();
1891
+ let colField = colDef.getField();
1889
1892
  this._grid.setDataColumnName(idx, ROW_DEF); // This make ColumnDefinition renderer work
1890
- var fields = colDef.getAllFields();
1891
- var referrer = colDef.getId();
1892
- var len = fields.length;
1893
- var field, dataType, prom, onLoaded;
1893
+ let fields = colDef.getAllFields();
1894
+ let referrer = colDef.getId();
1895
+ let len = fields.length;
1896
+ let field, dataType, prom, onLoaded;
1894
1897
  for(i = 0; i < len; i++) {
1895
1898
  field = fields[i];
1896
1899
  if(this._shouldLoadFieldInfo(field)) {
@@ -1928,12 +1931,12 @@ Grid.prototype._onColumnAdded = function(e) {
1928
1931
  * @see {@link Grid#removeAllColumns}
1929
1932
  */
1930
1933
  Grid.prototype.removeColumn = function(colRef) {
1931
- var colIndex = this.getColumnIndex(colRef);
1934
+ let colIndex = this.getColumnIndex(colRef);
1932
1935
  if(colIndex < 0) {
1933
1936
  return;
1934
1937
  }
1935
1938
 
1936
- var colDef = this.getColumnDefinition(colIndex);
1939
+ let colDef = this.getColumnDefinition(colIndex);
1937
1940
 
1938
1941
  if(!colDef.isRealTimeField()) {
1939
1942
  if(this._dc) {
@@ -1954,8 +1957,8 @@ Grid.prototype.removeColumn = function(colRef) {
1954
1957
  * @see {@link Grid#removeAllColumns}
1955
1958
  */
1956
1959
  Grid.prototype.removeColumns = function(colRefs) {
1957
- var indices = this.getColumnIndices(colRefs);
1958
- var len = indices.length;
1960
+ let indices = this.getColumnIndices(colRefs);
1961
+ let len = indices.length;
1959
1962
  if(len <= 1) {
1960
1963
  if(len === 1) {
1961
1964
  this.removeColumn(indices[0]);
@@ -1964,12 +1967,12 @@ Grid.prototype.removeColumns = function(colRefs) {
1964
1967
  }
1965
1968
  indices.sort(Grid._descendingOrder); // Removal must be done from the back
1966
1969
 
1967
- var staticFields = []; // For clearing any data stored in our cache
1968
- var prevState = this._grid.freezeLayout(); // To prevent multiple UI updates
1970
+ let staticFields = []; // For clearing any data stored in our cache
1971
+ let prevState = this._grid.freezeLayout(); // To prevent multiple UI updates
1969
1972
 
1970
- for(var i = 0; i < len; ++i) {
1971
- var colIndex = indices[i];
1972
- var colDef = this.getColumnDefinition(colIndex);
1973
+ for(let i = 0; i < len; ++i) {
1974
+ let colIndex = indices[i];
1975
+ let colDef = this.getColumnDefinition(colIndex);
1973
1976
  if(!colDef.isRealTimeField()) {
1974
1977
  staticFields.push(colDef.getField());
1975
1978
  }
@@ -1991,7 +1994,7 @@ Grid.prototype.removeColumns = function(colRefs) {
1991
1994
  * @see {@link Grid#removeColumns}
1992
1995
  */
1993
1996
  Grid.prototype.removeAllColumns = function() {
1994
- var colCount = this.getColumnCount();
1997
+ let colCount = this.getColumnCount();
1995
1998
  if(colCount <= 0) {
1996
1999
  return;
1997
2000
  }
@@ -1999,10 +2002,10 @@ Grid.prototype.removeAllColumns = function() {
1999
2002
  if(!this._sharedSorter) {
2000
2003
  this.clearSort();
2001
2004
  }
2002
- for(var i = colCount; --i >= 0;) {
2005
+ for(let i = colCount; --i >= 0;) {
2003
2006
  // WARNING: This may affect plugins event listeners
2004
2007
  this._grid.setColumnDataBindingHandler(i, null);
2005
- var colDef = this.getColumnDefinition(i);
2008
+ let colDef = this.getColumnDefinition(i);
2006
2009
  colDef.dispose();
2007
2010
  }
2008
2011
  // TODO: Remove fields that are related to the column (e.g. fields for coloring)
@@ -2062,7 +2065,7 @@ Grid.prototype.reorderColumns = function (colRefs, destCol) {
2062
2065
  * @see {@link Grid#showAllColumns}
2063
2066
  */
2064
2067
  Grid.prototype.hideColumn = function(colRef, hidden) {
2065
- var colIndex = this.getColumnIndex(colRef);
2068
+ let colIndex = this.getColumnIndex(colRef);
2066
2069
  if(colIndex < 0) { // not found
2067
2070
  return;
2068
2071
  }
@@ -2107,9 +2110,9 @@ Grid.prototype.addDataFields = function(fieldRef, referrer) {
2107
2110
  return false;
2108
2111
  }
2109
2112
 
2110
- var fields = Array.isArray(fieldRef) ? fieldRef : [fieldRef];
2111
- var len = fields.length;
2112
- var i, field, dataType, prom, onLoaded;
2113
+ let fields = Array.isArray(fieldRef) ? fieldRef : [fieldRef];
2114
+ let len = fields.length;
2115
+ let i, field, dataType, prom, onLoaded;
2113
2116
  for(i = 0; i < len; i++) {
2114
2117
  field = fields[i];
2115
2118
  if(this._shouldLoadFieldInfo(field)) {
@@ -2166,7 +2169,7 @@ Grid.prototype.sortColumn = function(colRef, opt_order) {
2166
2169
  return;
2167
2170
  }
2168
2171
 
2169
- var colIndex = this.getColumnIndex(colRef);
2172
+ let colIndex = this.getColumnIndex(colRef);
2170
2173
  if(colIndex < 0) {
2171
2174
  this._stp.sortColumn(this.getSortedColumnIndex(), "n"); // reset current sorting
2172
2175
  } else {
@@ -2178,7 +2181,7 @@ Grid.prototype.sortColumn = function(colRef, opt_order) {
2178
2181
  * @param {string} str
2179
2182
  */
2180
2183
  Grid.prototype.setColumnName = function(colIndex, str) {
2181
- var colDef = this.getColumnDefinition(colIndex);
2184
+ let colDef = this.getColumnDefinition(colIndex);
2182
2185
  if(colDef) {
2183
2186
  colDef.setName(str);
2184
2187
  this.updateColumnTitle();
@@ -2189,7 +2192,7 @@ Grid.prototype.setColumnName = function(colIndex, str) {
2189
2192
  * @param {Function=} func
2190
2193
  */
2191
2194
  Grid.prototype.setColumnRenderer = function(colRef, func) {
2192
- var colIndex = this.getColumnIndex(colRef);
2195
+ let colIndex = this.getColumnIndex(colRef);
2193
2196
  this.setColumnFormatter(colIndex, func);
2194
2197
  };
2195
2198
 
@@ -2199,10 +2202,10 @@ Grid.prototype.setColumnRenderer = function(colRef, func) {
2199
2202
  * @param {Function=} func If not specified the renderer which corresponded id from mapping will be picked up
2200
2203
  */
2201
2204
  Grid.prototype.activateColumnRenderer = function(colRef, id, func) {
2202
- var colIndex = this.getColumnIndex(colRef);
2205
+ let colIndex = this.getColumnIndex(colRef);
2203
2206
  if (colIndex == null) { return; }
2204
2207
 
2205
- var colDef = this.getColumnDefinition(colIndex);
2208
+ let colDef = this.getColumnDefinition(colIndex);
2206
2209
  if(!colDef) { return; }
2207
2210
 
2208
2211
  colDef.activateRenderer(id, func);
@@ -2219,12 +2222,12 @@ Grid.prototype.activateColumnRenderer = function(colRef, id, func) {
2219
2222
  Grid.prototype.setColumnFormatter = function (colIndex, formatter) {
2220
2223
  if (colIndex == null) { return; }
2221
2224
 
2222
- var colDef = this.getColumnDefinition(colIndex);
2225
+ let colDef = this.getColumnDefinition(colIndex);
2223
2226
  if(!colDef) {
2224
2227
  return;
2225
2228
  }
2226
2229
 
2227
- var func = null;
2230
+ let func = null;
2228
2231
  if (formatter) {
2229
2232
  if(typeof formatter === "object") {
2230
2233
  if(typeof formatter.init === "function") { // Initialize predefined formatter
@@ -2241,8 +2244,8 @@ Grid.prototype.setColumnFormatter = function (colIndex, formatter) {
2241
2244
  }
2242
2245
 
2243
2246
  if(func !== colDef.getRenderer()) {
2244
- var section = this._grid.getSection("content");
2245
- var col = /** @type {Column} */section.getColumn(colIndex);
2247
+ let section = this._grid.getSection("content");
2248
+ let col = /** @type {Column} */section.getColumn(colIndex);
2246
2249
  if (col) {
2247
2250
  col.clearContent();
2248
2251
  }
@@ -2261,12 +2264,12 @@ Grid.prototype.setColumnFormatter = function (colIndex, formatter) {
2261
2264
  * @param {ColumnDefinition~SortLogic=} func
2262
2265
  */
2263
2266
  Grid.prototype.setColumnSorter = function(colRef, func) {
2264
- var colIndex = this.getColumnIndex(colRef);
2265
- var colDef = this.getColumnDefinition(colIndex);
2267
+ let colIndex = this.getColumnIndex(colRef);
2268
+ let colDef = this.getColumnDefinition(colIndex);
2266
2269
  if(colDef) {
2267
2270
  colDef.setSorter(func);
2268
2271
 
2269
- var sortedColumn = this.getSortedColumnIndex(); // TODO: Support multi-column sorting
2272
+ let sortedColumn = this.getSortedColumnIndex(); // TODO: Support multi-column sorting
2270
2273
  if(sortedColumn === colIndex) {
2271
2274
  this._stp.refresh();
2272
2275
  }
@@ -2279,8 +2282,8 @@ Grid.prototype.setColumnSorter = function(colRef, func) {
2279
2282
  * @param {RowDefinition} rowDef
2280
2283
  */
2281
2284
  Grid.prototype._initDuplicateRicData = function(rowDef) {
2282
- var ric = rowDef.getSymbol();
2283
- var rowDefs = this._connector.getRowDefByRic(ric);
2285
+ let ric = rowDef.getSymbol();
2286
+ let rowDefs = this._connector.getRowDefByRic(ric);
2284
2287
  if(rowDefs && rowDefs.length) {
2285
2288
  cloneRowData(rowDefs[0], rowDef);
2286
2289
  }
@@ -2290,7 +2293,7 @@ Grid.prototype._initDuplicateRicData = function(rowDef) {
2290
2293
  * @param {Grid~RowReference=} rowRef Reference (i.e. row index, row id, or row definition) of the insert position
2291
2294
  * @returns {RowDefinition}
2292
2295
  * @example
2293
- * var grid = new rt.Grid(grid_div, options);
2296
+ * let grid = new rt.Grid(grid_div, options);
2294
2297
  * grid.insertRow({"ric": "RIC"}, 0); // A new row is added at the top
2295
2298
  */
2296
2299
  Grid.prototype.insertRow = function(rowOption, rowRef) {
@@ -2307,7 +2310,7 @@ Grid.prototype.insertRow = function(rowOption, rowRef) {
2307
2310
  }
2308
2311
  }
2309
2312
  }
2310
- var rowDef = new RowDefinition(rowOption);
2313
+ let rowDef = new RowDefinition(rowOption);
2311
2314
  rowDef.setDataSource(this._dc); // This could also subscribe chain index/ric to JET/RTK
2312
2315
  this._initDuplicateRicData(rowDef);
2313
2316
 
@@ -2323,7 +2326,7 @@ Grid.prototype.insertRow = function(rowOption, rowRef) {
2323
2326
  * @param {Grid~RowReference=} rowRef Reference (i.e. row index, row id, or row definition) of the insert position
2324
2327
  * @param {Array.<string>=} opt_fields
2325
2328
  * @example
2326
- * var grid = new rt.Grid(grid_div, options);
2329
+ * let grid = new rt.Grid(grid_div, options);
2327
2330
  * grid.insertRows([
2328
2331
  * {ric: "RIC"},
2329
2332
  * {values: {"field1": 0, "field2": 1}},
@@ -2340,12 +2343,12 @@ Grid.prototype.insertRows = function(rowOptions, rowRef, opt_fields) {
2340
2343
  return;
2341
2344
  }
2342
2345
 
2343
- var prevState = this._dt.freeze(); // Avoid sorting for each inserted row
2344
- var fields = opt_fields || this.getColumnFields();
2345
- var rowId = this._getRowId(rowRef);
2346
- var len = rowOptions.length;
2347
- for(var r = 0; r < len; ++r) {
2348
- var rowOption = rowOptions[r];
2346
+ let prevState = this._dt.freeze(); // Avoid sorting for each inserted row
2347
+ let fields = opt_fields || this.getColumnFields();
2348
+ let rowId = this._getRowId(rowRef);
2349
+ let len = rowOptions.length;
2350
+ for(let r = 0; r < len; ++r) {
2351
+ let rowOption = rowOptions[r];
2349
2352
  if(rowOption) {
2350
2353
  if(typeof rowOption === "string") {
2351
2354
  rowOption = { "ric": rowOption };
@@ -2363,7 +2366,7 @@ Grid.prototype.insertRows = function(rowOptions, rowRef, opt_fields) {
2363
2366
  * @see {@link Grid#logDV}
2364
2367
  * @see {@link Grid#logDT}
2365
2368
  * @example
2366
- * var grid = new rt.Grid(grid_div, options);
2369
+ * let grid = new rt.Grid(grid_div, options);
2367
2370
  * grid.addStaticDataRows([
2368
2371
  * [10, "a", true],
2369
2372
  * [20, "b", false],
@@ -2384,7 +2387,7 @@ Grid.prototype.addStaticDataRows = function(dataRows, fields) {
2384
2387
  }
2385
2388
 
2386
2389
  if(!Array.isArray(dataRows)) {
2387
- var userObj = dataRows;
2390
+ let userObj = dataRows;
2388
2391
  dataRows = null;
2389
2392
  if(userObj) {
2390
2393
  if(userObj.fields && !fields) {
@@ -2448,13 +2451,15 @@ Grid.prototype.updateDataSet = function(records, rowIdentifier) {
2448
2451
  }
2449
2452
 
2450
2453
  // Map new data index
2451
- var recordCount = records.length;
2452
- var fieldSorting = "ROW_ORDER"; // TODO: Should be config by options
2453
- var oldDataMap = {};
2454
- var rowDef, id, record, i;
2455
- var rowDefs = this.getAllRowDefinitions(); // Include the filter/hidden rows
2456
- var rowDefCount = rowDefs.length;
2454
+ let recordCount = records.length;
2455
+ let fieldSorting = "ROW_ORDER"; // TODO: Should be config by options
2456
+ let oldDataMap = {};
2457
+ let rowDef, id, record, i;
2458
+ let rowDefs = this.getAllRowDefinitions(); // Include the filter/hidden rows
2459
+ let rowDefCount = rowDefs.length;
2460
+ let prevState = false;
2457
2461
  if(rowIdentifier) {
2462
+ prevState = this._dt.freeze();
2458
2463
  for (i = 0; i < rowDefCount; i++) {
2459
2464
  rowDef = rowDefs[i];
2460
2465
  if(rowDef) {
@@ -2467,8 +2472,8 @@ Grid.prototype.updateDataSet = function(records, rowIdentifier) {
2467
2472
  }
2468
2473
  }
2469
2474
 
2470
- var idMap = {};
2471
- var newDataMap = {};
2475
+ let idMap = {};
2476
+ let newDataMap = {};
2472
2477
  for (i = recordCount - 1; i >= 0; i--) {
2473
2478
  record = records[i];
2474
2479
  id = record[rowIdentifier];
@@ -2486,13 +2491,17 @@ Grid.prototype.updateDataSet = function(records, rowIdentifier) {
2486
2491
  }
2487
2492
  }
2488
2493
  // Check Remove previous data
2489
- for (var rowIdentifierName in oldDataMap) {
2494
+ for (let rowIdentifierName in oldDataMap) {
2490
2495
  if (oldDataMap[rowIdentifierName] && !newDataMap[rowIdentifierName]) {
2491
2496
  this.removeRow(oldDataMap[rowIdentifierName]); // Slow
2492
2497
  }
2493
2498
  }
2494
2499
  this._dt.sortOnce(ROW_DEF, "a", compareNumber, fieldSorting);
2500
+ this._dt.freeze(prevState);
2495
2501
  } else {
2502
+ if(recordCount - rowDefCount > 1 || rowDefCount - recordCount > 1) {
2503
+ prevState = this._dt.freeze();
2504
+ }
2496
2505
  for (i = 0; i < rowDefCount; i++) {
2497
2506
  record = records[i];
2498
2507
  if(record) {
@@ -2511,6 +2520,9 @@ Grid.prototype.updateDataSet = function(records, rowIdentifier) {
2511
2520
  rowDef.setRowData(record);
2512
2521
  }
2513
2522
  }
2523
+ if(recordCount - rowDefCount > 1 || rowDefCount - recordCount > 1) {
2524
+ this._dt.freeze(prevState);
2525
+ }
2514
2526
  }
2515
2527
  };
2516
2528
  /** @private
@@ -2530,7 +2542,7 @@ Grid.prototype.removeRow = function(rowRef) {
2530
2542
  if(this._mainGrid) {
2531
2543
  return this._mainGrid.removeRow(this._getRowId(rowRef));
2532
2544
  }
2533
- var rowDef = this._getRowDefinitionByRef(rowRef);
2545
+ let rowDef = this._getRowDefinitionByRef(rowRef);
2534
2546
  if(rowDef) {
2535
2547
  if(!rowDef.isAutoGenerated()) { // Users cannot remove auto-generated row by themselves
2536
2548
  this._removeRow(rowDef);
@@ -2546,7 +2558,7 @@ Grid.prototype.removeRow = function(rowRef) {
2546
2558
  * @see {@link Grid#removeAllRows}
2547
2559
  */
2548
2560
  Grid.prototype.removeRows = function(rowRefs) {
2549
- var rowDef;
2561
+ let rowDef;
2550
2562
  if(!Array.isArray(rowRefs)) {
2551
2563
  rowDef = this.removeRow(rowRefs);
2552
2564
  return rowDef ? [rowDef] : [];
@@ -2555,9 +2567,9 @@ Grid.prototype.removeRows = function(rowRefs) {
2555
2567
  return this._mainGrid.removeRows(rowRefs.map(this._getRowId));
2556
2568
  }
2557
2569
 
2558
- var i;
2559
- var rowDefs = [];
2560
- var len = rowRefs.length;
2570
+ let i;
2571
+ let rowDefs = [];
2572
+ let len = rowRefs.length;
2561
2573
 
2562
2574
  // Verify user input
2563
2575
  for(i = 0; i < len; ++i) {
@@ -2570,7 +2582,7 @@ Grid.prototype.removeRows = function(rowRefs) {
2570
2582
  }
2571
2583
  len = rowDefs.length;
2572
2584
 
2573
- var prevState = false;
2585
+ let prevState = false;
2574
2586
  if(len > 1) {
2575
2587
  prevState = this._dt.freeze(); // Prevent multiple changes that trigger sorting and filtering
2576
2588
  }
@@ -2595,7 +2607,7 @@ Grid.prototype.removeAllRows = function() {
2595
2607
  if(!this._dt.getRowCount()) {
2596
2608
  return;
2597
2609
  }
2598
- var rowDefs = this._getAllRowDefinitions();
2610
+ let rowDefs = this._getAllRowDefinitions();
2599
2611
 
2600
2612
  if(!this._sharedDataSource) {
2601
2613
  this._dc.clearAllData();
@@ -2623,14 +2635,14 @@ Grid.prototype._removeRow = function(rowDef) {
2623
2635
  }
2624
2636
  this._dispatch("beforeRowRemoved", {});
2625
2637
 
2626
- var connector = this._connector;
2627
- var dt = this._dt;
2628
- var childRowDefs = rowDef.getDescendants(); // TODO: Support nested child
2638
+ let connector = this._connector;
2639
+ let dt = this._dt;
2640
+ let childRowDefs = rowDef.getDescendants(); // TODO: Support nested child
2629
2641
  if(childRowDefs) { // Remove all children first
2630
- for(var i = 0; i < childRowDefs.length; i++) {
2642
+ for(let i = 0; i < childRowDefs.length; i++) {
2631
2643
  connector.removeRic(childRowDefs[i]);
2632
2644
  }
2633
- var rowIds = childRowDefs.map(RowDefinition.toRowId);
2645
+ let rowIds = childRowDefs.map(RowDefinition.toRowId);
2634
2646
  dt.removeRows(rowIds);
2635
2647
  }
2636
2648
  connector.removeRic(rowDef);
@@ -2643,8 +2655,8 @@ Grid.prototype._removeRow = function(rowDef) {
2643
2655
  * @param {boolean=} hidden if false, show instead of hide
2644
2656
  */
2645
2657
  Grid.prototype.hideRow = function(rowRef, hidden) {
2646
- var rid = this._getRowId(rowRef);
2647
- var grid = this._mainGrid || this._grid;
2658
+ let rid = this._getRowId(rowRef);
2659
+ let grid = this._mainGrid || this._grid;
2648
2660
  grid.hideRow(rid, hidden);
2649
2661
  };
2650
2662
 
@@ -2657,8 +2669,8 @@ Grid.prototype.hideRows = function (rowRefs, hidden) {
2657
2669
  if (!Array.isArray(rowRefs)) {
2658
2670
  rowRefs = [rowRefs];
2659
2671
  }
2660
- var rids = rowRefs.map(this._getRowId);
2661
- var grid = this._mainGrid || this._grid;
2672
+ let rids = rowRefs.map(this._getRowId);
2673
+ let grid = this._mainGrid || this._grid;
2662
2674
  grid.hideRows(rids, hidden);
2663
2675
  };
2664
2676
  /**
@@ -2696,19 +2708,19 @@ Grid.prototype.setRic = function(rowRef, str, options) {
2696
2708
  this._mainGrid.setRic(this._toRowId(rowRef), str, options);
2697
2709
  return;
2698
2710
  }
2699
- var rowDef = this._getRowDefinitionByRef(rowRef);
2711
+ let rowDef = this._getRowDefinitionByRef(rowRef);
2700
2712
  if(rowDef) {
2701
2713
  options = options || {};
2702
2714
  options["ric"] = str;
2703
- var extractedOptions = RowDefinition.extractRowOptions(options);
2704
- var oldRic = rowDef.getSymbol();
2715
+ let extractedOptions = RowDefinition.extractRowOptions(options);
2716
+ let oldRic = rowDef.getSymbol();
2705
2717
  if(rowDef.setContent(str, extractedOptions)) { // The given string may not be a RIC
2706
2718
  this._connector.removeRic(rowDef, oldRic);
2707
2719
  this._initDuplicateRicData(rowDef);
2708
2720
  this._connector.addRic(rowDef);
2709
2721
  }
2710
2722
 
2711
- var values = options["values"];
2723
+ let values = options["values"];
2712
2724
  if(values != null) {
2713
2725
  rowDef.setStaticRowData(values, options["fields"]);
2714
2726
  }
@@ -2724,7 +2736,7 @@ Grid.prototype.setRic = function(rowRef, str, options) {
2724
2736
  * @param {Grid~RowReference} rowRef
2725
2737
  */
2726
2738
  Grid.prototype.unlinkChain = function(rowRef) {
2727
- var rowDef = this._getRowDefinitionByRef(rowRef);
2739
+ let rowDef = this._getRowDefinitionByRef(rowRef);
2728
2740
  if(!rowDef) {
2729
2741
  return;
2730
2742
  }
@@ -2763,7 +2775,7 @@ Grid.prototype._onRowExpansionBinding = function(e) {
2763
2775
  }
2764
2776
 
2765
2777
  if(e["originalRowId"]) {
2766
- var rowIndex = this._dv.getRowIndex(e["originalRowId"]);
2778
+ let rowIndex = this._dv.getRowIndex(e["originalRowId"]);
2767
2779
  e["originalRowDef"] = this._getRowDefinitionByIndex(rowIndex);
2768
2780
  e["originalRowData"] = e["originalRowDef"].getRowData();
2769
2781
  } else {
@@ -2817,7 +2829,7 @@ Grid.prototype.getColumnCount = function() {
2817
2829
  * @return {string}
2818
2830
  */
2819
2831
  Grid.prototype.getColumnDataType = function(colIndex) {
2820
- var colDef = this.getColumnDefinition(colIndex);
2832
+ let colDef = this.getColumnDefinition(colIndex);
2821
2833
  if (colDef) {
2822
2834
  return colDef.getDataType();
2823
2835
  }
@@ -2828,7 +2840,7 @@ Grid.prototype.getColumnDataType = function(colIndex) {
2828
2840
  * @return {ColumnDefinition}
2829
2841
  */
2830
2842
  Grid.prototype.getColumnDefinition = function(colIndex) {
2831
- var colData = this._grid.getColumnData(colIndex);
2843
+ let colData = this._grid.getColumnData(colIndex);
2832
2844
  if(colData) {
2833
2845
  return /** @type{ColumnDefinition} */(colData[COL_DEF]) || null;
2834
2846
  }
@@ -2838,9 +2850,9 @@ Grid.prototype.getColumnDefinition = function(colIndex) {
2838
2850
  * @return {!Array.<ColumnDefinition>}
2839
2851
  */
2840
2852
  Grid.prototype.getColumnDefinitions = function() {
2841
- var colCount = this.getColumnCount();
2842
- var colDefs = new Array(colCount);
2843
- for(var i = 0; i < colCount; i++) {
2853
+ let colCount = this.getColumnCount();
2854
+ let colDefs = new Array(colCount);
2855
+ for(let i = 0; i < colCount; i++) {
2844
2856
  colDefs[i] = this.getColumnDefinition(i);
2845
2857
  }
2846
2858
  return colDefs;
@@ -2862,10 +2874,10 @@ Grid.prototype.getColumnDefinitionById = function(colId) {
2862
2874
  * @return {ColumnDefinition}
2863
2875
  */
2864
2876
  Grid.prototype.getColumnDefinitionsById = function(colIds) {
2865
- var colCount = Array.isArray(colIds) ? colIds.length : 0;
2877
+ let colCount = Array.isArray(colIds) ? colIds.length : 0;
2866
2878
  if(colCount > 0) {
2867
- var i, colId;
2868
- var colDefs = new Array(colCount);
2879
+ let i, colId;
2880
+ let colDefs = new Array(colCount);
2869
2881
  for(i = 0; i < colCount; i++) {
2870
2882
  colId = colIds[i];
2871
2883
  colDefs[i] = this.getColumnDefinitionById(colId);
@@ -2885,9 +2897,9 @@ Grid.prototype._getColumnDefinition = function(colRef) {
2885
2897
  } else if(typeof colRef === "number") {
2886
2898
  return this.getColumnDefinition(colRef);
2887
2899
  } else if(typeof colRef === "string") {
2888
- var colCount = this.getColumnCount();
2889
- for(var i = 0; i < colCount; ++i) {
2890
- var colDef = this.getColumnDefinition(i);
2900
+ let colCount = this.getColumnCount();
2901
+ for(let i = 0; i < colCount; ++i) {
2902
+ let colDef = this.getColumnDefinition(i);
2891
2903
  if(_hasFieldOrId(colDef, colRef)) {
2892
2904
  return colDef; // Return the first found column
2893
2905
  }
@@ -2900,7 +2912,7 @@ Grid.prototype._getColumnDefinition = function(colRef) {
2900
2912
  * @return {string}
2901
2913
  */
2902
2914
  Grid.prototype.getRowType = function(rowRef) {
2903
- var rowDef = this.getRowDefinition(rowRef);
2915
+ let rowDef = this.getRowDefinition(rowRef);
2904
2916
  return rowDef ? rowDef.getType() : "";
2905
2917
  };
2906
2918
  /** Get RowDefinition object by either number or row id
@@ -2992,15 +3004,15 @@ Grid.prototype.getMultipleRowData = function(obj) {
2992
3004
  if(typeof obj === "number") {
2993
3005
  return [this.getRowData(obj)];
2994
3006
  }
2995
- var rowDefs = null;
3007
+ let rowDefs = null;
2996
3008
  if(Array.isArray(obj)) {
2997
- var rowRefs = obj;
2998
- var rowCount = rowRefs.length;
2999
- var rows = new Array(rowCount);
3009
+ let rowRefs = obj;
3010
+ let rowCount = rowRefs.length;
3011
+ let rows = new Array(rowCount);
3000
3012
  rowDefs = this.getRowDefinitions();
3001
3013
 
3002
- for(var r = 0; r < rowCount; ++r) {
3003
- var rowRef = rowRefs[r];
3014
+ for(let r = 0; r < rowCount; ++r) {
3015
+ let rowRef = rowRefs[r];
3004
3016
  if(typeof rowRef === "number") {
3005
3017
  rows[r] = toRowData(rowDefs[rowRef]);
3006
3018
  } else if(rowRef && rowRef.getRowData) {
@@ -3023,10 +3035,10 @@ Grid.prototype.getMultipleRowData = function(obj) {
3023
3035
  * @param {Object} values {"FIELD1": value1, "FIELD2": value2, ...} Use null to remove current row data (not row in the view).
3024
3036
  */
3025
3037
  Grid.prototype.setRicData = function(ric, values) {
3026
- var rowDefs = this._connector.getRowDefByRic(ric);
3027
- var rowCount = rowDefs ? rowDefs.length : 0;
3028
- for (var i = 0; i < rowCount; ++i) {
3029
- var rowDef = rowDefs[i];
3038
+ let rowDefs = this._connector.getRowDefByRic(ric);
3039
+ let rowCount = rowDefs ? rowDefs.length : 0;
3040
+ for (let i = 0; i < rowCount; ++i) {
3041
+ let rowDef = rowDefs[i];
3030
3042
  if (rowDef && rowDef.getSymbol() === ric) {
3031
3043
  rowDef.setRowData(values); // TODO: Need conflator to improve performance
3032
3044
  }
@@ -3038,7 +3050,7 @@ Grid.prototype.setRicData = function(ric, values) {
3038
3050
  * @param {Object} values {"FIELD1": value1, "FIELD2": value2, ...} Use null to remove current row data (not row in the view).
3039
3051
  */
3040
3052
  Grid.prototype.setRowData = function(rowRef, values) {
3041
- var rowDef = this._getRowDefinitionByRef(rowRef);
3053
+ let rowDef = this._getRowDefinitionByRef(rowRef);
3042
3054
  if(rowDef) {
3043
3055
  rowDef.setRowData(values);
3044
3056
  }
@@ -3050,7 +3062,7 @@ Grid.prototype.setRowData = function(rowRef, values) {
3050
3062
  * @param {Object} values
3051
3063
  */
3052
3064
  Grid.prototype.setStaticRowData = function(rowRef, values) {
3053
- var rowDef = this._getRowDefinitionByRef(rowRef);
3065
+ let rowDef = this._getRowDefinitionByRef(rowRef);
3054
3066
  if(rowDef) {
3055
3067
  rowDef.setStaticRowData(values);
3056
3068
  }
@@ -3063,7 +3075,7 @@ Grid.prototype.setStaticRowData = function(rowRef, values) {
3063
3075
  * @param {*} value
3064
3076
  */
3065
3077
  Grid.prototype.setStaticData = function(rowRef, field, value) {
3066
- var rowDef = this._getRowDefinitionByRef(rowRef);
3078
+ let rowDef = this._getRowDefinitionByRef(rowRef);
3067
3079
  if(rowDef) {
3068
3080
  rowDef.setStaticData(field, value);
3069
3081
  }
@@ -3091,9 +3103,9 @@ Grid.prototype._getRowId = function(rowRef) {
3091
3103
  Grid.prototype.getColumnIndex = function(colRef) {
3092
3104
  if(colRef) {
3093
3105
  if(colRef instanceof ColumnDefinition) {
3094
- var colCount = this.getColumnCount();
3095
- for(var i = 0; i < colCount; ++i) {
3096
- var colDef = this.getColumnDefinition(i);
3106
+ let colCount = this.getColumnCount();
3107
+ for(let i = 0; i < colCount; ++i) {
3108
+ let colDef = this.getColumnDefinition(i);
3097
3109
  if(colDef === colRef) {
3098
3110
  return i;
3099
3111
  }
@@ -3109,13 +3121,13 @@ Grid.prototype.getColumnIndex = function(colRef) {
3109
3121
  * @return {!Array.<number>}
3110
3122
  */
3111
3123
  Grid.prototype.getColumnIndices = function(colRefs) {
3112
- var ary = [];
3113
- var colCount = this.getColumnCount();
3114
- var inputAry = Array.isArray(colRefs) ? colRefs : [colRefs];
3115
- var len = inputAry.length;
3124
+ let ary = [];
3125
+ let colCount = this.getColumnCount();
3126
+ let inputAry = Array.isArray(colRefs) ? colRefs : [colRefs];
3127
+ let len = inputAry.length;
3116
3128
  // Verify user input
3117
- for(var i = 0; i < len; ++i) {
3118
- var colIndex = this.getColumnIndex(inputAry[i]);
3129
+ for(let i = 0; i < len; ++i) {
3130
+ let colIndex = this.getColumnIndex(inputAry[i]);
3119
3131
  if(colIndex >= 0 && colIndex < colCount) {
3120
3132
  ary.push(colIndex); // WARNING: We have not checked for duplication
3121
3133
  }
@@ -3190,11 +3202,11 @@ Grid.prototype.freezeColumn = function(colIndex, pinnedRightColumns) {
3190
3202
  */
3191
3203
  Grid.prototype.pinColumn = function(colRef, side) {
3192
3204
  if(Array.isArray(colRef)) {
3193
- var ary = colRef;
3194
- var len = ary.length;
3205
+ let ary = colRef;
3206
+ let len = ary.length;
3195
3207
 
3196
- var dirty = 0;
3197
- for(var i = 0; i < len; ++i) {
3208
+ let dirty = 0;
3209
+ for(let i = 0; i < len; ++i) {
3198
3210
  dirty |= this._pinColumn(ary[i], side);
3199
3211
  }
3200
3212
  return dirty ? true : false;
@@ -3207,18 +3219,18 @@ Grid.prototype.pinColumn = function(colRef, side) {
3207
3219
  * @return {boolean}
3208
3220
  */
3209
3221
  Grid.prototype._pinColumn = function(colRef, side) {
3210
- var colIndex = this.getColumnIndex(colRef);
3211
- var colCount = this.getColumnCount();
3222
+ let colIndex = this.getColumnIndex(colRef);
3223
+ let colCount = this.getColumnCount();
3212
3224
  if(colIndex < 0 || colIndex > colCount) {
3213
3225
  return false;
3214
3226
  }
3215
3227
 
3216
- var leftPinnedCount = this._grid.getPinnedLeftColumnCount();
3217
- var rightPinnedCount = this._grid.getPinnedRightColumnCount();
3218
- var stationaryIdx = this._grid.getStationaryColumnIndex();
3228
+ let leftPinnedCount = this._grid.getPinnedLeftColumnCount();
3229
+ let rightPinnedCount = this._grid.getPinnedRightColumnCount();
3230
+ let stationaryIdx = this._grid.getStationaryColumnIndex();
3219
3231
 
3220
3232
  if(side && side.toLowerCase() === "right") {
3221
- var rightPinnedIndex = this._grid.getFirstPinnedRightIndex();
3233
+ let rightPinnedIndex = this._grid.getFirstPinnedRightIndex();
3222
3234
  if(colIndex >= rightPinnedIndex) {
3223
3235
  return false; // The column is already pinned area
3224
3236
  }
@@ -3257,11 +3269,11 @@ Grid.prototype._pinColumn = function(colRef, side) {
3257
3269
  */
3258
3270
  Grid.prototype.unpinColumn = function(colRef, dest) {
3259
3271
  if(Array.isArray(colRef)) {
3260
- var ary = colRef;
3261
- var len = ary.length;
3272
+ let ary = colRef;
3273
+ let len = ary.length;
3262
3274
 
3263
- var dirty = 0;
3264
- for(var i = len; --i >= 0;) { // WARNING: unpinning is done in reversed order
3275
+ let dirty = 0;
3276
+ for(let i = len; --i >= 0;) { // WARNING: unpinning is done in reversed order
3265
3277
  dirty |= this._unpinColumn(ary[i], dest);
3266
3278
  }
3267
3279
  return dirty ? true : false;
@@ -3274,29 +3286,29 @@ Grid.prototype.unpinColumn = function(colRef, dest) {
3274
3286
  * @return {boolean}
3275
3287
  */
3276
3288
  Grid.prototype._unpinColumn = function(colRef, dest) {
3277
- var colIndex = this.getColumnIndex(colRef);
3289
+ let colIndex = this.getColumnIndex(colRef);
3278
3290
  if(colIndex < 0) {
3279
3291
  return false;
3280
3292
  }
3281
3293
 
3282
- var leftPinnedCount = this._grid.getPinnedLeftColumnCount();
3283
- var rightPinnedCount = this._grid.getPinnedRightColumnCount();
3284
- var colCount = this.getColumnCount();
3285
- var firstRightPinnedIndex = colCount - rightPinnedCount;
3294
+ let leftPinnedCount = this._grid.getPinnedLeftColumnCount();
3295
+ let rightPinnedCount = this._grid.getPinnedRightColumnCount();
3296
+ let colCount = this.getColumnCount();
3297
+ let firstRightPinnedIndex = colCount - rightPinnedCount;
3286
3298
 
3287
3299
  if(colIndex >= leftPinnedCount && colIndex < firstRightPinnedIndex) {
3288
3300
  return false;
3289
3301
  }
3290
3302
 
3291
- var srcId = null;
3292
- var destId = null;
3303
+ let srcId = null;
3304
+ let destId = null;
3293
3305
  if(dest != null) {
3294
- var destIdx = this.getColumnIndex(dest);
3306
+ let destIdx = this.getColumnIndex(dest);
3295
3307
  destId = this.getColumnId(destIdx);
3296
3308
  srcId = this.getColumnId(colIndex);
3297
3309
  }
3298
3310
 
3299
- var stationaryIdx = this._grid.getStationaryColumnIndex();
3311
+ let stationaryIdx = this._grid.getStationaryColumnIndex();
3300
3312
 
3301
3313
  if(colIndex < leftPinnedCount) {
3302
3314
  if(colIndex > stationaryIdx) {
@@ -3325,8 +3337,8 @@ Grid.prototype._unpinColumn = function(colRef, dest) {
3325
3337
  * @return {boolean}
3326
3338
  */
3327
3339
  Grid.prototype.unpinAllColumns = function() {
3328
- var leftPinnedCount = this._grid.getPinnedLeftColumnCount();
3329
- var rightPinnedCount = this._grid.getPinnedRightColumnCount();
3340
+ let leftPinnedCount = this._grid.getPinnedLeftColumnCount();
3341
+ let rightPinnedCount = this._grid.getPinnedRightColumnCount();
3330
3342
  if(!leftPinnedCount && !rightPinnedCount) {
3331
3343
  return false;
3332
3344
  }
@@ -3342,8 +3354,8 @@ Grid.prototype._onColumnHeaderBinding = function(e) {
3342
3354
  return; // WARNING: Assume that only the first title section is owned by the grid. Anything else is assumed to be generated by plugins
3343
3355
  }
3344
3356
 
3345
- var c = e["fromColIndex"];
3346
- var toC = e["toColIndex"];
3357
+ let c = e["fromColIndex"];
3358
+ let toC = e["toColIndex"];
3347
3359
  while(c < toC) {
3348
3360
  this._renderColumnHeader(c++, e);
3349
3361
  }
@@ -3353,22 +3365,22 @@ Grid.prototype._onColumnHeaderBinding = function(e) {
3353
3365
  * @param {Object} arg
3354
3366
  */
3355
3367
  Grid.prototype._renderColumnHeader = function(colIndex, arg) {
3356
- var colDef = this.getColumnDefinition(colIndex);
3368
+ let colDef = this.getColumnDefinition(colIndex);
3357
3369
  if(!colDef) {
3358
3370
  return;
3359
3371
  }
3360
- var customRenderer = colDef.getHeaderRenderer();
3361
- var tSection = arg.section;
3362
- var rowCount = tSection.getRowCount();
3372
+ let customRenderer = colDef.getHeaderRenderer();
3373
+ let tSection = arg.section;
3374
+ let rowCount = tSection.getRowCount();
3363
3375
  arg["colIndex"] = colIndex;
3364
3376
  arg["columnDef"] = colDef;
3365
3377
 
3366
- var colName = colDef.getName();
3367
- var colTooltip = colDef.getTooltip();
3368
- var headerAlignment = colDef.getHeaderAlignment();
3378
+ let colName = colDef.getName();
3379
+ let colTooltip = colDef.getTooltip();
3380
+ let headerAlignment = colDef.getHeaderAlignment();
3369
3381
 
3370
- for(var r = 0; r < rowCount; ++r) {
3371
- var tCell = tSection.getCell(colIndex, r, false);
3382
+ for(let r = 0; r < rowCount; ++r) {
3383
+ let tCell = tSection.getCell(colIndex, r, false);
3372
3384
  // Default behaviors
3373
3385
  tCell.setContent(colName);
3374
3386
  tCell.setTooltip(colTooltip);
@@ -3387,7 +3399,7 @@ Grid.prototype.updateColumnTitle = function() {
3387
3399
  if(this._columnTitleConflator.conflate()) {
3388
3400
  return;
3389
3401
  }
3390
- var tss = this._grid.getSectionSettings("title"); // WARNING: Assume that only the first title section is owned by the grid
3402
+ let tss = this._grid.getSectionSettings("title"); // WARNING: Assume that only the first title section is owned by the grid
3391
3403
  if(tss) {
3392
3404
  tss.rerender();
3393
3405
  }
@@ -3433,17 +3445,17 @@ Grid.prototype._onQuote2PostUpdate = function (e) {
3433
3445
  * @param {!Object} e
3434
3446
  */
3435
3447
  Grid.prototype._onDataChanged = function(e) {
3436
- var rowData = e["rowData"]; // Use rowData to retrieve corresponding subscription object
3448
+ let rowData = e["rowData"]; // Use rowData to retrieve corresponding subscription object
3437
3449
  if (!rowData) {
3438
3450
  return; // This must be a global change
3439
3451
  }
3440
- var rowDef = rowData[ROW_DEF];
3452
+ let rowDef = rowData[ROW_DEF];
3441
3453
 
3442
3454
  if(rowDef) {
3443
- var rowId = rowDef.getRowId();
3455
+ let rowId = rowDef.getRowId();
3444
3456
  if(rowId) {
3445
3457
  // e["rid"] could be from JET/RTK (rowId + ric) or static data update (rowId)
3446
- var curRowData = this._dc.getRowData(e["rid"]);
3458
+ let curRowData = this._dc.getRowData(e["rid"]);
3447
3459
  if (curRowData) {
3448
3460
  if(rowDef.addUpdate(e)) { // This is the only place that update array can grow. It is used for blinking data.
3449
3461
  this._dt._hasNewUpdates = true; // Mark data table for cleaning it up later
@@ -3458,9 +3470,9 @@ Grid.prototype._onDataChanged = function(e) {
3458
3470
  }
3459
3471
 
3460
3472
  // The new data update has no row definition, meaning that we have found a new constituent from a chain.
3461
- var subId = rowData[SUB_ID]; // The constituent will share the same sub id as its parent
3473
+ let subId = rowData[SUB_ID]; // The constituent will share the same sub id as its parent
3462
3474
  if(subId) {
3463
- var parentDef = this._getRowDefinitionById(subId);
3475
+ let parentDef = this._getRowDefinitionById(subId);
3464
3476
  if(parentDef && parentDef.getRic() !== rowData["RIC"]) { // TODO: Check for delayed ric
3465
3477
  if(!this._chainMembers) {
3466
3478
  this._chainMembers = {};
@@ -3480,21 +3492,21 @@ Grid.prototype._addMemberOfChain = function(rowData) {
3480
3492
  return;
3481
3493
  }
3482
3494
 
3483
- var rows = this._chainConflator.popAllData(); // This must have no duplication
3484
- var len = rows ? rows.length : 0;
3485
- var i;
3495
+ let rows = this._chainConflator.popAllData(); // This must have no duplication
3496
+ let len = rows ? rows.length : 0;
3497
+ let i;
3486
3498
 
3487
- var prevState = false;
3499
+ let prevState = false;
3488
3500
  if(len > 1) {
3489
3501
  prevState = this._dt.freeze(); // Avoid sorting for each insertion
3490
3502
  }
3491
- var childDefs = [];
3503
+ let childDefs = [];
3492
3504
  for(i = 0; i < len; ++i) {
3493
3505
  rowData = /** @type{!Object} */(rows[i]);
3494
- var subId = rowData[SUB_ID];
3495
- var parentDef = this._getRowDefinitionById(subId);
3506
+ let subId = rowData[SUB_ID];
3507
+ let parentDef = this._getRowDefinitionById(subId);
3496
3508
  if(parentDef) {
3497
- var childDef = parentDef.addConstituent(/** @type{string} */(rowData["RIC"]), this._dt);
3509
+ let childDef = parentDef.addConstituent(/** @type{string} */(rowData["RIC"]), this._dt);
3498
3510
  if(childDef) {
3499
3511
  childDefs.push(childDef);
3500
3512
  } // else { // childDef has already been added
@@ -3502,7 +3514,7 @@ Grid.prototype._addMemberOfChain = function(rowData) {
3502
3514
  }
3503
3515
  this._chainMembers = null; // Clear all waiting chain members
3504
3516
 
3505
- var childCount = childDefs.length;
3517
+ let childCount = childDefs.length;
3506
3518
  if(childCount) {
3507
3519
  for(i = childCount; --i >= 0;) {
3508
3520
  this._connector.addRic(childDefs[i]); // TODO: JET/RTK should not re-subscribe this
@@ -3530,19 +3542,19 @@ Grid.prototype._updateStreamingData = function() {
3530
3542
  * @param {Object} e
3531
3543
  */
3532
3544
  Grid.prototype._onPreDataSorting = function (e) {
3533
- var objs = this._stp.getSortedColumns();
3545
+ let objs = this._stp.getSortedColumns();
3534
3546
 
3535
3547
  this._sorter.reset();
3536
3548
  if(Array.isArray(objs)) {
3537
- var sortCount = objs.length;
3538
- for(var i = 0; i < sortCount; ++i) {
3539
- var obj = objs[i];
3540
- var field = obj["field"] || "";
3541
- var colIndex = obj["colIndex"];
3542
- var colDef = (colIndex >= 0) ? this.getColumnDefinition(colIndex) : null;
3543
-
3544
- var rowSorting = false;
3545
- var sortLogic = null;
3549
+ let sortCount = objs.length;
3550
+ for(let i = 0; i < sortCount; ++i) {
3551
+ let obj = objs[i];
3552
+ let field = obj["field"] || "";
3553
+ let colIndex = obj["colIndex"];
3554
+ let colDef = (colIndex >= 0) ? this.getColumnDefinition(colIndex) : null;
3555
+
3556
+ let rowSorting = false;
3557
+ let sortLogic = null;
3546
3558
  if(colDef) {
3547
3559
  field = colDef.getField(); // WARNING: Field and logic could be out of sync
3548
3560
  rowSorting = colDef.isRowSorting();
@@ -3588,10 +3600,10 @@ Grid.prototype._clearDataUpdates = function() {
3588
3600
  if(!this._dt || !this._dt._hasNewUpdates) {
3589
3601
  return;
3590
3602
  }
3591
- var rowIds = this._dt.getAllRowIds(true); // Use shallow copy for speed
3592
- for(var i = rowIds.length; --i >= 0;) {
3593
- var rowData = this._dt.getRowData(rowIds[i]);
3594
- var rowDef = rowData[ROW_DEF];
3603
+ let rowIds = this._dt.getAllRowIds(true); // Use shallow copy for speed
3604
+ for(let i = rowIds.length; --i >= 0;) {
3605
+ let rowData = this._dt.getRowData(rowIds[i]);
3606
+ let rowDef = rowData[ROW_DEF];
3595
3607
  rowDef.resetUpdates();
3596
3608
  }
3597
3609
  };
@@ -3639,7 +3651,7 @@ Grid.prototype.getPageCount = function() {
3639
3651
  * @param {Grid~RowReference} rowRef
3640
3652
  */
3641
3653
  Grid.prototype.toggleChain = function(rowRef) {
3642
- var rowDef = this._getRowDefinitionByRef(rowRef);
3654
+ let rowDef = this._getRowDefinitionByRef(rowRef);
3643
3655
  if(rowDef) {
3644
3656
  rowDef.toggleChain();
3645
3657
  }
@@ -3651,7 +3663,7 @@ Grid.prototype.toggleChain = function(rowRef) {
3651
3663
  * @return {boolean}
3652
3664
  */
3653
3665
  Grid.prototype.setClassification = function(rowRef, fields) {
3654
- var rowDef = this._getRowDefinitionByRef(rowRef);
3666
+ let rowDef = this._getRowDefinitionByRef(rowRef);
3655
3667
  if(rowDef) {
3656
3668
  return this._dt.setSegmentClassification(rowDef.getRowId(), fields);
3657
3669
  }
@@ -3676,7 +3688,7 @@ Grid.prototype.contains = function(elem) {
3676
3688
  * @return {boolean}
3677
3689
  */
3678
3690
  Grid.prototype.isFocused = function() {
3679
- var activeElement = document.activeElement;
3691
+ let activeElement = document.activeElement;
3680
3692
  if(!activeElement || !activeElement.shadowRoot) {
3681
3693
  // active element is not in the shadow DOM. try using contains method to check
3682
3694
  return this.contains(activeElement);
@@ -3743,17 +3755,17 @@ Grid.prototype._onFormulaDataRequired = function(e) {
3743
3755
  * @param {Object} e
3744
3756
  */
3745
3757
  Grid.prototype._onDataComposed = function(e) {
3746
- var values = e["changes"];
3758
+ let values = e["changes"];
3747
3759
  if(!values) {
3748
3760
  return; // Cannot do data composition if there is no change in data
3749
3761
  }
3750
3762
 
3751
- var rowData = e["rowData"];
3763
+ let rowData = e["rowData"];
3752
3764
  if(!rowData) {
3753
3765
  return; // Row could already be removed or global change event is sent
3754
3766
  }
3755
3767
 
3756
- var rowDef = rowData[ROW_DEF];
3768
+ let rowDef = rowData[ROW_DEF];
3757
3769
  if(!rowDef) {
3758
3770
  return;
3759
3771
  }
@@ -3762,7 +3774,7 @@ Grid.prototype._onDataComposed = function(e) {
3762
3774
  }
3763
3775
 
3764
3776
  if(this._autoDateConversion) { // auto data conversion
3765
- var field, value, dataType, colDef;
3777
+ let field, value, dataType, colDef;
3766
3778
  for(field in values) {
3767
3779
  colDef = this._getColumnDefinition(field);
3768
3780
  if(colDef) {
@@ -3792,16 +3804,16 @@ Grid.prototype._onDataComposed = function(e) {
3792
3804
  * @param {Object} e
3793
3805
  */
3794
3806
  Grid.prototype._onSubSegmentChanged = function(e) {
3795
- var insertionList = /** @type{Array.<Segment>} */(e["insertionList"]);
3796
- var removalList = /** @type{Array.<string>} */(e["removalList"]);
3797
- var removedRows = /** @type{Object} */(e["removedRows"]);
3807
+ let insertionList = /** @type{Array.<Segment>} */(e["insertionList"]);
3808
+ let removalList = /** @type{Array.<string>} */(e["removalList"]);
3809
+ let removedRows = /** @type{Object} */(e["removedRows"]);
3798
3810
 
3799
- var i;
3800
- var removalCount = removalList.length;
3801
- var rowDef = null;
3811
+ let i;
3812
+ let removalCount = removalList.length;
3813
+ let rowDef = null;
3802
3814
  for(i = 0; i < removalCount; i++) {
3803
- var rid = removalList[i];
3804
- var removedRow = removedRows[rid];
3815
+ let rid = removalList[i];
3816
+ let removedRow = removedRows[rid];
3805
3817
  if(removedRow) {
3806
3818
  rowDef = removedRow[ROW_DEF];
3807
3819
  if(rowDef) {
@@ -3811,11 +3823,11 @@ Grid.prototype._onSubSegmentChanged = function(e) {
3811
3823
  }
3812
3824
  }
3813
3825
 
3814
- var insertionCount = insertionList.length;
3826
+ let insertionCount = insertionList.length;
3815
3827
  for(i = 0; i < insertionCount; i++) {
3816
- var segment = insertionList[i];
3817
- // var parentId = segment.getParentId();
3818
- var segmentId = segment.getId();
3828
+ let segment = insertionList[i];
3829
+ // let parentId = segment.getParentId();
3830
+ let segmentId = segment.getId();
3819
3831
  rowDef = new RowDefinition({
3820
3832
  "segmentId": segmentId
3821
3833
  });
@@ -3835,10 +3847,10 @@ Grid.prototype._recalculateFormulas = function(e) {
3835
3847
  if(e && e["rid"]) {
3836
3848
  this._fnEngine.calculate(/** @type{Object.<string, *>} */ (e["rowData"]), /** @type{Object.<string, *>} */ (e["changes"]));
3837
3849
  } else {
3838
- var rows = this._dc ? this._dc.getAllRowData() : null; // Slow
3850
+ let rows = this._dc ? this._dc.getAllRowData() : null; // Slow
3839
3851
 
3840
- var rowCount = rows ? rows.length : 0;
3841
- for(var r = 0; r < rowCount; ++r) { // WARNING: This is very slow
3852
+ let rowCount = rows ? rows.length : 0;
3853
+ for(let r = 0; r < rowCount; ++r) { // WARNING: This is very slow
3842
3854
  this._fnEngine.calculate(rows[r]);
3843
3855
  }
3844
3856
  }
@@ -3850,11 +3862,11 @@ Grid.prototype._recalculateFormulas = function(e) {
3850
3862
  Grid.prototype._snapshotFillerDataChanged = function (e) {
3851
3863
  if (!this._dt) return;
3852
3864
 
3853
- var data = e.data;
3865
+ let data = e.data;
3854
3866
  if(e.timeSeries) {
3855
3867
  this._updateTimeSeriesFields(e); // Increase or decrease time series field
3856
3868
  } else {
3857
- for (var ric in data) {
3869
+ for (let ric in data) {
3858
3870
  this.setRicData(ric, data[ric]);
3859
3871
  }
3860
3872
  }
@@ -3869,7 +3881,7 @@ Grid.prototype._snapshotFillerDataChanged = function (e) {
3869
3881
  Grid.prototype._startPolling = function () {
3870
3882
  if(this._pollingEnabled && this._pollingInterval) {
3871
3883
  if(this._lastPollingRequest && !this._pollingTimerId) {
3872
- var now = new Date();
3884
+ let now = new Date();
3873
3885
  this._lastPollingRequest = now.getTime();
3874
3886
  this._pollingTimerId = setTimeout(this._onPollingInterval, this._pollingInterval);
3875
3887
  }
@@ -3891,9 +3903,9 @@ Grid.prototype.activateADCPolling = function (activated) {
3891
3903
  if(activated !== false) {
3892
3904
  this._pollingEnabled = true;
3893
3905
  // Make immediate request after re-activation if it has been a long time
3894
- var now = new Date();
3906
+ let now = new Date();
3895
3907
  if(this._lastPollingRequest) {
3896
- var diff = now.getTime() - this._lastPollingRequest;
3908
+ let diff = now.getTime() - this._lastPollingRequest;
3897
3909
  if(diff > this._pollingInterval) {
3898
3910
  this.refreshADCData();
3899
3911
  }
@@ -3908,7 +3920,7 @@ Grid.prototype.activateADCPolling = function (activated) {
3908
3920
  * @return {boolean} Return true, if a request has been made
3909
3921
  */
3910
3922
  Grid.prototype.refreshADCData = function () {
3911
- var dirty = this._snapshot.addFields(this._connector.getAllFields());
3923
+ let dirty = this._snapshot.addFields(this._connector.getAllFields());
3912
3924
  if(dirty) {
3913
3925
  dirty = this._snapshot.addRics(this._connector.getAllRics());
3914
3926
  if(dirty) {
@@ -3922,9 +3934,9 @@ Grid.prototype.refreshADCData = function () {
3922
3934
  /** @private
3923
3935
  */
3924
3936
  Grid.prototype._onAutoLayoutUpdate = function() {
3925
- var elem = this._topNode;
3937
+ let elem = this._topNode;
3926
3938
 
3927
- var cw = elem.clientWidth;
3939
+ let cw = elem.clientWidth;
3928
3940
  if(cw !== this._clientWidth) {
3929
3941
  this._clientWidth = cw;
3930
3942
  this.updateLayout();
@@ -3936,7 +3948,7 @@ Grid.prototype._onAutoLayoutUpdate = function() {
3936
3948
  * @param {Object=} opt_options { "colNames": Array.<string>, "rowCount": number, "startIndex": number, "getter": function(Object, string):* }
3937
3949
  */
3938
3950
  Grid.prototype.logDT = function(opt_options) {
3939
- var rowDefs = this._getAllRowDefinitions();
3951
+ let rowDefs = this._getAllRowDefinitions();
3940
3952
  this._logData(rowDefs, opt_options);
3941
3953
  };
3942
3954
  /** @description Log DataView to console. By default, this will log only fields specified in the column definition. To see other column data use "colNames" options
@@ -3954,7 +3966,7 @@ Grid.prototype.logDT = function(opt_options) {
3954
3966
  grid.logDV({"rowCount": 10}); // Showing 10 records
3955
3967
  */
3956
3968
  Grid.prototype.logDV = function(opt_options) {
3957
- var rowDefs = this.getRowDefinitions();
3969
+ let rowDefs = this.getRowDefinitions();
3958
3970
  this._logData(rowDefs, opt_options);
3959
3971
  };
3960
3972
  /** Log the collection of data to console
@@ -3970,7 +3982,7 @@ Grid.prototype._logData = function(rowDefs, options) {
3970
3982
  // TODO: Get all required fields and eliminate duplicate fields
3971
3983
  options["colNames"] = this.getColumnFields();
3972
3984
  }
3973
- var tbl = DataCache.constructTable(rowDefs.map(toRowData), options);
3985
+ let tbl = DataCache.constructTable(rowDefs.map(toRowData), options);
3974
3986
 
3975
3987
  console.table(tbl); // eslint-disable-line
3976
3988
  };
@@ -3982,17 +3994,17 @@ Grid.prototype._logData = function(rowDefs, options) {
3982
3994
  * @returns {RowDefinition}
3983
3995
  */
3984
3996
  Grid.prototype.replaceRow = function(rowRef, rowOption) {
3985
- var rowId = this._getRowId(rowRef);
3986
- var rowDef = this._getRowDefinitionByRef(rowRef);
3997
+ let rowId = this._getRowId(rowRef);
3998
+ let rowDef = this._getRowDefinitionByRef(rowRef);
3987
3999
  if(rowDef.isAutoGenerated()) { // Users cannot replace auto-generated
3988
4000
  return null;
3989
4001
  }
3990
- var configObj = rowDef.getConfigObject();
4002
+ let configObj = rowDef.getConfigObject();
3991
4003
 
3992
4004
  if(deepEqual(configObj, rowOption)){
3993
4005
  return null;
3994
4006
  } else {
3995
- var insertedRow = this.insertRow(rowOption, rowId);
4007
+ let insertedRow = this.insertRow(rowOption, rowId);
3996
4008
  this.removeRow(rowId);
3997
4009
  return insertedRow;
3998
4010
  }