@@ -41,6 +41,7 @@ import {
41
41
DEFAULT_YEAR_ITEM_NUMBER ,
42
42
isSameDay ,
43
43
} from "./date_utils" ;
44
+ import TabLoop from "./tab_loop" ;
44
45
import onClickOutside from "react-onclickoutside" ;
45
46
46
47
export { default as CalendarContainer } from "./calendar_container" ;
@@ -709,7 +710,6 @@ export default class DatePicker extends React.Component {
709
710
}
710
711
} else if ( eventKey === "Escape" ) {
711
712
event . preventDefault ( ) ;
712
-
713
713
this . setOpen ( false ) ;
714
714
}
715
715
@@ -719,6 +719,25 @@ export default class DatePicker extends React.Component {
719
719
}
720
720
} ;
721
721
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
+
722
741
// keyDown events passed down to day.jsx
723
742
onDayKeyDown = ( event ) => {
724
743
this . props . onKeyDown ( event ) ;
@@ -1071,7 +1090,15 @@ export default class DatePicker extends React.Component {
1071
1090
1072
1091
if ( this . props . withPortal ) {
1073
1092
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 >
1075
1102
) : null ;
1076
1103
1077
1104
if ( this . state . open && this . props . portalId ) {
0 commit comments