import React, { createContext, useContext, useState } from 'react'; import { fade, ThemeProvider } from '@material-ui/core'; import IconButton from '@material-ui/core/IconButton/IconButton'; import Tooltip from '@material-ui/core/Tooltip/Tooltip'; import { Theme } from '@material-ui/core/styles'; import { NightsStayRounded, WbSunnyRounded } from '@material-ui/icons'; import { makeStyles } from '@material-ui/styles'; const ThemeContext = createContext({ toggleMode: () => {}, mode: '', }); const useStyles = makeStyles((theme: Theme) => ({ iconButton: { color: fade(theme.palette.primary.contrastText, 0.5), }, })); const LightSwitch = () => { const { mode, toggleMode } = useContext(ThemeContext); const nextMode = mode === 'light' ? 'dark' : 'light'; const description = `Switch to ${nextMode} theme`; const classes = useStyles(); return ( {mode === 'light' ? : } ); }; type Props = { children: React.ReactNode; lightTheme: Theme; darkTheme: Theme; }; const Themer = ({ children, lightTheme, darkTheme }: Props) => { const savedMode = localStorage.getItem('themeMode'); const preferedMode = savedMode != null ? savedMode : 'light'; const [mode, setMode] = useState(preferedMode); const toggleMode = () => { const preferedMode = mode === 'light' ? 'dark' : 'light'; localStorage.setItem('themeMode', preferedMode); setMode(preferedMode); }; const preferedTheme = mode === 'dark' ? darkTheme : lightTheme; return ( {children} ); }; export { Themer as default, LightSwitch };