@modern-kit/react
Version:
1 lines • 2.91 kB
Source Map (JSON)
{"version":3,"file":"index.cjs","sources":["../../../src/hooks/useWindowSize/index.ts"],"sourcesContent":["import { useCallback, useState } from 'react';\nimport { useDebounce } from '../useDebounce';\nimport { useEventListener } from '../../hooks/useEventListener';\nimport { isNumber, isServer } from '@modern-kit/utils';\n\ninterface WindowSize {\n width: number | null;\n height: number | null;\n}\n\ninterface useWindowSizeProps {\n debounceWait?: number;\n}\n\nconst initialSize = {\n width: null,\n height: null,\n};\n\n/**\n * @description 현재 브라우저 창의 너비와 높이 정보를 추적하고, 반환하는 커스텀 훅입니다.\n *\n * 또한, 불 필요한 호출을 방지하기위한 `debounce` 기능을 제공합니다.\n *\n * @param {useWindowSizeProps} props - 선택적인 설정 객체입니다.\n * - `debounceWait`: 해당 값이 있으면 디바운싱이 적용되며, 이벤트를 디바운싱 대기 시간(ms)입니다.\n *\n * @returns {WindowSize} 현재 브라우저 창의 `width`와 `height`를 포함한 객체를 반환합니다.\n *\n * @example\n * const { width, height } = useWindowSize();\n *\n * @example\n * const { width, height } = useWindowSize({ debounceWait: 300 });\n */\nexport function useWindowSize({\n debounceWait = 0,\n}: useWindowSizeProps = {}): WindowSize {\n const [windowSize, setWindowSize] = useState<WindowSize>(() => {\n if (isServer()) return initialSize;\n\n return {\n width: window.innerWidth,\n height: window.innerHeight,\n };\n });\n\n const debouncedResize = useDebounce(setWindowSize, debounceWait);\n\n const handleResize = useCallback(() => {\n const setSize = isNumber(debounceWait) ? debouncedResize : setWindowSize;\n\n setSize({\n width: window.innerWidth,\n height: window.innerHeight,\n });\n }, [debounceWait, debouncedResize]);\n\n useEventListener(\n typeof window !== 'undefined' ? window : null,\n 'resize',\n handleResize\n );\n\n return windowSize;\n}\n"],"names":["useState","isServer","useDebounce","useCallback","isNumber","useEventListener"],"mappings":";;;;;;;;;;AAcA,MAAM,WAAA,GAAc;AAAA,EAClB,KAAA,EAAO,IAAA;AAAA,EACP,MAAA,EAAQ;AACV,CAAA;AAkBO,SAAS,aAAA,CAAc;AAAA,EAC5B,YAAA,GAAe;AACjB,CAAA,GAAwB,EAAC,EAAe;AACtC,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,eAAqB,MAAM;AAC7D,IAAA,IAAIC,cAAA,IAAY,OAAO,WAAA;AAEvB,IAAA,OAAO;AAAA,MACL,OAAO,MAAA,CAAO,UAAA;AAAA,MACd,QAAQ,MAAA,CAAO;AAAA,KACjB;AAAA,EACF,CAAC,CAAA;AAED,EAAA,MAAM,eAAA,GAAkBC,4BAAA,CAAY,aAAA,EAAe,YAAY,CAAA;AAE/D,EAAA,MAAM,YAAA,GAAeC,kBAAY,MAAM;AACrC,IAAA,MAAM,OAAA,GAAUC,cAAA,CAAS,YAAY,CAAA,GAAI,eAAA,GAAkB,aAAA;AAE3D,IAAA,OAAA,CAAQ;AAAA,MACN,OAAO,MAAA,CAAO,UAAA;AAAA,MACd,QAAQ,MAAA,CAAO;AAAA,KAChB,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,YAAA,EAAc,eAAe,CAAC,CAAA;AAElC,EAAAC,sCAAA;AAAA,IACE,OAAO,MAAA,KAAW,WAAA,GAAc,MAAA,GAAS,IAAA;AAAA,IACzC,QAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,OAAO,UAAA;AACT;;;;"}