@refinitiv-ui/efx-grid 6.0.20 → 6.0.22
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.
- package/lib/column-dragging/es6/ColumnDragging.js +46 -24
- package/lib/core/dist/core.js +61 -14
- package/lib/core/dist/core.min.js +1 -1
- package/lib/core/es6/grid/Core.js +11 -1
- package/lib/core/es6/grid/LayoutGrid.js +1 -0
- package/lib/core/es6/grid/components/CellSpans.d.ts +2 -0
- package/lib/core/es6/grid/components/CellSpans.js +35 -10
- package/lib/core/es6/grid/plugins/SortableTitlePlugin.d.ts +2 -0
- package/lib/core/es6/grid/plugins/SortableTitlePlugin.js +14 -3
- package/lib/grid/index.js +1 -1
- package/lib/rt-grid/dist/rt-grid.js +362 -41
- package/lib/rt-grid/dist/rt-grid.min.js +1 -1
- package/lib/rt-grid/es6/Grid.d.ts +10 -1
- package/lib/rt-grid/es6/Grid.js +196 -17
- package/lib/rt-grid/es6/ReferenceCounter.js +13 -2
- package/lib/rt-grid/es6/RowDefinition.d.ts +2 -0
- package/lib/rt-grid/es6/RowDefinition.js +74 -8
- package/lib/tr-grid-column-grouping/es6/ColumnGrouping.d.ts +9 -5
- package/lib/tr-grid-column-grouping/es6/ColumnGrouping.js +365 -133
- package/lib/tr-grid-column-resizing/es6/ColumnResizing.js +11 -37
- package/lib/tr-grid-row-selection/es6/RowSelection.d.ts +15 -15
- package/lib/tr-grid-row-selection/es6/RowSelection.js +9 -1
- package/lib/types/es6/ColumnGrouping.d.ts +9 -5
- package/lib/types/es6/Core/grid/components/CellSpans.d.ts +2 -0
- package/lib/types/es6/Core/grid/plugins/SortableTitlePlugin.d.ts +2 -0
- package/lib/types/es6/RealtimeGrid/Grid.d.ts +10 -1
- package/lib/types/es6/RealtimeGrid/RowDefinition.d.ts +2 -0
- package/lib/types/es6/RowSelection.d.ts +15 -15
- package/lib/versions.json +4 -4
- package/package.json +6 -2
@@ -74,6 +74,10 @@ ColumnGroupingPlugin.prototype._maxDepth = 0;
|
|
74
74
|
* @private
|
75
75
|
*/
|
76
76
|
ColumnGroupingPlugin.prototype._restructuring = false;
|
77
|
+
/** @type {boolean}
|
78
|
+
* @private
|
79
|
+
*/
|
80
|
+
ColumnGroupingPlugin.prototype._autoGrouping = true;
|
77
81
|
/** @type {number}
|
78
82
|
* @private
|
79
83
|
*/
|
@@ -113,6 +117,59 @@ ColumnGroupingPlugin._getTooltip = function (groupingOptions) {
|
|
113
117
|
}
|
114
118
|
return title;
|
115
119
|
};
|
120
|
+
/** @private
|
121
|
+
* @function
|
122
|
+
* @param {Object} groupDef
|
123
|
+
* @return {boolean}
|
124
|
+
*/
|
125
|
+
ColumnGroupingPlugin._isValidGroup = function (groupDef) {
|
126
|
+
if (groupDef) {
|
127
|
+
if (groupDef.id) {
|
128
|
+
return true;
|
129
|
+
}
|
130
|
+
}
|
131
|
+
return false;
|
132
|
+
};
|
133
|
+
/** @private
|
134
|
+
* @function
|
135
|
+
* @param {Array|Object} obj
|
136
|
+
* @param {string=} groupId
|
137
|
+
* @return {ColumnGroupingPlugin~GroupDefinition}
|
138
|
+
*/
|
139
|
+
ColumnGroupingPlugin._toGroupDefinition = function (obj, groupId) {
|
140
|
+
var groupDef = null;
|
141
|
+
if (obj) {
|
142
|
+
if (Array.isArray(obj)) {
|
143
|
+
groupDef = {
|
144
|
+
children: obj
|
145
|
+
};
|
146
|
+
} else {
|
147
|
+
groupDef = ColumnGroupingPlugin._cloneObject(obj);
|
148
|
+
}
|
149
|
+
if (groupId) {
|
150
|
+
if (!groupDef.id) {
|
151
|
+
groupDef.name = groupId;
|
152
|
+
}
|
153
|
+
groupDef.id = groupId;
|
154
|
+
}
|
155
|
+
}
|
156
|
+
return groupDef;
|
157
|
+
};
|
158
|
+
/** @private
|
159
|
+
* @function
|
160
|
+
* @param {Object} obj
|
161
|
+
* @return {Object}
|
162
|
+
*/
|
163
|
+
ColumnGroupingPlugin._cloneObject = function (obj) {
|
164
|
+
var newObj = cloneObject(obj);
|
165
|
+
if (Array.isArray(newObj.children)) {
|
166
|
+
newObj.children = newObj.children;
|
167
|
+
} else {
|
168
|
+
newObj.children = [];
|
169
|
+
}
|
170
|
+
return newObj;
|
171
|
+
};
|
172
|
+
|
116
173
|
/** @public
|
117
174
|
* @return {string}
|
118
175
|
*/
|
@@ -219,8 +276,8 @@ ColumnGroupingPlugin.prototype.config = function (options) {
|
|
219
276
|
}
|
220
277
|
var extOptions = options["columnGrouping"];
|
221
278
|
if (Array.isArray(extOptions)) {
|
222
|
-
var groupDefs = extOptions.
|
223
|
-
this._groupDefs = groupDefs.
|
279
|
+
var groupDefs = extOptions.filter(ColumnGroupingPlugin._isValidGroup);
|
280
|
+
this._groupDefs = groupDefs.map(ColumnGroupingPlugin._cloneObject);
|
224
281
|
}
|
225
282
|
var columns = options["columns"];
|
226
283
|
if (!columns) {
|
@@ -243,8 +300,10 @@ ColumnGroupingPlugin.prototype.getConfigObject = function (gridOptions) {
|
|
243
300
|
var obj = gridOptions || {};
|
244
301
|
|
245
302
|
// TODO: Handle legacyRender method that has been migrated
|
246
|
-
var
|
247
|
-
|
303
|
+
var groupDefs = this.getGroupDefinitions();
|
304
|
+
if (groupDefs.length) {
|
305
|
+
obj.columnGrouping = groupDefs;
|
306
|
+
}
|
248
307
|
return obj;
|
249
308
|
};
|
250
309
|
|
@@ -256,14 +315,6 @@ ColumnGroupingPlugin.prototype._setColumnGrouping = function (colIndex, data) {
|
|
256
315
|
var colData = this._newColumnData(colIndex);
|
257
316
|
colData["columnGrouping"] = data;
|
258
317
|
};
|
259
|
-
/** @private
|
260
|
-
* @param {number} colIndex
|
261
|
-
* @return {Object}
|
262
|
-
*/
|
263
|
-
ColumnGroupingPlugin.prototype._getColumnGrouping = function (colIndex) {
|
264
|
-
return this._getColumnOption(colIndex, "columnGrouping");
|
265
|
-
};
|
266
|
-
|
267
318
|
/** Legacy group structure from composite grid will be converted to the new structure
|
268
319
|
* @private
|
269
320
|
* @param {Object.<string, Array>} objMap
|
@@ -378,8 +429,8 @@ ColumnGroupingPlugin.prototype._applyGrouping = function () {
|
|
378
429
|
*/
|
379
430
|
ColumnGroupingPlugin.prototype._evaluateGroupStructure = function () {
|
380
431
|
// Clear existing group structure
|
381
|
-
var groupMap = this._groupMap = {};
|
382
|
-
var childToParent = this._childToParent = {};
|
432
|
+
var groupMap = this._groupMap = {}; // TODO: This is bad
|
433
|
+
var childToParent = this._childToParent = {}; // TODO: This is bad
|
383
434
|
var visibleGroupMap = this._visibleGroupMap = {};
|
384
435
|
this._maxDepth = -1;
|
385
436
|
|
@@ -406,11 +457,12 @@ ColumnGroupingPlugin.prototype._evaluateGroupStructure = function () {
|
|
406
457
|
// Create child to parent map
|
407
458
|
var gid, children, member;
|
408
459
|
for (gid in groupMap) {
|
409
|
-
|
410
|
-
children
|
411
|
-
|
412
|
-
|
413
|
-
|
460
|
+
children = this._getAvaliableChildren(gid);
|
461
|
+
if (children.length > 1) {
|
462
|
+
for (i = 0; i < children.length; i++) {
|
463
|
+
member = children[i];
|
464
|
+
childToParent[member] = gid;
|
465
|
+
}
|
414
466
|
}
|
415
467
|
}
|
416
468
|
|
@@ -424,7 +476,7 @@ ColumnGroupingPlugin.prototype._evaluateGroupStructure = function () {
|
|
424
476
|
}
|
425
477
|
}
|
426
478
|
|
427
|
-
// Filter
|
479
|
+
// Filter out groups that are invisible
|
428
480
|
var rootGroup = [];
|
429
481
|
for (gid in visibleGroupMap) {
|
430
482
|
groupDef = visibleGroupMap[gid];
|
@@ -478,7 +530,7 @@ ColumnGroupingPlugin.prototype._flattenGroupDefs = function (groupDef, groupDefs
|
|
478
530
|
}
|
479
531
|
this._flattenGroupDefs(member, groupDefs);
|
480
532
|
}
|
481
|
-
}
|
533
|
+
} // TODO: Invalid group is not flatten
|
482
534
|
}
|
483
535
|
}
|
484
536
|
};
|
@@ -790,25 +842,27 @@ ColumnGroupingPlugin.prototype._onColumnChanged = function () {
|
|
790
842
|
* @param {Object} e dispatching of columnMoved event object
|
791
843
|
*/
|
792
844
|
ColumnGroupingPlugin.prototype._onColumnMoved = function (e) {
|
793
|
-
|
794
|
-
|
795
|
-
|
796
|
-
|
797
|
-
|
798
|
-
|
799
|
-
|
800
|
-
|
801
|
-
|
802
|
-
|
803
|
-
|
804
|
-
|
805
|
-
|
806
|
-
|
845
|
+
if (this._autoGrouping) {
|
846
|
+
var toColIndex = e.toColIndex;
|
847
|
+
var colId = this.getColumnId(toColIndex);
|
848
|
+
var groupId = this._childToParent[colId];
|
849
|
+
if (groupId) {
|
850
|
+
var colIdLeft = this.getColumnId(toColIndex - 1);
|
851
|
+
var colIdRight = this.getColumnId(toColIndex + 1);
|
852
|
+
var groupIdLeft = this._childToParent[colIdLeft];
|
853
|
+
var groupIdRight = this._childToParent[colIdRight];
|
854
|
+
if (groupId != groupIdLeft && groupId != groupIdRight) {
|
855
|
+
// Remove column from previous group
|
856
|
+
var children = this.getGroupChildren(groupId);
|
857
|
+
var removeIndex = children.indexOf(colId);
|
858
|
+
if (removeIndex > -1) {
|
859
|
+
children.splice(removeIndex, 1);
|
860
|
+
}
|
861
|
+
this.setGroupChildren(groupId, children);
|
807
862
|
}
|
808
|
-
this.setGroupChildren(groupId, children);
|
809
863
|
}
|
864
|
+
this._applyNearestGrouping(toColIndex);
|
810
865
|
}
|
811
|
-
this._applyNearestGrouping(toColIndex);
|
812
866
|
this._requestApplyGrouping();
|
813
867
|
};
|
814
868
|
/** @private
|
@@ -820,19 +874,7 @@ ColumnGroupingPlugin.prototype._onColumnRemoved = function (e) {
|
|
820
874
|
var colId = colData.columnGrouping.id;
|
821
875
|
var groupId = this._childToParent[colId];
|
822
876
|
if (groupId) {
|
823
|
-
|
824
|
-
if (groupDef) {
|
825
|
-
var children = groupDef.children;
|
826
|
-
var index = children.indexOf(colId);
|
827
|
-
if (index > -1) {
|
828
|
-
if (children.length < 3) {
|
829
|
-
this._groupDefs.splice(this._groupDefs.indexOf(groupDef), 1);
|
830
|
-
} else {
|
831
|
-
children.splice(index, 1);
|
832
|
-
}
|
833
|
-
this._requestApplyGrouping();
|
834
|
-
}
|
835
|
-
}
|
877
|
+
this._requestApplyGrouping();
|
836
878
|
}
|
837
879
|
}
|
838
880
|
};
|
@@ -940,22 +982,69 @@ ColumnGroupingPlugin.prototype.addColumnToGroup = function (column, groupId, col
|
|
940
982
|
}
|
941
983
|
};
|
942
984
|
|
943
|
-
/**
|
985
|
+
/** Remove each child from another group
|
986
|
+
* @private
|
987
|
+
* @param {Array.<string>} children
|
988
|
+
*/
|
989
|
+
ColumnGroupingPlugin.prototype._ungroupChildren = function (children) {
|
990
|
+
if (Array.isArray(children)) {
|
991
|
+
var len = children.length;
|
992
|
+
for (var i = 0; i < len; ++i) {
|
993
|
+
this._unsetParent(children[i]);
|
994
|
+
}
|
995
|
+
}
|
996
|
+
};
|
997
|
+
/** Unset parent of the specified id
|
998
|
+
* @private
|
999
|
+
* @param {string} childId
|
1000
|
+
*/
|
1001
|
+
ColumnGroupingPlugin.prototype._unsetParent = function (childId) {
|
1002
|
+
var parentId = this._childToParent[childId];
|
1003
|
+
if (parentId) {
|
1004
|
+
this._childToParent[childId] = "";
|
1005
|
+
var grpDef = this._groupMap[parentId];
|
1006
|
+
if (grpDef) {
|
1007
|
+
var chdr = grpDef.children;
|
1008
|
+
if (chdr.length) {
|
1009
|
+
var at = chdr.indexOf(childId);
|
1010
|
+
if (at >= 0) {
|
1011
|
+
chdr.splice(at, 1); // splice is slow
|
1012
|
+
}
|
1013
|
+
}
|
1014
|
+
}
|
1015
|
+
}
|
1016
|
+
};
|
1017
|
+
/** Remove all children from the specified group
|
1018
|
+
* @private
|
1019
|
+
* @param {string} grpId
|
1020
|
+
*/
|
1021
|
+
ColumnGroupingPlugin.prototype._removeAllChildren = function (grpId) {
|
1022
|
+
var grpDef = this._groupMap[grpId];
|
1023
|
+
if (grpDef) {
|
1024
|
+
var chdr = grpDef.children;
|
1025
|
+
var len = chdr.length;
|
1026
|
+
if (len) {
|
1027
|
+
grpDef.children = [];
|
1028
|
+
for (var i = 0; i < len; ++i) {
|
1029
|
+
var childId = chdr[i];
|
1030
|
+
if (this._childToParent[childId]) {
|
1031
|
+
this._childToParent[childId] = "";
|
1032
|
+
}
|
1033
|
+
}
|
1034
|
+
}
|
1035
|
+
}
|
1036
|
+
};
|
1037
|
+
|
1038
|
+
/** Add new group definition to existing group structure. Existing group with the same id will be replaced.
|
944
1039
|
* @public
|
945
1040
|
* @param {ColumnGroupingPlugin~GroupDefinition} groupDef Group definition object
|
946
|
-
* @return {
|
1041
|
+
* @return {string} Return group ID
|
947
1042
|
*/
|
948
1043
|
ColumnGroupingPlugin.prototype.addGroup = function (groupDef) {
|
949
|
-
if (groupDef
|
950
|
-
|
951
|
-
if (!curDef) {
|
952
|
-
var newGroupDef = ColumnGroupingPlugin._cloneObject(groupDef);
|
953
|
-
this._groupDefs.push(newGroupDef);
|
954
|
-
this._applyGrouping();
|
955
|
-
return true;
|
956
|
-
}
|
1044
|
+
if (ColumnGroupingPlugin._isValidGroup(groupDef)) {
|
1045
|
+
return this.setGroupDefinition(groupDef.id, groupDef);
|
957
1046
|
}
|
958
|
-
return
|
1047
|
+
return "";
|
959
1048
|
};
|
960
1049
|
/** Deprecated. Use addGroup() method instead
|
961
1050
|
* @deprecated
|
@@ -967,10 +1056,10 @@ ColumnGroupingPlugin.prototype.addGroup = function (groupDef) {
|
|
967
1056
|
ColumnGroupingPlugin.prototype.addColumnGrouping = ColumnGroupingPlugin.prototype.addGroup;
|
968
1057
|
/** @public
|
969
1058
|
* @param {string} groupId
|
970
|
-
* @return {
|
1059
|
+
* @return {ColumnGroupingPlugin~GroupDefinition} Return removed group definition object.
|
971
1060
|
*/
|
972
1061
|
ColumnGroupingPlugin.prototype.removeGroup = function (groupId) {
|
973
|
-
var curDef = this.
|
1062
|
+
var curDef = this._groupMap[groupId];
|
974
1063
|
if (curDef) {
|
975
1064
|
var at = this._groupDefs.indexOf(curDef);
|
976
1065
|
this._groupDefs.splice(at, 1);
|
@@ -979,14 +1068,87 @@ ColumnGroupingPlugin.prototype.removeGroup = function (groupId) {
|
|
979
1068
|
return curDef;
|
980
1069
|
};
|
981
1070
|
|
1071
|
+
/** @public
|
1072
|
+
* @param {string} groupId
|
1073
|
+
* @return {ColumnGroupingPlugin~GroupDefinition}
|
1074
|
+
*/
|
1075
|
+
ColumnGroupingPlugin.prototype.getGroupDefinition = function (groupId) {
|
1076
|
+
if (groupId) {
|
1077
|
+
// Check for group validility
|
1078
|
+
var groupDef = this._groupMap[groupId];
|
1079
|
+
if (!groupDef) {
|
1080
|
+
return null;
|
1081
|
+
}
|
1082
|
+
groupDef = ColumnGroupingPlugin._cloneObject(groupDef); // TODO: this is slow
|
1083
|
+
var children = this._getAvaliableChildren(groupId);
|
1084
|
+
groupDef.children = children;
|
1085
|
+
return groupDef;
|
1086
|
+
}
|
1087
|
+
return null;
|
1088
|
+
};
|
1089
|
+
/** Get a shallow copy of all existing group definitions
|
1090
|
+
* @public
|
1091
|
+
* @return {!ColumnGroupingPlugin~GroupDefinitions}
|
1092
|
+
*/
|
1093
|
+
ColumnGroupingPlugin.prototype.getGroupDefinitions = function () {
|
1094
|
+
var validGroupDefs = [];
|
1095
|
+
var len = this._groupDefs.length;
|
1096
|
+
var groupDef;
|
1097
|
+
for (var i = 0; i < len; i++) {
|
1098
|
+
groupDef = this.getGroupDefinition(this._groupDefs[i].id);
|
1099
|
+
if (groupDef && groupDef.children.length > 1) {
|
1100
|
+
validGroupDefs.push(groupDef);
|
1101
|
+
}
|
1102
|
+
}
|
1103
|
+
return validGroupDefs;
|
1104
|
+
};
|
1105
|
+
/** Replace and update existing group definition. New group is added if the given id has no match. Existing group will be removed of no new definition is given.
|
1106
|
+
* @public
|
1107
|
+
* @param {string} groupId
|
1108
|
+
* @param {ColumnGroupingPlugin~GroupDefinition=} groupDef
|
1109
|
+
* @return {string} Group Id
|
1110
|
+
*/
|
1111
|
+
ColumnGroupingPlugin.prototype.setGroupDefinition = function (groupId, groupDef) {
|
1112
|
+
if (!groupId) {
|
1113
|
+
return "";
|
1114
|
+
}
|
1115
|
+
if (groupDef) {
|
1116
|
+
var newDef = ColumnGroupingPlugin._toGroupDefinition(groupDef, groupId);
|
1117
|
+
this._ungroupChildren(newDef.children);
|
1118
|
+
var curDef = this._groupMap[groupId];
|
1119
|
+
if (curDef) {
|
1120
|
+
// Replace
|
1121
|
+
var at = this._groupDefs.indexOf(curDef);
|
1122
|
+
this._groupDefs[at] = newDef;
|
1123
|
+
} else {
|
1124
|
+
// Add
|
1125
|
+
this._groupDefs.push(newDef);
|
1126
|
+
}
|
1127
|
+
var chdr = newDef.children;
|
1128
|
+
var len = chdr.length;
|
1129
|
+
// TODO: Filter out group id
|
1130
|
+
if (len > 1) {
|
1131
|
+
var gridApi = this.getGridApi();
|
1132
|
+
if (gridApi && gridApi.reorderColumns) {
|
1133
|
+
gridApi.reorderColumns(chdr, chdr[0]); // WARNING: group id doesn't work
|
1134
|
+
}
|
1135
|
+
}
|
1136
|
+
|
1137
|
+
this._applyGrouping();
|
1138
|
+
} else {
|
1139
|
+
// Remove
|
1140
|
+
this.removeGroup(groupId);
|
1141
|
+
}
|
1142
|
+
return groupId;
|
1143
|
+
};
|
982
1144
|
/** Remove all existing group definitions and replace with the given definitions.
|
983
1145
|
* @public
|
984
1146
|
* @param {ColumnGroupingPlugin~GroupDefinitions} groupDefs Use null or empty array to remove all existing groups
|
985
1147
|
*/
|
986
1148
|
ColumnGroupingPlugin.prototype.setGroupDefinitions = function (groupDefs) {
|
987
1149
|
if (Array.isArray(groupDefs)) {
|
988
|
-
groupDefs = groupDefs.map(ColumnGroupingPlugin._cloneObject);
|
989
1150
|
groupDefs = groupDefs.filter(ColumnGroupingPlugin._isValidGroup);
|
1151
|
+
groupDefs = groupDefs.map(ColumnGroupingPlugin._cloneObject);
|
990
1152
|
if (!groupDefs.length) {
|
991
1153
|
groupDefs = null;
|
992
1154
|
}
|
@@ -996,80 +1158,22 @@ ColumnGroupingPlugin.prototype.setGroupDefinitions = function (groupDefs) {
|
|
996
1158
|
if (groupDefs) {
|
997
1159
|
this._groupDefs = groupDefs;
|
998
1160
|
this._applyGrouping();
|
999
|
-
} else if (this._groupDefs.length) {
|
1000
|
-
this._groupDefs = [];
|
1001
|
-
this._applyGrouping();
|
1002
|
-
}
|
1003
|
-
};
|
1004
|
-
/** @private
|
1005
|
-
* @function
|
1006
|
-
* @param {Object} groupDef
|
1007
|
-
* @return {boolean}
|
1008
|
-
*/
|
1009
|
-
ColumnGroupingPlugin._isValidGroup = function (groupDef) {
|
1010
|
-
if (groupDef) {
|
1011
|
-
if (groupDef.id) {
|
1012
|
-
return true;
|
1013
|
-
}
|
1014
|
-
}
|
1015
|
-
return false;
|
1016
|
-
};
|
1017
|
-
/** @private
|
1018
|
-
* @function
|
1019
|
-
* @param {Object} obj
|
1020
|
-
* @return {boolean}
|
1021
|
-
*/
|
1022
|
-
ColumnGroupingPlugin._cloneObject = function (obj) {
|
1023
|
-
var newObj = cloneObject(obj);
|
1024
|
-
if (Array.isArray(newObj.children)) {
|
1025
|
-
newObj.children = newObj.children;
|
1026
1161
|
} else {
|
1027
|
-
|
1028
|
-
}
|
1029
|
-
return newObj;
|
1030
|
-
};
|
1031
|
-
/** Get a shallow copy of all existing group definitions
|
1032
|
-
* @public
|
1033
|
-
* @return {!ColumnGroupingPlugin~GroupDefinitions}
|
1034
|
-
*/
|
1035
|
-
ColumnGroupingPlugin.prototype.getGroupDefinitions = function () {
|
1036
|
-
return this._groupDefs.slice();
|
1037
|
-
};
|
1038
|
-
/** Replace and update existing group definition. Existing group id will not be modified
|
1039
|
-
* @public
|
1040
|
-
* @param {string} groupId
|
1041
|
-
* @param {ColumnGroupingPlugin~GroupDefinition} newDef
|
1042
|
-
*/
|
1043
|
-
ColumnGroupingPlugin.prototype.setGroupDefinition = function (groupId, newDef) {
|
1044
|
-
var curDef = this.getGroupDefinition(groupId);
|
1045
|
-
if (curDef) {
|
1046
|
-
var at = this._groupDefs.indexOf(curDef);
|
1047
|
-
newDef = ColumnGroupingPlugin._cloneObject(newDef);
|
1048
|
-
newDef.id = groupId;
|
1049
|
-
this._groupDefs[at] = newDef;
|
1162
|
+
this._groupDefs = [];
|
1050
1163
|
this._applyGrouping();
|
1051
1164
|
}
|
1052
1165
|
};
|
1053
|
-
/** @public
|
1054
|
-
* @param {string} groupId
|
1055
|
-
* @return {ColumnGroupingPlugin~GroupDefinition}
|
1056
|
-
*/
|
1057
|
-
ColumnGroupingPlugin.prototype.getGroupDefinition = function (groupId) {
|
1058
|
-
if (groupId) {
|
1059
|
-
return this._groupMap[groupId] || null;
|
1060
|
-
}
|
1061
|
-
return null;
|
1062
|
-
};
|
1063
1166
|
/** Replace and update existing group definition.
|
1064
1167
|
* @public
|
1065
1168
|
* @param {string} groupId
|
1066
1169
|
* @param {Array.<string>} newChildList If null is given, all existing children in the group will be removed
|
1067
1170
|
*/
|
1068
1171
|
ColumnGroupingPlugin.prototype.setGroupChildren = function (groupId, newChildList) {
|
1069
|
-
var groupDef = this.
|
1172
|
+
var groupDef = this._groupMap[groupId];
|
1070
1173
|
if (groupDef) {
|
1071
1174
|
if (Array.isArray(newChildList)) {
|
1072
1175
|
groupDef.aaa = 0; // TODO: for testing, need to be removed
|
1176
|
+
this._ungroupChildren(newChildList);
|
1073
1177
|
groupDef.children = newChildList.slice();
|
1074
1178
|
this._applyGrouping();
|
1075
1179
|
} else if (!newChildList && groupDef.children.length) {
|
@@ -1078,14 +1182,37 @@ ColumnGroupingPlugin.prototype.setGroupChildren = function (groupId, newChildLis
|
|
1078
1182
|
}
|
1079
1183
|
}
|
1080
1184
|
};
|
1185
|
+
/** @private
|
1186
|
+
* @param {string} groupId
|
1187
|
+
* @return {!Array.<string>}
|
1188
|
+
*/
|
1189
|
+
ColumnGroupingPlugin.prototype._getAvaliableChildren = function (groupId) {
|
1190
|
+
var groupDef = this._groupMap[groupId];
|
1191
|
+
var validChildren = [];
|
1192
|
+
if (groupDef) {
|
1193
|
+
// Filter out columns that do not exist
|
1194
|
+
var groupMap = this._groupMap;
|
1195
|
+
var children = groupDef.children;
|
1196
|
+
var childId;
|
1197
|
+
for (var i = 0; i < children.length; i++) {
|
1198
|
+
childId = children[i];
|
1199
|
+
if (groupMap[childId] || this.getColumnIndex(childId) > -1) {
|
1200
|
+
validChildren.push(childId); // TODO: This is slow
|
1201
|
+
}
|
1202
|
+
}
|
1203
|
+
}
|
1204
|
+
|
1205
|
+
return validChildren;
|
1206
|
+
};
|
1207
|
+
|
1081
1208
|
/** @public
|
1082
1209
|
* @param {string} groupId
|
1083
1210
|
* @return {Array.<string>}
|
1084
1211
|
*/
|
1085
1212
|
ColumnGroupingPlugin.prototype.getGroupChildren = function (groupId) {
|
1086
|
-
var
|
1087
|
-
if (
|
1088
|
-
return
|
1213
|
+
var children = this._getAvaliableChildren(groupId);
|
1214
|
+
if (children.length > 1) {
|
1215
|
+
return children;
|
1089
1216
|
}
|
1090
1217
|
return null;
|
1091
1218
|
};
|
@@ -1164,14 +1291,17 @@ ColumnGroupingPlugin.prototype.getGroupLevel = function (groupId) {
|
|
1164
1291
|
/** @private
|
1165
1292
|
* @param {Object.<string, ColumnGroupingPlugin~GroupDefinition>} groupMap
|
1166
1293
|
* @param {ColumnGroupingPlugin~GroupDefinition} group Group definition
|
1167
|
-
* @param {Array
|
1294
|
+
* @param {Array.<string>=} members
|
1168
1295
|
* @return {Array.<string>}
|
1169
1296
|
*/
|
1170
1297
|
ColumnGroupingPlugin.prototype._getGroupMembers = function (groupMap, group, members) {
|
1171
1298
|
if (!members) {
|
1172
1299
|
members = [];
|
1173
1300
|
}
|
1174
|
-
var children = group.
|
1301
|
+
var children = this._getAvaliableChildren(group.id);
|
1302
|
+
if (children.length < 2) {
|
1303
|
+
return members;
|
1304
|
+
}
|
1175
1305
|
var g, id;
|
1176
1306
|
for (var i = 0; i < children.length; i++) {
|
1177
1307
|
id = children[i];
|
@@ -1311,7 +1441,7 @@ ColumnGroupingPlugin.prototype.moveColumnIntoGroup = function (colRef, to, group
|
|
1311
1441
|
if (fromIndex == -1) {
|
1312
1442
|
return;
|
1313
1443
|
}
|
1314
|
-
var groupDef = this.
|
1444
|
+
var groupDef = this._groupMap[groupId];
|
1315
1445
|
if (!groupDef) {
|
1316
1446
|
for (var j = this._hosts.length; --j >= 0;) {
|
1317
1447
|
var grid = this._hosts[j];
|
@@ -1369,6 +1499,7 @@ ColumnGroupingPlugin.prototype.moveColumnIntoGroup = function (colRef, to, group
|
|
1369
1499
|
host.moveColumn(fromIndex, to);
|
1370
1500
|
}
|
1371
1501
|
if (colId) {
|
1502
|
+
// TODO:
|
1372
1503
|
// Remove from current group
|
1373
1504
|
var previousGroup = this._childToParent[colId];
|
1374
1505
|
if (previousGroup) {
|
@@ -1397,8 +1528,7 @@ ColumnGroupingPlugin.prototype.setColumnParent = function (colRef, groupId) {
|
|
1397
1528
|
if (!api) {
|
1398
1529
|
return;
|
1399
1530
|
}
|
1400
|
-
var
|
1401
|
-
var colCount = grid.getColumnCount();
|
1531
|
+
var colCount = this.getColumnCount();
|
1402
1532
|
var toIndex = -1;
|
1403
1533
|
var childIndices = this.getChildColumnIndices(groupId);
|
1404
1534
|
|
@@ -1411,5 +1541,107 @@ ColumnGroupingPlugin.prototype.setColumnParent = function (colRef, groupId) {
|
|
1411
1541
|
}
|
1412
1542
|
this.moveColumnIntoGroup(colRef, toIndex, groupId);
|
1413
1543
|
};
|
1544
|
+
|
1545
|
+
/** @public
|
1546
|
+
* Get a valid index for moving group/column to specific index
|
1547
|
+
* @param {string} id group id or column id
|
1548
|
+
* @param {number|string} destCol destination column index / id
|
1549
|
+
* @returns {number} destination index
|
1550
|
+
*/
|
1551
|
+
ColumnGroupingPlugin.prototype.getValidDestinationIndex = function (id, destCol) {
|
1552
|
+
var groupDef, parentGroupDef;
|
1553
|
+
groupDef = this._groupMap[id];
|
1554
|
+
if (groupDef) {
|
1555
|
+
parentGroupDef = this.getGroupDefinition(groupDef["parent"]);
|
1556
|
+
} else if (this.getColumnIndex(id) > -1) {
|
1557
|
+
parentGroupDef = this._getParentGroup(id);
|
1558
|
+
}
|
1559
|
+
var startIndex = -1;
|
1560
|
+
var endIndex = -1;
|
1561
|
+
var destColIndex = typeof destCol === "string" ? this.getColumnIndex(destCol) : destCol;
|
1562
|
+
if (parentGroupDef) {
|
1563
|
+
// If group/column is a child of a group, it should be move within the parent group
|
1564
|
+
var childIndices = this.getChildColumnIndices(parentGroupDef["id"]);
|
1565
|
+
if (childIndices && childIndices.length) {
|
1566
|
+
startIndex = childIndices[0];
|
1567
|
+
endIndex = childIndices[childIndices.length - 1];
|
1568
|
+
}
|
1569
|
+
if (destColIndex < startIndex && destColIndex != -1) {
|
1570
|
+
destColIndex = this.getColumnId(startIndex);
|
1571
|
+
} else if (destColIndex > endIndex || destColIndex == -1) {
|
1572
|
+
destColIndex = this.getColumnId(endIndex + 1);
|
1573
|
+
}
|
1574
|
+
|
1575
|
+
// handle group/column should not insert between group
|
1576
|
+
var groupChildren = this.getGroupChildren(parentGroupDef["id"]);
|
1577
|
+
for (var i = 0; i < groupChildren.length; i++) {
|
1578
|
+
var childId = groupChildren[i];
|
1579
|
+
var childGroupIndices = this.getChildColumnIndices(childId);
|
1580
|
+
if (childGroupIndices && childGroupIndices.length) {
|
1581
|
+
startIndex = childGroupIndices[0];
|
1582
|
+
endIndex = childGroupIndices[childGroupIndices.length - 1];
|
1583
|
+
if (destColIndex > startIndex && destColIndex <= endIndex) {
|
1584
|
+
destColIndex = endIndex + 1;
|
1585
|
+
break;
|
1586
|
+
}
|
1587
|
+
}
|
1588
|
+
}
|
1589
|
+
} else {
|
1590
|
+
// handle group/column should not insert between group when group/column is not a child of any group
|
1591
|
+
var destMemberIndices = [];
|
1592
|
+
var destColId = this.getColumnId(destColIndex);
|
1593
|
+
var destParent = this._getParentGroup(destColId);
|
1594
|
+
if (destParent) {
|
1595
|
+
if (destParent["parent"]) {
|
1596
|
+
destParent = this._getRootGroup(destParent["id"]);
|
1597
|
+
}
|
1598
|
+
destMemberIndices = this.getChildColumnIndices(destParent["id"]);
|
1599
|
+
}
|
1600
|
+
if (destMemberIndices && destMemberIndices.length) {
|
1601
|
+
startIndex = destMemberIndices[0];
|
1602
|
+
endIndex = destMemberIndices[destMemberIndices.length - 1];
|
1603
|
+
if (destColIndex > startIndex && destColIndex <= endIndex) {
|
1604
|
+
destColIndex = endIndex + 1;
|
1605
|
+
}
|
1606
|
+
}
|
1607
|
+
}
|
1608
|
+
return destColIndex;
|
1609
|
+
};
|
1610
|
+
|
1611
|
+
/** @public
|
1612
|
+
* Move group or column to left side of the destination column.
|
1613
|
+
* Group or column can only be moved within the parent group.
|
1614
|
+
* If the destination is between other column group, the destination will change to the end of that group instead.
|
1615
|
+
* @param {string} id group id or column id
|
1616
|
+
* @param {number|string} destCol destination column index / id
|
1617
|
+
*/
|
1618
|
+
ColumnGroupingPlugin.prototype.moveGroup = function (id, destCol) {
|
1619
|
+
var groupDef;
|
1620
|
+
var members = [];
|
1621
|
+
groupDef = this._groupMap[id];
|
1622
|
+
if (groupDef) {
|
1623
|
+
var indices = this.getChildColumnIndices(groupDef["id"]);
|
1624
|
+
for (var i = 0; i < indices.length; i++) {
|
1625
|
+
var index = indices[i];
|
1626
|
+
var colId = this.getColumnId(index);
|
1627
|
+
members.push(colId);
|
1628
|
+
}
|
1629
|
+
} else if (this.getColumnIndex(id) > -1) {
|
1630
|
+
members.push(id);
|
1631
|
+
} else {
|
1632
|
+
return;
|
1633
|
+
}
|
1634
|
+
var destColIndex = this.getValidDestinationIndex(id, destCol);
|
1635
|
+
var destColId = this.getColumnId(destColIndex);
|
1636
|
+
|
1637
|
+
// TODO: create method for toggling autoGrouping flag
|
1638
|
+
this._autoGrouping = false;
|
1639
|
+
if (this._realTimeGrid) {
|
1640
|
+
this._realTimeGrid.reorderColumns(members, destColId);
|
1641
|
+
} else if (this._compositeGrid) {
|
1642
|
+
this._compositeGrid.reorderColumns(members, destColId);
|
1643
|
+
}
|
1644
|
+
this._autoGrouping = true;
|
1645
|
+
};
|
1414
1646
|
export default ColumnGroupingPlugin;
|
1415
1647
|
export { ColumnGroupingPlugin, ColumnGroupingPlugin as ColumnGrouping, ColumnGroupingPlugin as ColumnGroupingExtension };
|