fleet/frontend/hooks/useIsMobileWidth.tsx
Carlo 715d963f82
My device page (self-service) for iOS/iPadOS (#35238)
Implements #32247. This is the complete feature branch, consolidating:

- https://github.com/fleetdm/fleet/pull/35018
- https://github.com/fleetdm/fleet/pull/34758
- https://github.com/fleetdm/fleet/pull/35009
- https://github.com/fleetdm/fleet/pull/35181
- https://github.com/fleetdm/fleet/pull/35342

---------

Co-authored-by: Jonathan Katz <44128041+jkatz01@users.noreply.github.com>
Co-authored-by: RachelElysia <71795832+RachelElysia@users.noreply.github.com>
Co-authored-by: Martin Angers <martin.n.angers@gmail.com>
Co-authored-by: jkatz01 <yehonatankatz@gmail.com>
2025-11-07 17:30:51 -05:00

34 lines
889 B
TypeScript

import { useEffect, useState } from "react";
const MOBILE_BREAKPOINT = 768;
const useIsMobileWidth = () => {
const [isMobileWidth, setIsMobileWidth] = useState(false);
useEffect(() => {
const query = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);
const updateMatch = (e: MediaQueryListEvent) => setIsMobileWidth(e.matches);
// Modern browsers
if (query.addEventListener) {
query.addEventListener("change", updateMatch);
} else {
// Fallback for older Safari
query.addListener(updateMatch);
}
setIsMobileWidth(query.matches);
return () => {
if (query.removeEventListener) {
query.removeEventListener("change", updateMatch);
} else {
query.removeListener(updateMatch); // Deprecated but safe fallback
}
};
}, []);
return isMobileWidth;
};
export default useIsMobileWidth;