Skip to content

Commit 14924f5

Browse files
author
Camille Moussu
committed
feat/breakpoints for mobile and tablet view
1 parent 1e52de0 commit 14924f5

File tree

8 files changed

+86
-16
lines changed

8 files changed

+86
-16
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
export const BREAKPOINTS = {
2+
mobile: 769,
3+
tablet: 1023
4+
} as const
5+
6+
export type Breakpoint = keyof typeof BREAKPOINTS | 'desktop'
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import { useSyncExternalStore } from 'react'
2+
3+
import { BREAKPOINTS, type Breakpoint } from './breakpoints'
4+
5+
let queries: {
6+
mobile: MediaQueryList
7+
tablet: MediaQueryList
8+
} | null = null
9+
10+
function getQueries(): { mobile: MediaQueryList; tablet: MediaQueryList } | null {
11+
if (typeof window === 'undefined') return null
12+
if (!queries) {
13+
queries = {
14+
mobile: window.matchMedia(`(max-width: ${BREAKPOINTS.mobile}px)`),
15+
tablet: window.matchMedia(`(max-width: ${BREAKPOINTS.tablet}px)`)
16+
}
17+
}
18+
return queries
19+
}
20+
21+
function getSnapshot(): Breakpoint {
22+
const queries = getQueries()
23+
if (!queries) return 'desktop'
24+
25+
if (queries.mobile.matches) return 'mobile'
26+
if (queries.tablet.matches) return 'tablet'
27+
return 'desktop'
28+
}
29+
30+
function subscribe(callback: () => void) {
31+
const queries = getQueries()
32+
if (!queries) return (): void => {}
33+
34+
const handler = (): void => callback()
35+
36+
queries.mobile.addEventListener('change', handler)
37+
queries.tablet.addEventListener('change', handler)
38+
39+
return (): void => {
40+
queries.mobile.removeEventListener('change', handler)
41+
queries.tablet.removeEventListener('change', handler)
42+
}
43+
}
44+
45+
export function useBreakpoint(): Breakpoint {
46+
return useSyncExternalStore(subscribe, getSnapshot, () => 'desktop')
47+
}

packages/twake-mui/src/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,6 @@ export { radius } from './lib/radius'
1616
export { Avatar, default as AvatarDefault } from './components/Avatar'
1717
export type { AvatarProps } from './components/Avatar'
1818
export { nameToColor, supportedColors } from './components/Avatar/helpers'
19+
export { useBreakpoint } from './hooks/useBreakpoint'
20+
export type { Breakpoint } from './hooks/useBreakpoint/breakpoints'
21+
export { BREAKPOINTS } from './hooks/useBreakpoint/breakpoints'

packages/twake-mui/src/lib/makeDarkOverrides.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { Theme, Components, alpha } from '@mui/material/styles'
33
import { accordionOverrides } from './overrides/accordionOverrides'
44
import { autocompleteOverrides } from './overrides/autocompleteOverrides'
55
import { avatarOverrides } from './overrides/avatarOverrides'
6-
import { backdropOverrides } from './overrides/backdropOverrides'
6+
import { drawerOverrides } from './overrides/drawerOverrides'
77
import { buttonOverrides } from './overrides/buttonOverrides'
88
import { checkboxOverrides } from './overrides/checkboxOverrides'
99
import { datePickerOverrides } from './overrides/datePickerOverrides'
@@ -47,7 +47,7 @@ export const makeDarkOverrides = (theme: Theme): Components => {
4747
MuiToggleButton: toggleButtonOverrides(theme),
4848
MuiIconButton: iconButtonOverrides(),
4949
MuiCheckbox: checkboxOverrides(),
50-
MuiBackdrop: backdropOverrides(),
50+
MuiDrawer: drawerOverrides(),
5151
MuiTypography: {
5252
styleOverrides: {
5353
root: {

packages/twake-mui/src/lib/makeLightOverrides.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { Theme, Components, alpha } from '@mui/material/styles'
33
import { accordionOverrides } from './overrides/accordionOverrides'
44
import { autocompleteOverrides } from './overrides/autocompleteOverrides'
55
import { avatarOverrides } from './overrides/avatarOverrides'
6-
import { backdropOverrides } from './overrides/backdropOverrides'
6+
import { drawerOverrides } from './overrides/drawerOverrides'
77
import { buttonOverrides } from './overrides/buttonOverrides'
88
import { checkboxOverrides } from './overrides/checkboxOverrides'
99
import { datePickerOverrides } from './overrides/datePickerOverrides'
@@ -47,7 +47,7 @@ export const makeLightOverrides = (theme: Theme): Components => {
4747
MuiToggleButton: toggleButtonOverrides(theme),
4848
MuiIconButton: iconButtonOverrides(),
4949
MuiCheckbox: checkboxOverrides(),
50-
MuiBackdrop: backdropOverrides(),
50+
MuiDrawer: drawerOverrides(),
5151
MuiTypography: {
5252
styleOverrides: {
5353
root: {

packages/twake-mui/src/lib/overrides/backdropOverrides.ts

Lines changed: 0 additions & 11 deletions
This file was deleted.

packages/twake-mui/src/lib/overrides/dialogOverrides.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,14 @@ export const dialogOverrides = (): Components['MuiDialog'] => {
1111
'0 1px 3px 0 rgba(0, 0, 0, 0.30), 0 4px 8px 3px rgba(0, 0, 0, 0.15)',
1212
maxWidth: '570px'
1313
}
14-
}
14+
},
15+
defaultProps: {
16+
BackdropProps: {
17+
sx: {
18+
backgroundColor: 'rgba(0, 0, 0, 0.1)',
19+
}
20+
}
21+
}
1522
}
1623
}
1724

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { Components } from '@mui/material'
2+
3+
export const drawerOverrides = (): Components['MuiDrawer'] => {
4+
return {
5+
styleOverrides: {
6+
root: {},
7+
},
8+
defaultProps: {
9+
ModalProps: {
10+
BackdropProps: {
11+
sx: {
12+
backgroundColor: 'rgba(0, 0, 0, 0.1)',
13+
},
14+
},
15+
},
16+
},
17+
}
18+
}

0 commit comments

Comments
 (0)