✨ feat(utils): add viewport utils
This commit is contained in:
@@ -0,0 +1,21 @@
|
||||
import React from 'react'
|
||||
|
||||
import viewportContext from './viewportContext'
|
||||
|
||||
const ViewportProvider = (props: { children: React.ReactNode }) => {
|
||||
const [width, setWidth] = React.useState(window.innerWidth)
|
||||
const [height, setHeight] = React.useState(window.innerHeight)
|
||||
const handleWindowResize = () => {
|
||||
setWidth(window.innerWidth)
|
||||
setHeight(window.innerHeight)
|
||||
}
|
||||
|
||||
React.useEffect(() => {
|
||||
window.addEventListener('resize', handleWindowResize)
|
||||
return () => window.removeEventListener('resize', handleWindowResize)
|
||||
}, [])
|
||||
|
||||
return <viewportContext.Provider value={{ width, height }}>{props.children}</viewportContext.Provider>
|
||||
}
|
||||
|
||||
export default ViewportProvider
|
||||
@@ -0,0 +1,3 @@
|
||||
export { default as viewportContext } from './viewportContext'
|
||||
export { default as ViewportProvider } from './ViewportProvider'
|
||||
export { default as useViewport } from './useViewport'
|
||||
@@ -0,0 +1,10 @@
|
||||
import React from 'react'
|
||||
|
||||
import viewportContext from './viewportContext'
|
||||
|
||||
const useViewport = () => {
|
||||
const { width, height } = React.useContext(viewportContext)
|
||||
return { width, height }
|
||||
}
|
||||
|
||||
export default useViewport
|
||||
@@ -0,0 +1,6 @@
|
||||
import React from 'react'
|
||||
|
||||
type Viewport = { width: number; height: number }
|
||||
const viewportContext = React.createContext<Viewport>({ width: window.innerWidth, height: window.innerHeight })
|
||||
|
||||
export default viewportContext
|
||||
Reference in New Issue
Block a user