1- import { FC , useContext , useEffect , useRef , useState } from 'react'
1+ import { FC , useContext , useRef , useState } from 'react'
22import {
33 ContextLanguage ,
44 ContextSEOSearchText ,
@@ -12,6 +12,8 @@ import Icon from '../Icon'
1212import ProfilePicture from './ProfilePicture'
1313import { getLanguageIndex } from '../../../helper/getLanguageIndex'
1414import { setItemInStorage } from '../../../helper/setItemInStorage'
15+ import { useCloseSettingsPopup } from '../../../hooks/useCloseSettingsPopup'
16+ import { useSettingsPopupFocusTrap } from '../../../hooks/useSettingsPopupFocusTrap'
1517
1618type SettingsPopupProps = {
1719 handleButtonKeyDown : ( e : React . KeyboardEvent < HTMLButtonElement > ) => void
@@ -176,61 +178,12 @@ const SettingsPopup: FC<SettingsPopupProps> = ({
176178 window . location . reload ( )
177179 }
178180
179- useEffect ( ( ) => {
180- const handleEscape = ( event : KeyboardEvent ) => {
181- if (
182- popupLanguageRef . current &&
183- ! popupLanguageRef . current . contains ( event . target as Node ) &&
184- filterLanguageExpanded &&
185- event . key === 'Escape'
186- ) {
187- event . stopPropagation ( )
188- setFilterLanguageExpanded ( false )
189- }
190- }
191-
192- if ( filterLanguageExpanded ) {
193- document . addEventListener ( 'keydown' , handleEscape )
194- } else {
195- document . removeEventListener ( 'keydown' , handleEscape )
196- }
197-
198- return ( ) => {
199- document . removeEventListener ( 'keydown' , handleEscape )
200- }
201- } , [ filterLanguageExpanded , setFilterLanguageExpanded ] )
202-
203- useEffect ( ( ) => {
204- if ( filterLanguageExpanded ) return
205-
206- const buttons = popupRef . current ?. querySelectorAll ( 'button' )
207- if ( ! buttons || buttons . length === 0 ) return
208-
209- const firstButton = buttons [ 0 ]
210- const lastButton = buttons [ buttons . length - 1 ]
211-
212- const handleFocusTrap = ( e : KeyboardEvent ) => {
213- if ( e . key !== 'Tab' ) return
214-
215- if ( e . shiftKey ) {
216- if ( document . activeElement === firstButton ) {
217- e . preventDefault ( )
218- lastButton . focus ( )
219- }
220- } else {
221- if ( document . activeElement === lastButton ) {
222- e . preventDefault ( )
223- firstButton . focus ( )
224- }
225- }
226- }
227-
228- document . addEventListener ( 'keydown' , handleFocusTrap )
229-
230- return ( ) => {
231- document . removeEventListener ( 'keydown' , handleFocusTrap )
232- }
233- } , [ filterLanguageExpanded , popupRef ] )
181+ useCloseSettingsPopup (
182+ filterLanguageExpanded ,
183+ popupLanguageRef ,
184+ setFilterLanguageExpanded
185+ )
186+ useSettingsPopupFocusTrap ( filterLanguageExpanded , popupRef )
234187
235188 return (
236189 < div
0 commit comments