Skip to content

Commit 5155e18

Browse files
authored
fix(a11y): set role and aria attributes for pickers (#128)
1 parent 3fb09fe commit 5155e18

File tree

6 files changed

+18
-7
lines changed

6 files changed

+18
-7
lines changed

src/components/DatePicker/hooks/useDatePickerProps.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,10 @@ export function useDatePickerProps<T extends DateTime | RangeValue<DateTime>>(
105105
state.dateFieldState.isEmpty && !isActive && props.placeholder
106106
? {value: ''}
107107
: undefined,
108-
{controlRef: handleRef},
108+
{
109+
controlRef: handleRef,
110+
controlProps: {role: 'combobox', 'aria-expanded': state.isOpen},
111+
},
109112
),
110113
calendarButtonProps: {
111114
ref: calendarButtonRef,

src/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,8 @@ export function useRelativeDatePickerProps(
8383
setOpen(true);
8484
}
8585
},
86+
role: 'combobox',
87+
'aria-expanded': isOpen,
8688
},
8789
};
8890

src/components/RelativeRangeDatePicker/RelativeRangeDatePicker.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import type {Preset} from './components/Presets/defaultPresets';
3333
import type {PresetTab} from './components/Presets/utils';
3434
import {useRelativeRangeDatePickerState} from './hooks/useRelativeRangeDatePickerState';
3535
import type {RelativeRangeDatePickerStateOptions} from './hooks/useRelativeRangeDatePickerState';
36+
import {i18n} from './i18n';
3637
import {getDefaultTitle} from './utils';
3738

3839
import './RelativeRangeDatePicker.scss';
@@ -136,7 +137,7 @@ export function RelativeRangeDatePicker(props: RelativeRangeDatePickerProps) {
136137
}
137138
}}
138139
controlProps={{
139-
'aria-haspopup': 'dialog',
140+
role: 'combobox',
140141
'aria-expanded': open,
141142
disabled: isMobile,
142143
className: b('input', {mobile: isMobile}),
@@ -181,6 +182,7 @@ export function RelativeRangeDatePicker(props: RelativeRangeDatePickerProps) {
181182
extraProps={{
182183
'aria-haspopup': 'dialog',
183184
'aria-expanded': open,
185+
'aria-label': i18n('Range date picker'),
184186
}}
185187
onClick={() => {
186188
setIsActive(true);

src/components/RelativeRangeDatePicker/__tests__/form.test.tsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import React from 'react';
44
import {dateTime} from '@gravity-ui/date-utils';
55
import userEvent from '@testing-library/user-event';
66

7-
import {render, screen, within} from '../../../../test-utils/utils';
7+
import {act, render, screen, within} from '../../../../test-utils/utils';
88
import type {Value} from '../../RelativeDatePicker';
99
import type {RangeValue} from '../../types';
1010
import {RelativeRangeDatePicker} from '../RelativeRangeDatePicker';
@@ -126,9 +126,11 @@ describe('RelativeRangeDatePicker: form', () => {
126126
expect(inputs[3]).toHaveValue('now');
127127

128128
await userEvent.tab();
129-
const fields = within(document.activeElement as HTMLElement).getAllByRole('textbox');
129+
const fields = within(document.activeElement as HTMLElement).getAllByRole('combobox');
130130
expect(fields.length).toBe(2);
131-
fields[0].focus();
131+
act(() => {
132+
fields[0].focus();
133+
});
132134
await userEvent.keyboard('{ArrowUp}');
133135

134136
expect(inputs[0]).toHaveValue('absolute');

src/components/RelativeRangeDatePicker/i18n/en.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,6 @@
44
"\"To\"": "\"To\"",
55
"\"To\" is required.": "\"To\" is required.",
66
"\"From\" can't be after \"To\".": "\"From\" can't be after \"To\".",
7-
"to": "to"
7+
"to": "to",
8+
"Range date picker": "Range date picker"
89
}

src/components/RelativeRangeDatePicker/i18n/ru.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,6 @@
44
"\"To\"": "«До»",
55
"\"To\" is required.": "«До» обязательно.",
66
"\"From\" can't be after \"To\".": "«От» не может быть позже чем «До».",
7-
"to": "до"
7+
"to": "до",
8+
"Range date picker": "Выбор диапазона дат"
89
}

0 commit comments

Comments
 (0)