✨ feat(utils): add viewport utils

This commit is contained in:
2024-02-18 15:15:01 +01:00
parent c362a2b4d7
commit 2e92417222
4 changed files with 40 additions and 0 deletions
@@ -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
+3
View File
@@ -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