@refinitiv-ui/efx-grid 6.0.87 → 6.0.89

Sign up to get free protection for your applications and to get access to all the features.
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
  }