saleor-dashboard/src/components/Theme/ThemeProvider.tsx

48 lines
1.1 KiB
TypeScript
Raw Normal View History

2019-10-28 16:16:49 +00:00
import { MuiThemeProvider } from "@material-ui/core/styles";
2019-08-09 10:26:22 +00:00
import React from "react";
2019-06-19 14:40:52 +00:00
import Baseline from "../../Baseline";
2019-11-04 13:36:25 +00:00
import createTheme from "../../theme";
import { dark, light } from "./themes";
2019-06-19 14:40:52 +00:00
interface IThemeContext {
isDark: boolean;
toggleTheme: () => void;
}
export const ThemeContext = React.createContext<IThemeContext>({
isDark: false,
toggleTheme: () => undefined
});
interface ThemeProviderProps {
isDefaultDark?: boolean;
}
const ThemeProvider: React.FC<ThemeProviderProps> = ({
children,
isDefaultDark
}) => {
const [isDark, setDark] = React.useState(isDefaultDark);
const toggleTheme = () => {
setDark(!isDark);
localStorage.setItem("theme", (!isDark).toString());
};
return (
<ThemeContext.Provider
value={{
isDark,
toggleTheme
}}
>
2019-10-28 16:16:49 +00:00
<MuiThemeProvider theme={createTheme(isDark ? dark : light)}>
<Baseline />
{children}
</MuiThemeProvider>
2019-06-19 14:40:52 +00:00
</ThemeContext.Provider>
);
};
ThemeProvider.defaultProps = {
isDefaultDark: false
};
export default ThemeProvider;