Skip to content

Commit c9a8b1d

Browse files
feat: support keyboard shortcuts for all rows selection (#44)
Allows user to select all rows with keyboard `meta+a` or `ctrl+a`. This only selects rows which are currently available to the datatable and will not select rows which get loaded from server in future by user actions like scrolling/paging
1 parent e40490c commit c9a8b1d

File tree

2 files changed

+8
-1
lines changed

2 files changed

+8
-1
lines changed

projects/ngx-datatable/src/lib/components/body/body-row.component.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,9 @@ export class DataTableBodyRowComponent implements DoCheck {
229229
keyCode === Keys.left ||
230230
keyCode === Keys.right;
231231

232-
if (isAction && isTargetRow) {
232+
const isCtrlA = event.key === 'a' && (event.ctrlKey || event.metaKey);
233+
234+
if ((isAction && isTargetRow) || isCtrlA) {
233235
event.preventDefault();
234236
event.stopPropagation();
235237

projects/ngx-datatable/src/lib/components/body/selection.component.ts

+5
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@ export class DataTableSelectionComponent {
4242
if (multi || chkbox || multiClick) {
4343
if (event.shiftKey) {
4444
selected = selectRowsBetween([], this.rows, index, this.prevIndex, this.getRowSelectedIdx.bind(this));
45+
} else if ((event as KeyboardEvent).key === 'a' && (event.ctrlKey || event.metaKey)) {
46+
// select all rows except dummy rows which are added for ghostloader in case of virtual scroll
47+
selected = this.rows.filter(rowItem => !!rowItem);
4548
} else if (event.ctrlKey || event.metaKey || multiClick || chkbox) {
4649
selected = selectRows([...this.selected], row, this.getRowSelectedIdx.bind(this));
4750
} else {
@@ -79,6 +82,8 @@ export class DataTableSelectionComponent {
7982
} else if (type === 'keydown') {
8083
if ((event as KeyboardEvent).keyCode === Keys.return) {
8184
this.selectRow(event, index, row);
85+
} else if ((event as KeyboardEvent).key === 'a' && (event.ctrlKey || event.metaKey)) {
86+
this.selectRow(event, 0, this.rows[this.rows.length - 1]);
8287
} else {
8388
this.onKeyboardFocus(model);
8489
}

0 commit comments

Comments
 (0)