Scheduler - A11y - Add Home and End hotkeys, change scheduler's role, extend appointment's aria-describedby #32575
Scheduler - A11y - Add Home and End hotkeys, change scheduler's role, extend appointment's aria-describedby #32575Tucchhaa wants to merge 8 commits intoDevExpress:26_1from
Conversation
There was a problem hiding this comment.
Pull request overview
Improves Scheduler accessibility by expanding keyboard navigation and enriching ARIA metadata so assistive technologies can better describe scheduler state and appointment interactions.
Changes:
- Added Home/End keyboard handlers for faster appointment navigation in Scheduler appointment keyboard navigation.
- Changed Scheduler root ARIA role from
grouptoapplication. - Extended appointment
aria-describedbycontent to include hotkey guidance, and adjusted unit/e2e tests accordingly.
Reviewed changes
Copilot reviewed 39 out of 39 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| packages/devextreme/js/localization/messages/ar.json | Adds new scheduler appointment hotkeys message key/value. |
| packages/devextreme/js/localization/messages/bg.json | Adds new scheduler appointment hotkeys message key/value. |
| packages/devextreme/js/localization/messages/ca.json | Adds new scheduler appointment hotkeys message key/value. |
| packages/devextreme/js/localization/messages/cs.json | Adds new scheduler appointment hotkeys message key/value. |
| packages/devextreme/js/localization/messages/da.json | Adds new scheduler appointment hotkeys message key/value. |
| packages/devextreme/js/localization/messages/de.json | Adds new scheduler appointment hotkeys message key/value. |
| packages/devextreme/js/localization/messages/el.json | Adds new scheduler appointment hotkeys message key/value. |
| packages/devextreme/js/localization/messages/en.json | Adds new scheduler appointment hotkeys message key/value. |
| packages/devextreme/js/localization/messages/es.json | Adds new scheduler appointment hotkeys message key/value. |
| packages/devextreme/js/localization/messages/fa.json | Adds new scheduler appointment hotkeys message key/value. |
| packages/devextreme/js/localization/messages/fi.json | Adds new scheduler appointment hotkeys message key/value. |
| packages/devextreme/js/localization/messages/fr.json | Adds new scheduler appointment hotkeys message key/value; minor whitespace cleanup. |
| packages/devextreme/js/localization/messages/hu.json | Adds new scheduler appointment hotkeys message key/value. |
| packages/devextreme/js/localization/messages/it.json | Adds new scheduler appointment hotkeys message key/value. |
| packages/devextreme/js/localization/messages/ja.json | Adds new scheduler appointment hotkeys message key/value. |
| packages/devextreme/js/localization/messages/lt.json | Adds new scheduler appointment hotkeys message key/value. |
| packages/devextreme/js/localization/messages/lv.json | Adds new scheduler appointment hotkeys message key/value. |
| packages/devextreme/js/localization/messages/nb.json | Adds new scheduler appointment hotkeys message key/value. |
| packages/devextreme/js/localization/messages/nl.json | Adds new scheduler appointment hotkeys message key/value. |
| packages/devextreme/js/localization/messages/pl.json | Adds new scheduler appointment hotkeys message key/value. |
| packages/devextreme/js/localization/messages/pt.json | Adds new scheduler appointment hotkeys message key/value. |
| packages/devextreme/js/localization/messages/ro.json | Adds new scheduler appointment hotkeys message key/value. |
| packages/devextreme/js/localization/messages/ru.json | Adds new scheduler appointment hotkeys message key/value. |
| packages/devextreme/js/localization/messages/sl.json | Adds new scheduler appointment hotkeys message key/value. |
| packages/devextreme/js/localization/messages/sv.json | Adds new scheduler appointment hotkeys message key/value. |
| packages/devextreme/js/localization/messages/tr.json | Adds new scheduler appointment hotkeys message key/value. |
| packages/devextreme/js/localization/messages/uk.json | Adds new scheduler appointment hotkeys message key/value. |
| packages/devextreme/js/localization/messages/vi.json | Adds new scheduler appointment hotkeys message key/value. |
| packages/devextreme/js/localization/messages/zh-tw.json | Adds new scheduler appointment hotkeys message key/value. |
| packages/devextreme/js/localization/messages/zh.json | Adds new scheduler appointment hotkeys message key/value. |
| packages/devextreme/js/__internal/scheduler/m_scheduler.ts | Updates scheduler ARIA role to application. |
| packages/devextreme/js/__internal/scheduler/appointments/m_appointments_kbn.ts | Adds Home/End keyboard navigation and refactors focus logic into a helper. |
| packages/devextreme/js/__internal/scheduler/appointments/appointment/text_utils.ts | Appends hotkeys text into appointment ARIA description string. |
| packages/devextreme/js/__internal/scheduler/appointments/appointment/text_utils.test.ts | Relaxes assertions to account for newly appended hotkeys description text. |
| packages/devextreme/js/__internal/scheduler/appointments/appointment/m_appointment.ts | Refactors aria description assignment flow (early-return when empty). |
| packages/devextreme/js/__internal/scheduler/tests/appointments.test.ts | Adds Jest coverage for aria-describedby presence and Home/End focusing behavior; improves cleanup. |
| packages/devextreme/js/__internal/scheduler/tests/mock/model/appointment.ts | Extends appointment test model with isFocused() helper. |
| e2e/testcafe-devextreme/tests/accessibility/scheduler/scheduler.ts | Updates expected scheduler role in accessibility e2e test. |
| e2e/testcafe-devextreme/tests/accessibility/scheduler/appointment.ts | Updates appointment accessibility e2e assertions to expect aria-describedby and tolerate appended text. |
packages/devextreme/js/__internal/scheduler/appointments/appointment/text_utils.ts
Outdated
Show resolved
Hide resolved
packages/devextreme/js/__internal/scheduler/appointments/appointment/m_appointment.ts
Outdated
Show resolved
Hide resolved
packages/devextreme/js/__internal/scheduler/appointments/m_appointments_kbn.ts
Outdated
Show resolved
Hide resolved
| }).before(async () => { | ||
| ClientFunction((selector) => { | ||
| const parent = document.querySelector(selector) as HTMLElement; | ||
| parent.style.height = '2000px'; | ||
| })(PARENT_SELECTOR); | ||
|
|
There was a problem hiding this comment.
The ClientFunction calls in this test's .before() hook are not awaited. In TestCafe, a ClientFunction only executes in the browser context when you await its invocation; otherwise the parent height change may never be applied (or may run after the widget is created), making the test unreliable.
| }).after(async () => { | ||
| ClientFunction((selector) => { | ||
| const parent = document.querySelector(selector) as HTMLElement; | ||
| parent.style.height = ''; | ||
| })(PARENT_SELECTOR); | ||
| }); |
There was a problem hiding this comment.
The ClientFunction call in the .after() hook is not awaited, so the cleanup that resets the parent height may not run deterministically. Please await the ClientFunction invocation to ensure the page is restored for subsequent tests.
| const scrollTop = await ClientFunction(() => document.body.scrollTop)(); | ||
|
|
||
| await t.expect(scrollTop).eql(0); | ||
| }).before(async () => { |
There was a problem hiding this comment.
This test reads/writes the page scroll position via document.body.scrollTop, which is browser-dependent (often the scrolling element is document.documentElement, and setting body.scrollTop may be a no-op). Consider using the shared helper (e.g., getDocumentScrollTop/window.scrollTo) or reading document.scrollingElement?.scrollTop to make the assertion stable across browsers.
e2e/testcafe-devextreme/tests/scheduler/common/keyboardNavigation/appointments.ts
Outdated
Show resolved
Hide resolved
e2e/testcafe-devextreme/tests/scheduler/common/keyboardNavigation/appointments.ts
Outdated
Show resolved
Hide resolved
f2d0e02 to
54409f5
Compare
No description provided.