UNPKG

portal-www

Version:

Nova Portal Website. Based on Next starter by Ueno

64 lines (53 loc) 1.64 kB
import { useState, useEffect, useCallback } from 'react'; export const useWindowSize = () => { const [size, setSize] = useState({ width: 0, height: 0 }); const onResize = useCallback(() => { setSize({ width: window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth, height: window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight, }); }, []); useEffect(() => { onResize(); window.addEventListener('resize', onResize, { passive: true }); return () => window.removeEventListener('resize', onResize); }, [onResize]); return size; }; export const useBreakpoint = () => { const [isMobile, setIsMobile] = useState(false); const [isTablet, setIsTablet] = useState(false); const [isDesktop, setIsDesktop] = useState(false); // breakpoints from variables.scss const breakpoint = { mobile: 480, tablet: 720, desktop: 1080, }; const { width } = useWindowSize(); useEffect(() => { if (width < breakpoint.mobile) { setIsMobile(true); setIsTablet(false); setIsDesktop(false); return; } if (width < breakpoint.tablet) { setIsMobile(false); setIsTablet(true); setIsDesktop(false); return; } setIsMobile(false); setIsTablet(false); setIsDesktop(true); }, [width]); return { isMobile, isTablet, isDesktop }; }; const useViewport = () => { const { isMobile, isTablet, isDesktop } = useBreakpoint(); const windowSize = useWindowSize(); return { isMobile, isTablet, isDesktop, windowSize }; }; export default useViewport;