Skip to content

Commit 85cb9f1

Browse files
author
Kubit
committed
Improve calendar and inputDate
Add aria label props and improve the monthSelector functionalitie
1 parent d493843 commit 85cb9f1

File tree

6 files changed

+95
-6
lines changed

6 files changed

+95
-6
lines changed

src/components/calendar/selector/monthSelector/utils/monthSelector.test.ts

Lines changed: 66 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,20 @@ describe('Month Selector utils', () => {
5252
const result2 = keyLeftFunction(previous2);
5353
expect(result2).toBe(previous2 - 1);
5454
});
55+
it('keyLeftMove - maxDate and minDate in same year - should move to the left when left arrow key is pressed', () => {
56+
const maxDate = new Date(2023, 8, 15);
57+
const currentDate = new Date(2023, 8, 22);
58+
const minDate = new Date(2023, 4, 15);
59+
60+
const keyLeftFunction = keyLeftMove({ currentDate, maxDate, minDate });
61+
62+
const previous1 = minDate.getMonth();
63+
const previous2 = minDate.getMonth() + 1;
64+
const result1 = keyLeftFunction(previous1);
65+
expect(result1).toBe(maxDate.getMonth());
66+
const result2 = keyLeftFunction(previous2);
67+
expect(result2).toBe(previous2 - 1);
68+
});
5569
it('keyRightMove - maxDate and currentDate in same year - should move to the right when right arrow key is pressed', () => {
5670
const maxDate = new Date(2023, 8, 15);
5771
const currentDate = new Date(2023, 8, 22);
@@ -94,6 +108,21 @@ describe('Month Selector utils', () => {
94108
const result2 = keyRightFunction(previous2);
95109
expect(result2).toBe(previous2 + 1);
96110
});
111+
112+
it('keyRightMove - maxDate and minDate in same year - should move to the right when right arrow key is pressed', () => {
113+
const maxDate = new Date(2023, 8, 15);
114+
const currentDate = new Date(2023, 8, 22);
115+
const minDate = new Date(2023, 4, 15);
116+
117+
const keyRightFunction = keyRightMove({ currentDate, maxDate, minDate });
118+
119+
const previous1 = maxDate.getMonth();
120+
const previous2 = maxDate.getMonth() - 1;
121+
const result1 = keyRightFunction(previous1);
122+
expect(result1).toBe(minDate.getMonth());
123+
const result2 = keyRightFunction(previous2);
124+
expect(result2).toBe(previous2 + 1);
125+
});
97126
it('keyUpMove - maxDate and currentDate in same year - should move up when up arrow key is pressed', () => {
98127
const maxDate = new Date(2023, 8, 15);
99128
const currentDate = new Date(2023, 8, 22);
@@ -145,7 +174,24 @@ describe('Month Selector utils', () => {
145174
const result3 = keyUpFunction(previous3);
146175
expect(result3).toBe(firstMonth);
147176
});
148-
it('keyDownMove - maxDate and currentDate in same year - should move up when up arrow key is pressed', () => {
177+
it('keyUpMove - maxDate and minDate in same year - should move up when up arrow key is pressed', () => {
178+
const maxDate = new Date(2023, 8, 15);
179+
const currentDate = new Date(2023, 8, 22);
180+
const minDate = new Date(2023, 0, 15);
181+
182+
const keyUpFunction = keyUpMove({ currentDate, maxDate, minDate });
183+
184+
const previous1 = minDate.getMonth();
185+
const previous2 = minDate.getMonth() + 3;
186+
const previous3 = minDate.getMonth() + 2;
187+
const result1 = keyUpFunction(previous1);
188+
expect(result1).toBe(maxDate.getMonth());
189+
const result2 = keyUpFunction(previous2);
190+
expect(result2).toBe(previous2 - 3);
191+
const result3 = keyUpFunction(previous3);
192+
expect(result3).toBe(minDate.getMonth());
193+
});
194+
it('keyDownMove - maxDate and currentDate in same year - should move down when down arrow key is pressed', () => {
149195
const maxDate = new Date(2023, 8, 15);
150196
const currentDate = new Date(2023, 8, 22);
151197
const minDate = new Date(2000, 0, 15);
@@ -162,7 +208,7 @@ describe('Month Selector utils', () => {
162208
const result3 = keyDownFunction(previous3);
163209
expect(result3).toBe(maxDate.getMonth());
164210
});
165-
it('keyDownMove - minDate and currentDate in same year - should move up when up arrow key is pressed', () => {
211+
it('keyDownMove - minDate and currentDate in same year - should move down when down arrow key is pressed', () => {
166212
const maxDate = new Date(2025, 8, 15);
167213
const currentDate = new Date(2023, 8, 22);
168214
const minDate = new Date(2023, 0, 15);
@@ -179,7 +225,7 @@ describe('Month Selector utils', () => {
179225
const result3 = keyDownFunction(previous3);
180226
expect(result3).toBe(previous3 + 3);
181227
});
182-
it('keyDownMove - currentDate year is different than minDate and maxDate - should move up when up arrow key is pressed', () => {
228+
it('keyDownMove - currentDate year is different than minDate and maxDate - should move down when down arrow key is pressed', () => {
183229
const maxDate = new Date(2025, 8, 15);
184230
const currentDate = new Date(2023, 8, 22);
185231
const minDate = new Date(2000, 0, 15);
@@ -196,6 +242,23 @@ describe('Month Selector utils', () => {
196242
const result3 = keyDownFunction(previous3);
197243
expect(result3).toBe(previous3 + 3);
198244
});
245+
it('keyDownMove - maxDate and minDate in same year - should move down when down arrow key is pressed', () => {
246+
const maxDate = new Date(2023, 8, 15);
247+
const currentDate = new Date(2023, 8, 22);
248+
const minDate = new Date(2023, 0, 15);
249+
250+
const keyDownFunction = keyDownMove({ currentDate, maxDate, minDate });
251+
252+
const previous1 = maxDate.getMonth();
253+
const previous2 = 1;
254+
const previous3 = maxDate.getMonth() + 3;
255+
const result1 = keyDownFunction(previous1);
256+
expect(result1).toBe(firstMonth);
257+
const result2 = keyDownFunction(previous2);
258+
expect(result2).toBe(previous2 + 3);
259+
const result3 = keyDownFunction(previous3);
260+
expect(result3).toBe(maxDate.getMonth());
261+
});
199262
it('keyTabMove - should return previous', () => {
200263
const previous = 5;
201264
const result = keyTabMove(previous);

src/components/calendar/selector/monthSelector/utils/monthSelector.utils.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ export const keyLeftMove = ({
1818
minDate,
1919
}: HandleKeyMoveType): ((previous: number) => number) => {
2020
return previous => {
21+
if (isSameYear(maxDate, minDate)) {
22+
return previous === minDate.getMonth() ? maxDate.getMonth() : previous - 1;
23+
}
2124
if (isSameYear(maxDate, currentDate)) {
2225
return previous === FIRST_MONTH ? maxDate.getMonth() : previous - 1;
2326
}
@@ -34,6 +37,9 @@ export const keyRightMove = ({
3437
minDate,
3538
}: HandleKeyMoveType): ((previous: number) => number) => {
3639
return previous => {
40+
if (isSameYear(maxDate, minDate)) {
41+
return previous === maxDate.getMonth() ? minDate.getMonth() : previous + 1;
42+
}
3743
if (isSameYear(maxDate, currentDate)) {
3844
return previous === maxDate.getMonth() ? FIRST_MONTH : previous + 1;
3945
}
@@ -50,6 +56,14 @@ export const keyUpMove = ({
5056
minDate,
5157
}: HandleKeyMoveType): ((previous: number) => number) => {
5258
return previous => {
59+
if (isSameYear(maxDate, minDate)) {
60+
if (previous === minDate.getMonth()) {
61+
return maxDate.getMonth();
62+
}
63+
return previous <= minDate.getMonth() + NUM_DAYS_IN_ROW
64+
? minDate.getMonth()
65+
: previous - NUM_DAYS_IN_ROW;
66+
}
5367
if (isSameYear(minDate, currentDate)) {
5468
if (previous === minDate.getMonth()) {
5569
return LAST_MONTH;
@@ -77,6 +91,14 @@ export const keyDownMove = ({
7791
minDate,
7892
}: HandleKeyMoveType): ((previous: number) => number) => {
7993
return previous => {
94+
if (isSameYear(maxDate, minDate)) {
95+
if (previous === maxDate.getMonth()) {
96+
return minDate.getMonth();
97+
}
98+
return previous >= maxDate.getMonth() - NUM_DAYS_IN_ROW
99+
? maxDate.getMonth()
100+
: previous + NUM_DAYS_IN_ROW;
101+
}
80102
if (isSameYear(minDate, currentDate)) {
81103
if (previous === LAST_MONTH) {
82104
return minDate.getMonth();

src/components/inputDate/components/popoverCalendar.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ const PopoverCalendarComponent = (
4646
return (
4747
<Popover
4848
hasBackDrop
49+
aria-label={props.configAccesibility?.calendarAriaLabel}
4950
aria-modal={props.calendarOpen}
5051
component={PopoverComponentType.DIV}
5152
dataTestId={`${props.dataTestId}Popover`}

src/components/inputDate/inputDateStandAlone.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,16 @@ export const InputDateStandAloneComponent = (
1515
): React.JSX.Element => {
1616
const uniqueId = useId('inputDate');
1717
const inputId = props.id ?? uniqueId;
18-
const ariaControls = props.calendarOpen ? `${uniqueId}Calendar` : undefined;
18+
const ariaControls = props.calendarOpen ? `${inputId}Calendar` : undefined;
1919
const { onWrapperBlur, ...innerInputProps } = props;
2020

2121
return (
2222
<InputDateStyled data-testid={`${props.dataTestId}InputDate`} onBlur={onWrapperBlur}>
2323
<Input
2424
{...innerInputProps}
2525
ref={ref}
26+
aria-controls={ariaControls}
27+
aria-expanded={props.calendarOpen}
2628
icon={{
2729
...props.icon,
2830
altText: props.calendarOpen

src/components/inputDate/stories/inputDate.stories.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,8 @@ const commonArgs: IInputDate = {
5353
format: 'DD-MM-YYYY',
5454
placeholder: 'Date',
5555
locale: 'en-EN',
56-
maxDate: formatDateToUTC(new Date('2025-09-15')),
57-
minDate: formatDateToUTC(new Date('2012-07-05')),
56+
maxDate: formatDateToUTC(new Date('2024-09-15')),
57+
minDate: formatDateToUTC(new Date('2024-03-05')),
5858
// initialDate: new Date('2024-07-10'),
5959
// initialSecondDate: new Date('05-01-2000'),
6060
defaultDate: new Date(),

src/components/inputDate/types/inputDate.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ export type InputDateTextType = Omit<IText<string>, 'children'> & {
3131
export interface IConfigAccesibilityPopover extends IConfigAccesibility {
3232
openInputIconAriaLabel?: string;
3333
closeInputIconAriaLabel?: string;
34+
calendarAriaLabel?: string;
3435
}
3536

3637
export interface IPopoverCalendar {

0 commit comments

Comments
 (0)