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

108 lines
2.3 KiB
TypeScript
Raw Normal View History

2019-06-19 14:40:52 +00:00
// FIXME: https://github.com/mirumee/saleor/issues/4174
import OldMuiThemeProvider from "@material-ui/core/styles/MuiThemeProvider";
import MuiThemeProvider from "@material-ui/styles/ThemeProvider";
2019-08-09 10:26:22 +00:00
import React from "react";
2019-06-19 14:40:52 +00:00
import Baseline from "../../Baseline";
import createTheme, { IThemeColors } from "../../theme";
const dark: IThemeColors = {
autofill: "#5D5881",
background: {
default: "#1D1E1F",
paper: "#2E2F31"
},
error: "#C22D74",
font: {
2019-08-09 11:14:35 +00:00
button: "#202124",
2019-06-19 14:40:52 +00:00
default: "#FCFCFC",
2019-08-09 11:14:35 +00:00
gray: "#9E9D9D",
textButton: "#FFFFFF"
2019-06-19 14:40:52 +00:00
},
gray: {
default: "#202124",
disabled: "rgba(32, 33, 36, 0.6)"
},
input: {
2019-08-09 11:14:35 +00:00
border: "#9d9d9d",
2019-06-19 14:40:52 +00:00
default: "#25262A",
2019-08-09 11:14:35 +00:00
disabled: "none",
text: "#FCFCFC",
textHover: "#616161"
2019-06-19 14:40:52 +00:00
},
paperBorder: "#252728",
primary: "#13BEBB",
secondary: "#21125E"
};
const light: IThemeColors = {
autofill: "#f4f6c5",
background: {
default: "#F1F6F6",
paper: "#FFFFFF"
},
error: "#C22D74",
font: {
2019-08-09 11:14:35 +00:00
button: "#FFFFFF",
2019-06-19 14:40:52 +00:00
default: "#3D3D3D",
2019-08-09 11:14:35 +00:00
gray: "#616161",
textButton: "#06847B"
2019-06-19 14:40:52 +00:00
},
gray: {
default: "#C8C8C8",
disabled: "rgba(216, 216, 216, 0.3)"
},
input: {
2019-08-09 11:14:35 +00:00
border: "#616161",
default: "#FFFFFF",
2019-06-19 14:40:52 +00:00
disabled: "#EAEAEA",
2019-08-09 11:14:35 +00:00
text: "#3D3D3D",
textHover: "#616161"
2019-06-19 14:40:52 +00:00
},
paperBorder: "#EAEAEA",
2019-08-09 11:14:35 +00:00
primary: "#06847B",
2019-06-19 14:40:52 +00:00
secondary: "#21125E"
};
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
}}
>
<OldMuiThemeProvider theme={createTheme(isDark ? dark : light)}>
<MuiThemeProvider theme={createTheme(isDark ? dark : light)}>
<Baseline />
{children}
</MuiThemeProvider>
</OldMuiThemeProvider>
</ThemeContext.Provider>
);
};
ThemeProvider.defaultProps = {
isDefaultDark: false
};
export default ThemeProvider;