Skip to content

Commit fb58b2a

Browse files
Merge pull request Hacker0x01#5621 from qburst/issue-5520/fix/fix-esc-handler
🐛 Add missing datepicker close call onPopperKeyDown event - to handle ESC keydown event outside the day component
2 parents 6f0da37 + 0661e58 commit fb58b2a

File tree

2 files changed

+36
-0
lines changed

2 files changed

+36
-0
lines changed

src/index.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1170,6 +1170,7 @@ export default class DatePicker extends Component<
11701170
if (eventKey === KeyType.Escape) {
11711171
event.preventDefault();
11721172
this.sendFocusBackToInput();
1173+
this.setOpen(false);
11731174
}
11741175
};
11751176

src/test/datepicker_test.test.tsx

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4387,4 +4387,39 @@ describe("DatePicker", () => {
43874387
expect(input.value).toBe(DATE_VALUE);
43884388
});
43894389
});
4390+
4391+
describe("Close on ESC Key", () => {
4392+
it("should close DatePicker on ESC key press", () => {
4393+
const { container } = render(<DatePicker />);
4394+
const input = safeQuerySelector(container, "input");
4395+
4396+
fireEvent.click(input);
4397+
const calendar = safeQuerySelector(container, ".react-datepicker");
4398+
4399+
fireEvent.keyDown(calendar, getKey(KeyType.Escape));
4400+
4401+
const calendarAfterEsc = container.querySelector(".react-datepicker");
4402+
expect(calendarAfterEsc).toBeFalsy();
4403+
});
4404+
4405+
it("should close DatePicker on ESC key press - even when the focus is at Calendar header buttons", () => {
4406+
const { container } = render(<DatePicker />);
4407+
const input = safeQuerySelector(container, "input");
4408+
4409+
fireEvent.click(input);
4410+
const calendar = safeQuerySelector(container, ".react-datepicker");
4411+
const nextMontButton = safeQuerySelector(
4412+
calendar,
4413+
"button.react-datepicker__navigation--next",
4414+
);
4415+
4416+
fireEvent.click(nextMontButton);
4417+
fireEvent.click(nextMontButton);
4418+
4419+
fireEvent.keyDown(nextMontButton, getKey(KeyType.Escape));
4420+
4421+
const calendarAfterEsc = container.querySelector(".react-datepicker");
4422+
expect(calendarAfterEsc).toBeFalsy();
4423+
});
4424+
});
43904425
});

0 commit comments

Comments
 (0)