@refinitiv-ui/efx-grid 6.0.34 → 6.0.36

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/lib/column-dragging/es6/ColumnDragging.js +50 -40
  2. package/lib/core/dist/core.css +1 -1
  3. package/lib/core/dist/core.js +248 -8
  4. package/lib/core/dist/core.min.js +1 -1
  5. package/lib/core/es6/data/DataCache.js +20 -1
  6. package/lib/core/es6/data/DataTable.d.ts +2 -0
  7. package/lib/core/es6/data/DataTable.js +18 -1
  8. package/lib/core/es6/data/DataView.d.ts +2 -0
  9. package/lib/core/es6/data/DataView.js +11 -0
  10. package/lib/core/es6/grid/Core.d.ts +12 -0
  11. package/lib/core/es6/grid/Core.js +88 -3
  12. package/lib/core/es6/grid/ILayoutGrid.js +4 -0
  13. package/lib/core/es6/grid/LayoutGrid.d.ts +4 -0
  14. package/lib/core/es6/grid/LayoutGrid.js +95 -3
  15. package/lib/core/es6/grid/VirtualizedLayoutGrid.js +6 -0
  16. package/lib/core/es6/grid/plugins/SortableTitlePlugin.js +6 -0
  17. package/lib/core/es6/tr-grid-theme.js +1 -1
  18. package/lib/grid/index.js +1 -1
  19. package/lib/grid/themes/halo/dark/efx-grid.js +1 -1
  20. package/lib/grid/themes/halo/dark/es5/all-elements.js +1 -1
  21. package/lib/grid/themes/halo/efx-grid.less +1 -1
  22. package/lib/grid/themes/halo/light/efx-grid.js +1 -1
  23. package/lib/grid/themes/halo/light/es5/all-elements.js +1 -1
  24. package/lib/rt-grid/dist/rt-grid.js +367 -148
  25. package/lib/rt-grid/dist/rt-grid.min.js +1 -1
  26. package/lib/rt-grid/es6/Grid.js +37 -31
  27. package/lib/rt-grid/es6/RowDefSorter.d.ts +5 -5
  28. package/lib/rt-grid/es6/RowDefSorter.js +165 -71
  29. package/lib/tr-grid-column-selection/es6/ColumnSelection.js +66 -0
  30. package/lib/tr-grid-column-stack/es6/ColumnStack.d.ts +3 -0
  31. package/lib/tr-grid-column-stack/es6/ColumnStack.js +566 -607
  32. package/lib/tr-grid-conditional-coloring/es6/ConditionalColoring.js +1 -1
  33. package/lib/tr-grid-range-bar/es6/RangeBar.d.ts +4 -1
  34. package/lib/tr-grid-range-bar/es6/RangeBar.js +99 -39
  35. package/lib/tr-grid-row-dragging/es6/RowDragging.js +14 -3
  36. package/lib/tr-grid-rowcoloring/es6/RowColoring.js +3 -2
  37. package/lib/tr-grid-util/es6/DragUI.js +7 -3
  38. package/lib/tr-grid-util/es6/GroupDefinitions.d.ts +7 -1
  39. package/lib/tr-grid-util/es6/GroupDefinitions.js +39 -3
  40. package/lib/tr-grid-util/es6/jet/DataGenerator.js +36 -33
  41. package/lib/types/es6/ColumnStack.d.ts +2 -0
  42. package/lib/types/es6/Core/data/DataTable.d.ts +3 -1
  43. package/lib/types/es6/Core/data/DataView.d.ts +2 -0
  44. package/lib/types/es6/Core/grid/Core.d.ts +12 -0
  45. package/lib/types/es6/RealtimeGrid/RowDefSorter.d.ts +5 -5
  46. package/lib/versions.json +8 -8
  47. package/package.json +1 -1
@@ -4765,6 +4765,10 @@ ILayoutGrid.prototype.calculateColumnBounds = function (lftIdx, rgtIdx, outPosit
4765
4765
  * @param {number=} topPx Top position of bound
4766
4766
  */
4767
4767
  ILayoutGrid.prototype.updateColumnBounds = function (posAry, noBorderAry, topPx) {};
4768
+ /** @public
4769
+ * @ignore
4770
+ */
4771
+ ILayoutGrid.prototype.updateColumnSeparators = function () {};
4768
4772
 
4769
4773
  /* harmony default export */ const grid_ILayoutGrid = (ILayoutGrid);
4770
4774
 
@@ -8754,7 +8758,14 @@ LayoutGrid.prototype._colSelDirty = false;
8754
8758
  * @private
8755
8759
  */
8756
8760
  LayoutGrid.prototype._hscrollbar = null;
8757
-
8761
+ /** @type {Element}
8762
+ * @private
8763
+ */
8764
+ LayoutGrid.prototype._leftColumnSeparator = null;
8765
+ /** @type {Element}
8766
+ * @private
8767
+ */
8768
+ LayoutGrid.prototype._rightColumnSeparator = null;
8758
8769
 
8759
8770
  /**
8760
8771
  * {@link ElementWrapper#dispose}
@@ -10721,8 +10732,7 @@ LayoutGrid.prototype.selectColumn = function (colIndex, selected) {
10721
10732
 
10722
10733
  var boundLayer = this._boundLayer;
10723
10734
  if(!boundLayer) {
10724
- boundLayer = this._boundLayer = document.createElement("div");
10725
- boundLayer.className = "cover-layer";
10735
+ this._initBoundLayer();
10726
10736
  this._updateLayers();
10727
10737
  }
10728
10738
  }
@@ -10894,6 +10904,92 @@ LayoutGrid.prototype.updateColumnBounds = function (posAry, noBorderAry, topPx)
10894
10904
  }
10895
10905
  };
10896
10906
 
10907
+ /** @public
10908
+ */
10909
+ LayoutGrid.prototype.updateColumnSeparators = function () {
10910
+ var pinnedLeftCount = this._hscrollbar.getPinnedLeftColumnCount();
10911
+ var pinnedRightCount = this._hscrollbar.getPinnedRightColumnCount();
10912
+ if ((pinnedLeftCount || pinnedRightCount) && !this._boundLayer) {
10913
+ this._initBoundLayer();
10914
+ }
10915
+
10916
+ var isScrollbarActive = false;
10917
+ if(this._hscrollbar) {
10918
+ isScrollbarActive = this._hscrollbar.isActive();
10919
+ }
10920
+
10921
+ var boundLayer = this._boundLayer;
10922
+
10923
+ var colSeparator = this._leftColumnSeparator;
10924
+ if (isScrollbarActive && pinnedLeftCount) {
10925
+ if (!colSeparator) {
10926
+ colSeparator = this._leftColumnSeparator = this._createColumnSeparator();
10927
+ }
10928
+ if (!colSeparator.parentNode) {
10929
+ if (boundLayer.children.length) {
10930
+ boundLayer.insertBefore(colSeparator, boundLayer.children[0]);
10931
+ } else {
10932
+ boundLayer.appendChild(colSeparator);
10933
+ }
10934
+ }
10935
+
10936
+ var rightPos = this._trackX.getLaneStart(pinnedLeftCount);
10937
+ colSeparator.style.left = (rightPos - 1) + "px";
10938
+ colSeparator.style.height = this._trackY.getTrackSize() + "px";
10939
+ } else {
10940
+ if (colSeparator && colSeparator.parentNode) {
10941
+ this._boundLayer.removeChild(colSeparator);
10942
+ }
10943
+ }
10944
+
10945
+ colSeparator = this._rightColumnSeparator;
10946
+ if (isScrollbarActive && pinnedRightCount) {
10947
+ if (!colSeparator) {
10948
+ colSeparator = this._rightColumnSeparator = this._createColumnSeparator();
10949
+ }
10950
+
10951
+ if (!colSeparator.parentNode) {
10952
+ if (boundLayer.children.length) {
10953
+ boundLayer.insertBefore(colSeparator, boundLayer.children[0]);
10954
+ } else {
10955
+ boundLayer.appendChild(colSeparator);
10956
+ }
10957
+ }
10958
+ var colCount = this.getColumnCount();
10959
+ var colWidth = this._trackX.getLaneEnd(colCount - 1) - this._trackX.getLaneStart(colCount - pinnedRightCount);
10960
+ var viewSize = this._getViewSize();
10961
+
10962
+ colSeparator.style.left = (viewSize - colWidth - this._rightSpaceSize) + "px";
10963
+ colSeparator.style.height = this._trackY.getTrackSize() + "px";
10964
+ } else {
10965
+ if (colSeparator && colSeparator.parentNode) {
10966
+ this._boundLayer.removeChild(colSeparator);
10967
+ }
10968
+ }
10969
+ };
10970
+
10971
+ /** @private
10972
+ * @return {Element}
10973
+ */
10974
+ LayoutGrid.prototype._createColumnSeparator = function() {
10975
+ var colSeparator = document.createElement("div");
10976
+ colSeparator.classList.add("column-separator");
10977
+ return colSeparator;
10978
+ };
10979
+
10980
+ /** @private
10981
+ * @return {Element}
10982
+ */
10983
+ LayoutGrid.prototype._initBoundLayer = function () {
10984
+ var boundLayer = this._boundLayer;
10985
+ if(!boundLayer) {
10986
+ boundLayer = this._boundLayer = document.createElement("div");
10987
+ boundLayer.className = "cover-layer";
10988
+ this._element.appendChild(boundLayer);
10989
+ }
10990
+ return boundLayer;
10991
+ };
10992
+
10897
10993
  /**
10898
10994
  * @private
10899
10995
  * @param {number} indexX
@@ -12764,7 +12860,8 @@ DataCache_DataCache.prototype._insertRic = function (subId, ric, values) {
12764
12860
  // We cannot cache event arguments because user may want to collect all the updates
12765
12861
  this._onADCForNewRic(subId, ric);
12766
12862
 
12767
- if (!this.getRowData(rid)) { // Ensure that we have subscription id and ric from Quotes2
12863
+ var rowData = this.getRowData(rid);
12864
+ if (!rowData) { // Ensure that we have subscription id and ric from Quotes2
12768
12865
  var tmp = values;
12769
12866
 
12770
12867
  values = {}; // Clone a new object for duplicated ric
@@ -12775,6 +12872,11 @@ DataCache_DataCache.prototype._insertRic = function (subId, ric, values) {
12775
12872
 
12776
12873
  values["SUB_ID"] = subId;
12777
12874
  values["RIC"] = ric;
12875
+ } else {
12876
+ var rowDef = rowData["ROW_DEF"];
12877
+ if(rowDef && rowDef.isChain()){
12878
+ values["SUB_ID"] = subId;
12879
+ }
12778
12880
  }
12779
12881
 
12780
12882
  this.setRowData(rid, values);
@@ -12811,6 +12913,12 @@ DataCache_DataCache.prototype._onQ2SubAdded = function (e) {
12811
12913
  var sub = subs[i];
12812
12914
  var ric = sub["ric"];
12813
12915
 
12916
+ // chain subId fires twice, one with "_ci_" and one without "_ci_"
12917
+ // the subId with "_ci_" should be ignore
12918
+ if(sub["id"].indexOf("_ci_") >= 0){
12919
+ continue;
12920
+ }
12921
+
12814
12922
  this.addSubscription(sub, ric);
12815
12923
 
12816
12924
  if (duplicateSubIds) { // There will be no network request for duplicate subs, and hence we need to update the data from our cache
@@ -12835,6 +12943,13 @@ DataCache_DataCache.prototype._onQ2SubRemoved = function (e) {
12835
12943
 
12836
12944
  for (var i = 0; i < len; ++i) {
12837
12945
  var sub = subs[i];
12946
+
12947
+ // chain subId fires twice, one with "_ci_" and one without "_ci_"
12948
+ // the subId with "_ci_" should be ignore
12949
+ if(sub["id"].indexOf("_ci_") >= 0){
12950
+ continue;
12951
+ }
12952
+
12838
12953
  this.removeSubscription(sub);
12839
12954
  }
12840
12955
  };
@@ -15676,7 +15791,24 @@ DataTable.prototype.setSortingLogic = function(func) {
15676
15791
  * @param {DataTable.SortLogic} func Use null to remove current sorting logic
15677
15792
  */
15678
15793
  DataTable.prototype.setColumnSortingLogic = function(cid, func) {
15679
- this._compMap[cid] = func;
15794
+ if(cid) {
15795
+ this._compMap[cid] = func;
15796
+ }
15797
+ };
15798
+ /** Get sorting logic for the specified field. Default logic is returned, if no logic is specified for the column
15799
+ * @public
15800
+ * @param {string=} cid
15801
+ * @return {DataTable.SortLogic}
15802
+ */
15803
+ DataTable.prototype.getColumnSortingLogic = function(cid) {
15804
+ if(cid) {
15805
+ var logic = this._compMap[cid];
15806
+ if(logic) {
15807
+ return logic;
15808
+ }
15809
+ }
15810
+
15811
+ return this._compMap["_default"] || null;
15680
15812
  };
15681
15813
 
15682
15814
  /** Freeze data table so that no event is fired for data processing until executing {@link DataTable#unfreeze} method
@@ -19423,6 +19555,17 @@ DataView.prototype.setColumnSortingLogic = function(cid, func) {
19423
19555
  this._dt.setColumnSortingLogic(cid, func);
19424
19556
  }
19425
19557
  };
19558
+ /** Get sorting logic for the specified field. Default logic is returned, if no logic is specified for the column
19559
+ * @public
19560
+ * @param {string=} cid
19561
+ * @return {DataTable.SortLogic}
19562
+ */
19563
+ DataView.prototype.getColumnSortingLogic = function(cid) {
19564
+ if(this._dt) {
19565
+ return this._dt.getColumnSortingLogic(cid);
19566
+ }
19567
+ return null;
19568
+ };
19426
19569
  /** Check if this view is in sorting mode
19427
19570
  * @public
19428
19571
  * @return {boolean}
@@ -24945,6 +25088,12 @@ VirtualizedLayoutGrid.prototype.updateColumnBounds = function (posAry, noBorderA
24945
25088
  this._grid.updateColumnBounds(posAry, noBorderAry, topPx);
24946
25089
  this._updateRowBounds();
24947
25090
  };
25091
+ /** @public
25092
+ * @ignore
25093
+ */
25094
+ VirtualizedLayoutGrid.prototype.updateColumnSeparators = function () {
25095
+ this._grid.updateColumnSeparators();
25096
+ };
24948
25097
  /** @private
24949
25098
  */
24950
25099
  VirtualizedLayoutGrid.prototype._initBoundLayer = function () {
@@ -25159,6 +25308,7 @@ VirtualizedLayoutGrid._proto = VirtualizedLayoutGrid.prototype;
25159
25308
 
25160
25309
  // eslint-disable-line
25161
25310
 
25311
+
25162
25312
  // eslint-disable-line
25163
25313
 
25164
25314
 
@@ -25358,7 +25508,9 @@ var Core_Core = function (opt_initializer) {
25358
25508
  "rowRemoved",
25359
25509
  "columnPositionChanged",
25360
25510
  "rowPositionChanged",
25361
- "beforeColumnBoundUpdate"
25511
+ "beforeColumnBoundUpdate",
25512
+ "beforeBatchOperation",
25513
+ "afterBatchOperation"
25362
25514
  );
25363
25515
 
25364
25516
  // For debugging in advanced optimization mode
@@ -25433,6 +25585,15 @@ Core_Core.SectionReference;
25433
25585
  */
25434
25586
  Core_Core.MouseInfo;
25435
25587
 
25588
+ /** @typedef {Object} Core~BatchInfo
25589
+ * @private
25590
+ * @property {string=} reset //set columns
25591
+ * @property {string=} insertion //add cols
25592
+ * @property {string=} removal //remove cols
25593
+ * @property {string=} moving //reorder
25594
+ */
25595
+ Core_Core.BatchInfo;
25596
+
25436
25597
  /** @typedef {Core.MouseInfo|ElementWrapper|Element} Core~CellReference
25437
25598
  * @description A section in core grid can be refered by the following object <br>
25438
25599
  * `{Core.MouseInfo}` : Object with valid x, y coordinates and section index <br>
@@ -25687,6 +25848,10 @@ Core_Core.prototype._rowHeightTimerId = 0;
25687
25848
  * @private
25688
25849
  */
25689
25850
  Core_Core.prototype._groupDefs = null;
25851
+ /** @type {BatchInfo}
25852
+ * @private
25853
+ */
25854
+ Core_Core.prototype._batches = null;
25690
25855
  //#region Public Methods
25691
25856
 
25692
25857
  /**
@@ -25694,7 +25859,7 @@ Core_Core.prototype._groupDefs = null;
25694
25859
  * @return {string}
25695
25860
  */
25696
25861
  Core_Core.getVersion = function () {
25697
- return "5.1.45";
25862
+ return "5.1.50";
25698
25863
  };
25699
25864
  /** {@link ElementWrapper#dispose}
25700
25865
  * @override
@@ -26633,6 +26798,10 @@ Core_Core.prototype.removeColumnAt = function (index) {
26633
26798
 
26634
26799
  if (this._hasListener("columnRemoved")) {
26635
26800
  var e = {};
26801
+ var batches = this._batches;
26802
+ if(batches){
26803
+ e["batches"] = batches;
26804
+ }
26636
26805
  e["atTheMiddle"] = true;
26637
26806
  e["colIndex"] = index;
26638
26807
  e["columns"] = "deprecated";
@@ -26903,6 +27072,7 @@ Core_Core.prototype._moveColumn = function (fromCol, destCol) {
26903
27072
  }
26904
27073
  }
26905
27074
  this._updateColumnBounds();
27075
+ this._updateColumnSeparators();
26906
27076
  return true;
26907
27077
  };
26908
27078
 
@@ -27233,6 +27403,7 @@ Core_Core.prototype.setDefaultRowHeight = function (val, opt_includeTitle) {
27233
27403
  this._syncRowHeights();
27234
27404
  this._rowHeightSync = true;
27235
27405
  this.setRowScrollingStep(this._rowScrollingStep);
27406
+ this._updateColumnSeparators();
27236
27407
  }
27237
27408
  };
27238
27409
 
@@ -28067,6 +28238,7 @@ Core_Core.prototype.freezeColumn = function (frozenColIndex, numRightColumn) {
28067
28238
 
28068
28239
  this._onColumnCountChanged(); // Activate horizontal scrollbar and column virtualization
28069
28240
  this._updateScrollbarWidth(true, true);
28241
+ this._updateColumnSeparators();
28070
28242
  };
28071
28243
 
28072
28244
  /** @private
@@ -29308,6 +29480,21 @@ Core_Core.prototype._updateColumnBounds = function () {
29308
29480
  section.updateColumnBounds(posAry, noBorderAry);
29309
29481
  }
29310
29482
  };
29483
+ /* @private
29484
+ */
29485
+ Core_Core.prototype._updateColumnSeparators = function() {
29486
+ var sectCount = this._settings.length;
29487
+ if(!sectCount) {
29488
+ return;
29489
+ }
29490
+
29491
+ for(var i = 0; i < sectCount; i++) {
29492
+ var section = this._settings[i].getSection();
29493
+ if (section) {
29494
+ section.updateColumnSeparators();
29495
+ }
29496
+ }
29497
+ };
29311
29498
 
29312
29499
  /** @public
29313
29500
  * @param {number} startColIndex INCLUSIVE
@@ -29477,6 +29664,40 @@ Core_Core.prototype.getColumnGroupChildIds = function (groupId) {
29477
29664
  }
29478
29665
  return null;
29479
29666
  };
29667
+
29668
+ /** @public
29669
+ * @param {string} batchType
29670
+ * @return {boolean}
29671
+ * @fires Core#beforeBatchOperation
29672
+ */
29673
+ Core_Core.prototype.startBatch = function (batchType) {
29674
+ if(!batchType){
29675
+ return false;
29676
+ }
29677
+ if(!this._batches){
29678
+ this._batches = {};
29679
+ }
29680
+ this._batches[batchType] = batchType;
29681
+ this._dispatch("beforeBatchOperation", { batches: this._batches, batchType: batchType });
29682
+ return true;
29683
+ };
29684
+ /** @public
29685
+ * @param {string} batchType
29686
+ * @return {boolean}
29687
+ * @fires Core#afterBatchOperation
29688
+ */
29689
+ Core_Core.prototype.stopBatch = function (batchType) {
29690
+ if(!batchType){
29691
+ return false;
29692
+ }
29693
+ this._dispatch("afterBatchOperation", { batches: this._batches, batchType: batchType });
29694
+
29695
+ delete this._batches[batchType];
29696
+ if((0,es6_Util/* isEmptyObject */.Qr)(this._batches)){
29697
+ this._batches = null;
29698
+ }
29699
+ return true;
29700
+ };
29480
29701
  //#endregion Public Methods
29481
29702
 
29482
29703
  //#region Private Methods
@@ -29720,6 +29941,10 @@ Core_Core.prototype._dispatchColumnAddedEvent = function (at, count, atTheMiddle
29720
29941
  if (this._hasListener("columnAdded")) {
29721
29942
  var e = {};
29722
29943
  e["atTheMiddle"] = atTheMiddle;
29944
+ var batches = this._batches;
29945
+ if(batches){
29946
+ e["batches"] = batches;
29947
+ }
29723
29948
  if(count === 1) {
29724
29949
  e["colIndex"] = at;
29725
29950
  e["context"] = ctx;
@@ -29871,6 +30096,10 @@ Core_Core.prototype._removeColumn = function (num) { // TODO: change the logic
29871
30096
 
29872
30097
  if (this._hasListener("columnRemoved")) {
29873
30098
  var e = {};
30099
+ var batches = this._batches;
30100
+ if(batches){
30101
+ e["batches"] = batches;
30102
+ }
29874
30103
  for (var c = colCount; --c >= newCount; ) {
29875
30104
  var colDef = removedCols[c - newCount];
29876
30105
  e["colIndex"] = c;
@@ -30335,6 +30564,8 @@ Core_Core.prototype._onRowCountChanged = function (e) {
30335
30564
  if(!forceUpdate) {
30336
30565
  this._updateVScrollbar(); // Asynchronous
30337
30566
  }
30567
+
30568
+ this._updateColumnSeparators();
30338
30569
  if(prevRowCount < newRowCount) {
30339
30570
  this._dispatch("rowAdded", e);
30340
30571
  } else if(prevRowCount > newRowCount) {
@@ -30392,7 +30623,7 @@ Core_Core.prototype._onRowHeightChanged = function (e) {
30392
30623
  minSectionIndex >= this._startVScrollbarIndex);
30393
30624
  }
30394
30625
  }
30395
-
30626
+ this._updateColumnSeparators();
30396
30627
  this._dispatchRowPositionChanged();
30397
30628
  };
30398
30629
  /** @private
@@ -30457,6 +30688,7 @@ Core_Core.prototype._onColumnCountChanged = function () {
30457
30688
  var pinnedRight = this._countPinnedRightColumns();
30458
30689
 
30459
30690
  this._updateColumnBounds();
30691
+ this._updateColumnSeparators();
30460
30692
 
30461
30693
  if (this._hScrollbarEnabled && pinnedLeft + pinnedRight < this.getColumnCount()) {
30462
30694
  this._hscrollbar.enable();
@@ -30738,6 +30970,7 @@ Core_Core.prototype._syncLayoutToColumns = function (from, to, opt_forceDispatch
30738
30970
  var paneChanged = forceUpdate || (from < this.getHScrollStartIndex()) || (to > this.getFirstPinnedRightIndex());
30739
30971
  this._updateScrollbarWidth(paneChanged, true /* contentChanged */);
30740
30972
  this._updateColumnBounds();
30973
+ this._updateColumnSeparators();
30741
30974
  this._dispatchColumnPositionChanged();
30742
30975
 
30743
30976
  if (dirty || opt_forceDispatching) {
@@ -30833,6 +31066,7 @@ Core_Core.prototype._updateLayout = function () {
30833
31066
  var section = this._settings[s].getSection();
30834
31067
  section.updateLayout(); // Notify section about forced recalculation of the layout
30835
31068
  }
31069
+ this._updateColumnSeparators();
30836
31070
  };
30837
31071
 
30838
31072
  /** @private */
@@ -32395,6 +32629,9 @@ SortableTitlePlugin.prototype._sortDataView = function (opt_action) {
32395
32629
  if (!this._dataSorting) { return; }
32396
32630
 
32397
32631
  var sortCount = this._sortStates.length;
32632
+ if(this._userManagedLogic && sortCount > 1) { // The logic is managed by the user. There is no point in using multi-column sorting
32633
+ sortCount = 1;
32634
+ }
32398
32635
  var orders = null;
32399
32636
  var sortLogics = null;
32400
32637
  var c_ref = null;
@@ -32410,6 +32647,9 @@ SortableTitlePlugin.prototype._sortDataView = function (opt_action) {
32410
32647
  } else {
32411
32648
  c_ref = this.getColumnSortingFields();
32412
32649
  }
32650
+ if(this._userManagedLogic && c_ref.length > 1) {
32651
+ c_ref = c_ref.slice(0, 1);
32652
+ }
32413
32653
  }
32414
32654
 
32415
32655
  // Perform sorting even if there is no sort state