Skip to content

Commit 5e81844

Browse files
prx-lmomportuga
authored andcommitted
[hotfix/6418]
- added param canBeInvisible to toggleRowSelection, which, if false, only selects rows when visible
1 parent fc5cbf6 commit 5e81844

File tree

1 file changed

+24
-25
lines changed

1 file changed

+24
-25
lines changed

packages/selection/src/js/selection.js

Lines changed: 24 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@
202202
toggleRowSelection: function (rowEntity, evt) {
203203
var row = grid.getRow(rowEntity);
204204
if (row !== null) {
205-
service.toggleRowSelection(grid, row, evt, grid.options.multiSelect, grid.options.noUnselect);
205+
service.toggleRowSelection(grid, row, evt, grid.options.multiSelect, grid.options.noUnselect, true);
206206
}
207207
},
208208
/**
@@ -216,7 +216,7 @@
216216
selectRow: function (rowEntity, evt) {
217217
var row = grid.getRow(rowEntity);
218218
if (row !== null && !row.isSelected) {
219-
service.toggleRowSelection(grid, row, evt, grid.options.multiSelect, grid.options.noUnselect);
219+
service.toggleRowSelection(grid, row, evt, grid.options.multiSelect, grid.options.noUnselect, true);
220220
}
221221
},
222222
/**
@@ -233,7 +233,7 @@
233233
selectRowByVisibleIndex: function (rowNum, evt) {
234234
var row = grid.renderContainers.body.visibleRowCache[rowNum];
235235
if (row !== null && typeof (row) !== 'undefined' && !row.isSelected) {
236-
service.toggleRowSelection(grid, row, evt, grid.options.multiSelect, grid.options.noUnselect);
236+
service.toggleRowSelection(grid, row, evt, grid.options.multiSelect, grid.options.noUnselect, false);
237237
}
238238
},
239239
/**
@@ -247,7 +247,7 @@
247247
unSelectRow: function (rowEntity, evt) {
248248
var row = grid.getRow(rowEntity);
249249
if (row !== null && row.isSelected) {
250-
service.toggleRowSelection(grid, row, evt, grid.options.multiSelect, grid.options.noUnselect);
250+
service.toggleRowSelection(grid, row, evt, grid.options.multiSelect, grid.options.noUnselect, true);
251251
}
252252
},
253253
/**
@@ -264,7 +264,7 @@
264264
unSelectRowByVisibleIndex: function (rowNum, evt) {
265265
var row = grid.renderContainers.body.visibleRowCache[rowNum];
266266
if (row !== null && typeof (row) !== 'undefined' && row.isSelected) {
267-
service.toggleRowSelection(grid, row, evt, grid.options.multiSelect, grid.options.noUnselect);
267+
service.toggleRowSelection(grid, row, evt, grid.options.multiSelect, grid.options.noUnselect, false);
268268
}
269269
},
270270
/**
@@ -545,38 +545,37 @@
545545
* @param {Event} evt object if resulting from event
546546
* @param {bool} multiSelect if false, only one row at time can be selected
547547
* @param {bool} noUnselect if true then rows cannot be unselected
548+
* @param {bool} [canBeInvisible=true] if false, row can only be selected when it's (theoretically) visible
548549
*/
549-
toggleRowSelection: function (grid, row, evt, multiSelect, noUnselect) {
550+
toggleRowSelection: function (grid, row, evt, multiSelect, noUnselect, canBeInvisible) {
550551
if ( row.enableSelection === false ) {
551552
return;
552553
}
553554

554-
var selected = row.isSelected,
555-
selectedRows;
555+
if (canBeInvisible === void 0) {
556+
canBeInvisible = true;
557+
}
558+
559+
var selected = row.isSelected;
556560

557561
if (!multiSelect) {
558562
if (!selected) {
559563
service.clearSelectedRows(grid, evt);
560564
}
561-
else {
562-
selectedRows = service.getSelectedRows(grid);
563-
if (selectedRows.length > 1) {
564-
selected = false; // Enable reselect of the row
565-
service.clearSelectedRows(grid, evt);
566-
}
565+
else if (service.getSelectedRows(grid).length > 1) {
566+
selected = false; // Enable reselect of the row
567+
service.clearSelectedRows(grid, evt);
567568
}
568569
}
569570

570571
// only select row in this case
571-
if (!(selected && noUnselect)) {
572+
if (!(selected && noUnselect) && (canBeInvisible || row.visible)) {
572573
row.setSelected(!selected);
573574
if (row.isSelected === true) {
574575
grid.selection.lastSelectedRow = row;
575576
}
576577

577-
selectedRows = service.getSelectedRows(grid);
578-
grid.selection.selectAll = grid.rows.length === selectedRows.length;
579-
578+
grid.selection.selectAll = grid.rows.length === service.getSelectedRows(grid).length;
580579
grid.api.selection.raise.rowSelectionChanged(row, evt);
581580
}
582581
},
@@ -850,17 +849,17 @@
850849
}
851850
else if (evt.ctrlKey || evt.metaKey) {
852851
uiGridSelectionService.toggleRowSelection(self, row, evt,
853-
self.options.multiSelect, self.options.noUnselect);
852+
self.options.multiSelect, self.options.noUnselect, false);
854853
}
855854
else if (row.groupHeader) {
856-
uiGridSelectionService.toggleRowSelection(self, row, evt, self.options.multiSelect, self.options.noUnselect);
855+
uiGridSelectionService.toggleRowSelection(self, row, evt, self.options.multiSelect, self.options.noUnselect, false);
857856
for (var i = 0; i < row.treeNode.children.length; i++) {
858-
uiGridSelectionService.toggleRowSelection(self, row.treeNode.children[i].row, evt, self.options.multiSelect, self.options.noUnselect);
857+
uiGridSelectionService.toggleRowSelection(self, row.treeNode.children[i].row, evt, self.options.multiSelect, self.options.noUnselect, false);
859858
}
860859
}
861860
else {
862861
uiGridSelectionService.toggleRowSelection(self, row, evt,
863-
(self.options.multiSelect && !self.options.modifierKeysToMultiSelect), self.options.noUnselect);
862+
(self.options.multiSelect && !self.options.modifierKeysToMultiSelect), self.options.noUnselect, false);
864863
}
865864
self.options.enableFocusRowOnRowHeaderClick && row.setFocused(!row.isFocused) && self.api.selection.raise.rowFocusChanged(row, evt);
866865
}
@@ -981,7 +980,7 @@
981980
evt.preventDefault();
982981
uiGridSelectionService.toggleRowSelection($scope.grid, $scope.row, evt,
983982
($scope.grid.options.multiSelect && !$scope.grid.options.modifierKeysToMultiSelect),
984-
$scope.grid.options.noUnselect);
983+
$scope.grid.options.noUnselect, false);
985984
$scope.$apply();
986985
}
987986
});
@@ -1001,12 +1000,12 @@
10011000
}
10021001
else if (evt.ctrlKey || evt.metaKey) {
10031002
uiGridSelectionService.toggleRowSelection($scope.grid, $scope.row, evt,
1004-
$scope.grid.options.multiSelect, $scope.grid.options.noUnselect);
1003+
$scope.grid.options.multiSelect, $scope.grid.options.noUnselect, false);
10051004
}
10061005
else if ($scope.grid.options.enableSelectRowOnFocus) {
10071006
uiGridSelectionService.toggleRowSelection($scope.grid, $scope.row, evt,
10081007
($scope.grid.options.multiSelect && !$scope.grid.options.modifierKeysToMultiSelect),
1009-
$scope.grid.options.noUnselect);
1008+
$scope.grid.options.noUnselect, false);
10101009
}
10111010
$scope.row.setFocused(!$scope.row.isFocused);
10121011
$scope.grid.api.selection.raise.rowFocusChanged($scope.row, evt);

0 commit comments

Comments
 (0)