Skip to content

Commit 6766019

Browse files
[BpkCalendar] Accessibility roles (#3699)
[BpkCalendar] Accessibility roles (#3699) * feat: make Calendar conform to grid for easier navigation * chore: remove commented code * fix: remove unused prop * fix failing tests since disabled dates are no longer aria-hidden
1 parent 7ce801c commit 6766019

12 files changed

+1733
-1244
lines changed

packages/bpk-component-calendar/src/BpkCalendarContainer-test.tsx

+9-9
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ describe('BpkCalendarContainer', () => {
111111

112112
// dates in March are outside current month
113113
const outsideDate = screen.getByRole('button', {
114-
name: /1st March 2010/i,
114+
name: /Monday, 1st March/i,
115115
});
116116
waitFor(() =>
117117
expect(outsideDate.classList.contains('bpk-calendar-date--outside')).toBe(
@@ -125,7 +125,7 @@ describe('BpkCalendarContainer', () => {
125125

126126
// dates in March are within current month
127127
const currentDate = screen.getByRole('button', {
128-
name: /1st March 2010/i,
128+
name: /Monday, 1st March/i,
129129
});
130130
waitFor(() =>
131131
expect(currentDate.classList.contains('bpk-calendar-date--outside')).toBe(
@@ -300,20 +300,20 @@ describe('BpkCalendarContainer', () => {
300300

301301
await fireEvent.keyDown(getDate(originStr), { key: 'ArrowRight' });
302302
expect(
303-
getDate(/2nd March/).classList.contains('bpk-calendar-date--focused'),
303+
getDate(/Tuesday, 2nd March/).classList.contains('bpk-calendar-date--focused'),
304304
).toBe(true);
305305

306-
await fireEvent.keyDown(getDate(/2nd March/i), { key: 'ArrowDown' });
306+
await fireEvent.keyDown(getDate(/Tuesday, 2nd March/i), { key: 'ArrowDown' });
307307
expect(
308-
getDate(/9th March/i).classList.contains('bpk-calendar-date--focused'),
308+
getDate(/Tuesday, 9th March/i).classList.contains('bpk-calendar-date--focused'),
309309
).toBe(true);
310310

311-
await fireEvent.keyDown(getDate(/9th March/i), { key: 'ArrowLeft' });
311+
await fireEvent.keyDown(getDate(/Tuesday, 9th March/i), { key: 'ArrowLeft' });
312312
expect(
313-
getDate(/8th March/i).classList.contains('bpk-calendar-date--focused'),
313+
getDate(/Monday, 8th March/i).classList.contains('bpk-calendar-date--focused'),
314314
).toBe(true);
315315

316-
await fireEvent.keyDown(getDate(/8th March/i), { key: 'ArrowUp' });
316+
await fireEvent.keyDown(getDate(/Monday, 8th March/i), { key: 'ArrowUp' });
317317
expect(
318318
getDate(originStr).classList.contains('bpk-calendar-date--focused'),
319319
).toBe(true);
@@ -378,7 +378,7 @@ describe('BpkCalendarContainer', () => {
378378

379379
await fireEvent.keyDown(getDate(/28th February/i), { key: 'ArrowRight' });
380380
expect(
381-
getDate(/1st March/i).classList.contains('bpk-calendar-date--focused'),
381+
getDate(/Monday, 1st March/i).classList.contains('bpk-calendar-date--focused'),
382382
).toBe(true);
383383
expect(onMonthChange.mock.calls.length).toEqual(1);
384384
expect(onMonthChange.mock.calls[0][1]).toEqual({

packages/bpk-component-calendar/src/BpkCalendarDate.tsx

-1
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,6 @@ class BpkCalendarDate extends PureComponent<Props> {
193193
type="button"
194194
style={style}
195195
className={classNames.join(' ')}
196-
aria-hidden={isBlocked}
197196
aria-label={`${date.getDate()}`}
198197
disabled={isBlocked}
199198
tabIndex={isKeyboardFocusable && isFocused ? 0 : -1}

packages/bpk-component-calendar/src/BpkCalendarGrid.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -177,8 +177,8 @@ class BpkCalendarGrid extends Component<Props, State> {
177177
const classNames = getClassName('bpk-calendar-grid', className);
178178

179179
return (
180-
<div className={classNames} aria-hidden={!isKeyboardFocusable}>
181-
<div>
180+
<div className={classNames} aria-hidden={!isKeyboardFocusable} role="grid" >
181+
<div role="rowgroup">
182182
{calendarMonthWeeks.map((dates) => (
183183
<BpkCalendarWeek
184184
key={dates[0].isoLabel}

packages/bpk-component-calendar/src/BpkCalendarWeek.tsx

+2-5
Original file line numberDiff line numberDiff line change
@@ -385,7 +385,7 @@ class BpkCalendarWeek extends Component<Props> {
385385
}
386386

387387
return (
388-
<div className={getClassName('bpk-calendar-week')}>
388+
<div className={getClassName('bpk-calendar-week')} role="row">
389389
{this.props.dates.map((date) => {
390390
const isBlocked =
391391
minDate && maxDate
@@ -404,7 +404,6 @@ class BpkCalendarWeek extends Component<Props> {
404404
<DateContainer
405405
className={cellClassName}
406406
isEmptyCell={!isSameMonth(date.val, month) && ignoreOutsideDate!}
407-
isBlocked={isBlocked}
408407
key={date.val.getDate()}
409408
selectionType={dateSelectionType}
410409
>
@@ -436,7 +435,6 @@ class BpkCalendarWeek extends Component<Props> {
436435
type DateContainerProps = {
437436
children: ReactElement;
438437
className?: string | null;
439-
isBlocked: boolean;
440438
isEmptyCell: boolean;
441439
selectionType: string;
442440
};
@@ -446,7 +444,6 @@ type DateContainerProps = {
446444
const DateContainer = ({
447445
children,
448446
className = null,
449-
isBlocked,
450447
isEmptyCell,
451448
selectionType,
452449
}: DateContainerProps) => {
@@ -457,7 +454,7 @@ const DateContainer = ({
457454
);
458455

459456
return (
460-
<div aria-hidden={isEmptyCell || isBlocked} className={classNames}>
457+
<div aria-hidden={isEmptyCell} className={classNames} role="gridcell">
461458
{children}
462459
</div>
463460
);

0 commit comments

Comments
 (0)