|
'use client'; |
|
|
|
import { createContext, useContext, useEffect, useState } from 'react'; |
|
|
|
type DarkModeContextType = { |
|
isDarkMode: boolean; |
|
toggleDarkMode: () => void; |
|
}; |
|
|
|
const DarkModeContext = createContext<DarkModeContextType | undefined>(undefined); |
|
|
|
export function DarkModeProvider({ children }: { children: React.ReactNode }) { |
|
const [isDarkMode, setIsDarkMode] = useState(false); |
|
|
|
useEffect(() => { |
|
|
|
const isDark = localStorage.getItem('darkMode') === 'true'; |
|
setIsDarkMode(isDark); |
|
if (isDark) { |
|
document.documentElement.classList.add('dark'); |
|
} |
|
}, []); |
|
|
|
const toggleDarkMode = () => { |
|
setIsDarkMode((prev) => { |
|
const newValue = !prev; |
|
localStorage.setItem('darkMode', String(newValue)); |
|
if (newValue) { |
|
document.documentElement.classList.add('dark'); |
|
} else { |
|
document.documentElement.classList.remove('dark'); |
|
} |
|
return newValue; |
|
}); |
|
}; |
|
|
|
return ( |
|
<DarkModeContext.Provider value={{ isDarkMode, toggleDarkMode }}> |
|
{children} |
|
</DarkModeContext.Provider> |
|
); |
|
} |
|
|
|
export function useDarkMode() { |
|
const context = useContext(DarkModeContext); |
|
if (context === undefined) { |
|
throw new Error('useDarkMode must be used within a DarkModeProvider'); |
|
} |
|
return context; |
|
} |