@refinitiv-ui/efx-grid 6.0.20 → 6.0.21

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.
@@ -257,6 +257,12 @@ declare class Grid extends EventDispatcher {
257
257
 
258
258
  public freezeColumn(colIndex?: number|null, pinnedRightColumns?: number|null): void;
259
259
 
260
+ public pinColumn(colRef: Grid.ColumnReference|(Grid.ColumnReference)[]|null): boolean;
261
+
262
+ public unpinColumn(colRef: Grid.ColumnReference|(Grid.ColumnReference)[]|null, dest?: Grid.ColumnReference|null): boolean;
263
+
264
+ public unpinAllColumns(): boolean;
265
+
260
266
  public updateColumnTitle(): void;
261
267
 
262
268
  public isSorting(): boolean;
@@ -2965,17 +2965,136 @@ Grid.prototype.getAllFields = function() {
2965
2965
  return this._connector.getAllFields();
2966
2966
  };
2967
2967
  /** Freeze the column at the left side of the table starting from index 0 to the specified colIndex
2968
- * If no index is specified (null or undefined index), unfreeze all columns.
2969
- * @public
2970
- * @param {number=} colIndex Negative index is equivalent to null value
2971
- * @param {number=} pinnedRightColumns Number of columns to be pinned/snapped on the right side
2972
- */
2968
+ * If no index is specified (null or undefined index), unfreeze all columns.
2969
+ * @public
2970
+ * @param {number=} colIndex Negative index is equivalent to null value
2971
+ * @param {number=} pinnedRightColumns Number of columns to be pinned/snapped on the right side
2972
+ */
2973
2973
  Grid.prototype.freezeColumn = function(colIndex, pinnedRightColumns) {
2974
2974
  if(colIndex == null) {
2975
2975
  colIndex = -1;
2976
2976
  }
2977
2977
  this._grid.freezeColumn(colIndex, pinnedRightColumns);
2978
2978
  };
2979
+ /** Pin column to the left side by moving the specified column to the rightmost of the frozen columns. <br>
2980
+ * The method will do nothing if the specified column is already pinned to the left side
2981
+ * @public
2982
+ * @param {Grid~ColumnReference|Array.<Grid~ColumnReference>} colRef
2983
+ * @return {boolean}
2984
+ */
2985
+ Grid.prototype.pinColumn = function(colRef) {
2986
+ if(Array.isArray(colRef)) {
2987
+ var ary = colRef;
2988
+ var len = ary.length;
2989
+
2990
+ var dirty = 0;
2991
+ for(var i = 0; i < len; ++i) {
2992
+ dirty |= this._pinColumn(ary[i]);
2993
+ }
2994
+ return dirty ? true : false;
2995
+ }
2996
+ return this._pinColumn(colRef);
2997
+ };
2998
+ /** @private
2999
+ * @param {Grid~ColumnReference} colRef
3000
+ * @return {boolean}
3001
+ */
3002
+ Grid.prototype._pinColumn = function(colRef) {
3003
+ var colIndex = this.getColumnIndex(colRef);
3004
+ if(colIndex < 0) {
3005
+ return false;
3006
+ }
3007
+ var pinnedCount = this._grid.getFrozenColumnCount();
3008
+ if(colIndex < pinnedCount) {
3009
+ return false; // The column is already pinned area
3010
+ }
3011
+ if(!pinnedCount) {
3012
+ var stationaryIdx = this._grid.getStationaryColumnIndex();
3013
+ if(stationaryIdx >= 0) {
3014
+ pinnedCount = stationaryIdx;
3015
+ if(colIndex > stationaryIdx) {
3016
+ pinnedCount++;
3017
+ }
3018
+ }
3019
+ }
3020
+
3021
+ this.moveColumnById(colIndex, pinnedCount);
3022
+ this._grid.freezeColumn(pinnedCount);
3023
+ return true;
3024
+ };
3025
+ /** Unpin column from the left side by moving the specified column to the end of the frozen columns. <br>
3026
+ * The method will do nothing if the specified column is not pinned on the left side.
3027
+ * @public
3028
+ * @param {Grid~ColumnReference|Array.<Grid~ColumnReference>} colRef
3029
+ * @param {Grid~ColumnReference=} dest The unpinned column will be placed before the destination position after the operation
3030
+ * @return {boolean}
3031
+ */
3032
+ Grid.prototype.unpinColumn = function(colRef, dest) {
3033
+ if(Array.isArray(colRef)) {
3034
+ var ary = colRef;
3035
+ var len = ary.length;
3036
+
3037
+ var dirty = 0;
3038
+ for(var i = 0; i < len; ++i) {
3039
+ dirty |= this._unpinColumn(ary[i], dest);
3040
+ }
3041
+ return dirty ? true : false;
3042
+ }
3043
+ return this._unpinColumn(colRef, dest);
3044
+ };
3045
+ /** @private
3046
+ * @param {Grid~ColumnReference} colRef
3047
+ * @param {Grid~ColumnReference=} dest The unpinned column will be placed before the destination position after the operation
3048
+ * @return {boolean}
3049
+ */
3050
+ Grid.prototype._unpinColumn = function(colRef, dest) {
3051
+ var colIndex = this.getColumnIndex(colRef);
3052
+ if(colIndex < 0) {
3053
+ return false;
3054
+ }
3055
+ var pinnedCount = this._grid.getFrozenColumnCount();
3056
+ if(!pinnedCount) {
3057
+ return false;
3058
+ }
3059
+ if(colIndex >= pinnedCount) {
3060
+ return false; // The column is outside of frozen area
3061
+ }
3062
+ var srcId = null;
3063
+ var destId = null;
3064
+ if(dest != null) {
3065
+ var destIdx = this.getColumnIndex(dest);
3066
+ destId = this.getColumnId(destIdx);
3067
+ srcId = this.getColumnId(colIndex);
3068
+ }
3069
+
3070
+ var stationaryIdx = this._grid.getStationaryColumnIndex();
3071
+
3072
+ if(colIndex > stationaryIdx) {
3073
+ this.moveColumnById(colIndex, pinnedCount);
3074
+ }
3075
+
3076
+ this._grid.freezeColumn(pinnedCount - 2); // Column index is used for freezing
3077
+
3078
+ if(colIndex > stationaryIdx) {
3079
+ if(destId != null) {
3080
+ this.moveColumnById(srcId, destId);
3081
+ }
3082
+ }
3083
+
3084
+ return true;
3085
+ };
3086
+ /** A shorthand to unpin all columns from the left hand side
3087
+ * @public
3088
+ * @return {boolean}
3089
+ */
3090
+ Grid.prototype.unpinAllColumns = function() {
3091
+ var pinnedCount = this._grid.getFrozenColumnCount();
3092
+ if(!pinnedCount) {
3093
+ return false;
3094
+ }
3095
+ this._grid.freezeColumn(-1); // Column index is used for freezing
3096
+ return true;
3097
+ };
2979
3098
 
2980
3099
  /** @private
2981
3100
  * @param {Object} e
@@ -38,19 +38,19 @@ declare class ColumnGroupingPlugin extends GridPlugin {
38
38
 
39
39
  public addColumnToGroup(column: any, groupId: string, colIndex: number): void;
40
40
 
41
- public addGroup(groupDef: ColumnGroupingPlugin.GroupDefinition|null): boolean;
41
+ public addGroup(groupDef: ColumnGroupingPlugin.GroupDefinition|null): string;
42
42
 
43
43
  public addColumnGrouping(groupDef: ColumnGroupingPlugin.GroupDefinition|null): void;
44
44
 
45
- public removeGroup(groupId: string): any;
45
+ public removeGroup(groupId: string): ColumnGroupingPlugin.GroupDefinition|null;
46
46
 
47
- public setGroupDefinitions(groupDefs: ColumnGroupingPlugin.GroupDefinitions|null): void;
47
+ public getGroupDefinition(groupId: string): ColumnGroupingPlugin.GroupDefinition|null;
48
48
 
49
49
  public getGroupDefinitions(): ColumnGroupingPlugin.GroupDefinitions;
50
50
 
51
51
  public setGroupDefinition(groupId: string, newDef: ColumnGroupingPlugin.GroupDefinition|null): void;
52
52
 
53
- public getGroupDefinition(groupId: string): ColumnGroupingPlugin.GroupDefinition|null;
53
+ public setGroupDefinitions(groupDefs: ColumnGroupingPlugin.GroupDefinitions|null): void;
54
54
 
55
55
  public setGroupChildren(groupId: string, newChildList: (string)[]|null): void;
56
56
 
@@ -113,6 +113,34 @@ ColumnGroupingPlugin._getTooltip = function (groupingOptions) {
113
113
  }
114
114
  return title;
115
115
  };
116
+ /** @private
117
+ * @function
118
+ * @param {Object} groupDef
119
+ * @return {boolean}
120
+ */
121
+ ColumnGroupingPlugin._isValidGroup = function (groupDef) {
122
+ if (groupDef) {
123
+ if (groupDef.id) {
124
+ return true;
125
+ }
126
+ }
127
+ return false;
128
+ };
129
+ /** @private
130
+ * @function
131
+ * @param {Object} obj
132
+ * @return {Object}
133
+ */
134
+ ColumnGroupingPlugin._cloneObject = function (obj) {
135
+ var newObj = cloneObject(obj);
136
+ if (Array.isArray(newObj.children)) {
137
+ newObj.children = newObj.children;
138
+ } else {
139
+ newObj.children = [];
140
+ }
141
+ return newObj;
142
+ };
143
+
116
144
  /** @public
117
145
  * @return {string}
118
146
  */
@@ -219,8 +247,8 @@ ColumnGroupingPlugin.prototype.config = function (options) {
219
247
  }
220
248
  var extOptions = options["columnGrouping"];
221
249
  if (Array.isArray(extOptions)) {
222
- var groupDefs = extOptions.map(ColumnGroupingPlugin._cloneObject);
223
- this._groupDefs = groupDefs.filter(ColumnGroupingPlugin._isValidGroup);
250
+ var groupDefs = extOptions.filter(ColumnGroupingPlugin._isValidGroup);
251
+ this._groupDefs = groupDefs.map(ColumnGroupingPlugin._cloneObject);
224
252
  }
225
253
  var columns = options["columns"];
226
254
  if (!columns) {
@@ -243,8 +271,10 @@ ColumnGroupingPlugin.prototype.getConfigObject = function (gridOptions) {
243
271
  var obj = gridOptions || {};
244
272
 
245
273
  // TODO: Handle legacyRender method that has been migrated
246
- var columnGroupingDefs = this.getGroupDefinitions();
247
- obj.columnGrouping = columnGroupingDefs;
274
+ var groupDefs = this.getGroupDefinitions();
275
+ if (groupDefs.length) {
276
+ obj.columnGrouping = groupDefs;
277
+ }
248
278
  return obj;
249
279
  };
250
280
 
@@ -256,14 +286,6 @@ ColumnGroupingPlugin.prototype._setColumnGrouping = function (colIndex, data) {
256
286
  var colData = this._newColumnData(colIndex);
257
287
  colData["columnGrouping"] = data;
258
288
  };
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
289
  /** Legacy group structure from composite grid will be converted to the new structure
268
290
  * @private
269
291
  * @param {Object.<string, Array>} objMap
@@ -406,11 +428,12 @@ ColumnGroupingPlugin.prototype._evaluateGroupStructure = function () {
406
428
  // Create child to parent map
407
429
  var gid, children, member;
408
430
  for (gid in groupMap) {
409
- groupDef = groupMap[gid];
410
- children = groupDef.children;
411
- for (i = 0; i < children.length; i++) {
412
- member = children[i];
413
- childToParent[member] = gid;
431
+ children = this._getAvaliableChildren(gid);
432
+ if (children.length > 1) {
433
+ for (i = 0; i < children.length; i++) {
434
+ member = children[i];
435
+ childToParent[member] = gid;
436
+ }
414
437
  }
415
438
  }
416
439
 
@@ -424,7 +447,7 @@ ColumnGroupingPlugin.prototype._evaluateGroupStructure = function () {
424
447
  }
425
448
  }
426
449
 
427
- // Filter invisible groups out
450
+ // Filter out groups that are invisible
428
451
  var rootGroup = [];
429
452
  for (gid in visibleGroupMap) {
430
453
  groupDef = visibleGroupMap[gid];
@@ -820,19 +843,7 @@ ColumnGroupingPlugin.prototype._onColumnRemoved = function (e) {
820
843
  var colId = colData.columnGrouping.id;
821
844
  var groupId = this._childToParent[colId];
822
845
  if (groupId) {
823
- var groupDef = this._groupMap[groupId];
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
- }
846
+ this._requestApplyGrouping();
836
847
  }
837
848
  }
838
849
  };
@@ -940,22 +951,51 @@ ColumnGroupingPlugin.prototype.addColumnToGroup = function (column, groupId, col
940
951
  }
941
952
  };
942
953
 
943
- /** Add new group definition to existing group structure. Inexisting or duplicate group id is not allowed
954
+ /** Remove each child from another group
955
+ * @private
956
+ * @param {Array.<string>} children
957
+ */
958
+ ColumnGroupingPlugin.prototype._ungroupChildren = function (children) {
959
+ if (Array.isArray(children) && children.length) {
960
+ var childToParent = this._childToParent;
961
+ var groupMap = this._groupMap;
962
+ var len = children.length;
963
+ var childId, parentId, groupDef, at;
964
+ for (var i = 0; i < len; i++) {
965
+ childId = children[i];
966
+ parentId = childToParent[childId];
967
+ if (parentId) {
968
+ groupDef = groupMap[parentId];
969
+ if (groupDef) {
970
+ at = groupDef.children.indexOf(childId);
971
+ if (at > -1) {
972
+ groupDef.children.splice(at, 1);
973
+ }
974
+ }
975
+ }
976
+ }
977
+ }
978
+ };
979
+
980
+ /** Add new group definition to existing group structure. Existing group with the same id will be replaced.
944
981
  * @public
945
982
  * @param {ColumnGroupingPlugin~GroupDefinition} groupDef Group definition object
946
- * @return {boolean} Return true if there is any change
983
+ * @return {string} Return group ID
947
984
  */
948
985
  ColumnGroupingPlugin.prototype.addGroup = function (groupDef) {
949
- if (groupDef && groupDef.id) {
950
- var curDef = this.getGroupDefinition(groupDef.id);
986
+ if (ColumnGroupingPlugin._isValidGroup(groupDef)) {
987
+ var curDef = this._groupMap[groupDef.id];
951
988
  if (!curDef) {
952
989
  var newGroupDef = ColumnGroupingPlugin._cloneObject(groupDef);
990
+ this._ungroupChildren(newGroupDef.children);
953
991
  this._groupDefs.push(newGroupDef);
954
992
  this._applyGrouping();
955
- return true;
993
+ } else {
994
+ this.setGroupDefinition(groupDef.id, groupDef);
956
995
  }
996
+ return groupDef.id;
957
997
  }
958
- return false;
998
+ return "";
959
999
  };
960
1000
  /** Deprecated. Use addGroup() method instead
961
1001
  * @deprecated
@@ -967,10 +1007,10 @@ ColumnGroupingPlugin.prototype.addGroup = function (groupDef) {
967
1007
  ColumnGroupingPlugin.prototype.addColumnGrouping = ColumnGroupingPlugin.prototype.addGroup;
968
1008
  /** @public
969
1009
  * @param {string} groupId
970
- * @return {Object} Return removed group definition object.
1010
+ * @return {ColumnGroupingPlugin~GroupDefinition} Return removed group definition object.
971
1011
  */
972
1012
  ColumnGroupingPlugin.prototype.removeGroup = function (groupId) {
973
- var curDef = this.getGroupDefinition(groupId);
1013
+ var curDef = this._groupMap[groupId];
974
1014
  if (curDef) {
975
1015
  var at = this._groupDefs.indexOf(curDef);
976
1016
  this._groupDefs.splice(at, 1);
@@ -979,61 +1019,39 @@ ColumnGroupingPlugin.prototype.removeGroup = function (groupId) {
979
1019
  return curDef;
980
1020
  };
981
1021
 
982
- /** Remove all existing group definitions and replace with the given definitions.
983
- * @public
984
- * @param {ColumnGroupingPlugin~GroupDefinitions} groupDefs Use null or empty array to remove all existing groups
985
- */
986
- ColumnGroupingPlugin.prototype.setGroupDefinitions = function (groupDefs) {
987
- if (Array.isArray(groupDefs)) {
988
- groupDefs = groupDefs.map(ColumnGroupingPlugin._cloneObject);
989
- groupDefs = groupDefs.filter(ColumnGroupingPlugin._isValidGroup);
990
- if (!groupDefs.length) {
991
- groupDefs = null;
992
- }
993
- } else {
994
- groupDefs = null;
995
- }
996
- if (groupDefs) {
997
- this._groupDefs = groupDefs;
998
- 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}
1022
+ /** @public
1023
+ * @param {string} groupId
1024
+ * @return {ColumnGroupingPlugin~GroupDefinition}
1008
1025
  */
1009
- ColumnGroupingPlugin._isValidGroup = function (groupDef) {
1010
- if (groupDef) {
1011
- if (groupDef.id) {
1012
- return true;
1026
+ ColumnGroupingPlugin.prototype.getGroupDefinition = function (groupId) {
1027
+ if (groupId) {
1028
+ // Check for group validility
1029
+ var groupDef = this._groupMap[groupId];
1030
+ if (!groupDef) {
1031
+ return null;
1013
1032
  }
1033
+ groupDef = ColumnGroupingPlugin._cloneObject(groupDef);
1034
+ var children = this._getAvaliableChildren(groupId);
1035
+ groupDef.children = children;
1036
+ return groupDef;
1014
1037
  }
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
- } else {
1027
- newObj.children = [];
1028
- }
1029
- return newObj;
1038
+ return null;
1030
1039
  };
1031
1040
  /** Get a shallow copy of all existing group definitions
1032
1041
  * @public
1033
1042
  * @return {!ColumnGroupingPlugin~GroupDefinitions}
1034
1043
  */
1035
1044
  ColumnGroupingPlugin.prototype.getGroupDefinitions = function () {
1036
- return this._groupDefs.slice();
1045
+ var validGroupDefs = [];
1046
+ var len = this._groupDefs.length;
1047
+ var groupDef;
1048
+ for (var i = 0; i < len; i++) {
1049
+ groupDef = this.getGroupDefinition(this._groupDefs[i].id);
1050
+ if (groupDef && groupDef.children.length > 1) {
1051
+ validGroupDefs.push(groupDef);
1052
+ }
1053
+ }
1054
+ return validGroupDefs;
1037
1055
  };
1038
1056
  /** Replace and update existing group definition. Existing group id will not be modified
1039
1057
  * @public
@@ -1041,24 +1059,40 @@ ColumnGroupingPlugin.prototype.getGroupDefinitions = function () {
1041
1059
  * @param {ColumnGroupingPlugin~GroupDefinition} newDef
1042
1060
  */
1043
1061
  ColumnGroupingPlugin.prototype.setGroupDefinition = function (groupId, newDef) {
1044
- var curDef = this.getGroupDefinition(groupId);
1062
+ if (!groupId) {
1063
+ return;
1064
+ }
1065
+ var curDef = this._groupMap[groupId];
1045
1066
  if (curDef) {
1046
- var at = this._groupDefs.indexOf(curDef);
1047
1067
  newDef = ColumnGroupingPlugin._cloneObject(newDef);
1048
1068
  newDef.id = groupId;
1069
+ this._ungroupChildren(newDef.children);
1070
+ var at = this._groupDefs.indexOf(curDef);
1049
1071
  this._groupDefs[at] = newDef;
1050
1072
  this._applyGrouping();
1051
1073
  }
1052
1074
  };
1053
- /** @public
1054
- * @param {string} groupId
1055
- * @return {ColumnGroupingPlugin~GroupDefinition}
1075
+ /** Remove all existing group definitions and replace with the given definitions.
1076
+ * @public
1077
+ * @param {ColumnGroupingPlugin~GroupDefinitions} groupDefs Use null or empty array to remove all existing groups
1056
1078
  */
1057
- ColumnGroupingPlugin.prototype.getGroupDefinition = function (groupId) {
1058
- if (groupId) {
1059
- return this._groupMap[groupId] || null;
1079
+ ColumnGroupingPlugin.prototype.setGroupDefinitions = function (groupDefs) {
1080
+ if (Array.isArray(groupDefs)) {
1081
+ groupDefs = groupDefs.filter(ColumnGroupingPlugin._isValidGroup);
1082
+ groupDefs = groupDefs.map(ColumnGroupingPlugin._cloneObject);
1083
+ if (!groupDefs.length) {
1084
+ groupDefs = null;
1085
+ }
1086
+ } else {
1087
+ groupDefs = null;
1088
+ }
1089
+ if (groupDefs) {
1090
+ this._groupDefs = groupDefs;
1091
+ this._applyGrouping();
1092
+ } else {
1093
+ this._groupDefs = [];
1094
+ this._applyGrouping();
1060
1095
  }
1061
- return null;
1062
1096
  };
1063
1097
  /** Replace and update existing group definition.
1064
1098
  * @public
@@ -1066,10 +1100,11 @@ ColumnGroupingPlugin.prototype.getGroupDefinition = function (groupId) {
1066
1100
  * @param {Array.<string>} newChildList If null is given, all existing children in the group will be removed
1067
1101
  */
1068
1102
  ColumnGroupingPlugin.prototype.setGroupChildren = function (groupId, newChildList) {
1069
- var groupDef = this.getGroupDefinition(groupId);
1103
+ var groupDef = this._groupMap[groupId];
1070
1104
  if (groupDef) {
1071
1105
  if (Array.isArray(newChildList)) {
1072
1106
  groupDef.aaa = 0; // TODO: for testing, need to be removed
1107
+ this._ungroupChildren(newChildList);
1073
1108
  groupDef.children = newChildList.slice();
1074
1109
  this._applyGrouping();
1075
1110
  } else if (!newChildList && groupDef.children.length) {
@@ -1078,14 +1113,36 @@ ColumnGroupingPlugin.prototype.setGroupChildren = function (groupId, newChildLis
1078
1113
  }
1079
1114
  }
1080
1115
  };
1116
+ /** @private
1117
+ * @param {string} groupId
1118
+ * @return {!Array.<string>}
1119
+ */
1120
+ ColumnGroupingPlugin.prototype._getAvaliableChildren = function (groupId) {
1121
+ var groupDef = this._groupMap[groupId];
1122
+ var validChildren = [];
1123
+ if (groupDef) {
1124
+ // Filter out columns that do not exist
1125
+ var groupMap = this._groupMap;
1126
+ var children = groupDef.children;
1127
+ var childId;
1128
+ for (var i = 0; i < children.length; i++) {
1129
+ childId = children[i];
1130
+ if (groupMap[childId] || this.getColumnIndex(childId) > -1) {
1131
+ validChildren.push(childId);
1132
+ }
1133
+ }
1134
+ }
1135
+ return validChildren;
1136
+ };
1137
+
1081
1138
  /** @public
1082
1139
  * @param {string} groupId
1083
1140
  * @return {Array.<string>}
1084
1141
  */
1085
1142
  ColumnGroupingPlugin.prototype.getGroupChildren = function (groupId) {
1086
- var groupDef = this.getGroupDefinition(groupId);
1087
- if (groupDef) {
1088
- return groupDef.children;
1143
+ var children = this._getAvaliableChildren(groupId);
1144
+ if (children.length > 1) {
1145
+ return children;
1089
1146
  }
1090
1147
  return null;
1091
1148
  };
@@ -1164,14 +1221,17 @@ ColumnGroupingPlugin.prototype.getGroupLevel = function (groupId) {
1164
1221
  /** @private
1165
1222
  * @param {Object.<string, ColumnGroupingPlugin~GroupDefinition>} groupMap
1166
1223
  * @param {ColumnGroupingPlugin~GroupDefinition} group Group definition
1167
- * @param {Array=} members
1224
+ * @param {Array.<string>=} members
1168
1225
  * @return {Array.<string>}
1169
1226
  */
1170
1227
  ColumnGroupingPlugin.prototype._getGroupMembers = function (groupMap, group, members) {
1171
1228
  if (!members) {
1172
1229
  members = [];
1173
1230
  }
1174
- var children = group.children;
1231
+ var children = this._getAvaliableChildren(group.id);
1232
+ if (children.length < 2) {
1233
+ return members;
1234
+ }
1175
1235
  var g, id;
1176
1236
  for (var i = 0; i < children.length; i++) {
1177
1237
  id = children[i];
@@ -1311,7 +1371,7 @@ ColumnGroupingPlugin.prototype.moveColumnIntoGroup = function (colRef, to, group
1311
1371
  if (fromIndex == -1) {
1312
1372
  return;
1313
1373
  }
1314
- var groupDef = this.getGroupDefinition(groupId);
1374
+ var groupDef = this._groupMap[groupId];
1315
1375
  if (!groupDef) {
1316
1376
  for (var j = this._hosts.length; --j >= 0;) {
1317
1377
  var grid = this._hosts[j];
@@ -1397,8 +1457,7 @@ ColumnGroupingPlugin.prototype.setColumnParent = function (colRef, groupId) {
1397
1457
  if (!api) {
1398
1458
  return;
1399
1459
  }
1400
- var grid = this._hosts[0];
1401
- var colCount = grid.getColumnCount();
1460
+ var colCount = this.getColumnCount();
1402
1461
  var toIndex = -1;
1403
1462
  var childIndices = this.getChildColumnIndices(groupId);
1404
1463
 
@@ -260,7 +260,6 @@ ColumnResizingPlugin.prototype.initialize = function (host, options) {
260
260
  this.config(options);
261
261
  ColumnResizingPlugin._applyStyles(host);
262
262
  this._updateResizerCount(host);
263
- this._updateResizeHitBoxPosition(host);
264
263
  };
265
264
  /** @public
266
265
  * @param {Object} host core grid object
@@ -432,7 +431,7 @@ ColumnResizingPlugin.prototype.disableResizing = function(colIndex, opt_disabled
432
431
  colData["noResizing"] = opt_disabled !== false;
433
432
 
434
433
  for(var i = this._hosts.length; --i >= 0;) {
435
- this._updateResizeHitBoxPosition(this._hosts[i], colIndex);
434
+ this._updateResizerCount(this._hosts[i]);
436
435
  }
437
436
  };
438
437
 
@@ -603,7 +602,6 @@ ColumnResizingPlugin.prototype._updateResizers = function () {
603
602
  for(var i = this._hosts.length; --i >= 0;) {
604
603
  var host = this._hosts[i];
605
604
  this._updateResizerCount(host);
606
- this._updateResizeHitBoxPosition(host, 0);
607
605
  }
608
606
  }
609
607
  };
@@ -881,7 +879,15 @@ ColumnResizingPlugin.prototype._updateResizerCount = function (host) {
881
879
  boxes = col._resizers = [];
882
880
  }
883
881
  for (var j = 0; j < rowCount; j++) {
882
+ var disabled = false;
884
883
  var cell = titleSect.getCell(c, j); // TODO: This can be optimized
884
+ var cellColSpan = titleSect.getCellColSpan(c, j);
885
+ if(cellColSpan){
886
+ var lastSpanCol = c + cellColSpan - 1;
887
+ disabled = this._getColumnOption(lastSpanCol, "noResizing");
888
+ } else {
889
+ disabled = this._getColumnOption(c, "noResizing");
890
+ }
885
891
  var box = cell._resizer;
886
892
  if (!box) {
887
893
  box = this._newResizer();
@@ -890,6 +896,8 @@ ColumnResizingPlugin.prototype._updateResizerCount = function (host) {
890
896
  cellElem.insertBefore(box, cellElem.firstChild);
891
897
  boxes.push(box);
892
898
  }
899
+ box._disabled = disabled; // disabled is an internal flag
900
+ box.style.display = (disabled) ? "none" : "";
893
901
  }
894
902
  }
895
903
  }
@@ -913,40 +921,6 @@ ColumnResizingPlugin.prototype._newResizer = function (classStr) {
913
921
  return box;
914
922
  };
915
923
  /** @private
916
- * @param {Object} host core grid object
917
- * @param {number=} from
918
- */
919
- ColumnResizingPlugin.prototype._updateResizeHitBoxPosition = function (host, from) { // Slow
920
- if(this._hbMode || this._disabled) {
921
- return;
922
- }
923
-
924
- var titleSect = host.getSection("title");
925
- if(!titleSect) {
926
- return;
927
- }
928
-
929
- if(!from) {
930
- from = 0;
931
- }
932
-
933
- var titleSects = host.getAllSections("title");
934
- var colCount = host.getColumnCount();
935
- for (var i = 0; i < titleSects.length; i++) {
936
- titleSect = titleSects[i];
937
- for (var c = from; c < colCount; ++c) {
938
- var col = titleSect.getColumn(c);
939
- var disabled = this._getColumnOption(c, "noResizing");
940
- var boxes = col._resizers;
941
- for (var j = 0; j < boxes.length; j++) {
942
- var box = boxes[j];
943
- box._disabled = disabled; // disabled is an internal flag
944
- box.style.display = (disabled) ? "none" : "";
945
- }
946
- }
947
- }
948
- };
949
- /** @private
950
924
  * @param {Event} e
951
925
  * @return {Object} host, core grid object
952
926
  */