diff --git a/webui/src/components/Header/Header.tsx b/webui/src/components/Header/Header.tsx
index 3e39b5f35d7d860fdb8f99be567ef122fda965fa..3bdb252f4aa0ef308b5ccc2af4f635b1229c874c 100644
--- a/webui/src/components/Header/Header.tsx
+++ b/webui/src/components/Header/Header.tsx
@@ -5,6 +5,7 @@ import AppBar from '@material-ui/core/AppBar';
import Toolbar from '@material-ui/core/Toolbar';
import { makeStyles } from '@material-ui/core/styles';
+import { LightSwitch } from '../../components/Themer';
import CurrentIdentity from '../CurrentIdentity/CurrentIdentity';
const useStyles = makeStyles((theme) => ({
@@ -21,6 +22,9 @@ const useStyles = makeStyles((theme) => ({
display: 'flex',
alignItems: 'center',
},
+ lightSwitch: {
+ padding: '0 20px',
+ },
logo: {
height: '42px',
marginRight: theme.spacing(2),
@@ -39,6 +43,9 @@ function Header() {
git-bug
+
+
+
diff --git a/webui/src/components/Themer.tsx b/webui/src/components/Themer.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..13d098da2e4c2edef7401db9b6dc0a82c4c6b22c
--- /dev/null
+++ b/webui/src/components/Themer.tsx
@@ -0,0 +1,64 @@
+import React, { createContext, useCallback, useContext, useState } from 'react';
+
+import { ThemeProvider } from '@material-ui/core';
+import IconButton from '@material-ui/core/IconButton/IconButton';
+import Tooltip from '@material-ui/core/Tooltip/Tooltip';
+import { createMuiTheme, ThemeOptions } from '@material-ui/core/styles';
+import { NightsStayRounded, WbSunnyRounded } from '@material-ui/icons';
+
+const defaultTheme: ThemeOptions = {
+ palette: {
+ type: 'light',
+ primary: {
+ main: '#263238',
+ },
+ },
+};
+
+const ThemeContext = createContext({
+ toggleMode: () => {},
+ mode: '',
+});
+
+const LightSwitch = () => {
+ const { mode, toggleMode } = useContext(ThemeContext);
+
+ return (
+
+
+ {mode === 'light' ? (
+
+ ) : (
+
+ )}
+
+
+ );
+};
+
+type Props = { children: React.ReactNode };
+const Themer = ({ children }: Props) => {
+ const [theme, setTheme] = useState(defaultTheme);
+
+ const toggleMode = useCallback(() => {
+ const newMode = theme.palette?.type === 'dark' ? 'light' : 'dark';
+ const adjustedTheme: ThemeOptions = {
+ ...theme,
+ palette: {
+ ...theme.palette,
+ type: newMode,
+ },
+ };
+ setTheme(adjustedTheme);
+ }, [theme, setTheme]);
+
+ const newMode = theme.palette?.type === 'dark' ? 'light' : 'dark';
+
+ return (
+
+ {children}
+
+ );
+};
+
+export { Themer as default, LightSwitch };
diff --git a/webui/src/index.tsx b/webui/src/index.tsx
index f07b869d7d72e464d30963f0b76e05cc6fed017f..a7f52448a1dd8091ccb51cf961e65d31389c1faa 100644
--- a/webui/src/index.tsx
+++ b/webui/src/index.tsx
@@ -1,21 +1,13 @@
import { ApolloProvider } from '@apollo/client';
import React from 'react';
import ReactDOM from 'react-dom';
-import { BrowserRouter } from 'react-router-dom';
-
-import ThemeProvider from '@material-ui/styles/ThemeProvider';
import App from './App';
import apolloClient from './apollo';
-import theme from './theme';
ReactDOM.render(
-
-
-
-
-
+
,
document.getElementById('root')
);
diff --git a/webui/src/theme.ts b/webui/src/theme.ts
index d41cd731d7e4de4f89536a335e182bebbe52c70e..3d53694155d77c056946b5158600a572a7d12d51 100644
--- a/webui/src/theme.ts
+++ b/webui/src/theme.ts
@@ -2,6 +2,7 @@ import { createMuiTheme } from '@material-ui/core/styles';
const theme = createMuiTheme({
palette: {
+ type: 'dark',
primary: {
main: '#263238',
},