From 81ef7ee1576acbc08b4cbfc6e959623ed181fb4f Mon Sep 17 00:00:00 2001 From: mertsincan Date: Mon, 4 Oct 2021 11:27:08 +0300 Subject: [PATCH] Fixed #1632 - Improve accessibility on Editable DataTable --- src/components/datatable/BodyCell.vue | 5 +++++ src/components/utils/DomHandler.js | 5 +++++ src/components/utils/Utils.d.ts | 1 + 3 files changed, 11 insertions(+) diff --git a/src/components/datatable/BodyCell.vue b/src/components/datatable/BodyCell.vue index 2f7580202..bc7de26ee 100755 --- a/src/components/datatable/BodyCell.vue +++ b/src/components/datatable/BodyCell.vue @@ -113,6 +113,11 @@ export default { if (this.columnProp('frozen')) { this.updateStickyPosition(); } + + if (this.d_editing && (this.editMode === 'cell' || (this.editMode === 'row' && this.columnProp('rowEditor')))) { + const focusableEl = DomHandler.getFirstFocusableElement(this.$el); + focusableEl && focusableEl.focus(); + } }, beforeUnmount() { if (this.overlayEventListener) { diff --git a/src/components/utils/DomHandler.js b/src/components/utils/DomHandler.js index ba898bdb1..775515494 100755 --- a/src/components/utils/DomHandler.js +++ b/src/components/utils/DomHandler.js @@ -470,6 +470,11 @@ export default { return visibleFocusableElements; }, + getFirstFocusableElement(element) { + const focusableElements = this.getFocusableElements(element); + return focusableElements.length > 0 ? focusableElements[0] : null; + }, + isClickable(element) { const targetNode = element.nodeName; const parentNode = element.parentElement && element.parentElement.nodeName; diff --git a/src/components/utils/Utils.d.ts b/src/components/utils/Utils.d.ts index 87f5c8f4e..24534cc30 100644 --- a/src/components/utils/Utils.d.ts +++ b/src/components/utils/Utils.d.ts @@ -43,6 +43,7 @@ export declare class DomHandler { static isVisible(el: HTMLElement): boolean; static invokeElementMethod(el: HTMLElement, methodName: string, args: any): void; static getFocusableElements(el: HTMLElement): any[]; + static getFirstFocusableElement(el: HTMLElement): any; static isClickable(el: HTMLElement): boolean; static applyStyle(el: HTMLElement, style: any): void; static isIOS(): boolean;