Skip to content

Commit 0b7304f

Browse files
Portugal, Marcelomportuga
Portugal, Marcelo
authored andcommitted
fix(selection): SelectAllRows pays attention to isRowSelectable function.
Added a check to verify if rows are selectable prior to selecting them. fix #6370
1 parent 08ec049 commit 0b7304f

File tree

2 files changed

+24
-16
lines changed

2 files changed

+24
-16
lines changed

src/features/selection/js/selection.js

+11-13
Original file line numberDiff line numberDiff line change
@@ -235,19 +235,17 @@
235235
* @param {Event} evt object if raised from an event
236236
*/
237237
selectAllRows: function (evt) {
238-
if (grid.options.multiSelect === false) {
239-
return;
238+
if (grid.options.multiSelect !== false) {
239+
var changedRows = [];
240+
grid.rows.forEach(function (row) {
241+
if (!row.isSelected && row.enableSelection !== false && grid.options.isRowSelectable(row) !== false) {
242+
row.setSelected(true);
243+
service.decideRaiseSelectionEvent(grid, row, changedRows, evt);
244+
}
245+
});
246+
service.decideRaiseSelectionBatchEvent(grid, changedRows, evt);
247+
grid.selection.selectAll = true;
240248
}
241-
242-
var changedRows = [];
243-
grid.rows.forEach(function (row) {
244-
if (!row.isSelected && row.enableSelection !== false) {
245-
row.setSelected(true);
246-
service.decideRaiseSelectionEvent(grid, row, changedRows, evt);
247-
}
248-
});
249-
service.decideRaiseSelectionBatchEvent(grid, changedRows, evt);
250-
grid.selection.selectAll = true;
251249
},
252250
/**
253251
* @ngdoc function
@@ -261,7 +259,7 @@
261259
var changedRows = [];
262260
grid.rows.forEach(function(row) {
263261
if (row.visible) {
264-
if (!row.isSelected && row.enableSelection !== false) {
262+
if (!row.isSelected && row.enableSelection !== false && grid.options.isRowSelectable(row) !== false) {
265263
row.setSelected(true);
266264
service.decideRaiseSelectionEvent(grid, row, changedRows, evt);
267265
}

src/features/selection/test/uiGridSelectionService.spec.js

+13-3
Original file line numberDiff line numberDiff line change
@@ -223,8 +223,14 @@ describe('ui.grid.selection uiGridSelectionService', function () {
223223
}
224224
expect(grid.selection.selectAll).toBe(false);
225225

226+
grid.options.isRowSelectable = function(row) {
227+
return row.isRowSelectable !== false;
228+
};
229+
230+
grid.rows[6].isRowSelectable = false;
226231
grid.rows[8].enableSelection = false;
227232
grid.api.selection.selectAllRows();
233+
expect(grid.rows[6].isSelected).toBe(false);
228234
expect(grid.rows[7].isSelected).toBe(true);
229235
expect(grid.rows[8].isSelected).toBe(false);
230236
});
@@ -244,18 +250,22 @@ describe('ui.grid.selection uiGridSelectionService', function () {
244250
});
245251

246252
describe('selectAllVisibleRows function', function() {
247-
it('should select all visible rows', function () {
253+
it('should select all visible and selectable rows', function () {
248254
grid.api.selection.selectRow(grid.rows[4].entity);
249255
expect(grid.rows[4].isSelected).toBe(true);
250256

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

261+
grid.options.isRowSelectable = function(row) {
262+
return row.isRowSelectable !== false;
263+
};
255264
grid.rows[3].visible = true;
256265
grid.rows[4].visible = true;
257266
grid.rows[6].visible = false;
258267
grid.rows[7].visible = true;
268+
grid.rows[7].isRowSelectable = false;
259269
grid.rows[8].enableSelection = false;
260270
grid.rows[9].visible = true;
261271
expect(grid.selection.selectAll).toBe(false);
@@ -264,11 +274,11 @@ describe('ui.grid.selection uiGridSelectionService', function () {
264274
expect(grid.rows[3].isSelected).toBe(true);
265275
expect(grid.rows[4].isSelected).toBe(true);
266276
expect(grid.rows[6].isSelected).toBe(false);
267-
expect(grid.rows[7].isSelected).toBe(true);
277+
expect(grid.rows[7].isSelected).toBe(false);
268278
expect(grid.rows[8].isSelected).toBe(false);
269279
expect(grid.rows[9].isSelected).toBe(true);
270280
expect(grid.selection.selectAll).toBe(true);
271-
expect(grid.selection.selectedCount).toBe(8);
281+
expect(grid.selection.selectedCount).toBe(7);
272282
});
273283
});
274284

0 commit comments

Comments
 (0)