Gateprep / frontend /src /context /ThemeContext.jsx
banu4prasad's picture
frontend and DB code refactor
a17d02d
Raw
History Blame Contribute Delete
934 Bytes
import { createContext, useContext, useState, useEffect, useCallback, useMemo } from 'react'
const ThemeContext = createContext(null)
export function ThemeProvider({ children }) {
const [theme, setTheme] = useState(() => localStorage.getItem('theme') || 'dark')
useEffect(() => {
document.documentElement.setAttribute('data-theme', theme)
document.documentElement.style.colorScheme = theme
if (theme === 'dark') {
document.documentElement.classList.add('dark')
} else {
document.documentElement.classList.remove('dark')
}
localStorage.setItem('theme', theme)
}, [theme])
const toggle = useCallback(() => setTheme(t => t === 'dark' ? 'light' : 'dark'), [])
const value = useMemo(() => ({ theme, toggle }), [theme, toggle])
return (
<ThemeContext.Provider value={value}>
{children}
</ThemeContext.Provider>
)
}
export const useTheme = () => useContext(ThemeContext)