Files
whowhat/frontend/src/theme/ThemeContext.jsx
Kacper ae3b435b51 v1.0.3
add multi lang
2026-07-11 20:03:15 +02:00

35 lines
936 B
JavaScript

import { createContext, useContext, useEffect, useState, useCallback } from 'react';
const THEME_KEY = 'whowhat_theme';
const ThemeContext = createContext(null);
function applyTheme(theme) {
const root = document.documentElement;
if (theme === 'system') {
root.removeAttribute('data-theme');
} else {
root.setAttribute('data-theme', theme);
}
}
export function ThemeProvider({ children }) {
const [theme, setThemeState] = useState(() => localStorage.getItem(THEME_KEY) || 'system');
useEffect(() => {
applyTheme(theme);
}, [theme]);
const setTheme = useCallback((t) => {
localStorage.setItem(THEME_KEY, t);
setThemeState(t);
}, []);
return <ThemeContext.Provider value={{ theme, setTheme }}>{children}</ThemeContext.Provider>;
}
export function useTheme() {
const ctx = useContext(ThemeContext);
if (!ctx) throw new Error('useTheme must be used within ThemeProvider');
return ctx;
}