File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -8,6 +8,7 @@ import { removePagePlaceholder } from 'uiSrc/utils'
88import MonacoLanguages from 'uiSrc/components/monaco-laguages'
99import AppInit from 'uiSrc/components/init/AppInit'
1010import { Page , PageBody } from 'uiSrc/components/base/layout/page'
11+ import { useSystemThemeListener } from 'uiSrc/services/hooks/useSystemThemeListener'
1112import { Pages , Theme } from './constants'
1213import { themeService } from './services'
1314import {
@@ -48,6 +49,7 @@ const App = ({ children }: { children?: ReactElement[] }) => {
4849 removePagePlaceholder ( )
4950 }
5051 } , [ serverLoading ] )
52+ useSystemThemeListener ( )
5153 return (
5254 < div className = "main-container" >
5355 < MonacoEnvironmentInitializer />
Original file line number Diff line number Diff line change 1+ import { useEffect } from 'react'
2+ import { Theme , THEME_MATCH_MEDIA_DARK } from 'uiSrc/constants'
3+ import { useThemeContext } from 'uiSrc/contexts/themeContext'
4+
5+ /**
6+ * Hook that listens to OS system theme changes
7+ * and updates the theme context when user has System theme selected.
8+ */
9+ export const useSystemThemeListener = ( ) => {
10+ const { usingSystemTheme, changeTheme } = useThemeContext ( )
11+
12+ useEffect ( ( ) => {
13+ const handleSystemThemeChange = ( ) => {
14+ changeTheme ( Theme . System )
15+ }
16+ const mediaQuery = window . matchMedia ?.( THEME_MATCH_MEDIA_DARK )
17+ if ( usingSystemTheme && mediaQuery ) {
18+ mediaQuery . addEventListener ( 'change' , handleSystemThemeChange )
19+ }
20+
21+ return ( ) => {
22+ mediaQuery ?. removeEventListener ( 'change' , handleSystemThemeChange )
23+ }
24+ } , [ usingSystemTheme , changeTheme ] )
25+ }
You can’t perform that action at this time.
0 commit comments