feat: removed dark theme and theme switching (#190)

This commit is contained in:
Vojtech Simetka
2021-08-26 09:40:13 +02:00
committed by GitHub
parent 3ce83d987d
commit d1720e243c
5 changed files with 32 additions and 157 deletions
+4 -27
View File
@@ -1,4 +1,4 @@
import { ReactElement, useEffect, useState } from 'react' import { ReactElement } from 'react'
import { BrowserRouter as Router } from 'react-router-dom' import { BrowserRouter as Router } from 'react-router-dom'
import './App.css' import './App.css'
@@ -8,37 +8,15 @@ import { SnackbarProvider } from 'notistack'
import BaseRouter from './routes/routes' import BaseRouter from './routes/routes'
import Dashboard from './layout/Dashboard' import Dashboard from './layout/Dashboard'
import { lightTheme, darkTheme } from './theme' import { theme } from './theme'
import { Provider as StampsProvider } from './providers/Stamps' import { Provider as StampsProvider } from './providers/Stamps'
import { Provider as PlatformProvider } from './providers/Platform' import { Provider as PlatformProvider } from './providers/Platform'
import { Provider as BeeProvider } from './providers/Bee' import { Provider as BeeProvider } from './providers/Bee'
import { Provider as SettingsProvider } from './providers/Settings' import { Provider as SettingsProvider } from './providers/Settings'
const App = (): ReactElement => { const App = (): ReactElement => (
const [themeMode, toggleThemeMode] = useState('light')
useEffect(() => {
const theme = localStorage.getItem('theme')
if (theme) {
toggleThemeMode(String(localStorage.getItem('theme')))
} else if (window?.matchMedia('(prefers-color-scheme: dark)')?.matches) {
toggleThemeMode('dark')
}
window?.matchMedia('(prefers-color-scheme: dark)')?.addEventListener('change', e => {
toggleThemeMode(e?.matches ? 'dark' : 'light')
})
return () =>
window?.matchMedia('(prefers-color-scheme: dark)')?.removeEventListener('change', e => {
toggleThemeMode(e?.matches ? 'dark' : 'light')
})
}, [])
return (
<div className="App"> <div className="App">
<ThemeProvider theme={themeMode === 'light' ? lightTheme : darkTheme}> <ThemeProvider theme={theme}>
<SettingsProvider> <SettingsProvider>
<BeeProvider> <BeeProvider>
<StampsProvider> <StampsProvider>
@@ -60,6 +38,5 @@ const App = (): ReactElement => {
</ThemeProvider> </ThemeProvider>
</div> </div>
) )
}
export default App export default App
-55
View File
@@ -1,55 +0,0 @@
import { useState, ReactElement } from 'react'
import { createStyles, makeStyles } from '@material-ui/core/styles'
import { Toolbar, IconButton } from '@material-ui/core/'
import { Sun, Moon } from 'react-feather'
const drawerWidth = 240
const useStyles = makeStyles(() =>
createStyles({
appBar: {
width: `calc(100% - ${drawerWidth}px)`,
marginLeft: drawerWidth,
},
}),
)
interface Props {
themeMode: string
}
export default function SideBar(props: Props): ReactElement {
const [darkMode, toggleDarkMode] = useState(false)
const switchTheme = () => {
const theme = localStorage.getItem('theme')
if (theme) {
localStorage.setItem('theme', theme === 'light' ? 'dark' : 'light')
} else {
localStorage.setItem('theme', darkMode ? 'dark' : 'light')
}
toggleDarkMode(!darkMode)
window.location.reload()
}
const classes = useStyles()
return (
<div>
<div style={{ display: 'fixed' }} className={classes.appBar}>
<Toolbar style={{ display: 'flex' }}>
<div style={{ width: '100%' }}>
<div style={{ float: 'right' }}>
<IconButton style={{ marginRight: '10px' }} aria-label="dark-mode" onClick={() => switchTheme()}>
{props.themeMode === 'dark' ? <Moon /> : <Sun />}
</IconButton>
</div>
</div>
</Toolbar>
</div>
</div>
)
}
+1 -2
View File
@@ -81,7 +81,6 @@ const useStyles = makeStyles((theme: Theme) =>
) )
interface Props { interface Props {
themeMode: string
isOk: boolean isOk: boolean
} }
@@ -104,7 +103,7 @@ export default function SideBar(props: Props): ReactElement {
<img <img
alt="swarm" alt="swarm"
className={classes.logo} className={classes.logo}
src={props.themeMode === 'light' ? SwarmLogoOrange : SwarmLogoOrange} src={SwarmLogoOrange}
style={{ maxHeight: '30px', alignItems: 'center' }} style={{ maxHeight: '30px', alignItems: 'center' }}
/> />
</Link> </Link>
+2 -25
View File
@@ -1,4 +1,4 @@
import { useState, useEffect, useContext, ReactElement } from 'react' import { useContext, ReactElement } from 'react'
import ErrorBoundary from '../components/ErrorBoundary' import ErrorBoundary from '../components/ErrorBoundary'
import AlertVersion from '../components/AlertVersion' import AlertVersion from '../components/AlertVersion'
import { Container, CircularProgress } from '@material-ui/core' import { Container, CircularProgress } from '@material-ui/core'
@@ -6,7 +6,6 @@ import { Container, CircularProgress } from '@material-ui/core'
import { createStyles, Theme, makeStyles } from '@material-ui/core/styles' import { createStyles, Theme, makeStyles } from '@material-ui/core/styles'
import SideBar from '../components/SideBar' import SideBar from '../components/SideBar'
import NavBar from '../components/NavBar'
import { Context } from '../providers/Bee' import { Context } from '../providers/Bee'
@@ -29,33 +28,11 @@ interface Props {
const Dashboard = (props: Props): ReactElement => { const Dashboard = (props: Props): ReactElement => {
const classes = useStyles() const classes = useStyles()
const [themeMode, toggleThemeMode] = useState('light')
const { isLoading, status } = useContext(Context) const { isLoading, status } = useContext(Context)
useEffect(() => {
const theme = localStorage.getItem('theme')
if (theme) {
toggleThemeMode(String(localStorage.getItem('theme')))
} else if (window?.matchMedia('(prefers-color-scheme: dark)')?.matches) {
toggleThemeMode('dark')
}
window?.matchMedia('(prefers-color-scheme: dark)')?.addEventListener('change', e => {
toggleThemeMode(e?.matches ? 'dark' : 'light')
})
return () =>
window?.matchMedia('(prefers-color-scheme: dark)')?.removeEventListener('change', e => {
toggleThemeMode(e?.matches ? 'dark' : 'light')
})
}, [])
return ( return (
<div> <div>
<SideBar themeMode={themeMode} isOk={status.all} /> <SideBar isOk={status.all} />
<NavBar themeMode={themeMode} />
<ErrorBoundary> <ErrorBoundary>
<main className={classes.content}> <main className={classes.content}>
<AlertVersion /> <AlertVersion />
+3 -26
View File
@@ -55,7 +55,7 @@ const propsOverrides = {
}, },
} }
export const lightTheme = createMuiTheme({ export const theme = createMuiTheme({
palette: { palette: {
type: 'light', type: 'light',
background: { background: {
@@ -75,28 +75,5 @@ export const lightTheme = createMuiTheme({
}, },
}) })
export const darkTheme = createMuiTheme({ theme.overrides = componentsOverrides(theme)
palette: { theme.props = propsOverrides
type: 'dark',
background: {
default: '#0d1117',
paper: '#161b22',
},
primary: {
light: orange.A200,
main: '#dd7700',
dark: orange[800],
},
secondary: {
main: '#1f2937',
},
},
typography: {
fontFamily: ['Work Sans', 'Montserrat', 'Nunito', 'Roboto', '"Helvetica Neue"', 'Arial', 'sans-serif'].join(','),
},
})
darkTheme.overrides = componentsOverrides(darkTheme)
darkTheme.props = propsOverrides
lightTheme.overrides = componentsOverrides(lightTheme)
lightTheme.props = propsOverrides