@adrihfly/screen-detector-hook
Version:
A useful react hook for handle screen position and size
32 lines (28 loc) • 1.17 kB
JavaScript
;
var react = require('react');
const useScreenDetector = ({ breakpoints, detector }) => {
const entries = react.useMemo(() => Object.entries(breakpoints).sort((a, b) => a[1] > b[1] ? 1 : -1), [breakpoints]);
const [screen, setScreen] = react.useState(entries[0][0]);
const [landscape, setLandscape] = react.useState(false);
const handleSize = react.useCallback(() => {
const innerWidth = window.innerWidth;
const innerHeight = window.innerHeight;
const screenDetected = entries.reduce((prev, [breakpoint, width]) => {
if (width < innerWidth)
return breakpoint;
return prev;
}, entries[0][0]);
if (screenDetected)
setScreen(screenDetected);
setLandscape(innerWidth > innerHeight);
}, [breakpoints]);
react.useEffect(() => {
handleSize();
if (!detector)
return;
window.addEventListener('resize', handleSize);
return () => { window.removeEventListener('resize', handleSize); };
}, [breakpoints]);
return { screen, landscape };
};
exports.useScreenDetector = useScreenDetector;