@refinitiv-ui/efx-grid 6.0.24 → 6.0.26
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/core/dist/core.css +1 -1
 - package/lib/core/dist/core.js +1331 -145
 - package/lib/core/dist/core.min.js +1 -1
 - package/lib/core/es6/grid/Core.d.ts +11 -0
 - package/lib/core/es6/grid/Core.js +81 -10
 - package/lib/core/es6/grid/util/ElementFrameWork.js +1 -1
 - package/lib/core/es6/tr-grid-theme.js +1 -1
 - package/lib/grid/index.js +1 -1
 - package/lib/rt-grid/dist/rt-grid.js +768 -53
 - package/lib/rt-grid/dist/rt-grid.min.js +1 -1
 - package/lib/rt-grid/es6/ColumnDefinition.js +1 -1
 - package/lib/rt-grid/es6/FieldDefinition.d.ts +2 -0
 - package/lib/rt-grid/es6/FieldDefinition.js +13 -2
 - package/lib/rt-grid/es6/Grid.d.ts +3 -1
 - package/lib/rt-grid/es6/Grid.js +83 -39
 - package/lib/rt-grid/es6/RowDefinition.d.ts +14 -1
 - package/lib/rt-grid/es6/RowDefinition.js +54 -2
 - package/lib/tr-grid-column-grouping/es6/ColumnGrouping.d.ts +3 -2
 - package/lib/tr-grid-column-grouping/es6/ColumnGrouping.js +314 -566
 - package/lib/tr-grid-column-selection/es6/ColumnSelection.d.ts +13 -11
 - package/lib/tr-grid-column-selection/es6/ColumnSelection.js +233 -81
 - package/lib/tr-grid-column-stack/es6/ColumnStack.d.ts +3 -3
 - package/lib/tr-grid-column-stack/es6/ColumnStack.js +50 -56
 - package/lib/tr-grid-in-cell-editing/es6/InCellEditing.js +21 -9
 - package/lib/tr-grid-range-bar/es6/RangeBar.d.ts +18 -9
 - package/lib/tr-grid-range-bar/es6/RangeBar.js +318 -139
 - package/lib/tr-grid-util/es6/GridPlugin.d.ts +1 -1
 - package/lib/tr-grid-util/es6/GridPlugin.js +13 -15
 - package/lib/tr-grid-util/es6/GroupDefinitions.d.ts +58 -0
 - package/lib/tr-grid-util/es6/GroupDefinitions.js +538 -0
 - package/lib/tr-grid-util/es6/Popup.js +1 -1
 - package/lib/tr-grid-util/es6/index.d.ts +2 -0
 - package/lib/tr-grid-util/es6/index.js +3 -0
 - package/lib/types/es6/ColumnGrouping.d.ts +3 -2
 - package/lib/types/es6/ColumnSelection.d.ts +13 -11
 - package/lib/types/es6/ColumnStack.d.ts +3 -3
 - package/lib/types/es6/Core/grid/Core.d.ts +11 -0
 - package/lib/types/es6/RealtimeGrid/FieldDefinition.d.ts +2 -0
 - package/lib/types/es6/RealtimeGrid/Grid.d.ts +3 -1
 - package/lib/types/es6/RealtimeGrid/RowDefinition.d.ts +14 -1
 - package/lib/types/es6/index.d.ts +1 -1
 - package/lib/versions.json +6 -6
 - package/package.json +1 -1
 
| 
         @@ -1,6 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            import { Ext } from "../../tr-grid-util/es6/Ext.js";
         
     | 
| 
       2 
2 
     | 
    
         
             
            import { cloneObject } from "../../tr-grid-util/es6/Util.js";
         
     | 
| 
       3 
3 
     | 
    
         
             
            import { GridPlugin } from "../../tr-grid-util/es6/GridPlugin.js";
         
     | 
| 
      
 4 
     | 
    
         
            +
            import { GroupDefinitions } from "../../tr-grid-util/es6/GroupDefinitions.js";
         
     | 
| 
       4 
5 
     | 
    
         
             
            import { injectCss, prettifyCss } from "../../tr-grid-util/es6/Util.js";
         
     | 
| 
       5 
6 
     | 
    
         | 
| 
       6 
7 
     | 
    
         
             
            /** @typedef {Array<ColumnGroupingPlugin~GroupDefinition>} ColumnGroupingPlugin~Options
         
     | 
| 
         @@ -16,7 +17,7 @@ import { injectCss, prettifyCss } from "../../tr-grid-util/es6/Util.js"; 
     | 
|
| 
       16 
17 
     | 
    
         
             
            * @property {string} id Group id
         
     | 
| 
       17 
18 
     | 
    
         
             
            * @property {string} name Display group name
         
     | 
| 
       18 
19 
     | 
    
         
             
            * @property {(boolean|string)=} tooltip=true Show tooltip in column's header
         
     | 
| 
       19 
     | 
    
         
            -
            * @property {Array 
     | 
| 
      
 20 
     | 
    
         
            +
            * @property {Array.<string>} children Child member in this group
         
     | 
| 
       20 
21 
     | 
    
         
             
            * @property {string=} alignment eg. left, center, right
         
     | 
| 
       21 
22 
     | 
    
         
             
            * @property {Function=} render render function handler
         
     | 
| 
       22 
23 
     | 
    
         
             
            */
         
     | 
| 
         @@ -35,9 +36,7 @@ var ColumnGroupingPlugin = function ColumnGroupingPlugin(options) { 
     | 
|
| 
       35 
36 
     | 
    
         
             
              t._requestApplyAddChildGroup = t._requestApplyAddChildGroup.bind(this);
         
     | 
| 
       36 
37 
     | 
    
         
             
              t._onPostSectionRender = t._onPostSectionRender.bind(t);
         
     | 
| 
       37 
38 
     | 
    
         
             
              t._onBeforeColumnBoundUpdate = t._onBeforeColumnBoundUpdate.bind(t);
         
     | 
| 
       38 
     | 
    
         
            -
              t._groupDefs =  
     | 
| 
       39 
     | 
    
         
            -
              t._groupMap = {};
         
     | 
| 
       40 
     | 
    
         
            -
              t._childToParent = {};
         
     | 
| 
      
 39 
     | 
    
         
            +
              t._groupDefs = new GroupDefinitions();
         
     | 
| 
       41 
40 
     | 
    
         
             
              if (options) {
         
     | 
| 
       42 
41 
     | 
    
         
             
                t.config({
         
     | 
| 
       43 
42 
     | 
    
         
             
                  "columnGrouping": options
         
     | 
| 
         @@ -46,21 +45,11 @@ var ColumnGroupingPlugin = function ColumnGroupingPlugin(options) { 
     | 
|
| 
       46 
45 
     | 
    
         
             
            };
         
     | 
| 
       47 
46 
     | 
    
         
             
            Ext.inherits(ColumnGroupingPlugin, GridPlugin);
         
     | 
| 
       48 
47 
     | 
    
         | 
| 
       49 
     | 
    
         
            -
            /** @type {! 
     | 
| 
       50 
     | 
    
         
            -
            * @description An array of group definition objects
         
     | 
| 
       51 
     | 
    
         
            -
            * @private
         
     | 
| 
       52 
     | 
    
         
            -
            */
         
     | 
| 
       53 
     | 
    
         
            -
            ColumnGroupingPlugin.prototype._groupDefs;
         
     | 
| 
       54 
     | 
    
         
            -
            /** @type {!Object.<string, ColumnGroupingPlugin~GroupDefinition>}
         
     | 
| 
      
 48 
     | 
    
         
            +
            /** @type {!GroupDefinitions}
         
     | 
| 
       55 
49 
     | 
    
         
             
            * @description A map of group id to group defintion
         
     | 
| 
       56 
50 
     | 
    
         
             
            * @private
         
     | 
| 
       57 
51 
     | 
    
         
             
            */
         
     | 
| 
       58 
     | 
    
         
            -
            ColumnGroupingPlugin.prototype. 
     | 
| 
       59 
     | 
    
         
            -
            /** @type {!Object.<string, string>}
         
     | 
| 
       60 
     | 
    
         
            -
            * @description A map of child id to parent id
         
     | 
| 
       61 
     | 
    
         
            -
            * @private
         
     | 
| 
       62 
     | 
    
         
            -
            */
         
     | 
| 
       63 
     | 
    
         
            -
            ColumnGroupingPlugin.prototype._childToParent;
         
     | 
| 
      
 52 
     | 
    
         
            +
            ColumnGroupingPlugin.prototype._groupDefs;
         
     | 
| 
       64 
53 
     | 
    
         
             
            /** @type {!Object.<string, ColumnGroupingPlugin~GroupDefinition>}
         
     | 
| 
       65 
54 
     | 
    
         
             
            * @description A map of visible group id to group defintion
         
     | 
| 
       66 
55 
     | 
    
         
             
            * @private
         
     | 
| 
         @@ -86,10 +75,14 @@ ColumnGroupingPlugin.prototype._rerenderTimerId = 0; 
     | 
|
| 
       86 
75 
     | 
    
         
             
            * @private
         
     | 
| 
       87 
76 
     | 
    
         
             
            */
         
     | 
| 
       88 
77 
     | 
    
         
             
            ColumnGroupingPlugin.prototype._addingTimerId = 0;
         
     | 
| 
       89 
     | 
    
         
            -
            /** @type {Array 
     | 
| 
      
 78 
     | 
    
         
            +
            /** @type {Array}
         
     | 
| 
       90 
79 
     | 
    
         
             
            * @private
         
     | 
| 
       91 
80 
     | 
    
         
             
            */
         
     | 
| 
       92 
81 
     | 
    
         
             
            ColumnGroupingPlugin.prototype._addingEvents = null;
         
     | 
| 
      
 82 
     | 
    
         
            +
            /** @type {Object}
         
     | 
| 
      
 83 
     | 
    
         
            +
            * @private
         
     | 
| 
      
 84 
     | 
    
         
            +
            */
         
     | 
| 
      
 85 
     | 
    
         
            +
            ColumnGroupingPlugin.prototype._legacyColumnGroups = null;
         
     | 
| 
       93 
86 
     | 
    
         | 
| 
       94 
87 
     | 
    
         
             
            /** @private
         
     | 
| 
       95 
88 
     | 
    
         
             
            * @param {number} a
         
     | 
| 
         @@ -122,7 +115,7 @@ ColumnGroupingPlugin._getTooltip = function (groupingOptions) { 
     | 
|
| 
       122 
115 
     | 
    
         
             
            * @param {Object} groupDef
         
     | 
| 
       123 
116 
     | 
    
         
             
            * @return {boolean}
         
     | 
| 
       124 
117 
     | 
    
         
             
            */
         
     | 
| 
       125 
     | 
    
         
            -
            ColumnGroupingPlugin. 
     | 
| 
      
 118 
     | 
    
         
            +
            ColumnGroupingPlugin._hasGroupId = function (groupDef) {
         
     | 
| 
       126 
119 
     | 
    
         
             
              if (groupDef) {
         
     | 
| 
       127 
120 
     | 
    
         
             
                if (groupDef.id) {
         
     | 
| 
       128 
121 
     | 
    
         
             
                  return true;
         
     | 
| 
         @@ -130,6 +123,7 @@ ColumnGroupingPlugin._isValidGroup = function (groupDef) { 
     | 
|
| 
       130 
123 
     | 
    
         
             
              }
         
     | 
| 
       131 
124 
     | 
    
         
             
              return false;
         
     | 
| 
       132 
125 
     | 
    
         
             
            };
         
     | 
| 
      
 126 
     | 
    
         
            +
             
     | 
| 
       133 
127 
     | 
    
         
             
            /** @private
         
     | 
| 
       134 
128 
     | 
    
         
             
            * @function
         
     | 
| 
       135 
129 
     | 
    
         
             
            * @param {Array|Object} obj
         
     | 
| 
         @@ -169,6 +163,43 @@ ColumnGroupingPlugin._cloneObject = function (obj) { 
     | 
|
| 
       169 
163 
     | 
    
         
             
              }
         
     | 
| 
       170 
164 
     | 
    
         
             
              return newObj;
         
     | 
| 
       171 
165 
     | 
    
         
             
            };
         
     | 
| 
      
 166 
     | 
    
         
            +
            /** Flatten tree structure to simple dictionary
         
     | 
| 
      
 167 
     | 
    
         
            +
            * @private
         
     | 
| 
      
 168 
     | 
    
         
            +
            * @function
         
     | 
| 
      
 169 
     | 
    
         
            +
            * @param {ColumnGroupingPlugin~GroupDefinitions} groupDefs
         
     | 
| 
      
 170 
     | 
    
         
            +
            */
         
     | 
| 
      
 171 
     | 
    
         
            +
            ColumnGroupingPlugin._flattenGroupDefs = function (groupDefs) {
         
     | 
| 
      
 172 
     | 
    
         
            +
              var grpCount = groupDefs ? groupDefs.length : 0;
         
     | 
| 
      
 173 
     | 
    
         
            +
              for (var i = 0; i < grpCount; i++) {
         
     | 
| 
      
 174 
     | 
    
         
            +
                ColumnGroupingPlugin._recursivelyFlatten(groupDefs[i], groupDefs);
         
     | 
| 
      
 175 
     | 
    
         
            +
              }
         
     | 
| 
      
 176 
     | 
    
         
            +
            };
         
     | 
| 
      
 177 
     | 
    
         
            +
            /** Flatten group definition structure by using group ID instead of nested group definitions.
         
     | 
| 
      
 178 
     | 
    
         
            +
            * @private
         
     | 
| 
      
 179 
     | 
    
         
            +
            * @function
         
     | 
| 
      
 180 
     | 
    
         
            +
            * @param {Object} groupDef
         
     | 
| 
      
 181 
     | 
    
         
            +
            * @param {Array} groupDefs
         
     | 
| 
      
 182 
     | 
    
         
            +
            */
         
     | 
| 
      
 183 
     | 
    
         
            +
            ColumnGroupingPlugin._recursivelyFlatten = function (groupDef, groupDefs) {
         
     | 
| 
      
 184 
     | 
    
         
            +
              if (groupDef && groupDef.children) {
         
     | 
| 
      
 185 
     | 
    
         
            +
                var children = groupDef.children;
         
     | 
| 
      
 186 
     | 
    
         
            +
                var member, groupId;
         
     | 
| 
      
 187 
     | 
    
         
            +
                for (var i = 0; i < children.length; i++) {
         
     | 
| 
      
 188 
     | 
    
         
            +
                  member = children[i];
         
     | 
| 
      
 189 
     | 
    
         
            +
                  if (typeof member !== "string") {
         
     | 
| 
      
 190 
     | 
    
         
            +
                    // member is nested group definition
         
     | 
| 
      
 191 
     | 
    
         
            +
                    groupId = member.id;
         
     | 
| 
      
 192 
     | 
    
         
            +
                    if (groupId) {
         
     | 
| 
      
 193 
     | 
    
         
            +
                      children[i] = groupId; // Use group ID instead of nested group definition
         
     | 
| 
      
 194 
     | 
    
         
            +
                      if (groupDefs.indexOf(member) < 0) {
         
     | 
| 
      
 195 
     | 
    
         
            +
                        groupDefs.push(member);
         
     | 
| 
      
 196 
     | 
    
         
            +
                      }
         
     | 
| 
      
 197 
     | 
    
         
            +
                      ColumnGroupingPlugin._recursivelyFlatten(member, groupDefs);
         
     | 
| 
      
 198 
     | 
    
         
            +
                    }
         
     | 
| 
      
 199 
     | 
    
         
            +
                  } // TODO: Invalid group is not flatten
         
     | 
| 
      
 200 
     | 
    
         
            +
                }
         
     | 
| 
      
 201 
     | 
    
         
            +
              }
         
     | 
| 
      
 202 
     | 
    
         
            +
            };
         
     | 
| 
       172 
203 
     | 
    
         | 
| 
       173 
204 
     | 
    
         
             
            /** @public
         
     | 
| 
       174 
205 
     | 
    
         
             
            * @return {string}
         
     | 
| 
         @@ -193,6 +224,9 @@ ColumnGroupingPlugin.prototype.initialize = function (host, options) { 
     | 
|
| 
       193 
224 
     | 
    
         
             
                return;
         
     | 
| 
       194 
225 
     | 
    
         
             
              }
         
     | 
| 
       195 
226 
     | 
    
         
             
              this._hosts.push(host);
         
     | 
| 
      
 227 
     | 
    
         
            +
              if (typeof host.setColumnGrouping === "function") {
         
     | 
| 
      
 228 
     | 
    
         
            +
                host.setColumnGrouping(this._groupDefs);
         
     | 
| 
      
 229 
     | 
    
         
            +
              }
         
     | 
| 
       196 
230 
     | 
    
         
             
              if (!this._addingEvents) {
         
     | 
| 
       197 
231 
     | 
    
         
             
                this._addingEvents = [];
         
     | 
| 
       198 
232 
     | 
    
         
             
              }
         
     | 
| 
         @@ -217,7 +251,6 @@ ColumnGroupingPlugin.prototype.initialize = function (host, options) { 
     | 
|
| 
       217 
251 
     | 
    
         
             
                host._columnGroupingStyles = true;
         
     | 
| 
       218 
252 
     | 
    
         
             
                injectCss(ColumnGroupingPlugin._styles, host.getElement());
         
     | 
| 
       219 
253 
     | 
    
         
             
              }
         
     | 
| 
       220 
     | 
    
         
            -
              // TODO: wrong render group in hide/show column
         
     | 
| 
       221 
254 
     | 
    
         
             
            };
         
     | 
| 
       222 
255 
     | 
    
         
             
            /** Prevent built-in config
         
     | 
| 
       223 
256 
     | 
    
         
             
            * @public
         
     | 
| 
         @@ -249,6 +282,9 @@ ColumnGroupingPlugin.prototype.unload = function (host) { 
     | 
|
| 
       249 
282 
     | 
    
         
             
                return;
         
     | 
| 
       250 
283 
     | 
    
         
             
              }
         
     | 
| 
       251 
284 
     | 
    
         
             
              this._hosts.splice(at, 1);
         
     | 
| 
      
 285 
     | 
    
         
            +
              if (typeof host.setColumnGrouping === "function") {
         
     | 
| 
      
 286 
     | 
    
         
            +
                host.setColumnGrouping(null);
         
     | 
| 
      
 287 
     | 
    
         
            +
              }
         
     | 
| 
       252 
288 
     | 
    
         
             
              host.unlisten("columnAdded", this._onColumnChanged);
         
     | 
| 
       253 
289 
     | 
    
         
             
              host.unlisten("columnMoved", this._onColumnMoved);
         
     | 
| 
       254 
290 
     | 
    
         
             
              host.unlisten("columnRemoved", this._onColumnRemoved);
         
     | 
| 
         @@ -275,22 +311,28 @@ ColumnGroupingPlugin.prototype.config = function (options) { 
     | 
|
| 
       275 
311 
     | 
    
         
             
                return;
         
     | 
| 
       276 
312 
     | 
    
         
             
              }
         
     | 
| 
       277 
313 
     | 
    
         
             
              var extOptions = options["columnGrouping"];
         
     | 
| 
      
 314 
     | 
    
         
            +
              var groupDefs = null;
         
     | 
| 
       278 
315 
     | 
    
         
             
              if (Array.isArray(extOptions)) {
         
     | 
| 
       279 
     | 
    
         
            -
                 
     | 
| 
       280 
     | 
    
         
            -
                 
     | 
| 
      
 316 
     | 
    
         
            +
                groupDefs = extOptions.filter(ColumnGroupingPlugin._hasGroupId);
         
     | 
| 
      
 317 
     | 
    
         
            +
                groupDefs = groupDefs.map(ColumnGroupingPlugin._cloneObject);
         
     | 
| 
       281 
318 
     | 
    
         
             
              }
         
     | 
| 
       282 
319 
     | 
    
         
             
              var columns = options["columns"];
         
     | 
| 
       283 
     | 
    
         
            -
              if ( 
     | 
| 
       284 
     | 
    
         
            -
                 
     | 
| 
      
 320 
     | 
    
         
            +
              if (columns) {
         
     | 
| 
      
 321 
     | 
    
         
            +
                var len = columns.length;
         
     | 
| 
      
 322 
     | 
    
         
            +
                for (var i = 0; i < len; ++i) {
         
     | 
| 
      
 323 
     | 
    
         
            +
                  var colData = this._newColumnData(i);
         
     | 
| 
      
 324 
     | 
    
         
            +
                  colData["columnGrouping"] = {
         
     | 
| 
      
 325 
     | 
    
         
            +
                    // used for columnRemoved event
         
     | 
| 
      
 326 
     | 
    
         
            +
                    id: columns[i].id // TODO: This does not work with runtime change
         
     | 
| 
      
 327 
     | 
    
         
            +
                  };
         
     | 
| 
      
 328 
     | 
    
         
            +
                }
         
     | 
| 
      
 329 
     | 
    
         
            +
             
     | 
| 
      
 330 
     | 
    
         
            +
                groupDefs = this._migrateLegacyStructure(groupDefs, options["columns"]);
         
     | 
| 
       285 
331 
     | 
    
         
             
              }
         
     | 
| 
       286 
     | 
    
         
            -
               
     | 
| 
       287 
     | 
    
         
            -
             
     | 
| 
       288 
     | 
    
         
            -
                this. 
     | 
| 
       289 
     | 
    
         
            -
                  id: columns[i].id
         
     | 
| 
       290 
     | 
    
         
            -
                }); // used for columnRemoved event
         
     | 
| 
      
 332 
     | 
    
         
            +
              if (groupDefs) {
         
     | 
| 
      
 333 
     | 
    
         
            +
                ColumnGroupingPlugin._flattenGroupDefs(groupDefs);
         
     | 
| 
      
 334 
     | 
    
         
            +
                this._groupDefs.setGroups(groupDefs);
         
     | 
| 
       291 
335 
     | 
    
         
             
              }
         
     | 
| 
       292 
     | 
    
         
            -
             
     | 
| 
       293 
     | 
    
         
            -
              this._migrateLegacyStructure(options["columns"]);
         
     | 
| 
       294 
336 
     | 
    
         
             
            };
         
     | 
| 
       295 
337 
     | 
    
         
             
            /** @public
         
     | 
| 
       296 
338 
     | 
    
         
             
            * @param {Object=} gridOptions
         
     | 
| 
         @@ -308,15 +350,6 @@ ColumnGroupingPlugin.prototype.getConfigObject = function (gridOptions) { 
     | 
|
| 
       308 
350 
     | 
    
         
             
            };
         
     | 
| 
       309 
351 
     | 
    
         | 
| 
       310 
352 
     | 
    
         
             
            /** @private
         
     | 
| 
       311 
     | 
    
         
            -
            * @param {number} colIndex
         
     | 
| 
       312 
     | 
    
         
            -
            * @param {Object} data
         
     | 
| 
       313 
     | 
    
         
            -
            */
         
     | 
| 
       314 
     | 
    
         
            -
            ColumnGroupingPlugin.prototype._setColumnGrouping = function (colIndex, data) {
         
     | 
| 
       315 
     | 
    
         
            -
              var colData = this._newColumnData(colIndex);
         
     | 
| 
       316 
     | 
    
         
            -
              colData["columnGrouping"] = data;
         
     | 
| 
       317 
     | 
    
         
            -
            };
         
     | 
| 
       318 
     | 
    
         
            -
            /** Legacy group structure from composite grid will be converted to the new structure
         
     | 
| 
       319 
     | 
    
         
            -
            * @private
         
     | 
| 
       320 
353 
     | 
    
         
             
            * @param {Object.<string, Array>} objMap
         
     | 
| 
       321 
354 
     | 
    
         
             
            * @param {string} parentId
         
     | 
| 
       322 
355 
     | 
    
         
             
            * @param {string} childId
         
     | 
| 
         @@ -335,13 +368,19 @@ ColumnGroupingPlugin._mapParentToChildren = function (objMap, parentId, childId) 
     | 
|
| 
       335 
368 
     | 
    
         
             
            };
         
     | 
| 
       336 
369 
     | 
    
         
             
            /** Legacy group structure from composite grid will be converted to the new structure
         
     | 
| 
       337 
370 
     | 
    
         
             
            * @private
         
     | 
| 
       338 
     | 
    
         
            -
            * @param { 
     | 
| 
      
 371 
     | 
    
         
            +
            * @param {ColumnGroupingPlugin~GroupDefinitions} groupDefs
         
     | 
| 
      
 372 
     | 
    
         
            +
            * @param {Array} colModels
         
     | 
| 
      
 373 
     | 
    
         
            +
            * @return {ColumnGroupingPlugin~GroupDefinitions}
         
     | 
| 
       339 
374 
     | 
    
         
             
            */
         
     | 
| 
       340 
     | 
    
         
            -
            ColumnGroupingPlugin.prototype._migrateLegacyStructure = function (colModels) {
         
     | 
| 
      
 375 
     | 
    
         
            +
            ColumnGroupingPlugin.prototype._migrateLegacyStructure = function (groupDefs, colModels) {
         
     | 
| 
       341 
376 
     | 
    
         
             
              var legacyColumnGroups = this._legacyColumnGroups;
         
     | 
| 
       342 
377 
     | 
    
         
             
              if (!legacyColumnGroups || !this._compositeGrid) {
         
     | 
| 
       343 
     | 
    
         
            -
                return;
         
     | 
| 
      
 378 
     | 
    
         
            +
                return groupDefs;
         
     | 
| 
       344 
379 
     | 
    
         
             
              }
         
     | 
| 
      
 380 
     | 
    
         
            +
              if (!groupDefs) {
         
     | 
| 
      
 381 
     | 
    
         
            +
                groupDefs = [];
         
     | 
| 
      
 382 
     | 
    
         
            +
              }
         
     | 
| 
      
 383 
     | 
    
         
            +
             
     | 
| 
       345 
384 
     | 
    
         
             
              // Collecting parent groups from col models (leaf node)
         
     | 
| 
       346 
385 
     | 
    
         
             
              var colCount = colModels.length;
         
     | 
| 
       347 
386 
     | 
    
         
             
              var groupMap = {}; // Parent-children pair map
         
     | 
| 
         @@ -373,10 +412,10 @@ ColumnGroupingPlugin.prototype._migrateLegacyStructure = function (colModels) { 
     | 
|
| 
       373 
412 
     | 
    
         
             
                    groupDef["legacyRender"] = groupDef["formatter"]["render"];
         
     | 
| 
       374 
413 
     | 
    
         
             
                    delete groupDef["formatter"];
         
     | 
| 
       375 
414 
     | 
    
         
             
                  }
         
     | 
| 
       376 
     | 
    
         
            -
                   
     | 
| 
      
 415 
     | 
    
         
            +
                  groupDefs.push(groupDef);
         
     | 
| 
       377 
416 
     | 
    
         
             
                }
         
     | 
| 
       378 
417 
     | 
    
         
             
              }
         
     | 
| 
       379 
     | 
    
         
            -
               
     | 
| 
      
 418 
     | 
    
         
            +
              return groupDefs.filter(ColumnGroupingPlugin._hasGroupId);
         
     | 
| 
       380 
419 
     | 
    
         
             
            };
         
     | 
| 
       381 
420 
     | 
    
         | 
| 
       382 
421 
     | 
    
         
             
            /** Consolidate and process configuration. Force rerendering on column adding, removing, moving, initializaing, and run-time API execution.
         
     | 
| 
         @@ -425,83 +464,27 @@ ColumnGroupingPlugin.prototype._applyGrouping = function () { 
     | 
|
| 
       425 
464 
     | 
    
         
             
                }
         
     | 
| 
       426 
465 
     | 
    
         
             
              }
         
     | 
| 
       427 
466 
     | 
    
         
             
            };
         
     | 
| 
      
 467 
     | 
    
         
            +
             
     | 
| 
       428 
468 
     | 
    
         
             
            /** @private
         
     | 
| 
       429 
469 
     | 
    
         
             
            */
         
     | 
| 
       430 
470 
     | 
    
         
             
            ColumnGroupingPlugin.prototype._evaluateGroupStructure = function () {
         
     | 
| 
       431 
     | 
    
         
            -
              //  
     | 
| 
       432 
     | 
    
         
            -
              var  
     | 
| 
       433 
     | 
    
         
            -
               
     | 
| 
       434 
     | 
    
         
            -
             
     | 
| 
       435 
     | 
    
         
            -
               
     | 
| 
       436 
     | 
    
         
            -
             
     | 
| 
       437 
     | 
    
         
            -
               
     | 
| 
       438 
     | 
    
         
            -
             
     | 
| 
       439 
     | 
    
         
            -
             
     | 
| 
       440 
     | 
    
         
            -
              var i;
         
     | 
| 
       441 
     | 
    
         
            -
              for (i = 0; i < len; i++) {
         
     | 
| 
       442 
     | 
    
         
            -
                this._flattenGroupDefs(groupDefs[i], groupDefs);
         
     | 
| 
       443 
     | 
    
         
            -
              }
         
     | 
| 
       444 
     | 
    
         
            -
             
     | 
| 
       445 
     | 
    
         
            -
              // Create group map
         
     | 
| 
       446 
     | 
    
         
            -
              var groupDef;
         
     | 
| 
       447 
     | 
    
         
            -
              len = groupDefs.length; // length can be changed after flattening
         
     | 
| 
       448 
     | 
    
         
            -
              for (i = 0; i < len; i++) {
         
     | 
| 
       449 
     | 
    
         
            -
                groupDef = groupDefs[i];
         
     | 
| 
       450 
     | 
    
         
            -
                groupMap[groupDef.id] = groupDef;
         
     | 
| 
       451 
     | 
    
         
            -
             
     | 
| 
       452 
     | 
    
         
            -
                // Clone group definitions for rendering
         
     | 
| 
       453 
     | 
    
         
            -
                visibleGroupMap[groupDef.id] = ColumnGroupingPlugin._cloneObject(groupDef);
         
     | 
| 
       454 
     | 
    
         
            -
                visibleGroupMap[groupDef.id].children = groupDef.children.slice();
         
     | 
| 
       455 
     | 
    
         
            -
              }
         
     | 
| 
       456 
     | 
    
         
            -
             
     | 
| 
       457 
     | 
    
         
            -
              // Create child to parent map
         
     | 
| 
       458 
     | 
    
         
            -
              var gid, children, member;
         
     | 
| 
       459 
     | 
    
         
            -
              for (gid in groupMap) {
         
     | 
| 
       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 
     | 
    
         
            -
                  }
         
     | 
| 
       466 
     | 
    
         
            -
                }
         
     | 
| 
       467 
     | 
    
         
            -
              }
         
     | 
| 
       468 
     | 
    
         
            -
             
     | 
| 
       469 
     | 
    
         
            -
              // Apply a parent id to group definition to make it easier to find depth
         
     | 
| 
       470 
     | 
    
         
            -
              var parentId;
         
     | 
| 
       471 
     | 
    
         
            -
              for (gid in visibleGroupMap) {
         
     | 
| 
       472 
     | 
    
         
            -
                parentId = childToParent[gid];
         
     | 
| 
      
 471 
     | 
    
         
            +
              // Clone group definitions for rendering
         
     | 
| 
      
 472 
     | 
    
         
            +
              var visibleGroupMap = this._visibleGroupMap = this._groupDefs.cloneGroupMap();
         
     | 
| 
      
 473 
     | 
    
         
            +
              this._verifySingleChild(visibleGroupMap);
         
     | 
| 
      
 474 
     | 
    
         
            +
             
     | 
| 
      
 475 
     | 
    
         
            +
              // Update depth (onRow) and parentId
         
     | 
| 
      
 476 
     | 
    
         
            +
              var maxDepth = this._maxDepth = -1;
         
     | 
| 
      
 477 
     | 
    
         
            +
              for (var groupId in visibleGroupMap) {
         
     | 
| 
      
 478 
     | 
    
         
            +
                var groupDef = visibleGroupMap[groupId];
         
     | 
| 
      
 479 
     | 
    
         
            +
                var parentId = groupDef.parentId;
         
     | 
| 
       473 
480 
     | 
    
         
             
                if (parentId) {
         
     | 
| 
       474 
     | 
    
         
            -
                  visibleGroupMap[ 
     | 
| 
       475 
     | 
    
         
            -
             
     | 
| 
       476 
     | 
    
         
            -
             
     | 
| 
       477 
     | 
    
         
            -
              }
         
     | 
| 
       478 
     | 
    
         
            -
             
     | 
| 
       479 
     | 
    
         
            -
              // Filter out groups that are invisible
         
     | 
| 
       480 
     | 
    
         
            -
              var rootGroup = [];
         
     | 
| 
       481 
     | 
    
         
            -
              for (gid in visibleGroupMap) {
         
     | 
| 
       482 
     | 
    
         
            -
                groupDef = visibleGroupMap[gid];
         
     | 
| 
       483 
     | 
    
         
            -
                if (this._findGroupTreeDepth(groupDef, 1) === 1) {
         
     | 
| 
       484 
     | 
    
         
            -
                  rootGroup.push(groupDef);
         
     | 
| 
      
 481 
     | 
    
         
            +
                  if (!visibleGroupMap[parentId]) {
         
     | 
| 
      
 482 
     | 
    
         
            +
                    groupDef.parentId = ""; // Parent has been removed from visible view
         
     | 
| 
      
 483 
     | 
    
         
            +
                  }
         
     | 
| 
       485 
484 
     | 
    
         
             
                }
         
     | 
| 
       486 
     | 
    
         
            -
              }
         
     | 
| 
       487 
     | 
    
         
            -
              len = rootGroup.length;
         
     | 
| 
       488 
     | 
    
         
            -
              for (i = 0; i < len; i++) {
         
     | 
| 
       489 
     | 
    
         
            -
                this._verifySingleChild(rootGroup[i]);
         
     | 
| 
       490 
     | 
    
         
            -
              }
         
     | 
| 
       491 
485 
     | 
    
         | 
| 
       492 
     | 
    
         
            -
             
     | 
| 
       493 
     | 
    
         
            -
             
     | 
| 
       494 
     | 
    
         
            -
              for (gid in visibleGroupMap) {
         
     | 
| 
       495 
     | 
    
         
            -
                groupDef = visibleGroupMap[gid];
         
     | 
| 
       496 
     | 
    
         
            -
                depth = this._findGroupTreeDepth(groupDef, 1);
         
     | 
| 
       497 
     | 
    
         
            -
                groupDef["onRow"] = depth - 1;
         
     | 
| 
       498 
     | 
    
         
            -
              }
         
     | 
| 
       499 
     | 
    
         
            -
             
     | 
| 
       500 
     | 
    
         
            -
              // Calculate the maximum depth
         
     | 
| 
       501 
     | 
    
         
            -
              var maxDepth = -1;
         
     | 
| 
       502 
     | 
    
         
            -
              for (gid in visibleGroupMap) {
         
     | 
| 
       503 
     | 
    
         
            -
                groupDef = visibleGroupMap[gid];
         
     | 
| 
       504 
     | 
    
         
            -
                depth = groupDef["onRow"];
         
     | 
| 
      
 486 
     | 
    
         
            +
                var depth = GroupDefinitions.calcTreeDepth(visibleGroupMap, groupDef);
         
     | 
| 
      
 487 
     | 
    
         
            +
                groupDef["onRow"] = depth;
         
     | 
| 
       505 
488 
     | 
    
         
             
                if (depth > maxDepth) {
         
     | 
| 
       506 
489 
     | 
    
         
             
                  maxDepth = depth;
         
     | 
| 
       507 
490 
     | 
    
         
             
                }
         
     | 
| 
         @@ -509,88 +492,59 @@ ColumnGroupingPlugin.prototype._evaluateGroupStructure = function () { 
     | 
|
| 
       509 
492 
     | 
    
         
             
              this._maxDepth = maxDepth + 1; // Column header depth = maximum group depth + 1
         
     | 
| 
       510 
493 
     | 
    
         
             
            };
         
     | 
| 
       511 
494 
     | 
    
         | 
| 
       512 
     | 
    
         
            -
            /**  
     | 
| 
       513 
     | 
    
         
            -
            * 
     | 
| 
       514 
     | 
    
         
            -
            * @param {Object} groupDef
         
     | 
| 
       515 
     | 
    
         
            -
            * @param {Array} groupDefs
         
     | 
| 
      
 495 
     | 
    
         
            +
            /** @private
         
     | 
| 
      
 496 
     | 
    
         
            +
            * @param {Object} groupMap
         
     | 
| 
       516 
497 
     | 
    
         
             
            */
         
     | 
| 
       517 
     | 
    
         
            -
            ColumnGroupingPlugin.prototype. 
     | 
| 
       518 
     | 
    
         
            -
               
     | 
| 
       519 
     | 
    
         
            -
             
     | 
| 
       520 
     | 
    
         
            -
                 
     | 
| 
       521 
     | 
    
         
            -
             
     | 
| 
       522 
     | 
    
         
            -
             
     | 
| 
       523 
     | 
    
         
            -
             
     | 
| 
       524 
     | 
    
         
            -
             
     | 
| 
       525 
     | 
    
         
            -
             
     | 
| 
       526 
     | 
    
         
            -
             
     | 
| 
       527 
     | 
    
         
            -
             
     | 
| 
       528 
     | 
    
         
            -
             
     | 
| 
       529 
     | 
    
         
            -
             
     | 
| 
       530 
     | 
    
         
            -
             
     | 
| 
       531 
     | 
    
         
            -
             
     | 
| 
       532 
     | 
    
         
            -
             
     | 
| 
       533 
     | 
    
         
            -
                  } // TODO: Invalid group is not flatten
         
     | 
| 
      
 498 
     | 
    
         
            +
            ColumnGroupingPlugin.prototype._verifySingleChild = function (groupMap) {
         
     | 
| 
      
 499 
     | 
    
         
            +
              var api = this.getGridApi();
         
     | 
| 
      
 500 
     | 
    
         
            +
              if (!api) {
         
     | 
| 
      
 501 
     | 
    
         
            +
                return;
         
     | 
| 
      
 502 
     | 
    
         
            +
              }
         
     | 
| 
      
 503 
     | 
    
         
            +
              var core = this._hosts[0];
         
     | 
| 
      
 504 
     | 
    
         
            +
              var colCount = this.getColumnCount();
         
     | 
| 
      
 505 
     | 
    
         
            +
              var validIds = {};
         
     | 
| 
      
 506 
     | 
    
         
            +
              var i, j;
         
     | 
| 
      
 507 
     | 
    
         
            +
              // initialize a map for all valid and hidden ids of groups and columns
         
     | 
| 
      
 508 
     | 
    
         
            +
              for (i = 0; i < colCount; i++) {
         
     | 
| 
      
 509 
     | 
    
         
            +
                var colId = this.getColumnId(i);
         
     | 
| 
      
 510 
     | 
    
         
            +
                if (colId) {
         
     | 
| 
      
 511 
     | 
    
         
            +
                  if (core.isColumnVisible(i)) {
         
     | 
| 
      
 512 
     | 
    
         
            +
                    validIds[colId] = 1;
         
     | 
| 
      
 513 
     | 
    
         
            +
                  }
         
     | 
| 
       534 
514 
     | 
    
         
             
                }
         
     | 
| 
       535 
515 
     | 
    
         
             
              }
         
     | 
| 
       536 
     | 
    
         
            -
             
     | 
| 
       537 
     | 
    
         
            -
             
     | 
| 
       538 
     | 
    
         
            -
             
     | 
| 
       539 
     | 
    
         
            -
             
     | 
| 
       540 
     | 
    
         
            -
            * @param {number} currentDepth
         
     | 
| 
       541 
     | 
    
         
            -
            * @return {number}
         
     | 
| 
       542 
     | 
    
         
            -
            */
         
     | 
| 
       543 
     | 
    
         
            -
            ColumnGroupingPlugin.prototype._findGroupTreeDepth = function (groupDef, currentDepth) {
         
     | 
| 
       544 
     | 
    
         
            -
              var parentId = groupDef["parent"];
         
     | 
| 
       545 
     | 
    
         
            -
              var parentNode = this._visibleGroupMap[parentId];
         
     | 
| 
       546 
     | 
    
         
            -
              if (parentNode) {
         
     | 
| 
       547 
     | 
    
         
            -
                return this._findGroupTreeDepth(parentNode, currentDepth + 1);
         
     | 
| 
       548 
     | 
    
         
            -
              } else {
         
     | 
| 
       549 
     | 
    
         
            -
                return currentDepth;
         
     | 
| 
      
 516 
     | 
    
         
            +
              var groupIds = Object.keys(groupMap);
         
     | 
| 
      
 517 
     | 
    
         
            +
              var groupCount = groupIds.length;
         
     | 
| 
      
 518 
     | 
    
         
            +
              for (i = 0; i < groupCount; i++) {
         
     | 
| 
      
 519 
     | 
    
         
            +
                validIds[groupIds[i]] = 1;
         
     | 
| 
       550 
520 
     | 
    
         
             
              }
         
     | 
| 
       551 
     | 
    
         
            -
             
     | 
| 
       552 
     | 
    
         
            -
             
     | 
| 
       553 
     | 
    
         
            -
             
     | 
| 
       554 
     | 
    
         
            -
             
     | 
| 
       555 
     | 
    
         
            -
             
     | 
| 
       556 
     | 
    
         
            -
             
     | 
| 
       557 
     | 
    
         
            -
             
     | 
| 
       558 
     | 
    
         
            -
             
     | 
| 
       559 
     | 
    
         
            -
              var visibleChildCount = 0;
         
     | 
| 
       560 
     | 
    
         
            -
              var visibleChildGroupCount = 0;
         
     | 
| 
       561 
     | 
    
         
            -
              var invisibleMembers = [];
         
     | 
| 
       562 
     | 
    
         
            -
              var i, member;
         
     | 
| 
       563 
     | 
    
         
            -
              for (i = 0; i < children.length; i++) {
         
     | 
| 
       564 
     | 
    
         
            -
                member = children[i];
         
     | 
| 
       565 
     | 
    
         
            -
                if (this._visibleGroupMap[member]) {
         
     | 
| 
       566 
     | 
    
         
            -
                  if (this._verifySingleChild(this._visibleGroupMap[member])) {
         
     | 
| 
       567 
     | 
    
         
            -
                    ++visibleChildCount;
         
     | 
| 
       568 
     | 
    
         
            -
                    ++visibleChildGroupCount;
         
     | 
| 
       569 
     | 
    
         
            -
                  } else {
         
     | 
| 
       570 
     | 
    
         
            -
                    invisibleMembers.push(member);
         
     | 
| 
      
 521 
     | 
    
         
            +
              var removable = true;
         
     | 
| 
      
 522 
     | 
    
         
            +
              while (removable) {
         
     | 
| 
      
 523 
     | 
    
         
            +
                removable = false;
         
     | 
| 
      
 524 
     | 
    
         
            +
                for (i = 0; i < groupCount; i++) {
         
     | 
| 
      
 525 
     | 
    
         
            +
                  var groupId = groupIds[i];
         
     | 
| 
      
 526 
     | 
    
         
            +
                  var group = groupMap[groupId];
         
     | 
| 
      
 527 
     | 
    
         
            +
                  if (!group) {
         
     | 
| 
      
 528 
     | 
    
         
            +
                    continue;
         
     | 
| 
       571 
529 
     | 
    
         
             
                  }
         
     | 
| 
       572 
     | 
    
         
            -
             
     | 
| 
       573 
     | 
    
         
            -
                   
     | 
| 
       574 
     | 
    
         
            -
             
     | 
| 
      
 530 
     | 
    
         
            +
                  var children = group["children"];
         
     | 
| 
      
 531 
     | 
    
         
            +
                  var childCount = children.length;
         
     | 
| 
      
 532 
     | 
    
         
            +
                  var validChildren = [];
         
     | 
| 
      
 533 
     | 
    
         
            +
                  for (j = 0; j < childCount; j++) {
         
     | 
| 
      
 534 
     | 
    
         
            +
                    var child = children[j];
         
     | 
| 
      
 535 
     | 
    
         
            +
                    if (validIds[child]) {
         
     | 
| 
      
 536 
     | 
    
         
            +
                      validChildren.push(child);
         
     | 
| 
      
 537 
     | 
    
         
            +
                    }
         
     | 
| 
      
 538 
     | 
    
         
            +
                  }
         
     | 
| 
      
 539 
     | 
    
         
            +
                  if (validChildren.length < 2) {
         
     | 
| 
      
 540 
     | 
    
         
            +
                    delete groupMap[groupId];
         
     | 
| 
      
 541 
     | 
    
         
            +
                    validIds[groupId] = 0;
         
     | 
| 
      
 542 
     | 
    
         
            +
                    removable = true;
         
     | 
| 
       575 
543 
     | 
    
         
             
                  } else {
         
     | 
| 
       576 
     | 
    
         
            -
                     
     | 
| 
      
 544 
     | 
    
         
            +
                    group.children = validChildren;
         
     | 
| 
       577 
545 
     | 
    
         
             
                  }
         
     | 
| 
       578 
546 
     | 
    
         
             
                }
         
     | 
| 
       579 
547 
     | 
    
         
             
              }
         
     | 
| 
       580 
     | 
    
         
            -
             
     | 
| 
       581 
     | 
    
         
            -
              // Remove invisible members, keep only visible members
         
     | 
| 
       582 
     | 
    
         
            -
              if (invisibleMembers.length) {
         
     | 
| 
       583 
     | 
    
         
            -
                for (i = 0; i < invisibleMembers.length; i++) {
         
     | 
| 
       584 
     | 
    
         
            -
                  member = invisibleMembers[i];
         
     | 
| 
       585 
     | 
    
         
            -
                  groupDef.children.splice(children.indexOf(member), 1);
         
     | 
| 
       586 
     | 
    
         
            -
                }
         
     | 
| 
       587 
     | 
    
         
            -
              }
         
     | 
| 
       588 
     | 
    
         
            -
              if (visibleChildCount > 1 || visibleChildGroupCount > 1) {
         
     | 
| 
       589 
     | 
    
         
            -
                return true;
         
     | 
| 
       590 
     | 
    
         
            -
              } else {
         
     | 
| 
       591 
     | 
    
         
            -
                delete this._visibleGroupMap[groupDef.id];
         
     | 
| 
       592 
     | 
    
         
            -
                return false;
         
     | 
| 
       593 
     | 
    
         
            -
              }
         
     | 
| 
       594 
548 
     | 
    
         
             
            };
         
     | 
| 
       595 
549 
     | 
    
         | 
| 
       596 
550 
     | 
    
         
             
            /** Set a timer to call applyGrouping only once to avoid performance issue
         
     | 
| 
         @@ -609,35 +563,52 @@ ColumnGroupingPlugin.prototype._applyNearestGrouping = function (colIndex) { 
     | 
|
| 
       609 
563 
     | 
    
         
             
              if (colIndex == null || colIndex < 0) {
         
     | 
| 
       610 
564 
     | 
    
         
             
                return;
         
     | 
| 
       611 
565 
     | 
    
         
             
              }
         
     | 
| 
      
 566 
     | 
    
         
            +
              var colId = this.getColumnId(colIndex);
         
     | 
| 
       612 
567 
     | 
    
         
             
              var colIndexLeft = colIndex - 1;
         
     | 
| 
       613 
568 
     | 
    
         
             
              var colIndexRight = colIndex + 1;
         
     | 
| 
       614 
569 
     | 
    
         
             
              var groupLeftIds = this.getGroupIds(colIndexLeft);
         
     | 
| 
       615 
570 
     | 
    
         
             
              var groupRightIds = this.getGroupIds(colIndexRight);
         
     | 
| 
       616 
     | 
    
         
            -
               
     | 
| 
       617 
     | 
    
         
            -
             
     | 
| 
       618 
     | 
    
         
            -
             
     | 
| 
       619 
     | 
    
         
            -
             
     | 
| 
       620 
     | 
    
         
            -
             
     | 
| 
      
 571 
     | 
    
         
            +
              var groupLeftCount = groupLeftIds ? groupLeftIds.length : 0;
         
     | 
| 
      
 572 
     | 
    
         
            +
              var groupRightCount = groupRightIds ? groupRightIds.length : 0;
         
     | 
| 
      
 573 
     | 
    
         
            +
              var parentId = this._groupDefs.getParentId(colId);
         
     | 
| 
      
 574 
     | 
    
         
            +
              if (parentId) {
         
     | 
| 
      
 575 
     | 
    
         
            +
                var chdr = this._groupDefs.getGroupChildren(parentId);
         
     | 
| 
      
 576 
     | 
    
         
            +
                var childCount = chdr ? chdr.length : 0;
         
     | 
| 
      
 577 
     | 
    
         
            +
                if (childCount <= 1) {
         
     | 
| 
      
 578 
     | 
    
         
            +
                  // If current column is only child in the group
         
     | 
| 
      
 579 
     | 
    
         
            +
                  return; // there is no need to put column into another group because its parent group will be moved along
         
     | 
| 
      
 580 
     | 
    
         
            +
                }
         
     | 
| 
      
 581 
     | 
    
         
            +
             
     | 
| 
      
 582 
     | 
    
         
            +
                // If current column has a group and stays close to its siblings, it stay in the same group
         
     | 
| 
      
 583 
     | 
    
         
            +
                if (groupLeftCount) {
         
     | 
| 
      
 584 
     | 
    
         
            +
                  if (groupLeftIds[0] === parentId) {
         
     | 
| 
       621 
585 
     | 
    
         
             
                    return;
         
     | 
| 
       622 
586 
     | 
    
         
             
                  }
         
     | 
| 
       623 
587 
     | 
    
         
             
                }
         
     | 
| 
       624 
     | 
    
         
            -
                 
     | 
| 
       625 
     | 
    
         
            -
             
     | 
| 
       626 
     | 
    
         
            -
             
     | 
| 
       627 
     | 
    
         
            -
                   
     | 
| 
       628 
     | 
    
         
            -
             
     | 
| 
       629 
     | 
    
         
            -
             
     | 
| 
       630 
     | 
    
         
            -
             
     | 
| 
       631 
     | 
    
         
            -
             
     | 
| 
       632 
     | 
    
         
            -
             
     | 
| 
       633 
     | 
    
         
            -
             
     | 
| 
       634 
     | 
    
         
            -
             
     | 
| 
       635 
     | 
    
         
            -
             
     | 
| 
       636 
     | 
    
         
            -
             
     | 
| 
      
 588 
     | 
    
         
            +
                if (groupRightCount) {
         
     | 
| 
      
 589 
     | 
    
         
            +
                  if (groupRightIds[0] === parentId) {
         
     | 
| 
      
 590 
     | 
    
         
            +
                    return;
         
     | 
| 
      
 591 
     | 
    
         
            +
                  }
         
     | 
| 
      
 592 
     | 
    
         
            +
                }
         
     | 
| 
      
 593 
     | 
    
         
            +
                // The current column is no longer close to its parent
         
     | 
| 
      
 594 
     | 
    
         
            +
                if (this._groupDefs.removeGroupChild(colId)) {
         
     | 
| 
      
 595 
     | 
    
         
            +
                  chdr = this._groupDefs.getGroupChildren(parentId);
         
     | 
| 
      
 596 
     | 
    
         
            +
                  childCount = chdr ? chdr.length : 0;
         
     | 
| 
      
 597 
     | 
    
         
            +
                  if (childCount === 1) {
         
     | 
| 
      
 598 
     | 
    
         
            +
                    // If there is only one child left, move the remaning child to its parent
         
     | 
| 
      
 599 
     | 
    
         
            +
                    var grandParentId = this._groupDefs.getParentId(parentId);
         
     | 
| 
      
 600 
     | 
    
         
            +
                    if (grandParentId) {
         
     | 
| 
      
 601 
     | 
    
         
            +
                      this._groupDefs.addGroupChild(grandParentId, chdr[0]);
         
     | 
| 
       637 
602 
     | 
    
         
             
                    }
         
     | 
| 
       638 
603 
     | 
    
         
             
                  }
         
     | 
| 
       639 
     | 
    
         
            -
             
     | 
| 
       640 
     | 
    
         
            -
             
     | 
| 
      
 604 
     | 
    
         
            +
                }
         
     | 
| 
      
 605 
     | 
    
         
            +
              }
         
     | 
| 
      
 606 
     | 
    
         
            +
              if (groupLeftCount && groupRightCount) {
         
     | 
| 
      
 607 
     | 
    
         
            +
                for (var i = 0; i < groupLeftCount; i++) {
         
     | 
| 
      
 608 
     | 
    
         
            +
                  var groupLeftId = groupLeftIds[i];
         
     | 
| 
      
 609 
     | 
    
         
            +
                  var sharedParentIdx = groupRightIds.indexOf(groupLeftId);
         
     | 
| 
      
 610 
     | 
    
         
            +
                  if (sharedParentIdx >= 0) {
         
     | 
| 
      
 611 
     | 
    
         
            +
                    this._groupDefs.addGroupChild(groupRightIds[sharedParentIdx], colId);
         
     | 
| 
       641 
612 
     | 
    
         
             
                    break;
         
     | 
| 
       642 
613 
     | 
    
         
             
                  }
         
     | 
| 
       643 
614 
     | 
    
         
             
                }
         
     | 
| 
         @@ -657,7 +628,7 @@ ColumnGroupingPlugin.prototype._spanGroupVertically = function (titleSection) { 
     | 
|
| 
       657 
628 
     | 
    
         
             
              var colCount = api.getColumnCount();
         
     | 
| 
       658 
629 
     | 
    
         
             
              for (var col = 0; col < colCount; col++) {
         
     | 
| 
       659 
630 
     | 
    
         
             
                var toSpan = rowCount;
         
     | 
| 
       660 
     | 
    
         
            -
                var parentNode = this. 
     | 
| 
      
 631 
     | 
    
         
            +
                var parentNode = this._getVisibleParentGroup(this.getColumnId(col));
         
     | 
| 
       661 
632 
     | 
    
         
             
                if (parentNode) {
         
     | 
| 
       662 
633 
     | 
    
         
             
                  var depth = parentNode["onRow"] + 1;
         
     | 
| 
       663 
634 
     | 
    
         
             
                  toSpan = rowCount - depth;
         
     | 
| 
         @@ -681,7 +652,7 @@ ColumnGroupingPlugin.prototype._spanGroupHorizontally = function (titleSection) 
     | 
|
| 
       681 
652 
     | 
    
         
             
              for (var id in visibleGroupMap) {
         
     | 
| 
       682 
653 
     | 
    
         
             
                spanIndices = [];
         
     | 
| 
       683 
654 
     | 
    
         
             
                groupDef = visibleGroupMap[id];
         
     | 
| 
       684 
     | 
    
         
            -
                colIds =  
     | 
| 
      
 655 
     | 
    
         
            +
                colIds = GroupDefinitions.getLeafDescendants(visibleGroupMap, id);
         
     | 
| 
       685 
656 
     | 
    
         
             
                for (i = 0; i < colIds.length; i++) {
         
     | 
| 
       686 
657 
     | 
    
         
             
                  index = this._getColumnIndexById(colIds[i]);
         
     | 
| 
       687 
658 
     | 
    
         
             
                  if (index > -1) {
         
     | 
| 
         @@ -755,9 +726,13 @@ ColumnGroupingPlugin.prototype._onPostSectionRender = function (e) { 
     | 
|
| 
       755 
726 
     | 
    
         
             
              * @param {Object} e dispatching of columnAdded event object
         
     | 
| 
       756 
727 
     | 
    
         
             
              */
         
     | 
| 
       757 
728 
     | 
    
         
             
            ColumnGroupingPlugin.prototype._requestApplyAddChildGroup = function (e) {
         
     | 
| 
       758 
     | 
    
         
            -
               
     | 
| 
       759 
     | 
    
         
            -
               
     | 
| 
       760 
     | 
    
         
            -
             
     | 
| 
      
 729 
     | 
    
         
            +
              var ctx = e.context;
         
     | 
| 
      
 730 
     | 
    
         
            +
              var tsParentDef = ctx ? ctx.parent : null;
         
     | 
| 
      
 731 
     | 
    
         
            +
              if (tsParentDef) {
         
     | 
| 
      
 732 
     | 
    
         
            +
                this._addingEvents.push(e);
         
     | 
| 
      
 733 
     | 
    
         
            +
                if (!this._addingTimerId) {
         
     | 
| 
      
 734 
     | 
    
         
            +
                  this._addingTimerId = setTimeout(this._applyTimeSeries.bind(this, e), 10);
         
     | 
| 
      
 735 
     | 
    
         
            +
                }
         
     | 
| 
       761 
736 
     | 
    
         
             
              }
         
     | 
| 
       762 
737 
     | 
    
         
             
            };
         
     | 
| 
       763 
738 
     | 
    
         | 
| 
         @@ -766,61 +741,40 @@ ColumnGroupingPlugin.prototype._requestApplyAddChildGroup = function (e) { 
     | 
|
| 
       766 
741 
     | 
    
         
             
              */
         
     | 
| 
       767 
742 
     | 
    
         
             
            ColumnGroupingPlugin.prototype._applyTimeSeries = function (e) {
         
     | 
| 
       768 
743 
     | 
    
         
             
              this._addingTimerId = 0; // clear timer
         
     | 
| 
       769 
     | 
    
         
            -
              var addingEvents = this._addingEvents 
     | 
| 
       770 
     | 
    
         
            -
             
     | 
| 
       771 
     | 
    
         
            -
              });
         
     | 
| 
       772 
     | 
    
         
            -
              this._addingEvents.length = 0; // clear conflation value
         
     | 
| 
       773 
     | 
    
         
            -
             
     | 
| 
       774 
     | 
    
         
            -
              var colIndex = e.colIndex;
         
     | 
| 
       775 
     | 
    
         
            -
              var i;
         
     | 
| 
      
 744 
     | 
    
         
            +
              var addingEvents = this._addingEvents;
         
     | 
| 
      
 745 
     | 
    
         
            +
              this._addingEvents = [];
         
     | 
| 
       776 
746 
     | 
    
         
             
              if (addingEvents.length > 0) {
         
     | 
| 
       777 
     | 
    
         
            -
                var addingEvent;
         
     | 
| 
       778 
747 
     | 
    
         
             
                var children = [];
         
     | 
| 
       779 
     | 
    
         
            -
                var  
     | 
| 
       780 
     | 
    
         
            -
                for (i = 0; i < addingEvents.length; i++) {
         
     | 
| 
       781 
     | 
    
         
            -
                  addingEvent = addingEvents[i];
         
     | 
| 
       782 
     | 
    
         
            -
                   
     | 
| 
       783 
     | 
    
         
            -
             
     | 
| 
       784 
     | 
    
         
            -
                      firstChildColumn = addingEvent.context;
         
     | 
| 
       785 
     | 
    
         
            -
                    }
         
     | 
| 
      
 748 
     | 
    
         
            +
                var tsParentDef;
         
     | 
| 
      
 749 
     | 
    
         
            +
                for (var i = 0; i < addingEvents.length; i++) {
         
     | 
| 
      
 750 
     | 
    
         
            +
                  var addingEvent = addingEvents[i];
         
     | 
| 
      
 751 
     | 
    
         
            +
                  tsParentDef = addingEvent.context.parent;
         
     | 
| 
      
 752 
     | 
    
         
            +
                  if (tsParentDef) {
         
     | 
| 
       786 
753 
     | 
    
         
             
                    var childIndex = addingEvent.colIndex; // Assume time series column ordered
         
     | 
| 
       787 
754 
     | 
    
         
             
                    var childId = this.getColumnId(childIndex);
         
     | 
| 
       788 
755 
     | 
    
         
             
                    children.push(childId);
         
     | 
| 
       789 
756 
     | 
    
         
             
                  }
         
     | 
| 
       790 
757 
     | 
    
         
             
                }
         
     | 
| 
       791 
     | 
    
         
            -
                if ( 
     | 
| 
       792 
     | 
    
         
            -
                  var  
     | 
| 
       793 
     | 
    
         
            -
                   
     | 
| 
       794 
     | 
    
         
            -
             
     | 
| 
       795 
     | 
    
         
            -
             
     | 
| 
       796 
     | 
    
         
            -
             
     | 
| 
       797 
     | 
    
         
            -
                     
     | 
| 
       798 
     | 
    
         
            -
                     
     | 
| 
       799 
     | 
    
         
            -
                       
     | 
| 
       800 
     | 
    
         
            -
                      var dirty = false;
         
     | 
| 
       801 
     | 
    
         
            -
                      var child;
         
     | 
| 
       802 
     | 
    
         
            -
                      for (i = 0; i < children.length; i++) {
         
     | 
| 
       803 
     | 
    
         
            -
                        child = children[i];
         
     | 
| 
       804 
     | 
    
         
            -
             
     | 
| 
       805 
     | 
    
         
            -
                        // This method modifies the group definition and outdates the group structure.
         
     | 
| 
       806 
     | 
    
         
            -
                        // It is necessary to recalculate group structure manually.
         
     | 
| 
       807 
     | 
    
         
            -
                        dirty |= this._addGroupChild(child, groupId);
         
     | 
| 
       808 
     | 
    
         
            -
                      }
         
     | 
| 
       809 
     | 
    
         
            -
                      if (dirty) {
         
     | 
| 
       810 
     | 
    
         
            -
                        this._evaluateGroupStructure();
         
     | 
| 
       811 
     | 
    
         
            -
                      }
         
     | 
| 
       812 
     | 
    
         
            -
                    } else {
         
     | 
| 
       813 
     | 
    
         
            -
                      // create new group
         
     | 
| 
       814 
     | 
    
         
            -
                      this.addGroup({
         
     | 
| 
       815 
     | 
    
         
            -
                        id: groupId,
         
     | 
| 
       816 
     | 
    
         
            -
                        title: parentName,
         
     | 
| 
       817 
     | 
    
         
            -
                        children: children
         
     | 
| 
       818 
     | 
    
         
            -
                      });
         
     | 
| 
      
 758 
     | 
    
         
            +
                if (tsParentDef) {
         
     | 
| 
      
 759 
     | 
    
         
            +
                  var parentName = tsParentDef.getName();
         
     | 
| 
      
 760 
     | 
    
         
            +
                  var parentId = tsParentDef.getId();
         
     | 
| 
      
 761 
     | 
    
         
            +
                  var groupId = "timeSerieGroup_" + parentId;
         
     | 
| 
      
 762 
     | 
    
         
            +
                  var groupDef = this._groupDefs.getGroup(groupId);
         
     | 
| 
      
 763 
     | 
    
         
            +
                  if (groupDef) {
         
     | 
| 
      
 764 
     | 
    
         
            +
                    // add children time series field to parent
         
     | 
| 
      
 765 
     | 
    
         
            +
                    for (i = 0; i < children.length; i++) {
         
     | 
| 
      
 766 
     | 
    
         
            +
                      this._groupDefs.addGroupChild(groupId, children[i]);
         
     | 
| 
       819 
767 
     | 
    
         
             
                    }
         
     | 
| 
      
 768 
     | 
    
         
            +
                  } else {
         
     | 
| 
      
 769 
     | 
    
         
            +
                    // create new group
         
     | 
| 
      
 770 
     | 
    
         
            +
                    this.addGroup({
         
     | 
| 
      
 771 
     | 
    
         
            +
                      id: groupId,
         
     | 
| 
      
 772 
     | 
    
         
            +
                      title: parentName,
         
     | 
| 
      
 773 
     | 
    
         
            +
                      children: children
         
     | 
| 
      
 774 
     | 
    
         
            +
                    });
         
     | 
| 
       820 
775 
     | 
    
         
             
                  }
         
     | 
| 
       821 
776 
     | 
    
         
             
                }
         
     | 
| 
       822 
777 
     | 
    
         
             
              }
         
     | 
| 
       823 
     | 
    
         
            -
              this._applyNearestGrouping(colIndex);
         
     | 
| 
       824 
778 
     | 
    
         
             
              this._requestApplyGrouping();
         
     | 
| 
       825 
779 
     | 
    
         
             
            };
         
     | 
| 
       826 
780 
     | 
    
         | 
| 
         @@ -843,25 +797,7 @@ ColumnGroupingPlugin.prototype._onColumnChanged = function () { 
     | 
|
| 
       843 
797 
     | 
    
         
             
            */
         
     | 
| 
       844 
798 
     | 
    
         
             
            ColumnGroupingPlugin.prototype._onColumnMoved = function (e) {
         
     | 
| 
       845 
799 
     | 
    
         
             
              if (this._autoGrouping) {
         
     | 
| 
       846 
     | 
    
         
            -
                 
     | 
| 
       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);
         
     | 
| 
       862 
     | 
    
         
            -
                  }
         
     | 
| 
       863 
     | 
    
         
            -
                }
         
     | 
| 
       864 
     | 
    
         
            -
                this._applyNearestGrouping(toColIndex);
         
     | 
| 
      
 800 
     | 
    
         
            +
                this._applyNearestGrouping(e.toColIndex);
         
     | 
| 
       865 
801 
     | 
    
         
             
              }
         
     | 
| 
       866 
802 
     | 
    
         
             
              this._requestApplyGrouping();
         
     | 
| 
       867 
803 
     | 
    
         
             
            };
         
     | 
| 
         @@ -872,8 +808,7 @@ ColumnGroupingPlugin.prototype._onColumnRemoved = function (e) { 
     | 
|
| 
       872 
808 
     | 
    
         
             
              var colData = e.columnData;
         
     | 
| 
       873 
809 
     | 
    
         
             
              if (colData && colData.columnGrouping) {
         
     | 
| 
       874 
810 
     | 
    
         
             
                var colId = colData.columnGrouping.id;
         
     | 
| 
       875 
     | 
    
         
            -
                 
     | 
| 
       876 
     | 
    
         
            -
                if (groupId) {
         
     | 
| 
      
 811 
     | 
    
         
            +
                if (this._groupDefs.removeGroupChild(colId)) {
         
     | 
| 
       877 
812 
     | 
    
         
             
                  this._requestApplyGrouping();
         
     | 
| 
       878 
813 
     | 
    
         
             
                }
         
     | 
| 
       879 
814 
     | 
    
         
             
              }
         
     | 
| 
         @@ -883,7 +818,6 @@ ColumnGroupingPlugin.prototype._onColumnRemoved = function (e) { 
     | 
|
| 
       883 
818 
     | 
    
         
             
            */
         
     | 
| 
       884 
819 
     | 
    
         
             
            ColumnGroupingPlugin.prototype._onBeforeColumnBoundUpdate = function (e) {
         
     | 
| 
       885 
820 
     | 
    
         
             
              var selectedColumns = e.selectedColumns; // Hidden columns are included
         
     | 
| 
       886 
     | 
    
         
            -
              var parentMap = this._childToParent;
         
     | 
| 
       887 
821 
     | 
    
         | 
| 
       888 
822 
     | 
    
         
             
              // Find non-grouped column
         
     | 
| 
       889 
823 
     | 
    
         
             
              var i, colId, nonGroupedColId, groupId;
         
     | 
| 
         @@ -892,12 +826,12 @@ ColumnGroupingPlugin.prototype._onBeforeColumnBoundUpdate = function (e) { 
     | 
|
| 
       892 
826 
     | 
    
         
             
              for (i = 0; i < selectedColumns.length; i++) {
         
     | 
| 
       893 
827 
     | 
    
         
             
                colId = this.getColumnId(selectedColumns[i]);
         
     | 
| 
       894 
828 
     | 
    
         
             
                if (colId) {
         
     | 
| 
       895 
     | 
    
         
            -
                  groupId =  
     | 
| 
      
 829 
     | 
    
         
            +
                  groupId = this._groupDefs.getParentId(colId);
         
     | 
| 
       896 
830 
     | 
    
         
             
                  if (!groupId) {
         
     | 
| 
       897 
831 
     | 
    
         
             
                    nonGroupedColId = colId;
         
     | 
| 
       898 
832 
     | 
    
         
             
                    break;
         
     | 
| 
       899 
833 
     | 
    
         
             
                  } else {
         
     | 
| 
       900 
     | 
    
         
            -
                    groupMap[groupId] = this. 
     | 
| 
      
 834 
     | 
    
         
            +
                    groupMap[groupId] = this._groupDefs.getGroup(groupId); // Cache group node for further calculation
         
     | 
| 
       901 
835 
     | 
    
         
             
                  }
         
     | 
| 
       902 
836 
     | 
    
         | 
| 
       903 
837 
     | 
    
         
             
                  colIds.push(colId); // Cache column id for further calculation
         
     | 
| 
         @@ -914,7 +848,7 @@ ColumnGroupingPlugin.prototype._onBeforeColumnBoundUpdate = function (e) { 
     | 
|
| 
       914 
848 
     | 
    
         
             
              var rootGroupMap = {};
         
     | 
| 
       915 
849 
     | 
    
         
             
              var headerRowIndex, group;
         
     | 
| 
       916 
850 
     | 
    
         
             
              for (groupId in groupMap) {
         
     | 
| 
       917 
     | 
    
         
            -
                group = this. 
     | 
| 
      
 851 
     | 
    
         
            +
                group = this._groupDefs.getRootGroup(groupId);
         
     | 
| 
       918 
852 
     | 
    
         
             
                rootGroupMap[group.id] = group;
         
     | 
| 
       919 
853 
     | 
    
         
             
                headerRowIndex = groupMap[groupId].onRow + 1;
         
     | 
| 
       920 
854 
     | 
    
         
             
                if (headerRowIndex < topBoundRowIndex) {
         
     | 
| 
         @@ -931,7 +865,7 @@ ColumnGroupingPlugin.prototype._onBeforeColumnBoundUpdate = function (e) { 
     | 
|
| 
       931 
865 
     | 
    
         
             
                for (groupId in findingGroup) {
         
     | 
| 
       932 
866 
     | 
    
         
             
                  group = findingGroup[groupId];
         
     | 
| 
       933 
867 
     | 
    
         
             
                  allSelected = true;
         
     | 
| 
       934 
     | 
    
         
            -
                  members = this. 
     | 
| 
      
 868 
     | 
    
         
            +
                  members = this._groupDefs.getLeafDescendants(groupId);
         
     | 
| 
       935 
869 
     | 
    
         
             
                  if (members.length <= colIds.length) {
         
     | 
| 
       936 
870 
     | 
    
         
             
                    for (n = 0; n < members.length; n++) {
         
     | 
| 
       937 
871 
     | 
    
         
             
                      if (colIds.indexOf(members[n]) < 0) {
         
     | 
| 
         @@ -949,7 +883,7 @@ ColumnGroupingPlugin.prototype._onBeforeColumnBoundUpdate = function (e) { 
     | 
|
| 
       949 
883 
     | 
    
         
             
                  children = group.children;
         
     | 
| 
       950 
884 
     | 
    
         
             
                  for (n = 0; n < children.length; n++) {
         
     | 
| 
       951 
885 
     | 
    
         
             
                    var id = children[n];
         
     | 
| 
       952 
     | 
    
         
            -
                    group = this. 
     | 
| 
      
 886 
     | 
    
         
            +
                    group = this._groupDefs.getGroup(id);
         
     | 
| 
       953 
887 
     | 
    
         
             
                    if (group) {
         
     | 
| 
       954 
888 
     | 
    
         
             
                      nextLevelGroups[id] = group;
         
     | 
| 
       955 
889 
     | 
    
         
             
                    }
         
     | 
| 
         @@ -966,82 +900,40 @@ ColumnGroupingPlugin.prototype._onBeforeColumnBoundUpdate = function (e) { 
     | 
|
| 
       966 
900 
     | 
    
         
             
            * @param {number} colIndex Column index
         
     | 
| 
       967 
901 
     | 
    
         
             
            */
         
     | 
| 
       968 
902 
     | 
    
         
             
            ColumnGroupingPlugin.prototype.addColumnToGroup = function (column, groupId, colIndex) {
         
     | 
| 
       969 
     | 
    
         
            -
              if (!column 
     | 
| 
       970 
     | 
    
         
            -
              var columnIndex =  
     | 
| 
      
 903 
     | 
    
         
            +
              if (!column) return;
         
     | 
| 
      
 904 
     | 
    
         
            +
              var columnIndex = -1;
         
     | 
| 
      
 905 
     | 
    
         
            +
              if (colIndex == null) {
         
     | 
| 
      
 906 
     | 
    
         
            +
                var groupDef = this._groupDefs.getGroup(groupId);
         
     | 
| 
      
 907 
     | 
    
         
            +
                if (groupDef) {
         
     | 
| 
      
 908 
     | 
    
         
            +
                  var childIndices = this.getChildColumnIndices(groupId);
         
     | 
| 
      
 909 
     | 
    
         
            +
                  if (childIndices && childIndices.length) {
         
     | 
| 
      
 910 
     | 
    
         
            +
                    // Child indices need to be sorted here
         
     | 
| 
      
 911 
     | 
    
         
            +
                    columnIndex = childIndices[childIndices.length - 1] + 1; // Put new column next to the last child in the group
         
     | 
| 
      
 912 
     | 
    
         
            +
                  }
         
     | 
| 
       971 
913 
     | 
    
         | 
| 
       972 
     | 
    
         
            -
             
     | 
| 
       973 
     | 
    
         
            -
             
     | 
| 
       974 
     | 
    
         
            -
               
     | 
| 
       975 
     | 
    
         
            -
                 
     | 
| 
      
 914 
     | 
    
         
            +
                  this._groupDefs.addGroupChild(groupId, column.id);
         
     | 
| 
      
 915 
     | 
    
         
            +
                }
         
     | 
| 
      
 916 
     | 
    
         
            +
              } else {
         
     | 
| 
      
 917 
     | 
    
         
            +
                columnIndex = colIndex;
         
     | 
| 
      
 918 
     | 
    
         
            +
              }
         
     | 
| 
      
 919 
     | 
    
         
            +
              if (columnIndex < 0) {
         
     | 
| 
      
 920 
     | 
    
         
            +
                columnIndex = this.getColumnCount();
         
     | 
| 
       976 
921 
     | 
    
         
             
              }
         
     | 
| 
       977 
     | 
    
         
            -
             
     | 
| 
       978 
922 
     | 
    
         
             
              if (this._realTimeGrid) {
         
     | 
| 
      
 923 
     | 
    
         
            +
                // TODO: Support multi-table feature
         
     | 
| 
       979 
924 
     | 
    
         
             
                this._realTimeGrid.insertColumn(column, columnIndex);
         
     | 
| 
       980 
925 
     | 
    
         
             
              } else if (this._compositeGrid) {
         
     | 
| 
       981 
926 
     | 
    
         
             
                this._compositeGrid.insertColumn(columnIndex, column);
         
     | 
| 
       982 
927 
     | 
    
         
             
              }
         
     | 
| 
       983 
928 
     | 
    
         
             
            };
         
     | 
| 
       984 
929 
     | 
    
         | 
| 
       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 
930 
     | 
    
         
             
            /** Add new group definition to existing group structure. Existing group with the same id will be replaced.
         
     | 
| 
       1039 
931 
     | 
    
         
             
            * @public
         
     | 
| 
       1040 
932 
     | 
    
         
             
            * @param {ColumnGroupingPlugin~GroupDefinition} groupDef Group definition object
         
     | 
| 
       1041 
933 
     | 
    
         
             
            * @return {string} Return group ID
         
     | 
| 
       1042 
934 
     | 
    
         
             
            */
         
     | 
| 
       1043 
935 
     | 
    
         
             
            ColumnGroupingPlugin.prototype.addGroup = function (groupDef) {
         
     | 
| 
       1044 
     | 
    
         
            -
              if (ColumnGroupingPlugin. 
     | 
| 
      
 936 
     | 
    
         
            +
              if (ColumnGroupingPlugin._hasGroupId(groupDef)) {
         
     | 
| 
       1045 
937 
     | 
    
         
             
                return this.setGroupDefinition(groupDef.id, groupDef);
         
     | 
| 
       1046 
938 
     | 
    
         
             
              }
         
     | 
| 
       1047 
939 
     | 
    
         
             
              return "";
         
     | 
| 
         @@ -1056,16 +948,14 @@ ColumnGroupingPlugin.prototype.addGroup = function (groupDef) { 
     | 
|
| 
       1056 
948 
     | 
    
         
             
            ColumnGroupingPlugin.prototype.addColumnGrouping = ColumnGroupingPlugin.prototype.addGroup;
         
     | 
| 
       1057 
949 
     | 
    
         
             
            /** @public
         
     | 
| 
       1058 
950 
     | 
    
         
             
            * @param {string} groupId
         
     | 
| 
       1059 
     | 
    
         
            -
            * @return { 
     | 
| 
      
 951 
     | 
    
         
            +
            * @return {boolean}
         
     | 
| 
       1060 
952 
     | 
    
         
             
            */
         
     | 
| 
       1061 
953 
     | 
    
         
             
            ColumnGroupingPlugin.prototype.removeGroup = function (groupId) {
         
     | 
| 
       1062 
     | 
    
         
            -
               
     | 
| 
       1063 
     | 
    
         
            -
              if (curDef) {
         
     | 
| 
       1064 
     | 
    
         
            -
                var at = this._groupDefs.indexOf(curDef);
         
     | 
| 
       1065 
     | 
    
         
            -
                this._groupDefs.splice(at, 1);
         
     | 
| 
      
 954 
     | 
    
         
            +
              if (this._groupDefs.removeGroup(groupId)) {
         
     | 
| 
       1066 
955 
     | 
    
         
             
                this._applyGrouping();
         
     | 
| 
      
 956 
     | 
    
         
            +
                return true;
         
     | 
| 
       1067 
957 
     | 
    
         
             
              }
         
     | 
| 
       1068 
     | 
    
         
            -
              return  
     | 
| 
      
 958 
     | 
    
         
            +
              return false;
         
     | 
| 
       1069 
959 
     | 
    
         
             
            };
         
     | 
| 
       1070 
960 
     | 
    
         | 
| 
       1071 
961 
     | 
    
         
             
            /** @public
         
     | 
| 
         @@ -1073,15 +963,11 @@ ColumnGroupingPlugin.prototype.removeGroup = function (groupId) { 
     | 
|
| 
       1073 
963 
     | 
    
         
             
            * @return {ColumnGroupingPlugin~GroupDefinition}
         
     | 
| 
       1074 
964 
     | 
    
         
             
            */
         
     | 
| 
       1075 
965 
     | 
    
         
             
            ColumnGroupingPlugin.prototype.getGroupDefinition = function (groupId) {
         
     | 
| 
       1076 
     | 
    
         
            -
               
     | 
| 
       1077 
     | 
    
         
            -
             
     | 
| 
       1078 
     | 
    
         
            -
                var groupDef = this. 
     | 
| 
       1079 
     | 
    
         
            -
                if (!groupDef) {
         
     | 
| 
       1080 
     | 
    
         
            -
                  return null;
         
     | 
| 
       1081 
     | 
    
         
            -
                }
         
     | 
| 
      
 966 
     | 
    
         
            +
              var chdr = this._getAvaliableChildren(groupId);
         
     | 
| 
      
 967 
     | 
    
         
            +
              if (chdr.length > 1) {
         
     | 
| 
      
 968 
     | 
    
         
            +
                var groupDef = this._groupDefs.getGroup(groupId);
         
     | 
| 
       1082 
969 
     | 
    
         
             
                groupDef = ColumnGroupingPlugin._cloneObject(groupDef); // TODO: this is slow
         
     | 
| 
       1083 
     | 
    
         
            -
                 
     | 
| 
       1084 
     | 
    
         
            -
                groupDef.children = children;
         
     | 
| 
      
 970 
     | 
    
         
            +
                groupDef.children = chdr;
         
     | 
| 
       1085 
971 
     | 
    
         
             
                return groupDef;
         
     | 
| 
       1086 
972 
     | 
    
         
             
              }
         
     | 
| 
       1087 
973 
     | 
    
         
             
              return null;
         
     | 
| 
         @@ -1092,11 +978,11 @@ ColumnGroupingPlugin.prototype.getGroupDefinition = function (groupId) { 
     | 
|
| 
       1092 
978 
     | 
    
         
             
            */
         
     | 
| 
       1093 
979 
     | 
    
         
             
            ColumnGroupingPlugin.prototype.getGroupDefinitions = function () {
         
     | 
| 
       1094 
980 
     | 
    
         
             
              var validGroupDefs = [];
         
     | 
| 
       1095 
     | 
    
         
            -
              var  
     | 
| 
       1096 
     | 
    
         
            -
              var  
     | 
| 
       1097 
     | 
    
         
            -
             
     | 
| 
       1098 
     | 
    
         
            -
                 
     | 
| 
       1099 
     | 
    
         
            -
             
     | 
| 
      
 981 
     | 
    
         
            +
              var groupMap = this._groupDefs.getGroupMap();
         
     | 
| 
      
 982 
     | 
    
         
            +
              for (var grpId in groupMap) {
         
     | 
| 
      
 983 
     | 
    
         
            +
                var groupDef = this.getGroupDefinition(grpId); // Clone
         
     | 
| 
      
 984 
     | 
    
         
            +
                if (groupDef) {
         
     | 
| 
      
 985 
     | 
    
         
            +
                  delete groupDef.parentId;
         
     | 
| 
       1100 
986 
     | 
    
         
             
                  validGroupDefs.push(groupDef);
         
     | 
| 
       1101 
987 
     | 
    
         
             
                }
         
     | 
| 
       1102 
988 
     | 
    
         
             
              }
         
     | 
| 
         @@ -1106,40 +992,28 @@ ColumnGroupingPlugin.prototype.getGroupDefinitions = function () { 
     | 
|
| 
       1106 
992 
     | 
    
         
             
            * @public
         
     | 
| 
       1107 
993 
     | 
    
         
             
            * @param {string} groupId
         
     | 
| 
       1108 
994 
     | 
    
         
             
            * @param {ColumnGroupingPlugin~GroupDefinition=} groupDef
         
     | 
| 
       1109 
     | 
    
         
            -
            * @return {string}  
     | 
| 
      
 995 
     | 
    
         
            +
            * @return {string} Return group Id. Return empty string if nothing has been changed.
         
     | 
| 
       1110 
996 
     | 
    
         
             
            */
         
     | 
| 
       1111 
997 
     | 
    
         
             
            ColumnGroupingPlugin.prototype.setGroupDefinition = function (groupId, groupDef) {
         
     | 
| 
       1112 
     | 
    
         
            -
              if ( 
     | 
| 
       1113 
     | 
    
         
            -
                 
     | 
| 
       1114 
     | 
    
         
            -
             
     | 
| 
       1115 
     | 
    
         
            -
             
     | 
| 
       1116 
     | 
    
         
            -
             
     | 
| 
       1117 
     | 
    
         
            -
             
     | 
| 
       1118 
     | 
    
         
            -
             
     | 
| 
       1119 
     | 
    
         
            -
             
     | 
| 
       1120 
     | 
    
         
            -
             
     | 
| 
       1121 
     | 
    
         
            -
             
     | 
| 
       1122 
     | 
    
         
            -
             
     | 
| 
       1123 
     | 
    
         
            -
             
     | 
| 
       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
         
     | 
| 
      
 998 
     | 
    
         
            +
              if (this._groupDefs.setGroup(groupId, groupDef)) {
         
     | 
| 
      
 999 
     | 
    
         
            +
                var newDef = this._groupDefs.getGroup(groupId);
         
     | 
| 
      
 1000 
     | 
    
         
            +
                if (newDef) {
         
     | 
| 
      
 1001 
     | 
    
         
            +
                  var chdr = newDef.children;
         
     | 
| 
      
 1002 
     | 
    
         
            +
                  var len = chdr.length;
         
     | 
| 
      
 1003 
     | 
    
         
            +
                  // TODO: Filter out group id
         
     | 
| 
      
 1004 
     | 
    
         
            +
                  if (len > 1) {
         
     | 
| 
      
 1005 
     | 
    
         
            +
                    var gridApi = this.getGridApi();
         
     | 
| 
      
 1006 
     | 
    
         
            +
                    if (gridApi && gridApi.reorderColumns) {
         
     | 
| 
      
 1007 
     | 
    
         
            +
                      // TODO: Support multi-table feature
         
     | 
| 
      
 1008 
     | 
    
         
            +
                      gridApi.reorderColumns(chdr, chdr[0]); // WARNING: group id doesn't work
         
     | 
| 
      
 1009 
     | 
    
         
            +
                    }
         
     | 
| 
       1134 
1010 
     | 
    
         
             
                  }
         
     | 
| 
       1135 
1011 
     | 
    
         
             
                }
         
     | 
| 
       1136 
1012 
     | 
    
         | 
| 
       1137 
1013 
     | 
    
         
             
                this._applyGrouping();
         
     | 
| 
       1138 
     | 
    
         
            -
             
     | 
| 
       1139 
     | 
    
         
            -
                // Remove
         
     | 
| 
       1140 
     | 
    
         
            -
                this.removeGroup(groupId);
         
     | 
| 
      
 1014 
     | 
    
         
            +
                return groupId;
         
     | 
| 
       1141 
1015 
     | 
    
         
             
              }
         
     | 
| 
       1142 
     | 
    
         
            -
              return  
     | 
| 
      
 1016 
     | 
    
         
            +
              return "";
         
     | 
| 
       1143 
1017 
     | 
    
         
             
            };
         
     | 
| 
       1144 
1018 
     | 
    
         
             
            /** Remove all existing group definitions and replace with the given definitions.
         
     | 
| 
       1145 
1019 
     | 
    
         
             
            * @public
         
     | 
| 
         @@ -1147,55 +1021,41 @@ ColumnGroupingPlugin.prototype.setGroupDefinition = function (groupId, groupDef) 
     | 
|
| 
       1147 
1021 
     | 
    
         
             
            */
         
     | 
| 
       1148 
1022 
     | 
    
         
             
            ColumnGroupingPlugin.prototype.setGroupDefinitions = function (groupDefs) {
         
     | 
| 
       1149 
1023 
     | 
    
         
             
              if (Array.isArray(groupDefs)) {
         
     | 
| 
       1150 
     | 
    
         
            -
                groupDefs = groupDefs.filter(ColumnGroupingPlugin. 
     | 
| 
      
 1024 
     | 
    
         
            +
                groupDefs = groupDefs.filter(ColumnGroupingPlugin._hasGroupId);
         
     | 
| 
       1151 
1025 
     | 
    
         
             
                groupDefs = groupDefs.map(ColumnGroupingPlugin._cloneObject);
         
     | 
| 
       1152 
     | 
    
         
            -
                if (!groupDefs.length) {
         
     | 
| 
       1153 
     | 
    
         
            -
                  groupDefs = null;
         
     | 
| 
       1154 
     | 
    
         
            -
                }
         
     | 
| 
       1155 
1026 
     | 
    
         
             
              } else {
         
     | 
| 
       1156 
1027 
     | 
    
         
             
                groupDefs = null;
         
     | 
| 
       1157 
1028 
     | 
    
         
             
              }
         
     | 
| 
       1158 
     | 
    
         
            -
               
     | 
| 
       1159 
     | 
    
         
            -
             
     | 
| 
       1160 
     | 
    
         
            -
             
     | 
| 
       1161 
     | 
    
         
            -
              } else {
         
     | 
| 
       1162 
     | 
    
         
            -
                this._groupDefs = [];
         
     | 
| 
       1163 
     | 
    
         
            -
                this._applyGrouping();
         
     | 
| 
       1164 
     | 
    
         
            -
              }
         
     | 
| 
      
 1029 
     | 
    
         
            +
              ColumnGroupingPlugin._flattenGroupDefs(groupDefs);
         
     | 
| 
      
 1030 
     | 
    
         
            +
              this._groupDefs.setGroups(groupDefs);
         
     | 
| 
      
 1031 
     | 
    
         
            +
              this._applyGrouping();
         
     | 
| 
       1165 
1032 
     | 
    
         
             
            };
         
     | 
| 
       1166 
1033 
     | 
    
         
             
            /** Replace and update existing group definition.
         
     | 
| 
       1167 
1034 
     | 
    
         
             
            * @public
         
     | 
| 
       1168 
1035 
     | 
    
         
             
            * @param {string} groupId
         
     | 
| 
       1169 
1036 
     | 
    
         
             
            * @param {Array.<string>} newChildList If null is given, all existing children in the group will be removed
         
     | 
| 
      
 1037 
     | 
    
         
            +
            * @return {boolean}
         
     | 
| 
       1170 
1038 
     | 
    
         
             
            */
         
     | 
| 
       1171 
1039 
     | 
    
         
             
            ColumnGroupingPlugin.prototype.setGroupChildren = function (groupId, newChildList) {
         
     | 
| 
       1172 
     | 
    
         
            -
               
     | 
| 
       1173 
     | 
    
         
            -
             
     | 
| 
       1174 
     | 
    
         
            -
                 
     | 
| 
       1175 
     | 
    
         
            -
                  groupDef.aaa = 0; // TODO: for testing, need to be removed
         
     | 
| 
       1176 
     | 
    
         
            -
                  this._ungroupChildren(newChildList);
         
     | 
| 
       1177 
     | 
    
         
            -
                  groupDef.children = newChildList.slice();
         
     | 
| 
       1178 
     | 
    
         
            -
                  this._applyGrouping();
         
     | 
| 
       1179 
     | 
    
         
            -
                } else if (!newChildList && groupDef.children.length) {
         
     | 
| 
       1180 
     | 
    
         
            -
                  groupDef.children = [];
         
     | 
| 
       1181 
     | 
    
         
            -
                  this._applyGrouping();
         
     | 
| 
       1182 
     | 
    
         
            -
                }
         
     | 
| 
      
 1040 
     | 
    
         
            +
              if (this._groupDefs.setGroupChildren(groupId, newChildList)) {
         
     | 
| 
      
 1041 
     | 
    
         
            +
                this._applyGrouping();
         
     | 
| 
      
 1042 
     | 
    
         
            +
                return true;
         
     | 
| 
       1183 
1043 
     | 
    
         
             
              }
         
     | 
| 
      
 1044 
     | 
    
         
            +
              return false;
         
     | 
| 
       1184 
1045 
     | 
    
         
             
            };
         
     | 
| 
       1185 
1046 
     | 
    
         
             
            /** @private
         
     | 
| 
       1186 
1047 
     | 
    
         
             
            * @param {string} groupId
         
     | 
| 
       1187 
     | 
    
         
            -
            * @return {!Array.<string>}
         
     | 
| 
      
 1048 
     | 
    
         
            +
            * @return {!Array.<string>} The list of immediate valid child, including invisible child groups
         
     | 
| 
       1188 
1049 
     | 
    
         
             
            */
         
     | 
| 
       1189 
1050 
     | 
    
         
             
            ColumnGroupingPlugin.prototype._getAvaliableChildren = function (groupId) {
         
     | 
| 
       1190 
     | 
    
         
            -
              var  
     | 
| 
      
 1051 
     | 
    
         
            +
              var chdr = this._groupDefs.getGroupChildren(groupId);
         
     | 
| 
      
 1052 
     | 
    
         
            +
              var childCount = chdr ? chdr.length : 0;
         
     | 
| 
       1191 
1053 
     | 
    
         
             
              var validChildren = [];
         
     | 
| 
       1192 
     | 
    
         
            -
              if ( 
     | 
| 
      
 1054 
     | 
    
         
            +
              if (childCount) {
         
     | 
| 
      
 1055 
     | 
    
         
            +
                var groupMap = this._groupDefs.getGroupMap();
         
     | 
| 
       1193 
1056 
     | 
    
         
             
                // Filter out columns that do not exist
         
     | 
| 
       1194 
     | 
    
         
            -
                var  
     | 
| 
       1195 
     | 
    
         
            -
             
     | 
| 
       1196 
     | 
    
         
            -
                var childId;
         
     | 
| 
       1197 
     | 
    
         
            -
                for (var i = 0; i < children.length; i++) {
         
     | 
| 
       1198 
     | 
    
         
            -
                  childId = children[i];
         
     | 
| 
      
 1057 
     | 
    
         
            +
                for (var i = 0; i < childCount; i++) {
         
     | 
| 
      
 1058 
     | 
    
         
            +
                  var childId = chdr[i];
         
     | 
| 
       1199 
1059 
     | 
    
         
             
                  if (groupMap[childId] || this.getColumnIndex(childId) > -1) {
         
     | 
| 
       1200 
1060 
     | 
    
         
             
                    validChildren.push(childId); // TODO: This is slow
         
     | 
| 
       1201 
1061 
     | 
    
         
             
                  }
         
     | 
| 
         @@ -1223,9 +1083,8 @@ ColumnGroupingPlugin.prototype.getGroupChildren = function (groupId) { 
     | 
|
| 
       1223 
1083 
     | 
    
         
             
            * @return {Array.<number>}
         
     | 
| 
       1224 
1084 
     | 
    
         
             
            */
         
     | 
| 
       1225 
1085 
     | 
    
         
             
            ColumnGroupingPlugin.prototype.getChildColumnIndices = function (groupId) {
         
     | 
| 
       1226 
     | 
    
         
            -
              var  
     | 
| 
       1227 
     | 
    
         
            -
              if ( 
     | 
| 
       1228 
     | 
    
         
            -
                var colIds = this._getGroupMembers(this._groupMap, group);
         
     | 
| 
      
 1086 
     | 
    
         
            +
              var colIds = this._groupDefs.getLeafDescendants(groupId);
         
     | 
| 
      
 1087 
     | 
    
         
            +
              if (colIds) {
         
     | 
| 
       1229 
1088 
     | 
    
         
             
                var colIndices = [];
         
     | 
| 
       1230 
1089 
     | 
    
         
             
                var index;
         
     | 
| 
       1231 
1090 
     | 
    
         
             
                for (var i = 0; i < colIds.length; i++) {
         
     | 
| 
         @@ -1234,8 +1093,9 @@ ColumnGroupingPlugin.prototype.getChildColumnIndices = function (groupId) { 
     | 
|
| 
       1234 
1093 
     | 
    
         
             
                    colIndices.push(index);
         
     | 
| 
       1235 
1094 
     | 
    
         
             
                  }
         
     | 
| 
       1236 
1095 
     | 
    
         
             
                }
         
     | 
| 
       1237 
     | 
    
         
            -
                return colIndices.sort(ColumnGroupingPlugin._ascSortLogic);
         
     | 
| 
      
 1096 
     | 
    
         
            +
                return colIndices.sort(ColumnGroupingPlugin._ascSortLogic); // TODO: This could be unnecessary
         
     | 
| 
       1238 
1097 
     | 
    
         
             
              }
         
     | 
| 
      
 1098 
     | 
    
         
            +
             
     | 
| 
       1239 
1099 
     | 
    
         
             
              return null;
         
     | 
| 
       1240 
1100 
     | 
    
         
             
            };
         
     | 
| 
       1241 
1101 
     | 
    
         | 
| 
         @@ -1244,27 +1104,11 @@ ColumnGroupingPlugin.prototype.getChildColumnIndices = function (groupId) { 
     | 
|
| 
       1244 
1104 
     | 
    
         
             
            * @return {Array.<string>}
         
     | 
| 
       1245 
1105 
     | 
    
         
             
            */
         
     | 
| 
       1246 
1106 
     | 
    
         
             
            ColumnGroupingPlugin.prototype.getGroupIds = function (colRef) {
         
     | 
| 
       1247 
     | 
    
         
            -
              if (colRef  
     | 
| 
       1248 
     | 
    
         
            -
                 
     | 
| 
       1249 
     | 
    
         
            -
                if (typeof colRef === "number") {
         
     | 
| 
       1250 
     | 
    
         
            -
                  colId = this.getColumnId(colRef);
         
     | 
| 
       1251 
     | 
    
         
            -
                }
         
     | 
| 
       1252 
     | 
    
         
            -
                if (colId) {
         
     | 
| 
       1253 
     | 
    
         
            -
                  var groupId = this._childToParent[colId];
         
     | 
| 
       1254 
     | 
    
         
            -
                  if (groupId) {
         
     | 
| 
       1255 
     | 
    
         
            -
                    var groupIds = [groupId];
         
     | 
| 
       1256 
     | 
    
         
            -
                    var group = this._groupMap[groupId];
         
     | 
| 
       1257 
     | 
    
         
            -
                    while (group && group.parent) {
         
     | 
| 
       1258 
     | 
    
         
            -
                      group = this._groupMap[group.parent];
         
     | 
| 
       1259 
     | 
    
         
            -
                      if (group) {
         
     | 
| 
       1260 
     | 
    
         
            -
                        groupIds.push(group.id);
         
     | 
| 
       1261 
     | 
    
         
            -
                      }
         
     | 
| 
       1262 
     | 
    
         
            -
                    }
         
     | 
| 
       1263 
     | 
    
         
            -
                    return groupIds;
         
     | 
| 
       1264 
     | 
    
         
            -
                  }
         
     | 
| 
       1265 
     | 
    
         
            -
                }
         
     | 
| 
      
 1107 
     | 
    
         
            +
              if (colRef == null) {
         
     | 
| 
      
 1108 
     | 
    
         
            +
                return null;
         
     | 
| 
       1266 
1109 
     | 
    
         
             
              }
         
     | 
| 
       1267 
     | 
    
         
            -
               
     | 
| 
      
 1110 
     | 
    
         
            +
              var colId = typeof colRef === "number" ? this.getColumnId(colRef) : colRef;
         
     | 
| 
      
 1111 
     | 
    
         
            +
              return this._groupDefs.getParentIds(colId);
         
     | 
| 
       1268 
1112 
     | 
    
         
             
            };
         
     | 
| 
       1269 
1113 
     | 
    
         | 
| 
       1270 
1114 
     | 
    
         
             
            /** Return deepest row index of column headers
         
     | 
| 
         @@ -1288,52 +1132,6 @@ ColumnGroupingPlugin.prototype.getGroupLevel = function (groupId) { 
     | 
|
| 
       1288 
1132 
     | 
    
         
             
              return -1;
         
     | 
| 
       1289 
1133 
     | 
    
         
             
            };
         
     | 
| 
       1290 
1134 
     | 
    
         | 
| 
       1291 
     | 
    
         
            -
            /** @private
         
     | 
| 
       1292 
     | 
    
         
            -
            * @param {Object.<string, ColumnGroupingPlugin~GroupDefinition>} groupMap
         
     | 
| 
       1293 
     | 
    
         
            -
            * @param {ColumnGroupingPlugin~GroupDefinition} group Group definition
         
     | 
| 
       1294 
     | 
    
         
            -
            * @param {Array.<string>=} members
         
     | 
| 
       1295 
     | 
    
         
            -
            * @return {Array.<string>}
         
     | 
| 
       1296 
     | 
    
         
            -
            */
         
     | 
| 
       1297 
     | 
    
         
            -
            ColumnGroupingPlugin.prototype._getGroupMembers = function (groupMap, group, members) {
         
     | 
| 
       1298 
     | 
    
         
            -
              if (!members) {
         
     | 
| 
       1299 
     | 
    
         
            -
                members = [];
         
     | 
| 
       1300 
     | 
    
         
            -
              }
         
     | 
| 
       1301 
     | 
    
         
            -
              var children = this._getAvaliableChildren(group.id);
         
     | 
| 
       1302 
     | 
    
         
            -
              if (children.length < 2) {
         
     | 
| 
       1303 
     | 
    
         
            -
                return members;
         
     | 
| 
       1304 
     | 
    
         
            -
              }
         
     | 
| 
       1305 
     | 
    
         
            -
              var g, id;
         
     | 
| 
       1306 
     | 
    
         
            -
              for (var i = 0; i < children.length; i++) {
         
     | 
| 
       1307 
     | 
    
         
            -
                id = children[i];
         
     | 
| 
       1308 
     | 
    
         
            -
                if (id === group.id) {
         
     | 
| 
       1309 
     | 
    
         
            -
                  // prevent from infinite loop
         
     | 
| 
       1310 
     | 
    
         
            -
                  continue;
         
     | 
| 
       1311 
     | 
    
         
            -
                }
         
     | 
| 
       1312 
     | 
    
         
            -
                g = groupMap[id];
         
     | 
| 
       1313 
     | 
    
         
            -
                if (g) {
         
     | 
| 
       1314 
     | 
    
         
            -
                  this._getGroupMembers(groupMap, g, members);
         
     | 
| 
       1315 
     | 
    
         
            -
                } else {
         
     | 
| 
       1316 
     | 
    
         
            -
                  members.push(id);
         
     | 
| 
       1317 
     | 
    
         
            -
                }
         
     | 
| 
       1318 
     | 
    
         
            -
              }
         
     | 
| 
       1319 
     | 
    
         
            -
              return members;
         
     | 
| 
       1320 
     | 
    
         
            -
            };
         
     | 
| 
       1321 
     | 
    
         
            -
             
     | 
| 
       1322 
     | 
    
         
            -
            /** @private
         
     | 
| 
       1323 
     | 
    
         
            -
            * @param {String} groupId
         
     | 
| 
       1324 
     | 
    
         
            -
            * @return {ColumnGroupingPlugin~GroupDefinition}
         
     | 
| 
       1325 
     | 
    
         
            -
            */
         
     | 
| 
       1326 
     | 
    
         
            -
            ColumnGroupingPlugin.prototype._getRootGroup = function (groupId) {
         
     | 
| 
       1327 
     | 
    
         
            -
              if (!groupId) {
         
     | 
| 
       1328 
     | 
    
         
            -
                return null;
         
     | 
| 
       1329 
     | 
    
         
            -
              }
         
     | 
| 
       1330 
     | 
    
         
            -
              var group = this._groupMap[groupId];
         
     | 
| 
       1331 
     | 
    
         
            -
              while (group.parent) {
         
     | 
| 
       1332 
     | 
    
         
            -
                group = this._groupMap[group.parent];
         
     | 
| 
       1333 
     | 
    
         
            -
              }
         
     | 
| 
       1334 
     | 
    
         
            -
              return group;
         
     | 
| 
       1335 
     | 
    
         
            -
            };
         
     | 
| 
       1336 
     | 
    
         
            -
             
     | 
| 
       1337 
1135 
     | 
    
         
             
            /** This version exclude invisible column unlike the one in GridPlugin
         
     | 
| 
       1338 
1136 
     | 
    
         
             
            * @private
         
     | 
| 
       1339 
1137 
     | 
    
         
             
            * @param {string} id
         
     | 
| 
         @@ -1352,49 +1150,12 @@ ColumnGroupingPlugin.prototype._getColumnIndexById = function (id) { 
     | 
|
| 
       1352 
1150 
     | 
    
         
             
              }
         
     | 
| 
       1353 
1151 
     | 
    
         
             
              return -1;
         
     | 
| 
       1354 
1152 
     | 
    
         
             
            };
         
     | 
| 
       1355 
     | 
    
         
            -
            /** This method modifies the group definition and outdates the group structure. It is necessary to recalculate group structure manually.
         
     | 
| 
       1356 
     | 
    
         
            -
            * @private
         
     | 
| 
       1357 
     | 
    
         
            -
            * @param {string} childId
         
     | 
| 
       1358 
     | 
    
         
            -
            * @param {string} groupId
         
     | 
| 
       1359 
     | 
    
         
            -
            * @return {boolean}
         
     | 
| 
       1360 
     | 
    
         
            -
            */
         
     | 
| 
       1361 
     | 
    
         
            -
            ColumnGroupingPlugin.prototype._addGroupChild = function (childId, groupId) {
         
     | 
| 
       1362 
     | 
    
         
            -
              var groupDef = this._groupMap[groupId];
         
     | 
| 
       1363 
     | 
    
         
            -
              if (childId && groupDef) {
         
     | 
| 
       1364 
     | 
    
         
            -
                var chdr = groupDef.children;
         
     | 
| 
       1365 
     | 
    
         
            -
                if (chdr && chdr.indexOf(childId) < 0) {
         
     | 
| 
       1366 
     | 
    
         
            -
                  chdr.push(childId);
         
     | 
| 
       1367 
     | 
    
         
            -
                  return true;
         
     | 
| 
       1368 
     | 
    
         
            -
                }
         
     | 
| 
       1369 
     | 
    
         
            -
              }
         
     | 
| 
       1370 
     | 
    
         
            -
              return false;
         
     | 
| 
       1371 
     | 
    
         
            -
            };
         
     | 
| 
       1372 
1153 
     | 
    
         
             
            /** @private
         
     | 
| 
       1373 
1154 
     | 
    
         
             
            * @param {string} childId
         
     | 
| 
       1374 
1155 
     | 
    
         
             
            * @return {ColumnGroupingPlugin~GroupDefinition}
         
     | 
| 
       1375 
1156 
     | 
    
         
             
            */
         
     | 
| 
       1376 
     | 
    
         
            -
            ColumnGroupingPlugin.prototype. 
     | 
| 
       1377 
     | 
    
         
            -
              return this._visibleGroupMap[this. 
     | 
| 
       1378 
     | 
    
         
            -
            };
         
     | 
| 
       1379 
     | 
    
         
            -
            /** @private
         
     | 
| 
       1380 
     | 
    
         
            -
            * @param {string} colId
         
     | 
| 
       1381 
     | 
    
         
            -
            * @param {number} groupLevel
         
     | 
| 
       1382 
     | 
    
         
            -
            * @return {string}
         
     | 
| 
       1383 
     | 
    
         
            -
            */
         
     | 
| 
       1384 
     | 
    
         
            -
            ColumnGroupingPlugin.prototype._getGroupId = function (colId, groupLevel) {
         
     | 
| 
       1385 
     | 
    
         
            -
              var groupId = this._childToParent[colId];
         
     | 
| 
       1386 
     | 
    
         
            -
              if (!groupId) {
         
     | 
| 
       1387 
     | 
    
         
            -
                return "";
         
     | 
| 
       1388 
     | 
    
         
            -
              }
         
     | 
| 
       1389 
     | 
    
         
            -
              if (groupLevel == null) {
         
     | 
| 
       1390 
     | 
    
         
            -
                return groupId;
         
     | 
| 
       1391 
     | 
    
         
            -
              }
         
     | 
| 
       1392 
     | 
    
         
            -
              var currentLevel = this.getGroupLevel(groupId);
         
     | 
| 
       1393 
     | 
    
         
            -
              while (currentLevel > groupLevel && groupId) {
         
     | 
| 
       1394 
     | 
    
         
            -
                groupId = this._childToParent[groupId];
         
     | 
| 
       1395 
     | 
    
         
            -
                currentLevel--;
         
     | 
| 
       1396 
     | 
    
         
            -
              }
         
     | 
| 
       1397 
     | 
    
         
            -
              return groupId || "";
         
     | 
| 
      
 1157 
     | 
    
         
            +
            ColumnGroupingPlugin.prototype._getVisibleParentGroup = function (childId) {
         
     | 
| 
      
 1158 
     | 
    
         
            +
              return this._visibleGroupMap[this._groupDefs.getParentId(childId)] || null;
         
     | 
| 
       1398 
1159 
     | 
    
         
             
            };
         
     | 
| 
       1399 
1160 
     | 
    
         
             
            /** @public
         
     | 
| 
       1400 
1161 
     | 
    
         
             
            * @param {Element|Event|MouseEvent} e
         
     | 
| 
         @@ -1407,27 +1168,30 @@ ColumnGroupingPlugin.prototype.getCellInfo = function (e) { 
     | 
|
| 
       1407 
1168 
     | 
    
         
             
                return null;
         
     | 
| 
       1408 
1169 
     | 
    
         
             
              }
         
     | 
| 
       1409 
1170 
     | 
    
         
             
              var cellInfo = grid.getCellInfo(e);
         
     | 
| 
       1410 
     | 
    
         
            -
              if (!cellInfo 
     | 
| 
      
 1171 
     | 
    
         
            +
              if (!cellInfo) {
         
     | 
| 
      
 1172 
     | 
    
         
            +
                return e;
         
     | 
| 
      
 1173 
     | 
    
         
            +
              }
         
     | 
| 
      
 1174 
     | 
    
         
            +
              if (!cellInfo["cell"]) {
         
     | 
| 
       1411 
1175 
     | 
    
         
             
                var cell = cellInfo.section.getCell(cellInfo.colIndex, cellInfo.rowIndex);
         
     | 
| 
       1412 
1176 
     | 
    
         
             
                cellInfo["cell"] = cell;
         
     | 
| 
       1413 
1177 
     | 
    
         
             
              }
         
     | 
| 
       1414 
1178 
     | 
    
         
             
              var colId = this.getColumnId(cellInfo.colIndex);
         
     | 
| 
       1415 
     | 
    
         
            -
              var groupId = this. 
     | 
| 
      
 1179 
     | 
    
         
            +
              var groupId = this._groupDefs.getParentId(colId, cellInfo.sectionType == "title" ? cellInfo.rowIndex : null);
         
     | 
| 
       1416 
1180 
     | 
    
         
             
              if (!groupId) {
         
     | 
| 
       1417 
1181 
     | 
    
         
             
                cellInfo["columnId"] = colId;
         
     | 
| 
       1418 
1182 
     | 
    
         
             
                return cellInfo;
         
     | 
| 
       1419 
1183 
     | 
    
         
             
              }
         
     | 
| 
       1420 
     | 
    
         
            -
              var groupInfo = this. 
     | 
| 
      
 1184 
     | 
    
         
            +
              var groupInfo = this._groupDefs.getGroup(groupId); // TODO: Check if we need visible group
         
     | 
| 
       1421 
1185 
     | 
    
         
             
              if (groupInfo) {
         
     | 
| 
       1422 
1186 
     | 
    
         
             
                var isGroupHeader = cellInfo.sectionType == "title" && cellInfo.rowIndex == this.getGroupLevel(groupId);
         
     | 
| 
       1423 
1187 
     | 
    
         
             
                if (isGroupHeader) {
         
     | 
| 
       1424 
1188 
     | 
    
         
             
                  cellInfo["groupId"] = groupInfo.id;
         
     | 
| 
       1425 
     | 
    
         
            -
                  cellInfo["groupName"] = groupInfo.name;
         
     | 
| 
      
 1189 
     | 
    
         
            +
                  cellInfo["groupName"] = groupInfo.name || "";
         
     | 
| 
       1426 
1190 
     | 
    
         
             
                  cellInfo["children"] = groupInfo.children;
         
     | 
| 
       1427 
1191 
     | 
    
         
             
                } else {
         
     | 
| 
       1428 
1192 
     | 
    
         
             
                  cellInfo["columnId"] = colId;
         
     | 
| 
       1429 
1193 
     | 
    
         
             
                }
         
     | 
| 
       1430 
     | 
    
         
            -
                cellInfo["parent"] = isGroupHeader ? groupInfo. 
     | 
| 
      
 1194 
     | 
    
         
            +
                cellInfo["parent"] = isGroupHeader ? groupInfo.parentId || null : groupInfo.id;
         
     | 
| 
       1431 
1195 
     | 
    
         
             
              }
         
     | 
| 
       1432 
1196 
     | 
    
         
             
              return cellInfo;
         
     | 
| 
       1433 
1197 
     | 
    
         
             
            };
         
     | 
| 
         @@ -1441,7 +1205,7 @@ ColumnGroupingPlugin.prototype.moveColumnIntoGroup = function (colRef, to, group 
     | 
|
| 
       1441 
1205 
     | 
    
         
             
              if (fromIndex == -1) {
         
     | 
| 
       1442 
1206 
     | 
    
         
             
                return;
         
     | 
| 
       1443 
1207 
     | 
    
         
             
              }
         
     | 
| 
       1444 
     | 
    
         
            -
              var groupDef = this. 
     | 
| 
      
 1208 
     | 
    
         
            +
              var groupDef = this._groupDefs.getGroup(groupId);
         
     | 
| 
       1445 
1209 
     | 
    
         
             
              if (!groupDef) {
         
     | 
| 
       1446 
1210 
     | 
    
         
             
                for (var j = this._hosts.length; --j >= 0;) {
         
     | 
| 
       1447 
1211 
     | 
    
         
             
                  var grid = this._hosts[j];
         
     | 
| 
         @@ -1499,23 +1263,8 @@ ColumnGroupingPlugin.prototype.moveColumnIntoGroup = function (colRef, to, group 
     | 
|
| 
       1499 
1263 
     | 
    
         
             
                host.moveColumn(fromIndex, to);
         
     | 
| 
       1500 
1264 
     | 
    
         
             
              }
         
     | 
| 
       1501 
1265 
     | 
    
         
             
              if (colId) {
         
     | 
| 
       1502 
     | 
    
         
            -
                 
     | 
| 
       1503 
     | 
    
         
            -
             
     | 
| 
       1504 
     | 
    
         
            -
                var previousGroup = this._childToParent[colId];
         
     | 
| 
       1505 
     | 
    
         
            -
                if (previousGroup) {
         
     | 
| 
       1506 
     | 
    
         
            -
                  var previousGroupChild = this.getGroupChildren(previousGroup);
         
     | 
| 
       1507 
     | 
    
         
            -
                  var removeIndex = previousGroupChild.indexOf(colId);
         
     | 
| 
       1508 
     | 
    
         
            -
                  if (removeIndex !== -1) {
         
     | 
| 
       1509 
     | 
    
         
            -
                    previousGroupChild.splice(previousGroupChild.indexOf(colId), 1);
         
     | 
| 
       1510 
     | 
    
         
            -
                  }
         
     | 
| 
       1511 
     | 
    
         
            -
                  this.setGroupChildren(previousGroup, previousGroupChild);
         
     | 
| 
       1512 
     | 
    
         
            -
                }
         
     | 
| 
       1513 
     | 
    
         
            -
             
     | 
| 
       1514 
     | 
    
         
            -
                // Add to new group
         
     | 
| 
       1515 
     | 
    
         
            -
                var children = this.getGroupChildren(groupId);
         
     | 
| 
       1516 
     | 
    
         
            -
                if (children.indexOf(colId) < 0) {
         
     | 
| 
       1517 
     | 
    
         
            -
                  children.push(colId);
         
     | 
| 
       1518 
     | 
    
         
            -
                  this.setGroupChildren(groupId, children);
         
     | 
| 
      
 1266 
     | 
    
         
            +
                if (this._groupDefs.addGroupChild(groupId, colId)) {
         
     | 
| 
      
 1267 
     | 
    
         
            +
                  this._applyGrouping();
         
     | 
| 
       1519 
1268 
     | 
    
         
             
                }
         
     | 
| 
       1520 
1269 
     | 
    
         
             
              }
         
     | 
| 
       1521 
1270 
     | 
    
         
             
            };
         
     | 
| 
         @@ -1549,12 +1298,11 @@ ColumnGroupingPlugin.prototype.setColumnParent = function (colRef, groupId) { 
     | 
|
| 
       1549 
1298 
     | 
    
         
             
            * @returns {number} destination index
         
     | 
| 
       1550 
1299 
     | 
    
         
             
            */
         
     | 
| 
       1551 
1300 
     | 
    
         
             
            ColumnGroupingPlugin.prototype.getValidDestinationIndex = function (id, destCol) {
         
     | 
| 
       1552 
     | 
    
         
            -
              var  
     | 
| 
       1553 
     | 
    
         
            -
               
     | 
| 
       1554 
     | 
    
         
            -
             
     | 
| 
       1555 
     | 
    
         
            -
                parentGroupDef = this.getGroupDefinition(groupDef["parent"]);
         
     | 
| 
      
 1301 
     | 
    
         
            +
              var parentGroupDef = null;
         
     | 
| 
      
 1302 
     | 
    
         
            +
              if (this._groupDefs.getGroup(id)) {
         
     | 
| 
      
 1303 
     | 
    
         
            +
                parentGroupDef = this._getVisibleParentGroup(id);
         
     | 
| 
       1556 
1304 
     | 
    
         
             
              } else if (this.getColumnIndex(id) > -1) {
         
     | 
| 
       1557 
     | 
    
         
            -
                parentGroupDef = this. 
     | 
| 
      
 1305 
     | 
    
         
            +
                parentGroupDef = this._getVisibleParentGroup(id);
         
     | 
| 
       1558 
1306 
     | 
    
         
             
              }
         
     | 
| 
       1559 
1307 
     | 
    
         
             
              var startIndex = -1;
         
     | 
| 
       1560 
1308 
     | 
    
         
             
              var endIndex = -1;
         
     | 
| 
         @@ -1590,10 +1338,10 @@ ColumnGroupingPlugin.prototype.getValidDestinationIndex = function (id, destCol) 
     | 
|
| 
       1590 
1338 
     | 
    
         
             
                // handle group/column should not insert between group when group/column is not a child of any group
         
     | 
| 
       1591 
1339 
     | 
    
         
             
                var destMemberIndices = [];
         
     | 
| 
       1592 
1340 
     | 
    
         
             
                var destColId = this.getColumnId(destColIndex);
         
     | 
| 
       1593 
     | 
    
         
            -
                var destParent = this. 
     | 
| 
      
 1341 
     | 
    
         
            +
                var destParent = this._getVisibleParentGroup(destColId);
         
     | 
| 
       1594 
1342 
     | 
    
         
             
                if (destParent) {
         
     | 
| 
       1595 
     | 
    
         
            -
                  if (destParent 
     | 
| 
       1596 
     | 
    
         
            -
                    destParent = this. 
     | 
| 
      
 1343 
     | 
    
         
            +
                  if (destParent.parentId) {
         
     | 
| 
      
 1344 
     | 
    
         
            +
                    destParent = this._groupDefs.getRootGroup(destParent["id"]);
         
     | 
| 
       1597 
1345 
     | 
    
         
             
                  }
         
     | 
| 
       1598 
1346 
     | 
    
         
             
                  destMemberIndices = this.getChildColumnIndices(destParent["id"]);
         
     | 
| 
       1599 
1347 
     | 
    
         
             
                }
         
     | 
| 
         @@ -1618,7 +1366,7 @@ ColumnGroupingPlugin.prototype.getValidDestinationIndex = function (id, destCol) 
     | 
|
| 
       1618 
1366 
     | 
    
         
             
            ColumnGroupingPlugin.prototype.moveGroup = function (id, destCol) {
         
     | 
| 
       1619 
1367 
     | 
    
         
             
              var groupDef;
         
     | 
| 
       1620 
1368 
     | 
    
         
             
              var members = [];
         
     | 
| 
       1621 
     | 
    
         
            -
              groupDef = this. 
     | 
| 
      
 1369 
     | 
    
         
            +
              groupDef = this._groupDefs.getGroup(id);
         
     | 
| 
       1622 
1370 
     | 
    
         
             
              if (groupDef) {
         
     | 
| 
       1623 
1371 
     | 
    
         
             
                var indices = this.getChildColumnIndices(groupDef["id"]);
         
     | 
| 
       1624 
1372 
     | 
    
         
             
                for (var i = 0; i < indices.length; i++) {
         
     | 
| 
         @@ -1636,11 +1384,11 @@ ColumnGroupingPlugin.prototype.moveGroup = function (id, destCol) { 
     | 
|
| 
       1636 
1384 
     | 
    
         | 
| 
       1637 
1385 
     | 
    
         
             
              // TODO: create method for toggling autoGrouping flag
         
     | 
| 
       1638 
1386 
     | 
    
         
             
              this._autoGrouping = false;
         
     | 
| 
       1639 
     | 
    
         
            -
               
     | 
| 
       1640 
     | 
    
         
            -
             
     | 
| 
       1641 
     | 
    
         
            -
             
     | 
| 
       1642 
     | 
    
         
            -
                this._compositeGrid.reorderColumns(members, destColId);
         
     | 
| 
      
 1387 
     | 
    
         
            +
              var gridApi = this.getGridApi();
         
     | 
| 
      
 1388 
     | 
    
         
            +
              if (gridApi && gridApi.reorderColumns) {
         
     | 
| 
      
 1389 
     | 
    
         
            +
                gridApi.reorderColumns(members, destColId); // TODO: Support multi-table feature
         
     | 
| 
       1643 
1390 
     | 
    
         
             
              }
         
     | 
| 
      
 1391 
     | 
    
         
            +
             
     | 
| 
       1644 
1392 
     | 
    
         
             
              this._autoGrouping = true;
         
     | 
| 
       1645 
1393 
     | 
    
         
             
            };
         
     | 
| 
       1646 
1394 
     | 
    
         
             
            export default ColumnGroupingPlugin;
         
     |