UNPKG

@modern-kit/react

Version:
41 lines (38 loc) 1.16 kB
import { useState, useCallback } from 'react'; import { useDebounce } from '../useDebounce/index.mjs'; import { useEventListener } from '../useEventListener/index.mjs'; import { isServer, isNumber } from '@modern-kit/utils'; import '../useUnmount/index.mjs'; import '../usePreservedCallback/index.mjs'; import '../useIsomorphicLayoutEffect/index.mjs'; const initialSize = { width: null, height: null }; function useWindowSize({ debounceWait = 0 } = {}) { const [windowSize, setWindowSize] = useState(() => { if (isServer()) return initialSize; return { width: window.innerWidth, height: window.innerHeight }; }); const debouncedResize = useDebounce(setWindowSize, debounceWait); const handleResize = useCallback(() => { const setSize = isNumber(debounceWait) ? debouncedResize : setWindowSize; setSize({ width: window.innerWidth, height: window.innerHeight }); }, [debounceWait, debouncedResize]); useEventListener( typeof window !== "undefined" ? window : null, "resize", handleResize ); return windowSize; } export { useWindowSize }; //# sourceMappingURL=index.mjs.map