light_dark.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import * as React from 'react';
  2. import IconButton from '@mui/material/IconButton';
  3. import Box from '@mui/material/Box';
  4. import { useTheme, ThemeProvider, createTheme } from '@mui/material/styles';
  5. import Brightness4Icon from '@mui/icons-material/Brightness4';
  6. import Brightness7Icon from '@mui/icons-material/Brightness7';
  7. import { CssBaseline } from '@mui/material';
  8. import { useEffect } from 'react';
  9. const ColorModeContext = React.createContext({ toggleColorMode: () => {} });
  10. function MyApp() {
  11. const theme = useTheme();
  12. const colorMode = React.useContext(ColorModeContext);
  13. return (
  14. //Give value and area to the dark mode
  15. <CssBaseline
  16. sx={{
  17. display: 'flex',
  18. width: '100%',
  19. alignItems: 'center',
  20. justifyContent: 'center',
  21. bgcolor: 'background.default',
  22. color: 'text.primary',
  23. borderRadius: 1,
  24. p: 3,
  25. }}
  26. >
  27. {theme.palette.mode} mode
  28. <IconButton sx={{ ml: 1 }} onClick={colorMode.toggleColorMode} color="inherit">
  29. {theme.palette.mode === 'dark' ? <Brightness7Icon /> : <Brightness4Icon />}
  30. </IconButton>
  31. </CssBaseline >
  32. );
  33. }
  34. export default function ToggleColorMode(Component) {
  35. const [mode, setMode] = React.useState('light');
  36. const colorMode = React.useMemo(
  37. () => ({
  38. toggleColorMode: () => {
  39. setMode((prevMode) => (prevMode === 'light' ? 'dark' : 'light'));
  40. },
  41. }),
  42. [],
  43. );
  44. const theme = React.useMemo(
  45. () =>
  46. createTheme({
  47. palette: {
  48. mode,
  49. },
  50. }),
  51. [mode],
  52. );
  53. return (
  54. <ColorModeContext.Provider value={colorMode}>
  55. <ThemeProvider theme={theme}>
  56. <MyApp/>
  57. </ThemeProvider>
  58. </ColorModeContext.Provider>
  59. );
  60. }