UNPKG

design-comuni-plone-theme

Version:
48 lines (40 loc) 1.43 kB
import { useEffect, useRef } from 'react'; const DATA_FOCUS_MOUSE = 'data-focus-mouse'; const CLASS_NAME_MOUSE_FOCUS = 'focus--mouse'; const TrackFocus = () => { const usingMouse = useRef(false); useEffect(() => { const handleEvent = (e) => { usingMouse.current = e.type === 'mousedown'; }; const handleFocusChange = (e) => { if (e.target) { if (usingMouse.current) { e.target.classList.add(CLASS_NAME_MOUSE_FOCUS); e.target.setAttribute(DATA_FOCUS_MOUSE, true); } else { e.target.classList.remove(CLASS_NAME_MOUSE_FOCUS); e.target.removeAttribute(DATA_FOCUS_MOUSE); } } }; const handleFocusOut = (e) => { if (e.target) { e.target.classList.remove(CLASS_NAME_MOUSE_FOCUS); e.target.removeAttribute(DATA_FOCUS_MOUSE); } }; document.addEventListener('keydown', handleEvent); document.addEventListener('mousedown', handleEvent); document.addEventListener('focusin', handleFocusChange); document.addEventListener('focusout', handleFocusOut); return () => { document.removeEventListener('keydown', handleEvent); document.removeEventListener('mousedown', handleEvent); document.removeEventListener('focusin', handleFocusChange); document.removeEventListener('focusout', handleFocusOut); }; }, []); return null; }; export default TrackFocus;