@@ -91,6 +91,7 @@ export class Page extends React.Component<PageProps, PageState> {
91
91
isNotificationDrawerExpanded : false ,
92
92
onNotificationDrawerExpand : ( ) => null
93
93
} ;
94
+ mainRef = React . createRef < HTMLDivElement > ( ) ;
94
95
95
96
constructor ( props : PageProps ) {
96
97
super ( props ) ;
@@ -107,30 +108,50 @@ export class Page extends React.Component<PageProps, PageState> {
107
108
componentDidMount ( ) {
108
109
const { isManagedSidebar, onPageResize } = this . props ;
109
110
if ( isManagedSidebar || onPageResize ) {
110
- window . addEventListener ( 'resize' , debounce ( this . handleResize , 250 ) ) ;
111
+ window . addEventListener ( 'resize' , this . handleResize ) ;
112
+ const currentRef = this . mainRef . current ;
113
+ if ( currentRef ) {
114
+ currentRef . addEventListener ( 'mousedown' , this . handleMainClick ) ;
115
+ currentRef . addEventListener ( 'touchstart' , this . handleMainClick ) ;
116
+ }
111
117
// Initial check if should be shown
112
- this . handleResize ( ) ;
118
+ this . resize ( ) ;
113
119
}
114
120
}
115
121
116
122
componentWillUnmount ( ) {
117
123
const { isManagedSidebar, onPageResize } = this . props ;
118
124
if ( isManagedSidebar || onPageResize ) {
119
- window . removeEventListener ( 'resize' , debounce ( this . handleResize , 250 ) ) ;
125
+ window . removeEventListener ( 'resize' , this . handleResize ) ;
126
+ const currentRef = this . mainRef . current ;
127
+ if ( currentRef ) {
128
+ currentRef . removeEventListener ( 'mousedown' , this . handleMainClick ) ;
129
+ currentRef . removeEventListener ( 'touchstart' , this . handleMainClick ) ;
130
+ }
120
131
}
121
132
}
122
133
123
- handleResize = ( ) => {
124
- const { onPageResize } = this . props ;
125
- const windowSize = window . innerWidth ;
134
+ isMobile = ( ) =>
126
135
// eslint-disable-next-line radix
127
- const mobileView = windowSize < Number . parseInt ( globalBreakpointXl . value , 10 ) ;
136
+ window . innerWidth < Number . parseInt ( globalBreakpointXl . value , 10 ) ;
137
+
138
+ resize = ( ) => {
139
+ const { onPageResize } = this . props ;
140
+ const mobileView = this . isMobile ( ) ;
128
141
if ( onPageResize ) {
129
- onPageResize ( { mobileView, windowSize } ) ;
142
+ onPageResize ( { mobileView, windowSize : window . innerWidth } ) ;
130
143
}
131
144
this . setState ( { mobileView } ) ;
132
145
} ;
133
146
147
+ handleResize = debounce ( this . resize , 250 ) ;
148
+
149
+ handleMainClick = ( ev : any ) => {
150
+ if ( this . isMobile ( ) && this . state . mobileIsNavOpen && this . mainRef . current ) {
151
+ this . setState ( { mobileIsNavOpen : false } ) ;
152
+ }
153
+ } ;
154
+
134
155
onNavToggleMobile = ( ) => {
135
156
this . setState ( prevState => ( {
136
157
mobileIsNavOpen : ! prevState . mobileIsNavOpen
@@ -178,6 +199,7 @@ export class Page extends React.Component<PageProps, PageState> {
178
199
179
200
const main = (
180
201
< main
202
+ ref = { this . mainRef }
181
203
role = { role }
182
204
id = { mainContainerId }
183
205
className = { css ( styles . pageMain ) }
0 commit comments