DiffWeave / studio /src /context /ThemeContext.jsx
shak3008's picture
feat: turn every entity and page into separately openable deep links with browser history and add light/dark mode settings toggle
84fe53c
Raw History Blame Contribute Delete
1.03 kB
import React, { createContext, useContext, useEffect, useState } from 'react';
const ThemeContext = createContext();
export function ThemeProvider({ children }) {
const [theme, setTheme] = useState(() => {
return localStorage.getItem('diffweave_theme') || 'dark';
});
useEffect(() => {
const root = document.documentElement;
if (theme === 'light') {
root.classList.remove('dark');
root.classList.add('light');
} else {
root.classList.add('dark');
root.classList.remove('light');
}
localStorage.setItem('diffweave_theme', theme);
}, [theme]);
const toggleTheme = () => {
setTheme((prev) => (prev === 'dark' ? 'light' : 'dark'));
};
return (
<ThemeContext.Provider value={{ theme, setTheme, toggleTheme }}>
{children}
</ThemeContext.Provider>
);
}
export const useTheme = () => {
const context = useContext(ThemeContext);
if (!context) {
return { theme: 'dark', setTheme: () => {}, toggleTheme: () => {} };
}
return context;
};