@@ -151,15 +151,18 @@ function onWindowKeyDown(e: KeyboardEvent) {
151151 * It will force back to the first focusable element when focus leaves the element.
152152 */
153153export function lockFocus ( element : HTMLElement ) : VoidFunction {
154- // Refresh focus elements
155- focusElements = focusElements . filter ( ele => ele !== element ) ;
156- focusElements . push ( element ) ;
154+ if ( element ) {
155+ // Refresh focus elements
156+ focusElements = focusElements . filter ( ele => ele !== element ) ;
157+ focusElements . push ( element ) ;
157158
158- // Just add event since it will de-duplicate
159- window . addEventListener ( 'focusin' , syncFocus ) ;
160- window . addEventListener ( 'keydown' , onWindowKeyDown , true ) ;
161- syncFocus ( ) ;
159+ // Just add event since it will de-duplicate
160+ window . addEventListener ( 'focusin' , syncFocus ) ;
161+ window . addEventListener ( 'keydown' , onWindowKeyDown , true ) ;
162+ syncFocus ( ) ;
163+ }
162164
165+ // Always return unregister function
163166 return ( ) => {
164167 lastFocusElement = null ;
165168 focusElements = focusElements . filter ( ele => ele !== element ) ;
@@ -176,7 +179,10 @@ export function useLockFocus(
176179) {
177180 useEffect ( ( ) => {
178181 if ( lock ) {
179- return lockFocus ( getElement ( ) ) ;
182+ const element = getElement ( ) ;
183+ if ( element ) {
184+ return lockFocus ( element ) ;
185+ }
180186 }
181187 } , [ lock ] ) ;
182188}
0 commit comments