15
15
*/
16
16
17
17
import React , { useEffect } from 'react' ;
18
- import './assets/styles/style.scss'
18
+ import './assets/styles/style.scss' ;
19
19
import { BrowserRouter as Router , Routes , Route , Navigate } from 'react-router-dom' ;
20
20
import {
21
21
PublicRoute ,
@@ -37,12 +37,37 @@ import { DocumentDetail } from 'features/documents';
37
37
import { selectPreferences } from 'features/users/usersSlice' ;
38
38
import { TestPage , ButtonView , PopoverView , DropdownView , InputView , BreadcrumbView , ModalView } from 'test' ;
39
39
40
+ const applyTheme = ( theme : 'light' | 'dark' ) => {
41
+ if ( theme === 'light' ) {
42
+ window . document . documentElement . classList . remove ( 'darkmode' ) ;
43
+ window . document . documentElement . style . colorScheme = 'light' ;
44
+ } else {
45
+ window . document . documentElement . classList . add ( 'darkmode' ) ;
46
+ window . document . documentElement . style . colorScheme = 'dark' ;
47
+ }
48
+ } ;
49
+
40
50
function App ( ) {
41
51
const { theme } = useAppSelector ( selectPreferences ) ;
42
52
useEffect ( ( ) => {
43
- document . body . classList . toggle ( 'darkmode' , theme . darkMode ) ;
53
+ applyTheme ( theme . darkMode ? 'dark' : 'light' ) ;
44
54
} , [ theme . darkMode ] ) ;
45
55
56
+ useEffect ( ( ) => {
57
+ const mediaQueryList = window . matchMedia ( '(prefers-color-scheme: dark)' ) ;
58
+ const handleSystemThemeChange = ( e : MediaQueryListEvent ) => {
59
+ applyTheme ( e . matches ? 'dark' : 'light' ) ;
60
+ } ;
61
+
62
+ if ( theme . useSystem ) {
63
+ applyTheme ( mediaQueryList . matches ? 'dark' : 'light' ) ;
64
+ mediaQueryList . addEventListener ( 'change' , handleSystemThemeChange ) ;
65
+ }
66
+ return ( ) => {
67
+ mediaQueryList . removeEventListener ( 'change' , handleSystemThemeChange ) ;
68
+ } ;
69
+ } , [ theme . useSystem ] ) ;
70
+
46
71
return (
47
72
< Router basename = { import . meta. env . BASE_URL } >
48
73
< Routes >
0 commit comments