Skip to content

Commit b21096b

Browse files
Portugal, Marcelomportuga
Portugal, Marcelo
authored andcommitted
fix(selection.js): Allow selection to work with grouping.
1 parent 6d26274 commit b21096b

File tree

1 file changed

+37
-89
lines changed

1 file changed

+37
-89
lines changed

src/features/selection/js/selection.js

+37-89
Original file line numberDiff line numberDiff line change
@@ -127,8 +127,9 @@
127127
* @name rowSelectionChanged
128128
* @eventOf ui.grid.selection.api:PublicApi
129129
* @description is raised after the row.isSelected state is changed
130+
* @param {object} scope the scope associated with the grid
130131
* @param {GridRow} row the row that was selected/deselected
131-
* @param {Event} event object if raised from an event
132+
* @param {Event} evt object if raised from an event
132133
*/
133134
rowSelectionChanged: function (scope, row, evt) {
134135
},
@@ -140,8 +141,9 @@
140141
* in bulk, if the `enableSelectionBatchEvent` option is set to true
141142
* (which it is by default). This allows more efficient processing
142143
* of bulk events.
144+
* @param {object} scope the scope associated with the grid
143145
* @param {array} rows the rows that were selected/deselected
144-
* @param {Event} event object if raised from an event
146+
* @param {Event} evt object if raised from an event
145147
*/
146148
rowSelectionChangedBatch: function (scope, rows, evt) {
147149
}
@@ -155,7 +157,7 @@
155157
* @methodOf ui.grid.selection.api:PublicApi
156158
* @description Toggles data row as selected or unselected
157159
* @param {object} rowEntity gridOptions.data[] array instance
158-
* @param {Event} event object if raised from an event
160+
* @param {Event} evt object if raised from an event
159161
*/
160162
toggleRowSelection: function (rowEntity, evt) {
161163
var row = grid.getRow(rowEntity);
@@ -169,7 +171,7 @@
169171
* @methodOf ui.grid.selection.api:PublicApi
170172
* @description Select the data row
171173
* @param {object} rowEntity gridOptions.data[] array instance
172-
* @param {Event} event object if raised from an event
174+
* @param {Event} evt object if raised from an event
173175
*/
174176
selectRow: function (rowEntity, evt) {
175177
var row = grid.getRow(rowEntity);
@@ -185,8 +187,8 @@
185187
* specify row 0 you'll get the first visible row selected). In this context
186188
* visible means of those rows that are theoretically visible (i.e. not filtered),
187189
* rather than rows currently rendered on the screen.
188-
* @param {number} index index within the rowsVisible array
189-
* @param {Event} event object if raised from an event
190+
* @param {number} rowNum index within the rowsVisible array
191+
* @param {Event} evt object if raised from an event
190192
*/
191193
selectRowByVisibleIndex: function (rowNum, evt) {
192194
var row = grid.renderContainers.body.visibleRowCache[rowNum];
@@ -200,7 +202,7 @@
200202
* @methodOf ui.grid.selection.api:PublicApi
201203
* @description UnSelect the data row
202204
* @param {object} rowEntity gridOptions.data[] array instance
203-
* @param {Event} event object if raised from an event
205+
* @param {Event} evt object if raised from an event
204206
*/
205207
unSelectRow: function (rowEntity, evt) {
206208
var row = grid.getRow(rowEntity);
@@ -216,8 +218,8 @@
216218
* specify row 0 you'll get the first visible row unselected). In this context
217219
* visible means of those rows that are theoretically visible (i.e. not filtered),
218220
* rather than rows currently rendered on the screen.
219-
* @param {number} index index within the rowsVisible array
220-
* @param {Event} event object if raised from an event
221+
* @param {number} rowNum index within the rowsVisible array
222+
* @param {Event} evt object if raised from an event
221223
*/
222224
unSelectRowByVisibleIndex: function (rowNum, evt) {
223225
var row = grid.renderContainers.body.visibleRowCache[rowNum];
@@ -230,7 +232,7 @@
230232
* @name selectAllRows
231233
* @methodOf ui.grid.selection.api:PublicApi
232234
* @description Selects all rows. Does nothing if multiSelect = false
233-
* @param {Event} event object if raised from an event
235+
* @param {Event} evt object if raised from an event
234236
*/
235237
selectAllRows: function (evt) {
236238
if (grid.options.multiSelect === false) {
@@ -252,33 +254,23 @@
252254
* @name selectAllVisibleRows
253255
* @methodOf ui.grid.selection.api:PublicApi
254256
* @description Selects all visible rows. Does nothing if multiSelect = false
255-
* @param {Event} event object if raised from an event
257+
* @param {Event} evt object if raised from an event
256258
*/
257-
selectAllVisibleRows: function (event) {
259+
selectAllVisibleRows: function (evt) {
258260
if (grid.options.multiSelect !== false) {
259261
var changedRows = [];
260-
var rowCache = [];
261-
if (grid.treeBase && grid.treeBase.tree) {
262-
rowCache = getAllTreeRows(grid.treeBase.tree);
263-
} else {
264-
rowCache = grid.rows;
265-
}
266-
267-
for (var i = 0; i<rowCache.length; i++) {
268-
var row = rowCache[i];
262+
grid.rows.forEach(function(row) {
269263
if (row.visible) {
270264
if (!row.isSelected && row.enableSelection !== false) {
271265
row.setSelected(true);
272-
service.decideRaiseSelectionEvent(grid, row, changedRows, event);
273-
}
274-
} else {
275-
if (row.isSelected) {
276-
row.setSelected(false);
277-
service.decideRaiseSelectionEvent(grid, row, changedRows, event);
266+
service.decideRaiseSelectionEvent(grid, row, changedRows, evt);
278267
}
268+
} else if (row.isSelected) {
269+
row.setSelected(false);
270+
service.decideRaiseSelectionEvent(grid, row, changedRows, evt);
279271
}
280-
}
281-
service.decideRaiseSelectionBatchEvent(grid, changedRows, event);
272+
});
273+
service.decideRaiseSelectionBatchEvent(grid, changedRows, evt);
282274
grid.selection.selectAll = true;
283275
}
284276
},
@@ -287,7 +279,7 @@
287279
* @name clearSelectedRows
288280
* @methodOf ui.grid.selection.api:PublicApi
289281
* @description Unselects all rows
290-
* @param {Event} event object if raised from an event
282+
* @param {Event} evt object if raised from an event
291283
*/
292284
clearSelectedRows: function (evt) {
293285
service.clearSelectedRows(grid, evt);
@@ -518,8 +510,6 @@
518510
grid.selection.selectAll = grid.rows.length === selectedRows.length;
519511

520512
grid.api.selection.raise.rowSelectionChanged(row, evt);
521-
522-
toggleParentHeaders(grid, row, evt, multiSelect, noUnselect);
523513
}
524514
},
525515
/**
@@ -567,20 +557,9 @@
567557
* @param {Grid} grid grid object
568558
*/
569559
getSelectedRows: function (grid) {
570-
var rows;
571-
if (grid.treeBase && grid.treeBase.tree) {
572-
rows = getAllTreeRows(grid.treeBase.tree);
573-
} else {
574-
rows = grid.rows;
575-
}
576-
577-
var selectedRows = [];
578-
for (var i = 0; i<rows.length; i++) {
579-
if (rows[i].isSelected) {
580-
selectedRows.push(rows[i]);
581-
}
582-
}
583-
return selectedRows;
560+
return grid.rows.filter(function (row) {
561+
return row.isSelected;
562+
});
584563
},
585564

586565
/**
@@ -589,7 +568,7 @@
589568
* @methodOf ui.grid.selection.service:uiGridSelectionService
590569
* @description Clears all selected rows
591570
* @param {Grid} grid grid object
592-
* @param {Event} event object if raised from an event
571+
* @param {Event} evt object if raised from an event
593572
*/
594573
clearSelectedRows: function (grid, evt) {
595574
var changedRows = [];
@@ -612,7 +591,7 @@
612591
* @param {Grid} grid grid object
613592
* @param {GridRow} row row that has changed
614593
* @param {array} changedRows an array to which we can append the changed
615-
* @param {Event} event object if raised from an event
594+
* @param {Event} evt object if raised from an event
616595
* row if we're doing batch events
617596
*/
618597
decideRaiseSelectionEvent: function (grid, row, changedRows, evt) {
@@ -631,7 +610,7 @@
631610
* raises it if we do.
632611
* @param {Grid} grid grid object
633612
* @param {array} changedRows an array of changed rows, only populated
634-
* @param {Event} event object if raised from an event
613+
* @param {Event} evt object if raised from an event
635614
* if we're doing batch events
636615
*/
637616
decideRaiseSelectionBatchEvent: function (grid, changedRows, evt) {
@@ -643,30 +622,6 @@
643622

644623
return service;
645624

646-
function toggleParentHeaders(grid, row, event, multiSelect, noUnselect){
647-
if (row.treeNode &&row.treeNode.parentRow) {
648-
var parentRow = row.treeNode.parentRow;
649-
var siblingSelectedStatus = [];
650-
for (var i = 0; i < parentRow.treeNode.children.length; i++) {
651-
siblingSelectedStatus.push(parentRow.treeNode.children[i].row.isSelected);
652-
}
653-
var allSiblingsSelected = siblingSelectedStatus.indexOf(false) === -1;
654-
655-
if (parentRow.isSelected !== allSiblingsSelected) {
656-
service.toggleRowSelection(grid, parentRow, event, multiSelect, noUnselect);
657-
}
658-
}
659-
}
660-
661-
function getAllTreeRows(rowTree){
662-
var selectedRows = [];
663-
for (var i = 0; i<rowTree.length; i++) {
664-
var node = rowTree[i];
665-
selectedRows.push(node.row);
666-
selectedRows = selectedRows.concat(getAllTreeRows(node.children));
667-
}
668-
return selectedRows;
669-
}
670625
}]);
671626

672627
/**
@@ -788,25 +743,18 @@
788743
function selectButtonClick(row, evt) {
789744
evt.stopPropagation();
790745

791-
if (row.groupHeader) {
792-
selectByKeyState(row, evt);
793-
var selectionState = row.isSelected;
794-
for (var i = 0; i < row.treeNode.children.length; i++) {
795-
if (row.treeNode.children[i].row.isSelected !== selectionState) {
796-
selectButtonClick(row.treeNode.children[i].row, evt);
797-
}
798-
}
799-
}else {
800-
selectByKeyState(row, evt);
801-
}
802-
}
803-
804-
function selectByKeyState(row, evt){
805746
if (evt.shiftKey) {
806747
uiGridSelectionService.shiftSelect(self, row, evt, self.options.multiSelect);
807-
} else if (evt.ctrlKey || evt.metaKey) {
748+
}
749+
else if (evt.ctrlKey || evt.metaKey) {
808750
uiGridSelectionService.toggleRowSelection(self, row, evt, self.options.multiSelect, self.options.noUnselect);
809-
} else {
751+
}
752+
else if (row.groupHeader) {
753+
for (var i = 0; i < row.treeNode.children.length; i++) {
754+
uiGridSelectionService.toggleRowSelection(self, row.treeNode.children[i].row, evt, self.options.multiSelect, self.options.noUnselect);
755+
}
756+
}
757+
else {
810758
uiGridSelectionService.toggleRowSelection(self, row, evt, (self.options.multiSelect && !self.options.modifierKeysToMultiSelect), self.options.noUnselect);
811759
}
812760
}

0 commit comments

Comments
 (0)