@refinitiv-ui/efx-grid 6.0.34 → 6.0.35

Sign up to get free protection for your applications and to get access to all the features.
Files changed (35) hide show
  1. package/lib/column-dragging/es6/ColumnDragging.js +50 -40
  2. package/lib/core/dist/core.js +99 -3
  3. package/lib/core/dist/core.min.js +1 -1
  4. package/lib/core/es6/data/DataTable.d.ts +2 -0
  5. package/lib/core/es6/data/DataTable.js +18 -1
  6. package/lib/core/es6/data/DataView.d.ts +2 -0
  7. package/lib/core/es6/data/DataView.js +11 -0
  8. package/lib/core/es6/grid/Core.d.ts +12 -0
  9. package/lib/core/es6/grid/Core.js +64 -2
  10. package/lib/core/es6/grid/plugins/SortableTitlePlugin.js +6 -0
  11. package/lib/grid/index.js +1 -1
  12. package/lib/grid/themes/halo/dark/efx-grid.js +1 -1
  13. package/lib/grid/themes/halo/dark/es5/all-elements.js +1 -1
  14. package/lib/grid/themes/halo/efx-grid.less +1 -1
  15. package/lib/grid/themes/halo/light/efx-grid.js +1 -1
  16. package/lib/grid/themes/halo/light/es5/all-elements.js +1 -1
  17. package/lib/rt-grid/dist/rt-grid.js +343 -142
  18. package/lib/rt-grid/dist/rt-grid.min.js +1 -1
  19. package/lib/rt-grid/es6/Grid.js +33 -26
  20. package/lib/rt-grid/es6/RowDefSorter.d.ts +5 -5
  21. package/lib/rt-grid/es6/RowDefSorter.js +165 -71
  22. package/lib/tr-grid-column-selection/es6/ColumnSelection.js +66 -0
  23. package/lib/tr-grid-column-stack/es6/ColumnStack.d.ts +2 -0
  24. package/lib/tr-grid-column-stack/es6/ColumnStack.js +17 -3
  25. package/lib/tr-grid-conditional-coloring/es6/ConditionalColoring.js +1 -1
  26. package/lib/tr-grid-row-dragging/es6/RowDragging.js +14 -3
  27. package/lib/tr-grid-rowcoloring/es6/RowColoring.js +3 -2
  28. package/lib/tr-grid-util/es6/DragUI.js +7 -3
  29. package/lib/tr-grid-util/es6/jet/DataGenerator.js +36 -33
  30. package/lib/types/es6/ColumnStack.d.ts +2 -0
  31. package/lib/types/es6/Core/data/DataTable.d.ts +3 -1
  32. package/lib/types/es6/Core/data/DataView.d.ts +2 -0
  33. package/lib/types/es6/RealtimeGrid/RowDefSorter.d.ts +5 -5
  34. package/lib/versions.json +7 -7
  35. package/package.json +1 -1
@@ -1620,21 +1620,24 @@ Grid.prototype._shouldLoadFieldInfo = function (field) {
1620
1620
  * @param {Array.<Object>} columns Array of column options
1621
1621
  */
1622
1622
  Grid.prototype.setColumns = function(columns) {
1623
+ var grid = this._grid;
1623
1624
  var colCount = (columns) ? columns.length : 0;
1624
1625
 
1626
+ grid.startBatch("reset");
1625
1627
  this.removeAllColumns();
1626
1628
  if(colCount > 0) {
1627
1629
  var prevState = false;
1628
1630
  if(colCount > 1) {
1629
- prevState = this._grid.freezeLayout(true); // Insert multiple columns can be a huge time consuming
1631
+ prevState = grid.freezeLayout(true); // Insert multiple columns can be a huge time consuming
1630
1632
  }
1631
1633
  for(var i = 0; i < colCount; ++i) {
1632
1634
  this.insertColumn(columns[i], i);
1633
1635
  }
1634
1636
  if(colCount > 1) {
1635
- this._grid.freezeLayout(prevState);
1637
+ grid.freezeLayout(prevState);
1636
1638
  }
1637
1639
  }
1640
+ grid.stopBatch("reset");
1638
1641
  };
1639
1642
 
1640
1643
 
@@ -1643,6 +1646,8 @@ Grid.prototype.setColumns = function(columns) {
1643
1646
  * @param {Array.<Object>} columns Array of column options
1644
1647
  */
1645
1648
  Grid.prototype.restoreColumns = function(columns) {
1649
+ var grid = this._grid;
1650
+ grid.startBatch("reset");
1646
1651
  var configObj = this.getConfigObject();
1647
1652
  var previousColumns = configObj.columns;
1648
1653
 
@@ -1706,7 +1711,8 @@ Grid.prototype.restoreColumns = function(columns) {
1706
1711
  this._stp.sortColumns(sortingStates);
1707
1712
  }
1708
1713
 
1709
- this._grid.reorderColumns(columnOrdering);
1714
+ grid.reorderColumns(columnOrdering);
1715
+ grid.stopBatch("reset");
1710
1716
  };
1711
1717
 
1712
1718
  /** Remove all existing columns and add new columns based on the given texts/fields
@@ -3399,33 +3405,34 @@ Grid.prototype._updateStreamingData = function() {
3399
3405
  * @param {Object} e
3400
3406
  */
3401
3407
  Grid.prototype._onPreDataSorting = function (e) {
3402
- var field = "";
3403
- var rowSorting = false;
3404
- var sortLogic = null;
3405
-
3406
- var states = this._stp.getSortingStates(); // WARNING: Use of deprecated function
3407
- var state = states ? states[0] : null; // TODO: Support multi-column sorting
3408
-
3409
- if(state) {
3410
- field = state["field"] || "";
3411
- var colIndex = this._stp.getSortedColumnIndex(0);
3412
- var colDef = (colIndex >= 0) ? this.getColumnDefinition(colIndex) : null;
3413
- this._sorter.setContext("colIndex", colIndex);
3414
- this._sorter.setContext("colDef", colDef);
3408
+ var objs = this._stp.getSortedColumns();
3409
+
3410
+ this._sorter.reset();
3411
+ if(Array.isArray(objs)) {
3412
+ var sortCount = objs.length;
3413
+ for(var i = 0; i < sortCount; ++i) {
3414
+ var obj = objs[i];
3415
+ var field = obj["field"] || "";
3416
+ var colIndex = obj["colIndex"];
3417
+ var colDef = (colIndex >= 0) ? this.getColumnDefinition(colIndex) : null;
3418
+
3419
+ var rowSorting = false;
3420
+ var sortLogic = null;
3421
+ if(colDef) {
3422
+ field = colDef.getField(); // WARNING: Field and logic could be out of sync
3423
+ rowSorting = colDef.isRowSorting();
3424
+ sortLogic = colDef.getSorter();
3425
+ }
3426
+ // TODO: get sortLogic from DataView
3427
+ // if(!sortLogic && field) {
3428
+ // sortLogic = state["sortLogic"];
3429
+ // }
3415
3430
 
3416
- if(colDef) {
3417
- field = colDef.getField(); // WARNING: Field and logic could be out of sync
3418
- sortLogic = colDef.getSorter();
3419
- rowSorting = colDef.isRowSorting();
3431
+ this._sorter.addColumnContext(field, sortLogic, rowSorting, obj["sortOrder"], colIndex, colDef);
3420
3432
  }
3421
3433
  }
3422
- if(!sortLogic && field) {
3423
- sortLogic = state["sortLogic"];
3424
- }
3425
3434
 
3426
- this._sorter.setField(field);
3427
- this._sorter.setSortLogic(sortLogic);
3428
- this._columnSorter = this._sorter.getSorter(rowSorting);
3435
+ this._columnSorter = this._sorter.getSorter();
3429
3436
  };
3430
3437
  /** @private
3431
3438
  * @param {RowDefinition} rowDefA
@@ -1,4 +1,4 @@
1
-
1
+ import { cloneObject } from "../../tr-grid-util/es6/Util.js";
2
2
 
3
3
  declare class RowDefSorter {
4
4
 
@@ -6,14 +6,14 @@ declare class RowDefSorter {
6
6
 
7
7
  public dispose(): void;
8
8
 
9
- public getSorter(rowSorting?: boolean|null): ((...params: any[]) => any)|null;
10
-
11
- public setSortLogic(func?: ((...params: any[]) => any)|null): void;
9
+ public getSorter(): ((...params: any[]) => any)|null;
12
10
 
13
- public setField(field: string): void;
11
+ public reset(key: string, value: any): void;
14
12
 
15
13
  public setContext(key: string, value: any): void;
16
14
 
15
+ public addColumnContext(field: string, logic: ((...params: any[]) => any)|null, rowSorting: boolean, order: string, colIndex: number, colDef: any): void;
16
+
17
17
  }
18
18
 
19
19
  export default RowDefSorter;
@@ -1,70 +1,147 @@
1
+ import { cloneObject } from "../../tr-grid-util/es6/Util.js";
2
+
3
+ /** @private
4
+ * @param {*} a
5
+ * @param {*} b
6
+ * @param {number} order
7
+ * @return {number}
8
+ */
9
+ var _defaultCompare = function(a, b, order) {
10
+ if(a == null || a !== a) {
11
+ if(b == null || b !== b) {
12
+ return 0;
13
+ }
14
+ return 1;
15
+ }
16
+ if(b == null || b !== b) {
17
+ return -1;
18
+ }
19
+
20
+ if(a < b) {
21
+ return -order;
22
+ }
23
+ if(b < a) {
24
+ return order;
25
+ }
26
+ return 0;
27
+ };
28
+
1
29
  /** @constructor
2
30
  */
3
31
  var RowDefSorter = function() {
4
32
  this._defaultSorter = this._defaultSorter.bind(this);
5
33
  this._dataSorter = this._dataSorter.bind(this);
6
34
  this._rowDefSorter = this._rowDefSorter.bind(this);
35
+ this._multiColumnsSorter = this._multiColumnsSorter.bind(this);
7
36
 
8
- this._sortContext = {};
37
+ this._globalContext = {};
38
+ this._sortParams = [];
39
+ this._ctxCaches = [];
9
40
  };
10
41
 
11
-
12
- /** @type {string}
42
+ /** @type {!Object}
13
43
  * @private
14
44
  */
15
- RowDefSorter.prototype._field = "";
16
- /** @type {!Object}
45
+ RowDefSorter.prototype._globalContext;
46
+ /** @type {!Array.<Array>}
47
+ * @private
48
+ */
49
+ RowDefSorter.prototype._sortParams;
50
+ /** @type {!Array.<Object>}
17
51
  * @private
18
52
  */
19
- RowDefSorter.prototype._sortContext;
20
- /** @type {Function}
53
+ RowDefSorter.prototype._ctxCaches;
54
+ /** @type {Array}
21
55
  * @private
22
56
  */
23
- RowDefSorter.prototype._sortLogic = null;
57
+ RowDefSorter.prototype._primaryParams;
24
58
 
25
59
 
26
60
  /** @public
27
61
  */
28
62
  RowDefSorter.prototype.dispose = function() {
29
- this._sortLogic = null;
30
- this._sortContext = {}; // Clear any existing reference
63
+ this._globalContext = {}; // Clear any existing reference
64
+ this._sortParams.length = 0;
65
+ this._ctxCaches.length = 0;
66
+ this._primaryParams = null;
31
67
  };
32
68
 
33
69
  /** @public
34
- * @param {boolean=} rowSorting=false
35
70
  * @return {Function}
36
71
  */
37
- RowDefSorter.prototype.getSorter = function(rowSorting) {
38
- if(this._sortLogic) {
39
- return rowSorting ? this._rowDefSorter : this._dataSorter;
40
- } else {
41
- return this._defaultSorter;
72
+ RowDefSorter.prototype.getSorter = function() {
73
+ this._primaryParams = null;
74
+ var sortCount = this._sortParams.length;
75
+ if(sortCount === 1) {
76
+ var params = this._primaryParams = this._sortParams[0];
77
+ var sortLogic = params[1];
78
+ if(sortLogic) {
79
+ var rowSorting = params[3];
80
+ return rowSorting ? this._rowDefSorter : this._dataSorter;
81
+ } else {
82
+ return this._defaultSorter;
83
+ }
84
+ } else if(sortCount > 1) {
85
+ return this._multiColumnsSorter;
42
86
  }
43
- };
44
- /** @public
45
- * @param {Function=} func
46
- */
47
- RowDefSorter.prototype.setSortLogic = function(func) {
48
- this._sortLogic = (typeof func === "function") ? func : null;
49
- };
50
87
 
88
+ return RowDefSorter._noSorting;
89
+ };
51
90
 
52
91
  /** @public
53
- * @param {string} field
92
+ * @param {string} key
93
+ * @param {*} value
54
94
  */
55
- RowDefSorter.prototype.setField = function(field) {
56
- if(!field) {
57
- field = "";
95
+ RowDefSorter.prototype.reset = function() {
96
+ if(this._sortParams.length) {
97
+ this._sortParams.length = 0;
58
98
  }
59
- this._sortContext["field"] = this._field = field;
60
- this._sortContext["formattedField"] = field + "_FORMATTED";
61
99
  };
62
100
  /** @public
63
101
  * @param {string} key
64
102
  * @param {*} value
65
103
  */
66
104
  RowDefSorter.prototype.setContext = function(key, value) {
67
- this._sortContext[key] = value;
105
+ this._globalContext[key] = value;
106
+ };
107
+ /** @public
108
+ * @param {string} field
109
+ * @param {Function} logic
110
+ * @param {boolean} rowSorting
111
+ * @param {string} order
112
+ * @param {number} colIndex
113
+ * @param {*} colDef
114
+ */
115
+ RowDefSorter.prototype.addColumnContext = function(field, logic, rowSorting, order, colIndex, colDef) {
116
+ if(!field) {
117
+ field = "";
118
+ }
119
+ var sortPriority = this._sortParams.length;
120
+ var ctx = this._ctxCaches[sortPriority];
121
+ if(!ctx) {
122
+ ctx = this._ctxCaches[sortPriority] = cloneObject(this._globalContext);
123
+ }
124
+ var orderNum = 0;
125
+ if(order === "a") {
126
+ orderNum = 1;
127
+ } else if(order === "d") {
128
+ orderNum = -1;
129
+ }
130
+
131
+ var params = [
132
+ field, // 0
133
+ (typeof logic === "function") ? logic : null, // 1
134
+ ctx, // 2
135
+ rowSorting, // 3
136
+ orderNum // 4
137
+ ];
138
+
139
+ ctx["colIndex"] = colIndex;
140
+ ctx["field"] = field;
141
+ ctx["formattedField"] = field + "_FORMATTED";
142
+ ctx["colDef"] = colDef;
143
+
144
+ this._sortParams.push(params);
68
145
  };
69
146
 
70
147
  /** @private
@@ -73,32 +150,7 @@ RowDefSorter.prototype.setContext = function(key, value) {
73
150
  * @param {number} order
74
151
  * @return {number}
75
152
  */
76
- RowDefSorter.prototype._defaultSorter = function(rowDefA, rowDefB, order) {
77
- var orderA = rowDefA.getGroupOrder();
78
- var orderB = rowDefB.getGroupOrder();
79
- if(orderA !== orderB) {
80
- return orderA - orderB; // Regardless of sort order
81
- }
82
-
83
- var a = rowDefA.getData(this._field);
84
- var b = rowDefB.getData(this._field);
85
-
86
- if(a == null || a !== a) {
87
- if(b == null || b !== b) {
88
- return 0;
89
- }
90
- return 1;
91
- }
92
- if(b == null || b !== b) {
93
- return -1;
94
- }
95
-
96
- if(a < b) {
97
- return -order;
98
- }
99
- if(b < a) {
100
- return order;
101
- }
153
+ RowDefSorter._noSorting = function(rowDefA, rowDefB, order) {
102
154
  return 0;
103
155
  };
104
156
  /** @private
@@ -107,16 +159,30 @@ RowDefSorter.prototype._defaultSorter = function(rowDefA, rowDefB, order) {
107
159
  * @param {number} order
108
160
  * @return {number}
109
161
  */
162
+ RowDefSorter.prototype._defaultSorter = function(rowDefA, rowDefB, order) {
163
+ var field = this._primaryParams[0];
164
+ return _defaultCompare(
165
+ rowDefA.getData(field),
166
+ rowDefB.getData(field),
167
+ order
168
+ );
169
+ };
170
+ /** @private
171
+ * @param {RowDefinition} rowDefA
172
+ * @param {RowDefinition} rowDefB
173
+ * @param {number} order
174
+ * @return {number}
175
+ */
110
176
  RowDefSorter.prototype._dataSorter = function(rowDefA, rowDefB, order) {
111
- var orderA = rowDefA.getGroupOrder();
112
- var orderB = rowDefB.getGroupOrder();
113
- if(orderA !== orderB) {
114
- return orderA - orderB; // Regardless of sort order
115
- }
116
-
117
- var a = rowDefA.getData(this._field);
118
- var b = rowDefB.getData(this._field);
119
- return this._sortLogic(a, b, order, this._sortContext);
177
+ var params = this._primaryParams;
178
+ var field = params[0];
179
+ var sortLogic = params[1];
180
+ return sortLogic(
181
+ rowDefA.getData(field),
182
+ rowDefB.getData(field),
183
+ order,
184
+ params[2]
185
+ );
120
186
  };
121
187
  /** @private
122
188
  * @param {RowDefinition} rowDefA
@@ -125,13 +191,41 @@ RowDefSorter.prototype._dataSorter = function(rowDefA, rowDefB, order) {
125
191
  * @return {number}
126
192
  */
127
193
  RowDefSorter.prototype._rowDefSorter = function(rowDefA, rowDefB, order) {
128
- var orderA = rowDefA.getGroupOrder();
129
- var orderB = rowDefB.getGroupOrder();
130
- if(orderA !== orderB) {
131
- return orderA - orderB; // Regardless of sort order
194
+ var params = this._primaryParams;
195
+ var sortLogic = params[1];
196
+ return sortLogic(rowDefA, rowDefB, order, params[2]);
197
+ };
198
+ /** @private
199
+ * @param {RowDefinition} rowDefA
200
+ * @param {RowDefinition} rowDefB
201
+ * @param {number} primaryOrder
202
+ * @return {number}
203
+ */
204
+ RowDefSorter.prototype._multiColumnsSorter = function(rowDefA, rowDefB, primaryOrder) {
205
+ var sortParams = this._sortParams;
206
+ var sortCount = sortParams.length;
207
+ for(var i = 0; i < sortCount; ++i) {
208
+ var params = sortParams[i];
209
+ var field = params[0];
210
+ var sortLogic = params[1];
211
+ var ctx = params[2];
212
+ var rowSorting = params[3];
213
+ var orderNum = params[4];
214
+ var ret = 0;
215
+ if(sortLogic) {
216
+ if(rowSorting) {
217
+ ret = sortLogic(rowDefA, rowDefB, orderNum, ctx);
218
+ } else {
219
+ ret = sortLogic(rowDefA.getData(field), rowDefB.getData(field), orderNum, ctx);
220
+ }
221
+ } else {
222
+ ret = _defaultCompare(rowDefA.getData(field), rowDefB.getData(field), orderNum);
223
+ }
224
+ if(ret) {
225
+ return ret;
226
+ }
132
227
  }
133
-
134
- return this._sortLogic(rowDefA, rowDefB, order, this._sortContext);
228
+ return 0;
135
229
  };
136
230
 
137
231
  export default RowDefSorter;
@@ -38,6 +38,8 @@ var ColumnSelectionPlugin = function ColumnSelectionPlugin(options) {
38
38
  t._onReselection = t._onReselection.bind(t);
39
39
  t._onThemeLoaded = t._onThemeLoaded.bind(t);
40
40
  t._onColumnPositionChanged = t._onColumnPositionChanged.bind(t);
41
+ t._onBeforeBatchOperation = t._onBeforeBatchOperation.bind(t);
42
+ t._onAfterBatchOperation = t._onAfterBatchOperation.bind(t);
41
43
  t._updateMenuIcon = t._updateMenuIcon.bind(t);
42
44
  t._hosts = [];
43
45
 
@@ -121,6 +123,12 @@ ColumnSelectionPlugin.prototype._menuPosition = "outside";
121
123
 
122
124
  ColumnSelectionPlugin.prototype._cgp = null; // Column grouping extension
123
125
 
126
+ /** @type {Array.<string>}
127
+ * @private
128
+ */
129
+
130
+ ColumnSelectionPlugin.prototype._prevSelectedCols = {}; // previous selected columns during batch operation
131
+
124
132
  /** @public
125
133
  * @return {string}
126
134
  */
@@ -156,6 +164,8 @@ ColumnSelectionPlugin.prototype.initialize = function (host, options) {
156
164
  host.listen("columnRemoved", this._onColumnRemoved);
157
165
  host.listen("columnAdded", this._onColumnAdded);
158
166
  host.listen("columnPositionChanged", this._onColumnPositionChanged);
167
+ host.listen("beforeBatchOperation", this._onBeforeBatchOperation);
168
+ host.listen("afterBatchOperation", this._onAfterBatchOperation);
159
169
  this.config(options);
160
170
 
161
171
  if (ColumnSelectionPlugin._stylePromise) {
@@ -1098,6 +1108,62 @@ ColumnSelectionPlugin.prototype._onReselection = function (e) {
1098
1108
  this._activeGrid.focus();
1099
1109
  };
1100
1110
  /** @private
1111
+ * @param {Object} e
1112
+ */
1113
+
1114
+
1115
+ ColumnSelectionPlugin.prototype._onBeforeBatchOperation = function (e) {
1116
+ var host = this._activeGrid;
1117
+
1118
+ if (this._hasSelection && e["batchType"] === "reset") {
1119
+ var colCount = this.getColumnCount();
1120
+
1121
+ for (var i = 0; i < colCount; ++i) {
1122
+ if (this.isSelectedColumn(i)) {
1123
+ var colId = host.getColumnId(i);
1124
+ var field = host.getColumnField(i);
1125
+
1126
+ if (colId) {
1127
+ this._prevSelectedCols[colId] = field;
1128
+ } else {
1129
+ this._prevSelectedCols[field] = "";
1130
+ }
1131
+ }
1132
+ }
1133
+
1134
+ this.clearAllSelections(); //clear all to improve performance during add/remove operation
1135
+ }
1136
+ };
1137
+ /** @private
1138
+ * @param {Object} e
1139
+ */
1140
+
1141
+
1142
+ ColumnSelectionPlugin.prototype._onAfterBatchOperation = function (e) {
1143
+ if (e["batchType"] === "reset") {
1144
+ var prevSelectedCols = Object.keys(this._prevSelectedCols);
1145
+ var prevSelectedCount = prevSelectedCols.length;
1146
+
1147
+ if (prevSelectedCount) {
1148
+ this.clearAllSelections();
1149
+
1150
+ for (var i = 0; i < prevSelectedCount; i++) {
1151
+ var colId = prevSelectedCols[i];
1152
+ var field = this._prevSelectedCols[colId];
1153
+ var prevSelectedIndex = this.getColumnIndex(colId);
1154
+
1155
+ if (prevSelectedIndex < 0) {
1156
+ prevSelectedIndex = this.getColumnIndex(field);
1157
+ }
1158
+
1159
+ this.setSelectedColumn(prevSelectedIndex, true);
1160
+ }
1161
+
1162
+ this._prevSelectedCols = {};
1163
+ }
1164
+ }
1165
+ };
1166
+ /** @private
1101
1167
  * @param {KeyboardEvent} e
1102
1168
  * @return {boolean}
1103
1169
  */
@@ -137,6 +137,8 @@ declare class ColumnStackPlugin extends GridPlugin {
137
137
 
138
138
  public isStackHidden(stackId: string): boolean|null|null;
139
139
 
140
+ public moveStack(stackId: string, destCol?: (number|string)|null): boolean;
141
+
140
142
  }
141
143
 
142
144
  export default ColumnStackPlugin;
@@ -1867,11 +1867,11 @@ ColumnStackPlugin.prototype.unsetParent = ColumnStackPlugin.prototype.removeColu
1867
1867
  */
1868
1868
  ColumnStackPlugin.prototype.reorderColumns = function(colList, destCol) {
1869
1869
  var dirty = false;
1870
- this._stacking = false;
1870
+ this._stacking = true;
1871
1871
 
1872
- this._reorderColumns(colList, destCol);
1872
+ dirty = this._reorderColumns(colList, destCol);
1873
1873
 
1874
- this._stacking = true;
1874
+ this._stacking = false;
1875
1875
  return dirty;
1876
1876
  };
1877
1877
  /** Move the specified column to position before the destination
@@ -1973,6 +1973,20 @@ ColumnStackPlugin.prototype.isStackHidden = function(stackId) {
1973
1973
 
1974
1974
  return !isVisible;
1975
1975
  };
1976
+ /** Move an entire stack to position before the destination
1977
+ * @public
1978
+ * @param {string} stackId Stack id to be moved
1979
+ * @param {(number|string)=} destCol Destination column id or index
1980
+ * @return {boolean}
1981
+ */
1982
+ ColumnStackPlugin.prototype.moveStack = function(stackId, destCol) {
1983
+ if(!stackId){
1984
+ return false;
1985
+ }
1986
+ var colList = this.getStackMemberIds(stackId);
1987
+ var dirty = this.reorderColumns(colList, destCol);
1988
+ return dirty;
1989
+ };
1976
1990
 
1977
1991
 
1978
1992
 
@@ -920,7 +920,7 @@ ConditionalColoringPlugin._mergeUpdates = function(e) {
920
920
  * @return {string} prettified CSS string
921
921
  */
922
922
  ConditionalColoringPlugin.prototype._prepareStyles = function(colors) {
923
- var prefix = ".tr-grid." + ConditionalColoringPlugin._controlClass + " .cell";
923
+ var prefix = ".tr-grid." + ConditionalColoringPlugin._controlClass + " .column.conditionally-colored .cell";
924
924
  var css = [];
925
925
  var ss, styles, value;
926
926
  for (var className in colors) {
@@ -906,9 +906,12 @@ RowDraggingPlugin.prototype._moveRows = function (srcRowRef, destRowIndex, srcGr
906
906
  var srcRowTypes = [];
907
907
  var conRowType = "";
908
908
  var api = this.getGridApi();
909
+ if(api && !api.getRowType) {
910
+ api = null;
911
+ }
909
912
  for(i = 0; i < srcCount; ++i) {
910
913
  var srcIndex = srcRowIndices[i];
911
- var rowType = api.getRowType(srcIndex);
914
+ var rowType = api ? api.getRowType(srcIndex) : "CONTENT";
912
915
  srcRowIds[i] = srcDv.getRowId(srcIndex);
913
916
  srcRowTypes[i] = rowType;
914
917
  if(conRowType) {
@@ -919,7 +922,10 @@ RowDraggingPlugin.prototype._moveRows = function (srcRowRef, destRowIndex, srcGr
919
922
  conRowType = rowType;
920
923
  }
921
924
  }
922
- var destRowType = api.getRowType(destRowIndex); // TODO: this has to be get from destGrid
925
+ if(!conRowType) {
926
+ conRowType = "CONTENT";
927
+ }
928
+ var destRowType = api ? api.getRowType(destRowIndex) : ""; // TODO: this has to be get from destGrid
923
929
  var destRowId = destDv.getRowId(destRowIndex);
924
930
  var parentRowId, childRowIds;
925
931
 
@@ -966,7 +972,8 @@ RowDraggingPlugin.prototype._moveRows = function (srcRowRef, destRowIndex, srcGr
966
972
  }
967
973
  } else if(conRowType === "GROUP_MEMBER") {
968
974
  if(srcCount === 1) {
969
- parentRowId = rsp.getSegmentParentRowId(srcRowIds[0]);
975
+ var srcRowId = srcRowIds[0];
976
+ parentRowId = rsp.getSegmentParentRowId(srcRowId);
970
977
  childRowIds = rsp.getSegmentChildIds(parentRowId);
971
978
  var childCount = childRowIds ? childRowIds.length : 0;
972
979
  var endOfSegment = srcDv.getRowIndex(parentRowId) + childCount + 1;
@@ -976,6 +983,10 @@ RowDraggingPlugin.prototype._moveRows = function (srcRowRef, destRowIndex, srcGr
976
983
  var destParentRowId = rsp.getSegmentParentRowId(destRowId);
977
984
  if(parentRowId === destParentRowId) {
978
985
  movedRowIds = srcDv.moveRow(srcRowIds, destRowId);
986
+ } else { // Moving row between two segments
987
+ rsp.removeSegmentChild(parentRowId, srcRowId);
988
+ rsp.addSegmentChild(destParentRowId, srcRowId);
989
+ movedRowIds = srcDv.moveRow(srcRowIds, destRowId);
979
990
  }
980
991
  } else if(_isNormalRowType(destRowType)) { // move member out of existing segment
981
992
  rsp.removeSegmentChild(parentRowId, srcRowIds[0]);
@@ -320,11 +320,12 @@ RowColoringPlugin.prototype.setPredefinedColors = function (predefinedColors) {
320
320
  * @param {Object} predefinedColors Predefined color object map
321
321
  */
322
322
  RowColoringPlugin.prototype._injectStyles = function (predefinedColors) {
323
- var prefix = ".tr-grid." + RowColoringPlugin._controlClass + " .tr-lg .cell";
323
+ var prefix1 = ".tr-grid." + RowColoringPlugin._controlClass + " .section .column .cell";
324
+ var prefix2 = ".tr-grid." + RowColoringPlugin._controlClass + " .section .cover-layer .cell";
324
325
  var css = [];
325
326
  var ss, styles, value;
326
327
  for (var className in predefinedColors) {
327
- css.push(prefix + "." + className);
328
+ css.push(prefix1 + "." + className + ", " + prefix2 + "." + className);
328
329
  ss = [];
329
330
  styles = predefinedColors[className];
330
331
  value = styles["backgroundColor"];
@@ -62,8 +62,9 @@ DragUI.applyThemeColor = function(grid) {
62
62
  */
63
63
  DragUI.prototype.onThemeLoaded = function(colors) {
64
64
  if(!DragUI._styles) {
65
+ var ElfVersion = ElfUtil.getElfVersion();
65
66
  var cursor = "grabbing";
66
- if (ElfUtil.getElfVersion() < 3) {
67
+ if (ElfVersion < 3) {
67
68
  cursor = "move";
68
69
  }
69
70
  var styles = [ // Main Styles without theme
@@ -135,7 +136,8 @@ DragUI.prototype.onThemeLoaded = function(colors) {
135
136
  "--grid-insertion-icon-bgcolor: #39c46e;",
136
137
  "--grid-insertion-icon-color: #1A1A1A;",
137
138
  "--grid-void-icon-bgcolor: #F5475B;",
138
- "--grid-void-icon-color: #FFFFFF;"
139
+ "--grid-void-icon-color: #FFFFFF;",
140
+ "--grid-title-icon-color: var(--grid-guideline-color);" // v3 fallback
139
141
  ],
140
142
  ".mouse-dragging .cell:hover", [ // for change mouse cursor when hover header while dragging
141
143
  "cursor: " + cursor + " !important;"
@@ -149,10 +151,12 @@ DragUI.prototype.onThemeLoaded = function(colors) {
149
151
  ".tr-dragging, .tr-dragging *", [
150
152
  "-webkit-touch-callout: none;",
151
153
  ".user-select(none);"
154
+ ],
155
+ ".tr-dragbox", [
156
+ "background-color: unset;" // v3 fallback
152
157
  ]
153
158
  ];
154
159
  var guidelineColor = "#ff9933";
155
- var ElfVersion = ElfUtil.getElfVersion();
156
160
  if(colors.primary) {
157
161
  guidelineColor = colors.primary;
158
162
  }