@@ -41,6 +41,7 @@ import {
4141 DEFAULT_YEAR_ITEM_NUMBER ,
4242 isSameDay ,
4343} from "./date_utils" ;
44+ import TabLoop from "./tab_loop" ;
4445import onClickOutside from "react-onclickoutside" ;
4546
4647export { default as CalendarContainer } from "./calendar_container" ;
@@ -709,7 +710,6 @@ export default class DatePicker extends React.Component {
709710 }
710711 } else if ( eventKey === "Escape" ) {
711712 event . preventDefault ( ) ;
712-
713713 this . setOpen ( false ) ;
714714 }
715715
@@ -719,6 +719,25 @@ export default class DatePicker extends React.Component {
719719 }
720720 } ;
721721
722+ onPortalKeyDown = ( event ) => {
723+ const eventKey = event . key ;
724+ if ( eventKey === "Escape" ) {
725+ event . preventDefault ( ) ;
726+ this . setState (
727+ {
728+ preventFocus : true ,
729+ } ,
730+ ( ) => {
731+ this . setOpen ( false ) ;
732+ setTimeout ( ( ) => {
733+ this . setFocus ( ) ;
734+ this . setState ( { preventFocus : false } ) ;
735+ } ) ;
736+ }
737+ ) ;
738+ }
739+ } ;
740+
722741 // keyDown events passed down to day.jsx
723742 onDayKeyDown = ( event ) => {
724743 this . props . onKeyDown ( event ) ;
@@ -1071,7 +1090,15 @@ export default class DatePicker extends React.Component {
10711090
10721091 if ( this . props . withPortal ) {
10731092 let portalContainer = this . state . open ? (
1074- < div className = "react-datepicker__portal" > { calendar } </ div >
1093+ < TabLoop enableTabLoop = { this . props . enableTabLoop } >
1094+ < div
1095+ className = "react-datepicker__portal"
1096+ tabIndex = { - 1 }
1097+ onKeyDown = { this . onPortalKeyDown }
1098+ >
1099+ { calendar }
1100+ </ div >
1101+ </ TabLoop >
10751102 ) : null ;
10761103
10771104 if ( this . state . open && this . props . portalId ) {
0 commit comments