|
202 | 202 | toggleRowSelection: function (rowEntity, evt) {
|
203 | 203 | var row = grid.getRow(rowEntity);
|
204 | 204 | 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); |
206 | 206 | }
|
207 | 207 | },
|
208 | 208 | /**
|
|
216 | 216 | selectRow: function (rowEntity, evt) {
|
217 | 217 | var row = grid.getRow(rowEntity);
|
218 | 218 | 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); |
220 | 220 | }
|
221 | 221 | },
|
222 | 222 | /**
|
|
233 | 233 | selectRowByVisibleIndex: function (rowNum, evt) {
|
234 | 234 | var row = grid.renderContainers.body.visibleRowCache[rowNum];
|
235 | 235 | 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); |
237 | 237 | }
|
238 | 238 | },
|
239 | 239 | /**
|
|
247 | 247 | unSelectRow: function (rowEntity, evt) {
|
248 | 248 | var row = grid.getRow(rowEntity);
|
249 | 249 | 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); |
251 | 251 | }
|
252 | 252 | },
|
253 | 253 | /**
|
|
264 | 264 | unSelectRowByVisibleIndex: function (rowNum, evt) {
|
265 | 265 | var row = grid.renderContainers.body.visibleRowCache[rowNum];
|
266 | 266 | 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); |
268 | 268 | }
|
269 | 269 | },
|
270 | 270 | /**
|
|
545 | 545 | * @param {Event} evt object if resulting from event
|
546 | 546 | * @param {bool} multiSelect if false, only one row at time can be selected
|
547 | 547 | * @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 |
548 | 549 | */
|
549 |
| - toggleRowSelection: function (grid, row, evt, multiSelect, noUnselect) { |
| 550 | + toggleRowSelection: function (grid, row, evt, multiSelect, noUnselect, canBeInvisible) { |
550 | 551 | if ( row.enableSelection === false ) {
|
551 | 552 | return;
|
552 | 553 | }
|
553 | 554 |
|
554 |
| - var selected = row.isSelected, |
555 |
| - selectedRows; |
| 555 | + if (canBeInvisible === void 0) { |
| 556 | + canBeInvisible = true; |
| 557 | + } |
| 558 | + |
| 559 | + var selected = row.isSelected; |
556 | 560 |
|
557 | 561 | if (!multiSelect) {
|
558 | 562 | if (!selected) {
|
559 | 563 | service.clearSelectedRows(grid, evt);
|
560 | 564 | }
|
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); |
567 | 568 | }
|
568 | 569 | }
|
569 | 570 |
|
570 | 571 | // only select row in this case
|
571 |
| - if (!(selected && noUnselect)) { |
| 572 | + if (!(selected && noUnselect) && (canBeInvisible || row.visible)) { |
572 | 573 | row.setSelected(!selected);
|
573 | 574 | if (row.isSelected === true) {
|
574 | 575 | grid.selection.lastSelectedRow = row;
|
575 | 576 | }
|
576 | 577 |
|
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; |
580 | 579 | grid.api.selection.raise.rowSelectionChanged(row, evt);
|
581 | 580 | }
|
582 | 581 | },
|
|
850 | 849 | }
|
851 | 850 | else if (evt.ctrlKey || evt.metaKey) {
|
852 | 851 | uiGridSelectionService.toggleRowSelection(self, row, evt,
|
853 |
| - self.options.multiSelect, self.options.noUnselect); |
| 852 | + self.options.multiSelect, self.options.noUnselect, false); |
854 | 853 | }
|
855 | 854 | 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); |
857 | 856 | 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); |
859 | 858 | }
|
860 | 859 | }
|
861 | 860 | else {
|
862 | 861 | 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); |
864 | 863 | }
|
865 | 864 | self.options.enableFocusRowOnRowHeaderClick && row.setFocused(!row.isFocused) && self.api.selection.raise.rowFocusChanged(row, evt);
|
866 | 865 | }
|
|
981 | 980 | evt.preventDefault();
|
982 | 981 | uiGridSelectionService.toggleRowSelection($scope.grid, $scope.row, evt,
|
983 | 982 | ($scope.grid.options.multiSelect && !$scope.grid.options.modifierKeysToMultiSelect),
|
984 |
| - $scope.grid.options.noUnselect); |
| 983 | + $scope.grid.options.noUnselect, false); |
985 | 984 | $scope.$apply();
|
986 | 985 | }
|
987 | 986 | });
|
|
1001 | 1000 | }
|
1002 | 1001 | else if (evt.ctrlKey || evt.metaKey) {
|
1003 | 1002 | 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); |
1005 | 1004 | }
|
1006 | 1005 | else if ($scope.grid.options.enableSelectRowOnFocus) {
|
1007 | 1006 | uiGridSelectionService.toggleRowSelection($scope.grid, $scope.row, evt,
|
1008 | 1007 | ($scope.grid.options.multiSelect && !$scope.grid.options.modifierKeysToMultiSelect),
|
1009 |
| - $scope.grid.options.noUnselect); |
| 1008 | + $scope.grid.options.noUnselect, false); |
1010 | 1009 | }
|
1011 | 1010 | $scope.row.setFocused(!$scope.row.isFocused);
|
1012 | 1011 | $scope.grid.api.selection.raise.rowFocusChanged($scope.row, evt);
|
|
0 commit comments