11import React from "react" ;
22import "./App.css" ;
33import { GitService } from "./service/gitService" ;
4- import { AppBar , Box , Toolbar } from "@mui/material" ;
4+ import {
5+ AppBar ,
6+ Box ,
7+ CssBaseline ,
8+ ThemeProvider ,
9+ Toolbar ,
10+ } from "@mui/material" ;
511import { SettingsDrawer } from "./SettingsDrawer" ;
612import { AuthHeader } from "./components/AuthHeader" ;
713import { UnAuthHeader } from "./components/UnAuthHeader" ;
814import { Outlet , useNavigate } from "react-router" ;
915import { ConfigContext } from "./context/ConfigContext" ;
16+ import { darkTheme , lightTheme } from "./theme" ;
1017
1118function App ( ) {
1219 const [ user , setUser ] = React . useState < {
@@ -17,6 +24,7 @@ function App() {
1724 const [ token , setToken ] = React . useState < string > ( ) ;
1825 const [ octokit , setOctokit ] = React . useState < GitService | null > ( null ) ;
1926 const [ openSettings , setOpenSettings ] = React . useState < boolean > ( false ) ;
27+ const [ isDarkMode , setIsDarkMode ] = React . useState < boolean > ( false ) ;
2028 const navigate = useNavigate ( ) ;
2129
2230 const onLogin = React . useCallback ( ( ) => {
@@ -55,6 +63,8 @@ function App() {
5563 )
5664 ) ;
5765 }
66+
67+ setIsDarkMode ( localStorage . getItem ( "DARK_MODE" ) === "true" ) ;
5868 } , [ ] ) ;
5969
6070 const logOut = React . useCallback ( ( ) => {
@@ -65,6 +75,11 @@ function App() {
6575 navigate ( "/login" ) ;
6676 } , [ navigate ] ) ;
6777
78+ const switchDarkMode = React . useCallback ( ( ) => {
79+ setIsDarkMode ( ( prev ) => ! prev ) ;
80+ localStorage . setItem ( "DARK_MODE" , ( ! isDarkMode ) . toString ( ) ) ;
81+ } , [ isDarkMode ] ) ;
82+
6883 const [ repositorySettings , setRepositorySettings ] = React . useState <
6984 Record < string , boolean >
7085 > ( { } ) ;
@@ -98,7 +113,8 @@ function App() {
98113 } , [ ] ) ;
99114
100115 return (
101- < >
116+ < ThemeProvider theme = { isDarkMode ? darkTheme : lightTheme } >
117+ < CssBaseline />
102118 < ConfigContext . Provider
103119 value = { {
104120 octokit,
@@ -121,6 +137,8 @@ function App() {
121137 user = { user }
122138 logOut = { logOut }
123139 setOpenSettings = { setOpenSettings }
140+ onThemeSwitch = { switchDarkMode }
141+ darkMode = { isDarkMode }
124142 />
125143 ) }
126144 </ Toolbar >
@@ -136,7 +154,11 @@ function App() {
136154 paddingTop : "4em" ,
137155 } }
138156 >
139- < Box padding = { 2 } width = { "calc(100vw - 2em)" } >
157+ < Box
158+ padding = { 2 }
159+ width = { "calc(100vw - 2em)" }
160+ justifyContent = { "center" }
161+ >
140162 < Outlet />
141163 </ Box >
142164 </ Box >
@@ -147,7 +169,7 @@ function App() {
147169 />
148170 ) }
149171 </ ConfigContext . Provider >
150- </ >
172+ </ ThemeProvider >
151173 ) ;
152174}
153175
0 commit comments