Skip to content

Commit 324ddfd

Browse files
committed
refactor: improve system theme listener hook
Remove module-level variable and useCallback wrapper. Simplify event listener setup and cleanup logic. References: #RI-7754
1 parent bfefbf8 commit 324ddfd

File tree

1 file changed

+8
-19
lines changed

1 file changed

+8
-19
lines changed
Lines changed: 8 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,25 @@
1-
import { useCallback, useEffect } from 'react'
1+
import { useEffect } from 'react'
22
import { Theme, THEME_MATCH_MEDIA_DARK } from 'uiSrc/constants'
33
import { useThemeContext } from 'uiSrc/contexts/themeContext'
44

5-
let mediaQuery = window.matchMedia?.(THEME_MATCH_MEDIA_DARK)
6-
75
/**
86
* Hook that listens to OS system theme changes
97
* and updates the theme context when user has System theme selected.
108
*/
119
export const useSystemThemeListener = () => {
1210
const { usingSystemTheme, changeTheme } = useThemeContext()
1311

14-
const handleSystemThemeChange = useCallback(() => {
15-
usingSystemTheme && changeTheme(Theme.System)
16-
}, [changeTheme, usingSystemTheme])
17-
1812
useEffect(() => {
19-
if (!mediaQuery) {
20-
// Initialize mediaQuery if not done already because window might not be defined when module is loaded
21-
mediaQuery = window.matchMedia?.(THEME_MATCH_MEDIA_DARK)
13+
const handleSystemThemeChange = () => {
14+
changeTheme(Theme.System)
2215
}
23-
// Only listen if using system theme
24-
if (usingSystemTheme) {
25-
if (!mediaQuery) {
26-
return undefined
27-
}
16+
const mediaQuery = window.matchMedia?.(THEME_MATCH_MEDIA_DARK)
17+
if (usingSystemTheme && mediaQuery) {
2818
mediaQuery.addEventListener('change', handleSystemThemeChange)
2919
}
20+
3021
return () => {
31-
if (mediaQuery) {
32-
mediaQuery.removeEventListener('change', handleSystemThemeChange)
33-
}
22+
mediaQuery.removeEventListener('change', handleSystemThemeChange)
3423
}
35-
}, [usingSystemTheme])
24+
}, [usingSystemTheme, changeTheme])
3625
}

0 commit comments

Comments
 (0)