Skip to content

Commit 9f89fea

Browse files
vlad2689wojtekmaj
andauthored
Fix calendar and clock not switching on focus (#381)
Co-authored-by: Wojciech Maj <kontakt@wojtekmaj.pl>
1 parent 9bb42e3 commit 9f89fea

File tree

2 files changed

+32
-4
lines changed

2 files changed

+32
-4
lines changed

src/DateTimePicker.spec.tsx

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -668,6 +668,26 @@ describe('DateTimePicker', () => {
668668
);
669669
});
670670

671+
it('opens Calendar component, followed by Clock component, when focusing on inputs inside', () => {
672+
const { container } = render(<DateTimePicker />);
673+
674+
const dayInput = container.querySelector('input[name="day"]') as HTMLInputElement;
675+
676+
fireEvent.focus(dayInput);
677+
678+
const calendar = container.querySelector('.react-calendar');
679+
680+
expect(calendar).toBeInTheDocument();
681+
682+
const minuteInput = container.querySelector('input[name="minute"]') as HTMLInputElement;
683+
684+
fireEvent.focus(minuteInput);
685+
686+
const clock = container.querySelector('.react-clock');
687+
688+
expect(clock).toBeInTheDocument();
689+
});
690+
671691
it('closes Calendar when changing value by default', async () => {
672692
const { container } = render(<DateTimePicker isCalendarOpen />);
673693

src/DateTimePicker.tsx

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -305,8 +305,6 @@ export default function DateTimePicker(props: DateTimePickerProps) {
305305
if (
306306
// Internet Explorer still fires onFocus on disabled elements
307307
disabled ||
308-
isCalendarOpen ||
309-
isClockOpen ||
310308
!openWidgetsOnFocus ||
311309
event.target.dataset.select === 'true'
312310
) {
@@ -316,15 +314,25 @@ export default function DateTimePicker(props: DateTimePickerProps) {
316314
switch (event.target.name) {
317315
case 'day':
318316
case 'month':
319-
case 'year':
317+
case 'year': {
318+
if (isCalendarOpen) {
319+
return;
320+
}
321+
320322
openCalendar({ reason: 'focus' });
321323
break;
324+
}
322325
case 'hour12':
323326
case 'hour24':
324327
case 'minute':
325-
case 'second':
328+
case 'second': {
329+
if (isClockOpen) {
330+
return;
331+
}
332+
326333
openClock({ reason: 'focus' });
327334
break;
335+
}
328336
default:
329337
}
330338
}

0 commit comments

Comments
 (0)