UNPKG

react-grid-carousel

Version:

React resposive carousel component w/ grid layout

46 lines (36 loc) 1.24 kB
import { useEffect, useCallback, useState, useMemo } from 'react' import { addResizeHandler, removeResizeHandler } from '../utils/resizeListener' const useResponsiveLayout = (breakpointList = []) => { const [currentBreakpointSetting, setCurrentBreakpointSetting] = useState() const random = useMemo(() => `${Math.random()}-${Math.random()}`, []) const sortedBreakpointList = useMemo( () => [...breakpointList].sort( (a, b) => (b.breakpoint || 0) - (a.breakpoint || 0) ), [breakpointList] ) const handleResize = useCallback(() => { const windowWidth = window.innerWidth let matchedSetting sortedBreakpointList.find(setting => { if (windowWidth <= setting.breakpoint) { matchedSetting = setting } else { return true } }) setCurrentBreakpointSetting(matchedSetting) }, [sortedBreakpointList]) useEffect(() => { if (breakpointList.length) { handleResize() addResizeHandler(`responsiveLayout-${random}`, handleResize) return () => { removeResizeHandler(`responsiveLayout-${random}`) } } }, [breakpointList, handleResize, random]) return currentBreakpointSetting } export default useResponsiveLayout