From 8f3f5b38795a6a51c44e343cb6e330311ea99d60 Mon Sep 17 00:00:00 2001 From: Urse Daniel Date: Fri, 27 Mar 2020 18:33:44 +0200 Subject: [PATCH] [ADF-4933] Adding keydown event on data row to simulate double click when pressing 'enter' key (#5564) * changing the event on row from keyup to keydown to fix the issue of reopening the file after closing ussing only keyboard (opening and closing the file by enter) * Reverting the 'onRowKeyDown' to not make a breaking change and added a new method to handle the opening file using 'enter' key * Added unit test - it should emit double click if keydown "enter key" on row * Small changes for clean coding --- .../datatable/datatable.component.html | 1 + .../datatable/datatable.component.spec.ts | 28 +++++++++++++++++++ .../datatable/datatable.component.ts | 16 ++++++----- 3 files changed, 38 insertions(+), 7 deletions(-) diff --git a/lib/core/datatable/components/datatable/datatable.component.html b/lib/core/datatable/components/datatable/datatable.component.html index 4e2240b378..8f2a83fba9 100644 --- a/lib/core/datatable/components/datatable/datatable.component.html +++ b/lib/core/datatable/components/datatable/datatable.component.html @@ -59,6 +59,7 @@ [row]="row" (select)="onEnterKeyPressed(row, $event)" (keyup)="onRowKeyUp(row, $event)" + (keydown)="onRowEnterKeyDown(row, $event)" [adf-upload]="allowDropFiles && rowAllowsDrop(row)" [adf-upload-data]="row" [ngStyle]="rowStyle" diff --git a/lib/core/datatable/components/datatable/datatable.component.spec.ts b/lib/core/datatable/components/datatable/datatable.component.spec.ts index 1e80ed72ad..06a5e780b7 100644 --- a/lib/core/datatable/components/datatable/datatable.component.spec.ts +++ b/lib/core/datatable/components/datatable/datatable.component.spec.ts @@ -297,6 +297,34 @@ describe('DataTable', () => { expect(rows[1].getValue('name')).toEqual('test2'); }); + it('should double click if keydown "enter key" on row', () => { + const event = new KeyboardEvent('keydown', { + code: 'Enter', + key: 'Enter' + } as KeyboardEventInit ); + const dataRows = + [ { name: 'test1'}, { name: 'test2' } ]; + + dataTable.data = new ObjectDataTableAdapter([], + [new ObjectDataColumn({ key: 'name' })] + ); + + dataTable.ngOnChanges({ + rows: new SimpleChange(null, dataRows, false) + }); + + fixture.detectChanges(); + dataTable.ngAfterViewInit(); + + const rowElement = document.querySelectorAll('.adf-datatable-body .adf-datatable-row')[0]; + + spyOn(dataTable.rowDblClick, 'emit'); + + rowElement.dispatchEvent(event); + + expect(dataTable.rowDblClick.emit).toHaveBeenCalled(); + }); + it('should set custom sort order', () => { const dataSortObj = new DataSorting('dummyName', 'asc'); const dataRows = diff --git a/lib/core/datatable/components/datatable/datatable.component.ts b/lib/core/datatable/components/datatable/datatable.component.ts index 82ed8108a1..c1624f7dfe 100644 --- a/lib/core/datatable/components/datatable/datatable.component.ts +++ b/lib/core/datatable/components/datatable/datatable.component.ts @@ -474,11 +474,17 @@ export class DataTableComponent implements AfterContentInit, OnChanges, DoCheck, this.clickObserver.next(dataRowEvent); } - onRowKeyUp(row: DataRow, e: KeyboardEvent) { + onRowEnterKeyDown(row: DataRow, keyboardEvent: KeyboardEvent) { + if (keyboardEvent.key === 'Enter') { + this.onKeyboardNavigate(row, keyboardEvent); + } + } + + onRowKeyUp(row: DataRow, keyboardEvent: KeyboardEvent) { const event = new CustomEvent('row-keyup', { detail: { row: row, - keyboardEvent: e, + keyboardEvent: keyboardEvent, sender: this }, bubbles: true @@ -487,11 +493,7 @@ export class DataTableComponent implements AfterContentInit, OnChanges, DoCheck, this.elementRef.nativeElement.dispatchEvent(event); if (event.defaultPrevented) { - e.preventDefault(); - } else { - if (e.key === 'Enter') { - this.onKeyboardNavigate(row, e); - } + keyboardEvent.preventDefault(); } }