Skip to content

Commit 26ca621

Browse files
committed
fix(treeBase): Change calculation of number of levels in tree
Change the treeBase.numberLevels variable to consider a single level as 1 instead of 0 Previously there was no way to use this variable to differentiate between a single tree level and no grouping at all. This does not impact row.treeLevel, which is still zero-based. Reset treeBase.numberLevels each time the tree is created. Remove unneeded dependency for groupingService in treeBase.uiGridViewport directive Add treeRowHeaderAlwaysVisible=false option to complex grouping tutorial (320). Fixes: #3572
1 parent 363e4a5 commit 26ca621

File tree

3 files changed

+11
-9
lines changed

3 files changed

+11
-9
lines changed

misc/tutorial/320_complex_grouping.ngdoc

+1
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ children of the selected rowHeader.
4343
$scope.gridOptions = {
4444
enableFiltering: true,
4545
enableGroupHeaderSelection: true,
46+
treeRowHeaderAlwaysVisible: false,
4647
columnDefs: [
4748
{ name: 'name', width: '30%' },
4849
{ name: 'gender', grouping: { groupPriority: 1 }, sort: { priority: 1, direction: 'asc' }, editableCellTemplate: 'ui-grid/dropdownEditor', width: '20%',

src/features/tree-base/js/tree-base.js

+6-5
Original file line numberDiff line numberDiff line change
@@ -924,7 +924,7 @@
924924
updateRowHeaderWidth: function( grid ){
925925
var rowHeader = grid.getColumn(uiGridTreeBaseConstants.rowHeaderColName);
926926

927-
var newWidth = grid.options.treeRowHeaderBaseWidth + grid.options.treeIndent * grid.treeBase.numberLevels;
927+
var newWidth = grid.options.treeRowHeaderBaseWidth + grid.options.treeIndent * Math.max(grid.treeBase.numberLevels - 1, 0);
928928
if ( rowHeader && newWidth !== rowHeader.width ){
929929
rowHeader.width = newWidth;
930930
grid.queueRefresh();
@@ -985,6 +985,7 @@
985985
var parents = [];
986986
var currentState;
987987
grid.treeBase.tree = [];
988+
grid.treeBase.numberLevels = 0;
988989
var aggregations = service.getAggregations( grid );
989990

990991
var createNode = function( row ){
@@ -1023,8 +1024,8 @@
10231024
}
10241025

10251026
// update the tree number of levels, so we can set header width if we need to
1026-
if ( grid.treeBase.numberLevels < row.treeLevel ){
1027-
grid.treeBase.numberLevels = row.treeLevel;
1027+
if ( grid.treeBase.numberLevels < row.treeLevel + 1){
1028+
grid.treeBase.numberLevels = row.treeLevel + 1;
10281029
}
10291030
};
10301031

@@ -1454,8 +1455,8 @@
14541455
* @description Stacks on top of ui.grid.uiGridViewport to set formatting on a tree header row
14551456
*/
14561457
module.directive('uiGridViewport',
1457-
['$compile', 'uiGridConstants', 'gridUtil', '$parse', 'uiGridGroupingService',
1458-
function ($compile, uiGridConstants, gridUtil, $parse, uiGridGroupingService) {
1458+
['$compile', 'uiGridConstants', 'gridUtil', '$parse',
1459+
function ($compile, uiGridConstants, gridUtil, $parse) {
14591460
return {
14601461
priority: -200, // run after default directive
14611462
scope: false,

src/features/tree-base/test/tree-base.spec.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ describe('ui.grid.treeBase uiGridTreeBaseService', function () {
172172
it( 'tree the rows', function() {
173173
var treeRows = uiGridTreeBaseService.treeRows.call( grid, grid.rows.slice(0) );
174174
expect( treeRows.length ).toEqual( 2, 'only the level 0 rows are visible' );
175-
expect( grid.treeBase.numberLevels).toEqual(2, 'two levels in the tree');
175+
expect( grid.treeBase.numberLevels).toEqual(3, 'three levels in the tree');
176176
});
177177
});
178178

@@ -244,7 +244,7 @@ describe('ui.grid.treeBase uiGridTreeBaseService', function () {
244244
expect( rows[0].treeNode ).toEqual( grid.treeBase.tree[0], 'treeNode is the first node in the tree' );
245245
delete rows[0].treeNode;
246246
expect( rows[0] ).toEqual( { uid: 1, treeLevel: 0, entity: { $$treeLevel: 0 }, visible: true }, 'treeLevel copied down' );
247-
expect( grid.treeBase.numberLevels).toEqual(0, 'one level in the tree (is zero based like an array)');
247+
expect( grid.treeBase.numberLevels).toEqual(1, 'one level in the tree');
248248
expect( grid.treeBase.tree.length).toEqual( 1, 'one node at root level of tree');
249249
expect( grid.treeBase.tree[0].row).toEqual( rows[0], 'node is for row 0');
250250
delete grid.treeBase.tree[0].row;
@@ -263,7 +263,7 @@ describe('ui.grid.treeBase uiGridTreeBaseService', function () {
263263
var tree = uiGridTreeBaseService.createTree( grid, rows );
264264

265265
// overall settings
266-
expect( grid.treeBase.numberLevels).toEqual(1, 'two levels in the tree (is zero based like an array)');
266+
expect( grid.treeBase.numberLevels).toEqual(2, 'two levels in the tree');
267267

268268
// rows
269269
expect( rows.length ).toEqual( 5, 'still only 5 rows' );
@@ -356,7 +356,7 @@ describe('ui.grid.treeBase uiGridTreeBaseService', function () {
356356
var tree = uiGridTreeBaseService.createTree( grid, rows );
357357

358358
// overall settings
359-
expect( grid.treeBase.numberLevels).toEqual(1, 'two levels in the tree (is zero based like an array)');
359+
expect( grid.treeBase.numberLevels).toEqual(2, 'two levels in the tree');
360360

361361
// rows
362362
expect( rows.length ).toEqual( 10, 'still only 10 rows' );

0 commit comments

Comments
 (0)