-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathMaterialThemeProvider.js
98 lines (91 loc) · 2.73 KB
/
MaterialThemeProvider.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import React, { useMemo, useState } from 'react';
import PropTypes from 'prop-types';
import { Helmet } from 'react-helmet';
import CssBaseline from '@material-ui/core/CssBaseline';
import { ThemeProvider } from '@material-ui/core/styles';
import useDarkMode from 'use-dark-mode';
import { createTheme, useMediaQuery } from '@material-ui/core';
import createBreakpoints from '@material-ui/core/styles/createBreakpoints';
import ThemeBrightnessContext from './ThemeBrightnessContext';
export default function MaterialThemeProvider({ children, storageBrightness }) {
// const darkMode = useDarkMode();
const prefersDarkMode = useMediaQuery('(prefers-color-scheme: dark)');
const preferredBrightness = prefersDarkMode ? 'dark' : 'light';
const [brightness, setBrightness] = useState(storageBrightness === 'dark' || storageBrightness === 'light' ? storageBrightness : preferredBrightness);
const isDark = brightness === 'dark';
const toggleBrightness = () => {
const targetBrightness = brightness === 'light' ? 'dark' : 'light';
localStorage.setItem('themeBrightness', targetBrightness);
console.log("yo");
setBrightness(targetBrightness);
};
const theme = useMemo(() => createTheme({
palette: {
type: brightness,
primary: {
main: isDark ? '#8e9df0' : '#27378f',
},
secondary: {
main: '#f44336',
},
background: {
default: isDark ? '#121212' : '#fff',
},
contrastThreshold: 3,
},
typography: {
allVariants: {
color: isDark ? 'white' : undefined,
},
fontFamily: [
'Kumbh Sans',
'sans-serif',
].join(','),
body1: {
fontFamily: [
'Raleway',
'sans-serif',
].join(','),
},
body2: {
fontFamily: [
'Raleway',
'sans-serif',
].join(','),
},
},
breakpoints: createBreakpoints({
values: {
xs: 0,
sm: 600,
md: 1000,
lg: 1350,
xl: 1920,
},
}),
}), [brightness]);
return (
<React.Fragment>
<Helmet>
<meta name="viewport" content="minimum-scale=1, initial-scale=1, width=device-width" />
<link
href="https://fonts.googleapis.com/css?family=Roboto:400,500,700&display=swap"
rel="stylesheet"
/>
</Helmet>
<ThemeProvider theme={theme}>
<CssBaseline />
<ThemeBrightnessContext.Provider value={{
isDark: isDark,
toggleBrightness: toggleBrightness,
}}>
{children}
</ThemeBrightnessContext.Provider>
</ThemeProvider>
</React.Fragment>
);
}
MaterialThemeProvider.propTypes = {
children: PropTypes.node,
brightness: PropTypes.string.isRequired,
};