diff --git a/src/features/expandable/js/expandable.js b/src/features/expandable/js/expandable.js
index 6a27b8c7ad..7f6b991a08 100644
--- a/src/features/expandable/js/expandable.js
+++ b/src/features/expandable/js/expandable.js
@@ -335,7 +335,7 @@
};
expandableRowHeaderColDef.cellTemplate = $templateCache.get('ui-grid/expandableRowHeader');
expandableRowHeaderColDef.headerCellTemplate = $templateCache.get('ui-grid/expandableTopRowHeader');
- uiGridCtrl.grid.addRowHeaderColumn(expandableRowHeaderColDef);
+ uiGridCtrl.grid.addRowHeaderColumn(expandableRowHeaderColDef, -90);
}
uiGridExpandableService.initializeGrid(uiGridCtrl.grid);
},
diff --git a/src/features/expandable/templates/expandableRowHeader.html b/src/features/expandable/templates/expandableRowHeader.html
index f5d294fdc7..a31ac19077 100644
--- a/src/features/expandable/templates/expandableRowHeader.html
+++ b/src/features/expandable/templates/expandableRowHeader.html
@@ -2,7 +2,7 @@
class="ui-grid-row-header-cell ui-grid-expandable-buttons-cell">
-
diff --git a/src/features/grouping/js/grouping.js b/src/features/grouping/js/grouping.js
index 2c832aa749..305c14940e 100644
--- a/src/features/grouping/js/grouping.js
+++ b/src/features/grouping/js/grouping.js
@@ -619,7 +619,7 @@
columns.sort(function(a, b){
var a_group, b_group;
if (a.isRowHeader){
- a_group = -1000;
+ a_group = a.headerPriority;
}
else if ( typeof(a.grouping) === 'undefined' || typeof(a.grouping.groupPriority) === 'undefined' || a.grouping.groupPriority < 0){
a_group = null;
@@ -628,7 +628,7 @@
}
if (b.isRowHeader){
- b_group = -1000;
+ b_group = b.headerPriority;
}
else if ( typeof(b.grouping) === 'undefined' || typeof(b.grouping.groupPriority) === 'undefined' || b.grouping.groupPriority < 0){
b_group = null;
diff --git a/src/features/grouping/test/grouping.spec.js b/src/features/grouping/test/grouping.spec.js
index a9a8aecc1f..60ff2baa92 100644
--- a/src/features/grouping/test/grouping.spec.js
+++ b/src/features/grouping/test/grouping.spec.js
@@ -85,7 +85,7 @@ describe('ui.grid.grouping uiGridGroupingService', function () {
it( 'will not move header columns', function() {
$timeout(function () {
- grid.addRowHeaderColumn({name:'aRowHeader'});
+ grid.addRowHeaderColumn({name:'aRowHeader'}, -200);
});
$timeout.flush();
diff --git a/src/features/selection/js/selection.js b/src/features/selection/js/selection.js
index a2820799b5..016e51a7e8 100644
--- a/src/features/selection/js/selection.js
+++ b/src/features/selection/js/selection.js
@@ -667,7 +667,7 @@
allowCellFocus: true
};
- uiGridCtrl.grid.addRowHeaderColumn(selectionRowHeaderDef);
+ uiGridCtrl.grid.addRowHeaderColumn(selectionRowHeaderDef, 0);
}
var processorSet = false;
diff --git a/src/features/tree-base/js/tree-base.js b/src/features/tree-base/js/tree-base.js
index c7c723dc1b..6156412b61 100644
--- a/src/features/tree-base/js/tree-base.js
+++ b/src/features/tree-base/js/tree-base.js
@@ -461,7 +461,7 @@
* @ngdoc object
* @name showTreeRowHeader
* @propertyOf ui.grid.treeBase.api:GridOptions
- * @description If set to false, don't create the row header. Youll need to programatically control the expand
+ * @description If set to false, don't create the row header. You'll need to programmatically control the expand
* states
*
Defaults to true
*/
@@ -715,7 +715,7 @@
};
rowHeaderColumnDef.visible = grid.options.treeRowHeaderAlwaysVisible;
- grid.addRowHeaderColumn( rowHeaderColumnDef );
+ grid.addRowHeaderColumn( rowHeaderColumnDef, -100 );
},
diff --git a/src/js/core/factories/Grid.js b/src/js/core/factories/Grid.js
index 92143e9902..4b19c53528 100644
--- a/src/js/core/factories/Grid.js
+++ b/src/js/core/factories/Grid.js
@@ -272,6 +272,8 @@ angular.module('ui.grid')
* @methodOf ui.grid.core.api:PublicApi
* @description adds a row header column to the grid
* @param {object} column def
+ * @param {number} order Determines order of header column on grid. Lower order means header
+ * is positioned to the left of higher order headers
*
*/
self.api.registerMethod( 'core', 'addRowHeaderColumn', this.addRowHeaderColumn );
@@ -379,7 +381,7 @@ angular.module('ui.grid')
* that have sorting on them, sorted in priority order.
*
* @param {$scope} scope The scope of the controller. This is used to deregister this event when the scope is destroyed.
- * @param {Function} callBack Will be called when the event is emited. The function passes back the grid and an array of
+ * @param {Function} callBack Will be called when the event is emited. The function passes back the grid and an array of
* columns with sorts on them, in priority order.
*
* @example
@@ -754,8 +756,14 @@ angular.module('ui.grid')
* @description adds a row header column to the grid
* @param {object} column def
*/
- Grid.prototype.addRowHeaderColumn = function addRowHeaderColumn(colDef) {
+ Grid.prototype.addRowHeaderColumn = function addRowHeaderColumn(colDef, order) {
var self = this;
+
+ //default order
+ if (order === undefined) {
+ order = 0;
+ }
+
var rowHeaderCol = new GridColumn(colDef, gridUtil.nextUid(), self);
rowHeaderCol.isRowHeader = true;
if (self.isRTL()) {
@@ -774,7 +782,12 @@ angular.module('ui.grid')
rowHeaderCol.enableFiltering = false;
rowHeaderCol.enableSorting = false;
rowHeaderCol.enableHiding = false;
+ rowHeaderCol.headerPriority = order;
self.rowHeaderColumns.push(rowHeaderCol);
+ self.rowHeaderColumns = self.rowHeaderColumns.sort(function (a, b) {
+ return a.headerPriority - b.headerPriority;
+ });
+
self.buildColumns()
.then( function() {
self.preCompileCellTemplates();
@@ -836,9 +849,11 @@ angular.module('ui.grid')
}
//add row header columns to the grid columns array _after_ columns without columnDefs have been removed
- self.rowHeaderColumns.forEach(function (rowHeaderColumn) {
- self.columns.unshift(rowHeaderColumn);
- });
+ //rowHeaderColumns is ordered by priority so insert in reverse
+ for (var j = self.rowHeaderColumns.length - 1; j >= 0; j--) {
+ self.columns.unshift(self.rowHeaderColumns[j]);
+ }
+
// look at each column def, and update column properties to match. If the column def
@@ -898,6 +913,19 @@ angular.module('ui.grid')
});
};
+ Grid.prototype.preCompileCellTemplate = function(col) {
+ var self = this;
+ var html = col.cellTemplate.replace(uiGridConstants.MODEL_COL_FIELD, self.getQualifiedColField(col));
+ html = html.replace(uiGridConstants.COL_FIELD, 'grid.getCellValue(row, col)');
+
+ var compiledElementFn = $compile(html);
+ col.compiledElementFn = compiledElementFn;
+
+ if (col.compiledElementFnDefer) {
+ col.compiledElementFnDefer.resolve(col.compiledElementFn);
+ }
+ };
+
/**
* @ngdoc function
* @name preCompileCellTemplates
@@ -906,25 +934,12 @@ angular.module('ui.grid')
*/
Grid.prototype.preCompileCellTemplates = function() {
var self = this;
-
- var preCompileTemplate = function( col ) {
- var html = col.cellTemplate.replace(uiGridConstants.MODEL_COL_FIELD, self.getQualifiedColField(col));
- html = html.replace(uiGridConstants.COL_FIELD, 'grid.getCellValue(row, col)');
-
- var compiledElementFn = $compile(html);
- col.compiledElementFn = compiledElementFn;
-
- if (col.compiledElementFnDefer) {
- col.compiledElementFnDefer.resolve(col.compiledElementFn);
- }
- };
-
- this.columns.forEach(function (col) {
+ self.columns.forEach(function (col) {
if ( col.cellTemplate ){
- preCompileTemplate( col );
+ self.preCompileCellTemplate( col );
} else if ( col.cellTemplatePromise ){
col.cellTemplatePromise.then( function() {
- preCompileTemplate( col );
+ self.preCompileCellTemplate( col );
});
}
});
diff --git a/test/unit/core/factories/Grid.spec.js b/test/unit/core/factories/Grid.spec.js
index 9a76b7fdf7..5b0af4a082 100644
--- a/test/unit/core/factories/Grid.spec.js
+++ b/test/unit/core/factories/Grid.spec.js
@@ -294,20 +294,19 @@ describe('Grid factory', function () {
expect(grid1.columns[5].name).toEqual('5');
});
- it('should respect the row header', function() {
+ it('should respect the row header in order', function() {
var columnDefs = [
{name:'1'},
- {name:'2'},
- {name:'3'},
- {name:'4'},
- {name:'5'}
+ {name:'2'}
];
var grid1 = gridClassFactory.createGrid({columnDefs:columnDefs});
$timeout(function(){
- grid1.addRowHeaderColumn({name:'rowHeader'});
+ grid1.addRowHeaderColumn({name:'rowHeader3'},100);
+ grid1.addRowHeaderColumn({name:'rowHeader1'},-100);
+ grid1.addRowHeaderColumn({name:'rowHeader2'},0);
});
$timeout.flush();
@@ -317,26 +316,12 @@ describe('Grid factory', function () {
$timeout.flush();
- expect(grid1.columns[0].name).toEqual('rowHeader');
- expect(grid1.columns[1].name).toEqual('1');
- expect(grid1.columns[2].name).toEqual('2');
- expect(grid1.columns[3].name).toEqual('3');
- expect(grid1.columns[4].name).toEqual('4');
- expect(grid1.columns[5].name).toEqual('5');
+ expect(grid1.columns[0].name).toEqual('rowHeader1');
+ expect(grid1.columns[1].name).toEqual('rowHeader2');
+ expect(grid1.columns[2].name).toEqual('rowHeader3');
+ expect(grid1.columns[3].name).toEqual('1');
+ expect(grid1.columns[4].name).toEqual('2');
- grid1.options.columnDefs.splice(3, 0, {name: '3.5'});
-
- $timeout(function(){
- grid1.buildColumns();
- });
- $timeout.flush();
-
- expect(grid1.columns[1].name).toEqual('1');
- expect(grid1.columns[2].name).toEqual('2');
- expect(grid1.columns[3].name).toEqual('3');
- expect(grid1.columns[4].name).toEqual('3.5');
- expect(grid1.columns[5].name).toEqual('4');
- expect(grid1.columns[6].name).toEqual('5');
});
it('add columns at the correct position - start', function() {