@refinitiv-ui/efx-grid 6.0.34 → 6.0.36

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -832,7 +832,8 @@ DataCache.prototype._insertRic = function (subId, ric, values) {
832
832
  // We cannot cache event arguments because user may want to collect all the updates
833
833
  this._onADCForNewRic(subId, ric);
834
834
 
835
- if (!this.getRowData(rid)) { // Ensure that we have subscription id and ric from Quotes2
835
+ var rowData = this.getRowData(rid);
836
+ if (!rowData) { // Ensure that we have subscription id and ric from Quotes2
836
837
  var tmp = values;
837
838
 
838
839
  values = {}; // Clone a new object for duplicated ric
@@ -843,6 +844,11 @@ DataCache.prototype._insertRic = function (subId, ric, values) {
843
844
 
844
845
  values["SUB_ID"] = subId;
845
846
  values["RIC"] = ric;
847
+ } else {
848
+ var rowDef = rowData["ROW_DEF"];
849
+ if(rowDef && rowDef.isChain()){
850
+ values["SUB_ID"] = subId;
851
+ }
846
852
  }
847
853
 
848
854
  this.setRowData(rid, values);
@@ -879,6 +885,12 @@ DataCache.prototype._onQ2SubAdded = function (e) {
879
885
  var sub = subs[i];
880
886
  var ric = sub["ric"];
881
887
 
888
+ // chain subId fires twice, one with "_ci_" and one without "_ci_"
889
+ // the subId with "_ci_" should be ignore
890
+ if(sub["id"].indexOf("_ci_") >= 0){
891
+ continue;
892
+ }
893
+
882
894
  this.addSubscription(sub, ric);
883
895
 
884
896
  if (duplicateSubIds) { // There will be no network request for duplicate subs, and hence we need to update the data from our cache
@@ -903,6 +915,13 @@ DataCache.prototype._onQ2SubRemoved = function (e) {
903
915
 
904
916
  for (var i = 0; i < len; ++i) {
905
917
  var sub = subs[i];
918
+
919
+ // chain subId fires twice, one with "_ci_" and one without "_ci_"
920
+ // the subId with "_ci_" should be ignore
921
+ if(sub["id"].indexOf("_ci_") >= 0){
922
+ continue;
923
+ }
924
+
906
925
  this.removeSubscription(sub);
907
926
  }
908
927
  };
@@ -70,6 +70,8 @@ declare class DataTable extends DataCache {
70
70
 
71
71
  public setColumnSortingLogic(cid: string, func: DataTable.SortLogic|null): void;
72
72
 
73
+ public getColumnSortingLogic(cid?: string|null): DataTable.SortLogic|null;
74
+
73
75
  public freeze(bool?: boolean|null): boolean;
74
76
 
75
77
  public unfreeze(bool?: boolean|null): boolean;
@@ -882,7 +882,24 @@ DataTable.prototype.setSortingLogic = function(func) {
882
882
  * @param {DataTable.SortLogic} func Use null to remove current sorting logic
883
883
  */
884
884
  DataTable.prototype.setColumnSortingLogic = function(cid, func) {
885
- this._compMap[cid] = func;
885
+ if(cid) {
886
+ this._compMap[cid] = func;
887
+ }
888
+ };
889
+ /** Get sorting logic for the specified field. Default logic is returned, if no logic is specified for the column
890
+ * @public
891
+ * @param {string=} cid
892
+ * @return {DataTable.SortLogic}
893
+ */
894
+ DataTable.prototype.getColumnSortingLogic = function(cid) {
895
+ if(cid) {
896
+ var logic = this._compMap[cid];
897
+ if(logic) {
898
+ return logic;
899
+ }
900
+ }
901
+
902
+ return this._compMap["_default"] || null;
886
903
  };
887
904
 
888
905
  /** Freeze data table so that no event is fired for data processing until executing {@link DataTable#unfreeze} method
@@ -80,6 +80,8 @@ declare class DataView extends EventDispatcher {
80
80
 
81
81
  public setColumnSortingLogic(cid: string, func: DataTable.SortLogic|null): void;
82
82
 
83
+ public getColumnSortingLogic(cid?: string|null): DataTable.SortLogic|null;
84
+
83
85
  public isSorting(): boolean;
84
86
 
85
87
  public hideRow(rId: string|number|null, hidden?: boolean|null): void;
@@ -783,6 +783,17 @@ DataView.prototype.setColumnSortingLogic = function(cid, func) {
783
783
  this._dt.setColumnSortingLogic(cid, func);
784
784
  }
785
785
  };
786
+ /** Get sorting logic for the specified field. Default logic is returned, if no logic is specified for the column
787
+ * @public
788
+ * @param {string=} cid
789
+ * @return {DataTable.SortLogic}
790
+ */
791
+ DataView.prototype.getColumnSortingLogic = function(cid) {
792
+ if(this._dt) {
793
+ return this._dt.getColumnSortingLogic(cid);
794
+ }
795
+ return null;
796
+ };
786
797
  /** Check if this view is in sorting mode
787
798
  * @public
788
799
  * @return {boolean}
@@ -1,5 +1,6 @@
1
1
  import Ext from "../../../tr-grid-util/es6/Ext.js";
2
2
  import GroupDefinitions from "../../../tr-grid-util/es6/GroupDefinitions.js"; // eslint-disable-line
3
+ import { isEmptyObject } from "../../../tr-grid-util/es6/Util.js";
3
4
  import ElementWrapper from "./components/ElementWrapper.js";
4
5
  import ILayoutGrid from "./ILayoutGrid.js"; // eslint-disable-line
5
6
  import LayoutGrid from "./LayoutGrid.js";
@@ -32,6 +33,13 @@ declare namespace Core {
32
33
  dataSource: DataView|null
33
34
  };
34
35
 
36
+ type BatchInfo = {
37
+ reset?: string|null,
38
+ insertion?: string|null,
39
+ removal?: string|null,
40
+ moving?: string|null
41
+ };
42
+
35
43
  type CellReference = Core.MouseInfo|ElementWrapper|Element|null;
36
44
 
37
45
  type ColumnOptions = {
@@ -395,6 +403,10 @@ declare class Core extends ElementWrapper {
395
403
 
396
404
  public getColumnGroupChildIds(groupId: string): (string)[]|null;
397
405
 
406
+ public startBatch(batchType: string): boolean;
407
+
408
+ public stopBatch(batchType: string): boolean;
409
+
398
410
  public getColumnId(colIndex: number): string;
399
411
 
400
412
  public getColumnIds(): (string)[];
@@ -1,5 +1,6 @@
1
1
  import Ext from "../../../tr-grid-util/es6/Ext.js";
2
2
  import GroupDefinitions from "../../../tr-grid-util/es6/GroupDefinitions.js"; // eslint-disable-line
3
+ import { isEmptyObject } from "../../../tr-grid-util/es6/Util.js";
3
4
  import ElementWrapper from "./components/ElementWrapper.js";
4
5
  import ILayoutGrid from "./ILayoutGrid.js"; // eslint-disable-line
5
6
  import LayoutGrid from "./LayoutGrid.js";
@@ -200,7 +201,9 @@ var Core = function (opt_initializer) {
200
201
  "rowRemoved",
201
202
  "columnPositionChanged",
202
203
  "rowPositionChanged",
203
- "beforeColumnBoundUpdate"
204
+ "beforeColumnBoundUpdate",
205
+ "beforeBatchOperation",
206
+ "afterBatchOperation"
204
207
  );
205
208
 
206
209
  // For debugging in advanced optimization mode
@@ -275,6 +278,15 @@ Core.SectionReference;
275
278
  */
276
279
  Core.MouseInfo;
277
280
 
281
+ /** @typedef {Object} Core~BatchInfo
282
+ * @private
283
+ * @property {string=} reset //set columns
284
+ * @property {string=} insertion //add cols
285
+ * @property {string=} removal //remove cols
286
+ * @property {string=} moving //reorder
287
+ */
288
+ Core.BatchInfo;
289
+
278
290
  /** @typedef {Core.MouseInfo|ElementWrapper|Element} Core~CellReference
279
291
  * @description A section in core grid can be refered by the following object <br>
280
292
  * `{Core.MouseInfo}` : Object with valid x, y coordinates and section index <br>
@@ -529,6 +541,10 @@ Core.prototype._rowHeightTimerId = 0;
529
541
  * @private
530
542
  */
531
543
  Core.prototype._groupDefs = null;
544
+ /** @type {BatchInfo}
545
+ * @private
546
+ */
547
+ Core.prototype._batches = null;
532
548
  //#region Public Methods
533
549
 
534
550
  /**
@@ -536,7 +552,7 @@ Core.prototype._groupDefs = null;
536
552
  * @return {string}
537
553
  */
538
554
  Core.getVersion = function () {
539
- return "5.1.45";
555
+ return "5.1.50";
540
556
  };
541
557
  /** {@link ElementWrapper#dispose}
542
558
  * @override
@@ -1475,6 +1491,10 @@ Core.prototype.removeColumnAt = function (index) {
1475
1491
 
1476
1492
  if (this._hasListener("columnRemoved")) {
1477
1493
  var e = {};
1494
+ var batches = this._batches;
1495
+ if(batches){
1496
+ e["batches"] = batches;
1497
+ }
1478
1498
  e["atTheMiddle"] = true;
1479
1499
  e["colIndex"] = index;
1480
1500
  e["columns"] = "deprecated";
@@ -1745,6 +1765,7 @@ Core.prototype._moveColumn = function (fromCol, destCol) {
1745
1765
  }
1746
1766
  }
1747
1767
  this._updateColumnBounds();
1768
+ this._updateColumnSeparators();
1748
1769
  return true;
1749
1770
  };
1750
1771
 
@@ -2075,6 +2096,7 @@ Core.prototype.setDefaultRowHeight = function (val, opt_includeTitle) {
2075
2096
  this._syncRowHeights();
2076
2097
  this._rowHeightSync = true;
2077
2098
  this.setRowScrollingStep(this._rowScrollingStep);
2099
+ this._updateColumnSeparators();
2078
2100
  }
2079
2101
  };
2080
2102
 
@@ -2909,6 +2931,7 @@ Core.prototype.freezeColumn = function (frozenColIndex, numRightColumn) {
2909
2931
 
2910
2932
  this._onColumnCountChanged(); // Activate horizontal scrollbar and column virtualization
2911
2933
  this._updateScrollbarWidth(true, true);
2934
+ this._updateColumnSeparators();
2912
2935
  };
2913
2936
 
2914
2937
  /** @private
@@ -4150,6 +4173,21 @@ Core.prototype._updateColumnBounds = function () {
4150
4173
  section.updateColumnBounds(posAry, noBorderAry);
4151
4174
  }
4152
4175
  };
4176
+ /* @private
4177
+ */
4178
+ Core.prototype._updateColumnSeparators = function() {
4179
+ var sectCount = this._settings.length;
4180
+ if(!sectCount) {
4181
+ return;
4182
+ }
4183
+
4184
+ for(var i = 0; i < sectCount; i++) {
4185
+ var section = this._settings[i].getSection();
4186
+ if (section) {
4187
+ section.updateColumnSeparators();
4188
+ }
4189
+ }
4190
+ };
4153
4191
 
4154
4192
  /** @public
4155
4193
  * @param {number} startColIndex INCLUSIVE
@@ -4319,6 +4357,40 @@ Core.prototype.getColumnGroupChildIds = function (groupId) {
4319
4357
  }
4320
4358
  return null;
4321
4359
  };
4360
+
4361
+ /** @public
4362
+ * @param {string} batchType
4363
+ * @return {boolean}
4364
+ * @fires Core#beforeBatchOperation
4365
+ */
4366
+ Core.prototype.startBatch = function (batchType) {
4367
+ if(!batchType){
4368
+ return false;
4369
+ }
4370
+ if(!this._batches){
4371
+ this._batches = {};
4372
+ }
4373
+ this._batches[batchType] = batchType;
4374
+ this._dispatch("beforeBatchOperation", { batches: this._batches, batchType: batchType });
4375
+ return true;
4376
+ };
4377
+ /** @public
4378
+ * @param {string} batchType
4379
+ * @return {boolean}
4380
+ * @fires Core#afterBatchOperation
4381
+ */
4382
+ Core.prototype.stopBatch = function (batchType) {
4383
+ if(!batchType){
4384
+ return false;
4385
+ }
4386
+ this._dispatch("afterBatchOperation", { batches: this._batches, batchType: batchType });
4387
+
4388
+ delete this._batches[batchType];
4389
+ if(isEmptyObject(this._batches)){
4390
+ this._batches = null;
4391
+ }
4392
+ return true;
4393
+ };
4322
4394
  //#endregion Public Methods
4323
4395
 
4324
4396
  //#region Private Methods
@@ -4562,6 +4634,10 @@ Core.prototype._dispatchColumnAddedEvent = function (at, count, atTheMiddle, ctx
4562
4634
  if (this._hasListener("columnAdded")) {
4563
4635
  var e = {};
4564
4636
  e["atTheMiddle"] = atTheMiddle;
4637
+ var batches = this._batches;
4638
+ if(batches){
4639
+ e["batches"] = batches;
4640
+ }
4565
4641
  if(count === 1) {
4566
4642
  e["colIndex"] = at;
4567
4643
  e["context"] = ctx;
@@ -4713,6 +4789,10 @@ Core.prototype._removeColumn = function (num) { // TODO: change the logic to us
4713
4789
 
4714
4790
  if (this._hasListener("columnRemoved")) {
4715
4791
  var e = {};
4792
+ var batches = this._batches;
4793
+ if(batches){
4794
+ e["batches"] = batches;
4795
+ }
4716
4796
  for (var c = colCount; --c >= newCount; ) {
4717
4797
  var colDef = removedCols[c - newCount];
4718
4798
  e["colIndex"] = c;
@@ -5177,6 +5257,8 @@ Core.prototype._onRowCountChanged = function (e) {
5177
5257
  if(!forceUpdate) {
5178
5258
  this._updateVScrollbar(); // Asynchronous
5179
5259
  }
5260
+
5261
+ this._updateColumnSeparators();
5180
5262
  if(prevRowCount < newRowCount) {
5181
5263
  this._dispatch("rowAdded", e);
5182
5264
  } else if(prevRowCount > newRowCount) {
@@ -5234,7 +5316,7 @@ Core.prototype._onRowHeightChanged = function (e) {
5234
5316
  minSectionIndex >= this._startVScrollbarIndex);
5235
5317
  }
5236
5318
  }
5237
-
5319
+ this._updateColumnSeparators();
5238
5320
  this._dispatchRowPositionChanged();
5239
5321
  };
5240
5322
  /** @private
@@ -5299,6 +5381,7 @@ Core.prototype._onColumnCountChanged = function () {
5299
5381
  var pinnedRight = this._countPinnedRightColumns();
5300
5382
 
5301
5383
  this._updateColumnBounds();
5384
+ this._updateColumnSeparators();
5302
5385
 
5303
5386
  if (this._hScrollbarEnabled && pinnedLeft + pinnedRight < this.getColumnCount()) {
5304
5387
  this._hscrollbar.enable();
@@ -5580,6 +5663,7 @@ Core.prototype._syncLayoutToColumns = function (from, to, opt_forceDispatching)
5580
5663
  var paneChanged = forceUpdate || (from < this.getHScrollStartIndex()) || (to > this.getFirstPinnedRightIndex());
5581
5664
  this._updateScrollbarWidth(paneChanged, true /* contentChanged */);
5582
5665
  this._updateColumnBounds();
5666
+ this._updateColumnSeparators();
5583
5667
  this._dispatchColumnPositionChanged();
5584
5668
 
5585
5669
  if (dirty || opt_forceDispatching) {
@@ -5675,6 +5759,7 @@ Core.prototype._updateLayout = function () {
5675
5759
  var section = this._settings[s].getSection();
5676
5760
  section.updateLayout(); // Notify section about forced recalculation of the layout
5677
5761
  }
5762
+ this._updateColumnSeparators();
5678
5763
  };
5679
5764
 
5680
5765
  /** @private */
@@ -697,6 +697,10 @@ ILayoutGrid.prototype.calculateColumnBounds = function (lftIdx, rgtIdx, outPosit
697
697
  * @param {number=} topPx Top position of bound
698
698
  */
699
699
  ILayoutGrid.prototype.updateColumnBounds = function (posAry, noBorderAry, topPx) {};
700
+ /** @public
701
+ * @ignore
702
+ */
703
+ ILayoutGrid.prototype.updateColumnSeparators = function () {};
700
704
 
701
705
  export default ILayoutGrid;
702
706
  export { ILayoutGrid };
@@ -26,7 +26,11 @@ declare class LayoutGrid extends ElementWrapper {
26
26
 
27
27
  public setCellBounds(colIndex: number, rowIndex: number, width: number, height: number): void;
28
28
 
29
+ public updateColumnSeparators(): void;
30
+
29
31
  }
30
32
 
33
+ declare function rgtPx(): void;
34
+
31
35
  export default LayoutGrid;
32
36
  export { LayoutGrid };
@@ -269,7 +269,14 @@ LayoutGrid.prototype._colSelDirty = false;
269
269
  * @private
270
270
  */
271
271
  LayoutGrid.prototype._hscrollbar = null;
272
-
272
+ /** @type {Element}
273
+ * @private
274
+ */
275
+ LayoutGrid.prototype._leftColumnSeparator = null;
276
+ /** @type {Element}
277
+ * @private
278
+ */
279
+ LayoutGrid.prototype._rightColumnSeparator = null;
273
280
 
274
281
  /**
275
282
  * {@link ElementWrapper#dispose}
@@ -2236,8 +2243,7 @@ LayoutGrid.prototype.selectColumn = function (colIndex, selected) {
2236
2243
 
2237
2244
  var boundLayer = this._boundLayer;
2238
2245
  if(!boundLayer) {
2239
- boundLayer = this._boundLayer = document.createElement("div");
2240
- boundLayer.className = "cover-layer";
2246
+ this._initBoundLayer();
2241
2247
  this._updateLayers();
2242
2248
  }
2243
2249
  }
@@ -2409,6 +2415,92 @@ LayoutGrid.prototype.updateColumnBounds = function (posAry, noBorderAry, topPx)
2409
2415
  }
2410
2416
  };
2411
2417
 
2418
+ /** @public
2419
+ */
2420
+ LayoutGrid.prototype.updateColumnSeparators = function () {
2421
+ var pinnedLeftCount = this._hscrollbar.getPinnedLeftColumnCount();
2422
+ var pinnedRightCount = this._hscrollbar.getPinnedRightColumnCount();
2423
+ if ((pinnedLeftCount || pinnedRightCount) && !this._boundLayer) {
2424
+ this._initBoundLayer();
2425
+ }
2426
+
2427
+ var isScrollbarActive = false;
2428
+ if(this._hscrollbar) {
2429
+ isScrollbarActive = this._hscrollbar.isActive();
2430
+ }
2431
+
2432
+ var boundLayer = this._boundLayer;
2433
+
2434
+ var colSeparator = this._leftColumnSeparator;
2435
+ if (isScrollbarActive && pinnedLeftCount) {
2436
+ if (!colSeparator) {
2437
+ colSeparator = this._leftColumnSeparator = this._createColumnSeparator();
2438
+ }
2439
+ if (!colSeparator.parentNode) {
2440
+ if (boundLayer.children.length) {
2441
+ boundLayer.insertBefore(colSeparator, boundLayer.children[0]);
2442
+ } else {
2443
+ boundLayer.appendChild(colSeparator);
2444
+ }
2445
+ }
2446
+
2447
+ var rightPos = this._trackX.getLaneStart(pinnedLeftCount);
2448
+ colSeparator.style.left = (rightPos - 1) + "px";
2449
+ colSeparator.style.height = this._trackY.getTrackSize() + "px";
2450
+ } else {
2451
+ if (colSeparator && colSeparator.parentNode) {
2452
+ this._boundLayer.removeChild(colSeparator);
2453
+ }
2454
+ }
2455
+
2456
+ colSeparator = this._rightColumnSeparator;
2457
+ if (isScrollbarActive && pinnedRightCount) {
2458
+ if (!colSeparator) {
2459
+ colSeparator = this._rightColumnSeparator = this._createColumnSeparator();
2460
+ }
2461
+
2462
+ if (!colSeparator.parentNode) {
2463
+ if (boundLayer.children.length) {
2464
+ boundLayer.insertBefore(colSeparator, boundLayer.children[0]);
2465
+ } else {
2466
+ boundLayer.appendChild(colSeparator);
2467
+ }
2468
+ }
2469
+ var colCount = this.getColumnCount();
2470
+ var colWidth = this._trackX.getLaneEnd(colCount - 1) - this._trackX.getLaneStart(colCount - pinnedRightCount);
2471
+ var viewSize = this._getViewSize();
2472
+
2473
+ colSeparator.style.left = (viewSize - colWidth - this._rightSpaceSize) + "px";
2474
+ colSeparator.style.height = this._trackY.getTrackSize() + "px";
2475
+ } else {
2476
+ if (colSeparator && colSeparator.parentNode) {
2477
+ this._boundLayer.removeChild(colSeparator);
2478
+ }
2479
+ }
2480
+ };
2481
+
2482
+ /** @private
2483
+ * @return {Element}
2484
+ */
2485
+ LayoutGrid.prototype._createColumnSeparator = function() {
2486
+ var colSeparator = document.createElement("div");
2487
+ colSeparator.classList.add("column-separator");
2488
+ return colSeparator;
2489
+ };
2490
+
2491
+ /** @private
2492
+ * @return {Element}
2493
+ */
2494
+ LayoutGrid.prototype._initBoundLayer = function () {
2495
+ var boundLayer = this._boundLayer;
2496
+ if(!boundLayer) {
2497
+ boundLayer = this._boundLayer = document.createElement("div");
2498
+ boundLayer.className = "cover-layer";
2499
+ this._element.appendChild(boundLayer);
2500
+ }
2501
+ return boundLayer;
2502
+ };
2503
+
2412
2504
  /**
2413
2505
  * @private
2414
2506
  * @param {number} indexX
@@ -1102,6 +1102,12 @@ VirtualizedLayoutGrid.prototype.updateColumnBounds = function (posAry, noBorderA
1102
1102
  this._grid.updateColumnBounds(posAry, noBorderAry, topPx);
1103
1103
  this._updateRowBounds();
1104
1104
  };
1105
+ /** @public
1106
+ * @ignore
1107
+ */
1108
+ VirtualizedLayoutGrid.prototype.updateColumnSeparators = function () {
1109
+ this._grid.updateColumnSeparators();
1110
+ };
1105
1111
  /** @private
1106
1112
  */
1107
1113
  VirtualizedLayoutGrid.prototype._initBoundLayer = function () {
@@ -1541,6 +1541,9 @@ SortableTitlePlugin.prototype._sortDataView = function (opt_action) {
1541
1541
  if (!this._dataSorting) { return; }
1542
1542
 
1543
1543
  var sortCount = this._sortStates.length;
1544
+ if(this._userManagedLogic && sortCount > 1) { // The logic is managed by the user. There is no point in using multi-column sorting
1545
+ sortCount = 1;
1546
+ }
1544
1547
  var orders = null;
1545
1548
  var sortLogics = null;
1546
1549
  var c_ref = null;
@@ -1556,6 +1559,9 @@ SortableTitlePlugin.prototype._sortDataView = function (opt_action) {
1556
1559
  } else {
1557
1560
  c_ref = this.getColumnSortingFields();
1558
1561
  }
1562
+ if(this._userManagedLogic && c_ref.length > 1) {
1563
+ c_ref = c_ref.slice(0, 1);
1564
+ }
1559
1565
  }
1560
1566
 
1561
1567
  // Perform sorting even if there is no sort state