Openstatus www.openstatus.dev
at main 28 lines 703 B view raw
1import { useEffect, useState } from "react"; 2 3type MediaQuery = string | number; 4 5export function useMediaQuery(query: MediaQuery): boolean { 6 const [matches, setMatches] = useState<boolean>(false); 7 8 useEffect(() => { 9 const mediaQueryList = window.matchMedia(String(query)); 10 11 const handleChange = (event: MediaQueryListEvent) => { 12 setMatches(event.matches); 13 }; 14 15 // Initial check 16 setMatches(mediaQueryList.matches); 17 18 // Add listener for changes 19 mediaQueryList.addEventListener("change", handleChange); 20 21 // Clean up listener on unmount 22 return () => { 23 mediaQueryList.removeEventListener("change", handleChange); 24 }; 25 }, [query]); 26 27 return matches; 28}