Skip to content

Commit 6ffe6ab

Browse files
authored
Merge pull request #2347 from oasisprotocol/mz/mui-useMediaQuery
Remove usage of MUI useMediaQuery
2 parents 83c5cd4 + 59a79c2 commit 6ffe6ab

File tree

2 files changed

+51
-9
lines changed

2 files changed

+51
-9
lines changed

.changelog/2347.internal.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Remove usage of MUI useMediaQuery

src/app/hooks/useScreensize.ts

Lines changed: 50 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,53 @@
1-
import useMediaQuery from '@mui/material/useMediaQuery'
2-
import { useTheme } from '@mui/material/styles'
1+
import { useState, useLayoutEffect } from 'react'
2+
3+
// Sync with Shadcn/Oasis UI Library breakpoints
4+
const BREAKPOINTS = {
5+
md: 768,
6+
lg: 1024,
7+
xl: 1280,
8+
}
39

410
export const useScreenSize = () => {
5-
const theme = useTheme()
6-
return {
7-
isMobile: useMediaQuery(theme.breakpoints.down('md')),
8-
isTablet: useMediaQuery(theme.breakpoints.down('lg')),
9-
isLaptop: useMediaQuery(theme.breakpoints.down('xl')),
10-
isDesktop: useMediaQuery(theme.breakpoints.up('xl')),
11-
}
11+
const [screenSize, setScreenSize] = useState({
12+
isMobile: false,
13+
isTablet: false,
14+
isLaptop: false,
15+
isDesktop: false,
16+
})
17+
18+
useLayoutEffect(() => {
19+
if (typeof window === 'undefined' || !window.matchMedia) {
20+
return undefined
21+
}
22+
23+
const mobileQuery = window.matchMedia(`(max-width: ${BREAKPOINTS.md - 1}px)`)
24+
const tabletQuery = window.matchMedia(`(max-width: ${BREAKPOINTS.lg - 1}px)`)
25+
const laptopQuery = window.matchMedia(`(max-width: ${BREAKPOINTS.xl - 1}px)`)
26+
const desktopQuery = window.matchMedia(`(min-width: ${BREAKPOINTS.xl}px)`)
27+
28+
const updateScreenSize = () => {
29+
setScreenSize({
30+
isMobile: mobileQuery.matches,
31+
isTablet: tabletQuery.matches,
32+
isLaptop: laptopQuery.matches,
33+
isDesktop: desktopQuery.matches,
34+
})
35+
}
36+
37+
updateScreenSize()
38+
39+
mobileQuery.addEventListener('change', updateScreenSize)
40+
tabletQuery.addEventListener('change', updateScreenSize)
41+
laptopQuery.addEventListener('change', updateScreenSize)
42+
desktopQuery.addEventListener('change', updateScreenSize)
43+
44+
return () => {
45+
mobileQuery.removeEventListener('change', updateScreenSize)
46+
tabletQuery.removeEventListener('change', updateScreenSize)
47+
laptopQuery.removeEventListener('change', updateScreenSize)
48+
desktopQuery.removeEventListener('change', updateScreenSize)
49+
}
50+
}, [])
51+
52+
return screenSize
1253
}

0 commit comments

Comments
 (0)