Files
parcer/src/context/theme-provider.tsx

74 lines
1.7 KiB
TypeScript
Raw Normal View History

import React, { createContext, useContext, useState, useEffect } from 'react';
2024-11-07 00:46:47 +05:30
import { ThemeProvider, createTheme } from '@mui/material/styles';
import CssBaseline from '@mui/material/CssBaseline';
const lightTheme = createTheme({
palette: {
mode: 'light',
primary: {
main: '#1e88e5',
},
background: {
default: '#ffffff',
paper: '#f5f5f5',
},
text: {
primary: '#000000',
},
},
});
const darkTheme = createTheme({
palette: {
mode: 'dark',
primary: {
main: '#90caf9',
},
background: {
default: '#121212',
paper: '#1e2124',
},
text: {
primary: '#ffffff',
},
},
});
const ThemeModeContext = createContext({
toggleTheme: () => {},
darkMode: false,
2024-11-07 00:46:47 +05:30
});
export const useThemeMode = () => useContext(ThemeModeContext);
const ThemeModeProvider = ({ children }: { children: React.ReactNode }) => {
// Load saved mode from localStorage or default to light mode
const [darkMode, setDarkMode] = useState(() => {
const savedMode = localStorage.getItem('darkMode');
return savedMode ? JSON.parse(savedMode) : false;
});
2024-11-07 00:46:47 +05:30
const toggleTheme = () => {
setDarkMode((prevMode: any) => {
const newMode = !prevMode;
localStorage.setItem('darkMode', JSON.stringify(newMode)); // Save new mode to localStorage
return newMode;
});
2024-11-07 00:46:47 +05:30
};
useEffect(() => {
localStorage.setItem('darkMode', JSON.stringify(darkMode)); // Save initial mode
}, [darkMode]);
2024-11-07 00:46:47 +05:30
return (
<ThemeModeContext.Provider value={{ toggleTheme, darkMode }}>
2024-11-07 00:46:47 +05:30
<ThemeProvider theme={darkMode ? darkTheme : lightTheme}>
<CssBaseline />
{children}
</ThemeProvider>
</ThemeModeContext.Provider>
);
};
export default ThemeModeProvider;