@refinitiv-ui/efx-grid 6.0.38 → 6.0.39
Sign up to get free protection for your applications and to get access to all the features.
- package/lib/core/dist/core.js +116 -18
- package/lib/core/dist/core.min.js +1 -1
- package/lib/core/es6/grid/Core.js +13 -3
- package/lib/core/es6/grid/plugins/SortableTitlePlugin.d.ts +3 -0
- package/lib/core/es6/grid/plugins/SortableTitlePlugin.js +41 -7
- package/lib/core/es6/grid/util/TrackLayout.d.ts +3 -1
- package/lib/core/es6/grid/util/TrackLayout.js +23 -5
- package/lib/grid/index.js +1 -1
- package/lib/rt-grid/dist/rt-grid.js +56 -13
- package/lib/rt-grid/dist/rt-grid.min.js +1 -1
- package/lib/rt-grid/es6/ColumnDefinition.js +4 -3
- package/lib/tr-grid-column-grouping/es6/ColumnGrouping.d.ts +4 -0
- package/lib/tr-grid-column-grouping/es6/ColumnGrouping.js +221 -2
- package/lib/tr-grid-column-stack/es6/ColumnStack.d.ts +7 -1
- package/lib/tr-grid-column-stack/es6/ColumnStack.js +200 -89
- package/lib/tr-grid-row-dragging/es6/RowDragging.js +83 -3
- package/lib/tr-grid-row-selection/es6/RowSelection.js +18 -40
- package/lib/tr-grid-util/es6/GridPlugin.js +91 -42
- package/lib/types/es6/ColumnGrouping.d.ts +4 -0
- package/lib/types/es6/ColumnStack.d.ts +7 -1
- package/lib/types/es6/Core/grid/util/TrackLayout.d.ts +3 -1
- package/lib/types/es6/RealtimeGrid/Grid.d.ts +1 -1
- package/lib/versions.json +5 -5
- package/package.json +1 -1
@@ -398,9 +398,6 @@ ColumnStackPlugin.prototype.config = function (options) {
|
|
398
398
|
*/
|
399
399
|
ColumnStackPlugin.prototype.getConfigObject = function (gridOptions) {
|
400
400
|
var obj = gridOptions || {};
|
401
|
-
var host = this._host || this._hosts[0];
|
402
|
-
|
403
|
-
var columnOptions = obj["columns"];
|
404
401
|
|
405
402
|
var stacks = this._groupDefs.getGroupMap();
|
406
403
|
var stackOptions = [];
|
@@ -409,17 +406,6 @@ ColumnStackPlugin.prototype.getConfigObject = function (gridOptions) {
|
|
409
406
|
var stackOption = stacks[stackKey];
|
410
407
|
var activeColIndex = this.getColumnIndex(stackOption.activeColumn);
|
411
408
|
|
412
|
-
if(columnOptions && columnOptions.length){
|
413
|
-
var memberIndices = this.getStackMemberIndices(stackOption.id);
|
414
|
-
for(var i = 0; i < memberIndices.length; i++){
|
415
|
-
var colIndex = memberIndices[i];
|
416
|
-
var colOption = columnOptions[colIndex];
|
417
|
-
if(colOption && host.isColumnVisible(colIndex)){
|
418
|
-
colOption.hidden = colIndex !== activeColIndex;
|
419
|
-
}
|
420
|
-
}
|
421
|
-
}
|
422
|
-
|
423
409
|
var stackConfigObj = {
|
424
410
|
id: stackOption.id
|
425
411
|
};
|
@@ -532,7 +518,8 @@ ColumnStackPlugin.prototype._applyUserConfigs = function(stacks) {
|
|
532
518
|
* @return {Object}
|
533
519
|
*/
|
534
520
|
ColumnStackPlugin.prototype._getColumnStackOptions = function(colIndex) {
|
535
|
-
|
521
|
+
var colCount = this.getColumnCount();
|
522
|
+
if(colIndex >= 0 && colIndex < colCount) {
|
536
523
|
var colId = this.getColumnId(colIndex);
|
537
524
|
var stack = this._groupDefs.getParentGroup(colId);
|
538
525
|
if(stack) {
|
@@ -970,30 +957,39 @@ ColumnStackPlugin.prototype.isColumnActive = function(colIndex) {
|
|
970
957
|
};
|
971
958
|
|
972
959
|
/** @public
|
973
|
-
* @param {number}
|
960
|
+
* @param {number|string} colRef Column index, id, or field
|
974
961
|
* @return {string}
|
975
962
|
*/
|
976
|
-
ColumnStackPlugin.prototype.getStackId = function(
|
977
|
-
var
|
978
|
-
|
963
|
+
ColumnStackPlugin.prototype.getStackId = function(colRef) {
|
964
|
+
var colIndex = (typeof colRef === "number") ? colRef : this.getColumnIndex(colRef);
|
965
|
+
if(colIndex >= 0) {
|
966
|
+
var stackOpt = this._getColumnStackOptions(colIndex);
|
967
|
+
if(stackOpt) {
|
968
|
+
return stackOpt.id || "";
|
969
|
+
}
|
970
|
+
}
|
971
|
+
return "";
|
979
972
|
};
|
980
973
|
/** @public
|
981
974
|
* @param {Array.<number|string>=} colRefs Names of fields or column indices. If not specified, selected columns will be used.
|
982
975
|
* @param {string=} stackId Must be unique
|
983
976
|
* @param {ColumnStackPlugin~StackConfiguration=} options
|
984
|
-
* @return {boolean} Return true if
|
977
|
+
* @return {boolean} Return true if there is any change.
|
985
978
|
*/
|
986
979
|
ColumnStackPlugin.prototype.stackColumns = function(colRefs, stackId, options) {
|
987
|
-
|
988
|
-
|
980
|
+
if(!options) {
|
981
|
+
options = {};
|
982
|
+
}
|
989
983
|
|
990
|
-
|
991
|
-
|
992
|
-
|
984
|
+
var updateRequired = false;
|
985
|
+
var sid = stackId;
|
986
|
+
if(sid) {
|
987
|
+
if(this._removeStack(sid)) {
|
988
|
+
// TODO: pinning state are removed and may need to be kept
|
989
|
+
updateRequired = true;
|
993
990
|
}
|
994
|
-
sid = stackId;
|
995
991
|
} else {
|
996
|
-
sid =
|
992
|
+
sid = this._generateStackId();
|
997
993
|
}
|
998
994
|
|
999
995
|
if(!colRefs) {
|
@@ -1002,7 +998,10 @@ ColumnStackPlugin.prototype.stackColumns = function(colRefs, stackId, options) {
|
|
1002
998
|
|
1003
999
|
var refCount = colRefs ? colRefs.length : 0;
|
1004
1000
|
if(refCount < 2) {
|
1005
|
-
|
1001
|
+
if(updateRequired) {
|
1002
|
+
this._updateUI();
|
1003
|
+
}
|
1004
|
+
return updateRequired; // Only two or more columns can be stacked
|
1006
1005
|
}
|
1007
1006
|
|
1008
1007
|
// Clone user data
|
@@ -1041,7 +1040,10 @@ ColumnStackPlugin.prototype.stackColumns = function(colRefs, stackId, options) {
|
|
1041
1040
|
|
1042
1041
|
// Prevent columns already in a stack from moving out to another stack
|
1043
1042
|
if(!this.isColumnStackable(colIndices)) {
|
1044
|
-
|
1043
|
+
if(updateRequired) {
|
1044
|
+
this._updateUI();
|
1045
|
+
}
|
1046
|
+
return updateRequired;
|
1045
1047
|
}
|
1046
1048
|
|
1047
1049
|
// TODO: If columns are stored as column id and activeColumn is a field, active index could not be found
|
@@ -1074,7 +1076,7 @@ ColumnStackPlugin.prototype.stackColumns = function(colRefs, stackId, options) {
|
|
1074
1076
|
var csp = this._getPlugin("ColumnSelectionPlugin");
|
1075
1077
|
if(csp && csp.isEnabled()){
|
1076
1078
|
var stackSelection = false;
|
1077
|
-
for(i = 0; i < validCount; ++i){
|
1079
|
+
for(var i = 0; i < validCount; ++i){
|
1078
1080
|
var colIndex = colIndices[i];
|
1079
1081
|
if(colIndex === activeIndex){
|
1080
1082
|
continue;
|
@@ -1145,7 +1147,7 @@ ColumnStackPlugin.prototype._verifyColumnPinning = function(stack) {
|
|
1145
1147
|
|
1146
1148
|
/** @private
|
1147
1149
|
* @param {number} frozenColIndex
|
1148
|
-
* @param {number} numRightColumn
|
1150
|
+
* @param {number=} numRightColumn
|
1149
1151
|
*/
|
1150
1152
|
ColumnStackPlugin.prototype._freezeColumn = function(frozenColIndex, numRightColumn) {
|
1151
1153
|
this._inPinning = true;
|
@@ -1158,24 +1160,22 @@ ColumnStackPlugin.prototype._freezeColumn = function(frozenColIndex, numRightCol
|
|
1158
1160
|
|
1159
1161
|
/** @public
|
1160
1162
|
* @description Replace all of the stacking in the Grid with a new one.
|
1161
|
-
*
|
1162
|
-
*
|
1163
|
-
*
|
1163
|
+
* Grid stores the stacked fields indefinitely.
|
1164
|
+
* When adding columns, Grid will attempt to restore stacking,
|
1165
|
+
* if there are at least two visible columns that match to the retained fields.
|
1164
1166
|
* @param {Array.<number|string>=} colRefs Field names or column indices
|
1165
1167
|
* @param {number|string=} activeColRef Field names or column index of active column
|
1166
1168
|
* @return {boolean} If the stack has been updated, return true.
|
1167
1169
|
*/
|
1168
1170
|
ColumnStackPlugin.prototype.setStack = function(colRefs, activeColRef) {
|
1169
|
-
var sid = "_uniqueStack"; // WARNING : This hardcode for assign uniqe stacking id
|
1170
|
-
|
1171
1171
|
this.removeAllStacks();
|
1172
1172
|
|
1173
1173
|
var stackOptions = {};
|
1174
|
-
|
1175
1174
|
if(activeColRef) {
|
1176
1175
|
stackOptions.activeColumn = activeColRef;
|
1177
1176
|
}
|
1178
|
-
|
1177
|
+
// WARNING: Id is hardcoded for assign uniqe stacking id
|
1178
|
+
this.stackColumns(colRefs, "_uniqueStack", stackOptions);
|
1179
1179
|
|
1180
1180
|
return true;
|
1181
1181
|
};
|
@@ -1280,22 +1280,47 @@ ColumnStackPlugin.prototype.removeAllStacks = function(enableUpdateUI) {
|
|
1280
1280
|
}
|
1281
1281
|
return groupCount ? true : false;
|
1282
1282
|
};
|
1283
|
-
/**
|
1283
|
+
/** If the column is in a stack, the column become an activeColumn of the stack.
|
1284
|
+
* @public
|
1285
|
+
* @param {number|string} activeColumn Column index, id, or field
|
1286
|
+
* @return {boolean}
|
1287
|
+
*/
|
1288
|
+
ColumnStackPlugin.prototype.setActiveColumn = function(activeColumn) {
|
1289
|
+
var colIndex = this.getColumnIndex(activeColumn);
|
1290
|
+
if(colIndex < 0) {
|
1291
|
+
return false;
|
1292
|
+
}
|
1293
|
+
var colCount = this.getColumnCount();
|
1294
|
+
if(colIndex >= colCount) {
|
1295
|
+
return false;
|
1296
|
+
}
|
1297
|
+
|
1298
|
+
var colId = this.getColumnId(colIndex);
|
1299
|
+
var stack = this._groupDefs.getParentGroup(colId);
|
1300
|
+
var field = "";
|
1301
|
+
if(!stack) {
|
1302
|
+
field = this._getField(colIndex);
|
1303
|
+
stack = this._groupDefs.getParentGroup(field);
|
1304
|
+
}
|
1305
|
+
if(!stack) {
|
1306
|
+
return false;
|
1307
|
+
}
|
1308
|
+
var chdr = stack.children;
|
1309
|
+
var memberIndex = field ? chdr.indexOf(field) : chdr.indexOf(colId);
|
1310
|
+
if(memberIndex < 0) {
|
1311
|
+
return false;
|
1312
|
+
}
|
1313
|
+
return this._setActiveColumn(stack, chdr[memberIndex]);
|
1314
|
+
};
|
1315
|
+
/** This method is deprecated in favor of setActiveColumn. Make the specified column switch place with the item in the stack.
|
1316
|
+
* @public
|
1284
1317
|
* @param {number|Event} colRef
|
1285
1318
|
* @param {number} swappingIndex
|
1286
1319
|
* @return {boolean}
|
1320
|
+
* @see {@link ColumnStackPlugin#setActiveColumn}
|
1287
1321
|
*/
|
1288
1322
|
ColumnStackPlugin.prototype.swapColumn = function(colRef, swappingIndex) {
|
1289
|
-
var colIndex =
|
1290
|
-
if(typeof colRef == "number") {
|
1291
|
-
colIndex = colRef;
|
1292
|
-
} else {
|
1293
|
-
var grid = this.getRelativeGrid(colRef);
|
1294
|
-
if(grid) {
|
1295
|
-
var pos = grid.getRelativePosition(colRef);
|
1296
|
-
colIndex = pos["colIndex"];
|
1297
|
-
}
|
1298
|
-
}
|
1323
|
+
var colIndex = (typeof colRef === "number") ? colRef : this.getColumnIndex(colRef);
|
1299
1324
|
|
1300
1325
|
var stackOpt = this._getColumnStackOptions(colIndex);
|
1301
1326
|
if(!stackOpt) {
|
@@ -1305,22 +1330,32 @@ ColumnStackPlugin.prototype.swapColumn = function(colRef, swappingIndex) {
|
|
1305
1330
|
if(!children) {
|
1306
1331
|
return false; // Invalid column type
|
1307
1332
|
}
|
1308
|
-
|
1333
|
+
|
1334
|
+
return this._setActiveColumn(stackOpt, children[swappingIndex]);
|
1335
|
+
};
|
1336
|
+
/** @private
|
1337
|
+
* @param {Object} stack Stack object
|
1338
|
+
* @param {string} newActiveColumn Column id or field
|
1339
|
+
* @return {boolean}
|
1340
|
+
*/
|
1341
|
+
ColumnStackPlugin.prototype._setActiveColumn = function(stack, newActiveColumn) {
|
1309
1342
|
if(!newActiveColumn) {
|
1310
|
-
return false; // Invalid
|
1343
|
+
return false; // Invalid active column
|
1311
1344
|
}
|
1312
|
-
|
1313
|
-
if(newActiveColumn === stackOpt.activeColumn) {
|
1345
|
+
if(newActiveColumn === stack.activeColumn) {
|
1314
1346
|
return false; // The given index is already active stacked column
|
1315
1347
|
}
|
1316
1348
|
|
1317
|
-
var prevActiveColumnIndex = this.getColumnIndex(
|
1349
|
+
var prevActiveColumnIndex = this.getColumnIndex(stack.activeColumn);
|
1318
1350
|
var newActiveColumnIndex = this.getColumnIndex(newActiveColumn);
|
1319
|
-
|
1351
|
+
stack.activeColumn = newActiveColumn; // Change active column
|
1320
1352
|
|
1321
1353
|
this._setColumnVisibility(newActiveColumnIndex, true);
|
1322
1354
|
this._setColumnVisibility(prevActiveColumnIndex, false); // Hide current active column
|
1323
1355
|
|
1356
|
+
this._updateIcon(prevActiveColumnIndex, stack);
|
1357
|
+
this._updateIcon(newActiveColumnIndex, stack);
|
1358
|
+
|
1324
1359
|
var csp = this._getPlugin("ColumnSelectionPlugin");
|
1325
1360
|
if(csp && csp.isEnabled()) {
|
1326
1361
|
csp.selectSingleColumn(newActiveColumnIndex);
|
@@ -1332,11 +1367,6 @@ ColumnStackPlugin.prototype.swapColumn = function(colRef, swappingIndex) {
|
|
1332
1367
|
if(cfp) {
|
1333
1368
|
cfp["refresh"]();
|
1334
1369
|
}
|
1335
|
-
|
1336
|
-
stackOpt = this._getColumnStackOptions(prevActiveColumnIndex);
|
1337
|
-
this._updateIcon(prevActiveColumnIndex, stackOpt);
|
1338
|
-
this._updateIcon(newActiveColumnIndex, stackOpt);
|
1339
|
-
|
1340
1370
|
return true;
|
1341
1371
|
};
|
1342
1372
|
|
@@ -1740,20 +1770,22 @@ ColumnStackPlugin.prototype.addColumnToStack = function(colRef, stackId) {
|
|
1740
1770
|
// apply stacking
|
1741
1771
|
this._groupDefs.addGroupChild(stackId, colId);
|
1742
1772
|
|
1773
|
+
// To avoid state interference from Core Grid, keep the pin state before moving the columns
|
1774
|
+
var host = this._hosts[0];
|
1775
|
+
var leftPinnedIndex = host.getFrozenColumnCount() - 1;
|
1776
|
+
var rightPinnedCount = host.getPinnedRightColumnCount();
|
1777
|
+
var colIndex = this.getColumnIndex(colId);
|
1778
|
+
|
1743
1779
|
// Pack stacked columns together
|
1744
1780
|
this._moveStackedColumns(stack.children);
|
1745
1781
|
|
1746
|
-
//
|
1747
|
-
if
|
1748
|
-
|
1749
|
-
var leftPinnedIndex = host.getFrozenColumnCount() - 1;
|
1750
|
-
var rightPinnedCount = host.getPinnedRightColumnCount();
|
1751
|
-
|
1752
|
-
if (stack.leftPinned) {
|
1782
|
+
// If an unpinned column is added to a pinned stack, the pinning position should be updated
|
1783
|
+
if(stack.leftPinned || stack.rightPinned) {
|
1784
|
+
if(stack.leftPinned && colIndex > leftPinnedIndex) {
|
1753
1785
|
leftPinnedIndex++;
|
1754
1786
|
this._freezeColumn(leftPinnedIndex, rightPinnedCount);
|
1755
|
-
} else if
|
1756
|
-
rightPinnedCount
|
1787
|
+
} else if(stack.rightPinned && colIndex < (colCount - rightPinnedCount)) {
|
1788
|
+
rightPinnedCount++;
|
1757
1789
|
this._freezeColumn(leftPinnedIndex, rightPinnedCount);
|
1758
1790
|
}
|
1759
1791
|
}
|
@@ -1805,21 +1837,6 @@ ColumnStackPlugin.prototype.removeColumnFromStack = function(colRef) {
|
|
1805
1837
|
|
1806
1838
|
this.moveColumnById(colIndex, colIndices[memberCount - 1] + 1); // This assumes that the column order is already in correct position
|
1807
1839
|
|
1808
|
-
// Update pinning position
|
1809
|
-
if (stack.leftPinned || stack.rightPinned) {
|
1810
|
-
var host = this._hosts[0];
|
1811
|
-
var leftPinnedIndex = host.getFrozenColumnCount() - 1;
|
1812
|
-
var rightPinnedCount = host.getPinnedRightColumnCount();
|
1813
|
-
|
1814
|
-
if (stack.leftPinned) {
|
1815
|
-
leftPinnedIndex--;
|
1816
|
-
this._freezeColumn(leftPinnedIndex, rightPinnedCount);
|
1817
|
-
} else if (stack.rightPinned) {
|
1818
|
-
rightPinnedCount++;
|
1819
|
-
this._freezeColumn(leftPinnedIndex, rightPinnedCount);
|
1820
|
-
}
|
1821
|
-
}
|
1822
|
-
|
1823
1840
|
this._updateUI();
|
1824
1841
|
};
|
1825
1842
|
|
@@ -1930,11 +1947,8 @@ ColumnStackPlugin.prototype.addStackChild = function(stackId, colRef) {
|
|
1930
1947
|
* @param {number|string} colRef Column field or column index
|
1931
1948
|
*/
|
1932
1949
|
ColumnStackPlugin.prototype.removeStackChild = function(stackId, colRef) {
|
1933
|
-
|
1934
|
-
|
1935
|
-
if(stackId === this.getStackId(colIndex)) {
|
1936
|
-
this.removeColumnFromStack(colIndex);
|
1937
|
-
}
|
1950
|
+
if(stackId === this.getStackId(colRef)) {
|
1951
|
+
this.removeColumnFromStack(colIndex);
|
1938
1952
|
}
|
1939
1953
|
};
|
1940
1954
|
/** @public
|
@@ -2061,6 +2075,103 @@ ColumnStackPlugin.prototype.moveStack = function(stackId, destCol) {
|
|
2061
2075
|
return dirty;
|
2062
2076
|
};
|
2063
2077
|
|
2078
|
+
/** @public
|
2079
|
+
* @param {string} stackId
|
2080
|
+
* @param {string=} side Available values are: left|right. If no value is supplied, all columns will be pinned to the left.
|
2081
|
+
*/
|
2082
|
+
ColumnStackPlugin.prototype.pinStack = function(stackId, side) {
|
2083
|
+
if(!stackId) {
|
2084
|
+
return;
|
2085
|
+
}
|
2086
|
+
|
2087
|
+
var stack = this._groupDefs.getGroup(stackId);
|
2088
|
+
if(!stack) {
|
2089
|
+
return;
|
2090
|
+
}
|
2091
|
+
|
2092
|
+
var host = this._hosts[0];
|
2093
|
+
var leftPinnedIndex = host.getFrozenColumnCount() - 1;
|
2094
|
+
var rightPinnedCount = host.getPinnedRightColumnCount();
|
2095
|
+
var colCount = this.getColumnCount();
|
2096
|
+
var colList = this.getStackMemberIds(stackId); // WARNING: column ids or fields
|
2097
|
+
var len = colList.length;
|
2098
|
+
|
2099
|
+
var dest;
|
2100
|
+
if(side === "right") {
|
2101
|
+
if(stack.rightPinned) {
|
2102
|
+
return;
|
2103
|
+
}
|
2104
|
+
if(stack.leftPinned) {
|
2105
|
+
this.unpinStack(stackId);
|
2106
|
+
leftPinnedIndex = host.getFrozenColumnCount() - 1;
|
2107
|
+
}
|
2108
|
+
stack.rightPinned = true;
|
2109
|
+
dest = colCount - rightPinnedCount;
|
2110
|
+
rightPinnedCount = rightPinnedCount + len;
|
2111
|
+
} else {
|
2112
|
+
if(stack.leftPinned) {
|
2113
|
+
return;
|
2114
|
+
}
|
2115
|
+
if(stack.rightPinned) {
|
2116
|
+
this.unpinStack(stackId);
|
2117
|
+
rightPinnedCount = host.getPinnedRightColumnCount();
|
2118
|
+
}
|
2119
|
+
stack.leftPinned = true;
|
2120
|
+
dest = leftPinnedIndex === -1 ? 0 : leftPinnedIndex + 1;
|
2121
|
+
leftPinnedIndex = leftPinnedIndex + len;
|
2122
|
+
}
|
2123
|
+
|
2124
|
+
this.reorderColumns(colList, dest);
|
2125
|
+
this._freezeColumn(leftPinnedIndex, rightPinnedCount);
|
2126
|
+
};
|
2127
|
+
|
2128
|
+
/** @public
|
2129
|
+
* @param {string} stackId
|
2130
|
+
* @param {(number|string)=} dest The unpinned stack will be placed before the destination position after the operation
|
2131
|
+
*/
|
2132
|
+
ColumnStackPlugin.prototype.unpinStack = function(stackId, dest) {
|
2133
|
+
if(!stackId) {
|
2134
|
+
return;
|
2135
|
+
}
|
2136
|
+
|
2137
|
+
var stack = this._groupDefs.getGroup(stackId);
|
2138
|
+
if(!stack) {
|
2139
|
+
return;
|
2140
|
+
}
|
2141
|
+
|
2142
|
+
if(!stack.leftPinned && !stack.rightPinned) {
|
2143
|
+
return;
|
2144
|
+
}
|
2145
|
+
|
2146
|
+
var host = this._hosts[0];
|
2147
|
+
var leftPinnedCount = host.getFrozenColumnCount();
|
2148
|
+
var rightPinnedCount = host.getPinnedRightColumnCount();
|
2149
|
+
var colCount = this.getColumnCount();
|
2150
|
+
var firstRightPinnedIndex = colCount - rightPinnedCount;
|
2151
|
+
var colList = this.getStackMemberIds(stackId); // WARNING: column ids or fields
|
2152
|
+
var len = colList.length;
|
2153
|
+
|
2154
|
+
var destId = null;
|
2155
|
+
if(dest != null) {
|
2156
|
+
var destIdx = this.getColumnIndex(dest);
|
2157
|
+
destId = this.getColumnId(destIdx);
|
2158
|
+
}
|
2159
|
+
|
2160
|
+
if(stack.leftPinned) {
|
2161
|
+
stack.leftPinned = false;
|
2162
|
+
this.reorderColumns(colList, leftPinnedCount);
|
2163
|
+
this._freezeColumn(leftPinnedCount - (1 + len));
|
2164
|
+
} else if(stack.rightPinned) {
|
2165
|
+
stack.rightPinned = false;
|
2166
|
+
this.reorderColumns(colList, firstRightPinnedIndex);
|
2167
|
+
this._freezeColumn(leftPinnedCount - 1, rightPinnedCount - len);
|
2168
|
+
}
|
2169
|
+
|
2170
|
+
if(destId != null) {
|
2171
|
+
this.reorderColumns(colList, destId);
|
2172
|
+
}
|
2173
|
+
};
|
2174
|
+
|
2064
2175
|
|
2065
2176
|
|
2066
2177
|
export default ColumnStackPlugin;
|
@@ -195,6 +195,10 @@ RowDraggingPlugin.prototype._pos = null;
|
|
195
195
|
* @private
|
196
196
|
*/
|
197
197
|
RowDraggingPlugin.prototype._startingRid = "";
|
198
|
+
/** @type {string}
|
199
|
+
* @private
|
200
|
+
*/
|
201
|
+
RowDraggingPlugin.prototype._startingRowType = "";
|
198
202
|
/** Core grid instance
|
199
203
|
* @type {Object}
|
200
204
|
* @private
|
@@ -721,6 +725,9 @@ RowDraggingPlugin.prototype._onDragStart = function (e, fromJET) {
|
|
721
725
|
var dv = grid.getDataSource();
|
722
726
|
this._startingRid = dv.getRowId(rowIndex);
|
723
727
|
this._startingGrid = grid;
|
728
|
+
var api = this.getGridApi();
|
729
|
+
var rowType = api.getRowType(rowIndex);
|
730
|
+
this._startingRowType = rowType;
|
724
731
|
|
725
732
|
if (this._dragBoxRenderer) { // For custom drag box rendering
|
726
733
|
var arg = cloneObject(e); // TODO: Check if cloning is necessary
|
@@ -777,18 +784,21 @@ RowDraggingPlugin.prototype._onMouseMove = function (e) {
|
|
777
784
|
}
|
778
785
|
|
779
786
|
this._pos = this._hitTest(e); // A new object is created
|
787
|
+
this._pos["dragBox"] = this._dragBox; // assign dragBox for user determine valid target
|
788
|
+
|
789
|
+
// need to check grid properties because row can be move outside the grid
|
790
|
+
if(this._pos["grid"] && this._shouldPreventDrop(this._pos["rowIndex"])) {
|
791
|
+
this._pos.dragBoxIcon = "void";
|
792
|
+
}
|
780
793
|
|
781
794
|
var dropable = true;
|
782
795
|
if(this._entryPoint === 'JET' && !this._jetContentHasRic) {
|
783
796
|
dropable = false;
|
784
797
|
}
|
785
|
-
|
786
798
|
if(dropable) {
|
787
799
|
this._updateGuidePosition(e);
|
788
800
|
}
|
789
801
|
|
790
|
-
this._pos.dragBox = this._dragBox; // assign dragBox for user determine valid target
|
791
|
-
|
792
802
|
// Dispatch drag event to let user determine valid drop target using allowDrag (allowDrop) method
|
793
803
|
this._dispatch("drag", this._pos);
|
794
804
|
if(!this._uiDisabled && dropable) {
|
@@ -1051,6 +1061,10 @@ RowDraggingPlugin.prototype._updateGuidePosition = function (e) {
|
|
1051
1061
|
if (this._uiDisabled || !pos || pos["invalidTarget"]) {
|
1052
1062
|
return;
|
1053
1063
|
}
|
1064
|
+
if(pos["dragBoxIcon"] === "not-allowed" || pos["dragBoxIcon"] === "void" ) {
|
1065
|
+
Dom.removeParent(this._guideline);
|
1066
|
+
return;
|
1067
|
+
}
|
1054
1068
|
|
1055
1069
|
if (_isInContentSection(pos)) {
|
1056
1070
|
var guideline = this._guideline;
|
@@ -1087,6 +1101,72 @@ RowDraggingPlugin.prototype._updateGuidePosition = function (e) {
|
|
1087
1101
|
}
|
1088
1102
|
};
|
1089
1103
|
|
1104
|
+
|
1105
|
+
/** @private
|
1106
|
+
* @param {string|number} destRowRef
|
1107
|
+
* @return {boolean}
|
1108
|
+
*/
|
1109
|
+
RowDraggingPlugin.prototype._shouldPreventDrop = function (destRowRef) {
|
1110
|
+
|
1111
|
+
var api = this.getGridApi();
|
1112
|
+
if(!api) { // It should not move the row if api doesn't initialize
|
1113
|
+
return false;
|
1114
|
+
}
|
1115
|
+
|
1116
|
+
if(this._startingRowType === "CONSTITUENT" || this._startingRowType === "SUBGROUP_HEADER") {
|
1117
|
+
return true;
|
1118
|
+
}
|
1119
|
+
|
1120
|
+
var grid = this._pos["grid"];
|
1121
|
+
var rsp = grid.getPlugin("RowSegmentingPlugin");
|
1122
|
+
if(!rsp) { // If row segment extension is not used, row drag and drop will not be protected by default.
|
1123
|
+
return false;
|
1124
|
+
}
|
1125
|
+
var destParentId = rsp.getSegmentParentRowId(destRowRef);
|
1126
|
+
var startingParentId = rsp.getSegmentParentRowId(this._startingRid);
|
1127
|
+
var destParentType;
|
1128
|
+
if(this._startingRowType === "GROUP_MEMBER") {
|
1129
|
+
var startingParentType = api.getRowType(startingParentId);
|
1130
|
+
if(startingParentType === "SUBGROUP_HEADER") {
|
1131
|
+
destParentType = api.getRowType(destParentId);
|
1132
|
+
|
1133
|
+
if(!startingParentId || !destParentId) {
|
1134
|
+
return true;
|
1135
|
+
}
|
1136
|
+
|
1137
|
+
if(destParentId === startingParentId) { // GROUP_MEMBER same parent can be move inside
|
1138
|
+
return false;
|
1139
|
+
}
|
1140
|
+
return true;
|
1141
|
+
}
|
1142
|
+
// else { } starting have GROUP_HEADER case, it can be move outside the group
|
1143
|
+
|
1144
|
+
} else if(this._startingRowType === "CHAIN" ) {
|
1145
|
+
if(destParentId) { // CHAIN can not move inside the member that have parent
|
1146
|
+
return true;
|
1147
|
+
}
|
1148
|
+
} else if (this._startingRowType === "GROUP_HEADER") {
|
1149
|
+
if( destParentId !== startingParentId) { // GROUP_HEADER can't move inside another GROUP or SUBGROUP
|
1150
|
+
return true;
|
1151
|
+
}
|
1152
|
+
}
|
1153
|
+
|
1154
|
+
var destRowType = api.getRowType(destRowRef);
|
1155
|
+
if(destRowType === "CONSTITUENT" || destRowType === "SUBGROUP_HEADER") { // Do not allow dropping this type when starting with any row types
|
1156
|
+
return true;
|
1157
|
+
}
|
1158
|
+
|
1159
|
+
if(destRowType === "GROUP_MEMBER") {
|
1160
|
+
destParentType = api.getRowType(destParentId);
|
1161
|
+
if(destParentType === "SUBGROUP_HEADER") { // Do not allow to drop group member that have parent is SUBGROUP_HEADER
|
1162
|
+
return true;
|
1163
|
+
}
|
1164
|
+
}
|
1165
|
+
|
1166
|
+
return false;
|
1167
|
+
|
1168
|
+
};
|
1169
|
+
|
1090
1170
|
/** @private */
|
1091
1171
|
RowDraggingPlugin.prototype._clearCache = function () {
|
1092
1172
|
if (this._dragPulseId) {
|
@@ -968,49 +968,27 @@ RowSelectionPlugin.prototype._getSection = function (sectRef) {
|
|
968
968
|
* @param {boolean=} preserveAnchor
|
969
969
|
*/
|
970
970
|
RowSelectionPlugin.prototype._clearSelectedRows = function (preserveAnchor) { // Slow
|
971
|
-
|
972
|
-
|
973
|
-
|
974
|
-
|
975
|
-
|
976
|
-
|
977
|
-
|
978
|
-
|
979
|
-
var ridList = [];
|
980
|
-
var dataRow, firstIndex;
|
981
|
-
var len = rows.length;
|
982
|
-
for (i = 0; i < len; i++) {
|
983
|
-
dataRow = this._rowGetter(rows[i]);
|
984
|
-
if (dataRow && dataRow[this._selectionField]) {
|
985
|
-
valueList.push(false);
|
986
|
-
ridList.push(rids[i]);
|
987
|
-
if (firstIndex == null) {
|
988
|
-
firstIndex = i;
|
989
|
-
}
|
990
|
-
}
|
991
|
-
}
|
992
|
-
|
993
|
-
len = valueList.length;
|
994
|
-
if (len === 1) {
|
995
|
-
// use setData for better optimization in case update only one row
|
996
|
-
this._setData(dv, firstIndex, this._selectionField, valueList[0]);
|
997
|
-
} else if (len > 1) {
|
998
|
-
this._setColumnData(dv, this._selectionField, valueList, ridList);
|
999
|
-
}
|
1000
|
-
}
|
1001
|
-
} else {
|
1002
|
-
var sections = this._activeGrid.getAllSections("content");
|
1003
|
-
for (i = sections.length; --i >= 0;) {
|
1004
|
-
this._sectionClearSelectedRows(sections[i], preserveAnchor);
|
1005
|
-
}
|
971
|
+
if (!this._activeGrid) {
|
972
|
+
return;
|
973
|
+
}
|
974
|
+
if (this._basedOnContent) {
|
975
|
+
var dv = this._activeGrid.getDataSource();
|
976
|
+
if (dv) {
|
977
|
+
var dt = dv.getDataSource();
|
978
|
+
this._setColumnData(dt, this._selectionField, false);
|
1006
979
|
}
|
1007
|
-
|
1008
|
-
|
1009
|
-
|
980
|
+
} else {
|
981
|
+
var sections = this._activeGrid.getAllSections("content");
|
982
|
+
for (var i = sections.length; --i >= 0;) {
|
983
|
+
this._sectionClearSelectedRows(sections[i], preserveAnchor);
|
1010
984
|
}
|
1011
|
-
this._clearPendingClickIndex(this._activeGrid);
|
1012
|
-
this._clearMenuIcon();
|
1013
985
|
}
|
986
|
+
|
987
|
+
if (!preserveAnchor) {
|
988
|
+
this._anchorSection = null;
|
989
|
+
}
|
990
|
+
this._clearPendingClickIndex(this._activeGrid);
|
991
|
+
this._clearMenuIcon();
|
1014
992
|
};
|
1015
993
|
/** @private
|
1016
994
|
* @suppress {missingProperties}
|