Skip to content

Commit

Permalink
fix(selection): SelectAllRows pays attention to isRowSelectable funct…
Browse files Browse the repository at this point in the history
…ion.

Added a check to verify if rows are selectable prior to selecting them.

fix #6370
  • Loading branch information
Portugal, Marcelo authored and mportuga committed Mar 22, 2018
1 parent 08ec049 commit 0b7304f
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 16 deletions.
24 changes: 11 additions & 13 deletions src/features/selection/js/selection.js
Original file line number Diff line number Diff line change
Expand Up @@ -235,19 +235,17 @@
* @param {Event} evt object if raised from an event
*/
selectAllRows: function (evt) {
if (grid.options.multiSelect === false) {
return;
if (grid.options.multiSelect !== false) {
var changedRows = [];
grid.rows.forEach(function (row) {
if (!row.isSelected && row.enableSelection !== false && grid.options.isRowSelectable(row) !== false) {
row.setSelected(true);
service.decideRaiseSelectionEvent(grid, row, changedRows, evt);
}
});
service.decideRaiseSelectionBatchEvent(grid, changedRows, evt);
grid.selection.selectAll = true;
}

var changedRows = [];
grid.rows.forEach(function (row) {
if (!row.isSelected && row.enableSelection !== false) {
row.setSelected(true);
service.decideRaiseSelectionEvent(grid, row, changedRows, evt);
}
});
service.decideRaiseSelectionBatchEvent(grid, changedRows, evt);
grid.selection.selectAll = true;
},
/**
* @ngdoc function
Expand All @@ -261,7 +259,7 @@
var changedRows = [];
grid.rows.forEach(function(row) {
if (row.visible) {
if (!row.isSelected && row.enableSelection !== false) {
if (!row.isSelected && row.enableSelection !== false && grid.options.isRowSelectable(row) !== false) {
row.setSelected(true);
service.decideRaiseSelectionEvent(grid, row, changedRows, evt);
}
Expand Down
16 changes: 13 additions & 3 deletions src/features/selection/test/uiGridSelectionService.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -223,8 +223,14 @@ describe('ui.grid.selection uiGridSelectionService', function () {
}
expect(grid.selection.selectAll).toBe(false);

grid.options.isRowSelectable = function(row) {
return row.isRowSelectable !== false;
};

grid.rows[6].isRowSelectable = false;
grid.rows[8].enableSelection = false;
grid.api.selection.selectAllRows();
expect(grid.rows[6].isSelected).toBe(false);
expect(grid.rows[7].isSelected).toBe(true);
expect(grid.rows[8].isSelected).toBe(false);
});
Expand All @@ -244,18 +250,22 @@ describe('ui.grid.selection uiGridSelectionService', function () {
});

describe('selectAllVisibleRows function', function() {
it('should select all visible rows', function () {
it('should select all visible and selectable rows', function () {
grid.api.selection.selectRow(grid.rows[4].entity);
expect(grid.rows[4].isSelected).toBe(true);

grid.api.selection.selectRow(grid.rows[6].entity);
expect(grid.rows[4].isSelected).toBe(true);
expect(grid.rows[6].isSelected).toBe(true);

grid.options.isRowSelectable = function(row) {
return row.isRowSelectable !== false;
};
grid.rows[3].visible = true;
grid.rows[4].visible = true;
grid.rows[6].visible = false;
grid.rows[7].visible = true;
grid.rows[7].isRowSelectable = false;
grid.rows[8].enableSelection = false;
grid.rows[9].visible = true;
expect(grid.selection.selectAll).toBe(false);
Expand All @@ -264,11 +274,11 @@ describe('ui.grid.selection uiGridSelectionService', function () {
expect(grid.rows[3].isSelected).toBe(true);
expect(grid.rows[4].isSelected).toBe(true);
expect(grid.rows[6].isSelected).toBe(false);
expect(grid.rows[7].isSelected).toBe(true);
expect(grid.rows[7].isSelected).toBe(false);
expect(grid.rows[8].isSelected).toBe(false);
expect(grid.rows[9].isSelected).toBe(true);
expect(grid.selection.selectAll).toBe(true);
expect(grid.selection.selectedCount).toBe(8);
expect(grid.selection.selectedCount).toBe(7);
});
});

Expand Down

0 comments on commit 0b7304f

Please sign in to comment.