Openstatus
www.openstatus.dev
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}