@modern-kit/react
Version:
41 lines (38 loc) • 1.16 kB
JavaScript
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