Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
File size: 1,902 Bytes
83106dd 970eef1 83106dd 970eef1 83106dd 970eef1 83106dd 970eef1 83106dd 970eef1 83106dd 970eef1 83106dd 970eef1 83106dd 970eef1 83106dd 970eef1 83106dd 970eef1 83106dd |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
import { useState, useEffect, createContext, useContext } from "react";
// Créer un contexte pour le thème
const ThemeModeContext = createContext();
// Provider pour le contexte du thème
export const ThemeModeProvider = ({ children }) => {
// Get system preference
const getSystemPreference = () => {
return window.matchMedia("(prefers-color-scheme: dark)").matches
? "dark"
: "light";
};
// Essayer de récupérer le mode depuis localStorage ou utiliser la préférence système
const getSavedTheme = () => {
const savedTheme = localStorage.getItem("theme-mode");
return savedTheme || getSystemPreference();
};
// Initialize theme mode from saved or system preference
const [mode, setMode] = useState(getSavedTheme);
// Listen to system preference changes if no saved preference
useEffect(() => {
const mediaQuery = window.matchMedia("(prefers-color-scheme: dark)");
const handleChange = (e) => {
// Only change if no user preference is saved
if (!localStorage.getItem("theme-mode")) {
setMode(e.matches ? "dark" : "light");
}
};
mediaQuery.addEventListener("change", handleChange);
return () => mediaQuery.removeEventListener("change", handleChange);
}, []);
// Save theme preference to localStorage when it changes
useEffect(() => {
localStorage.setItem("theme-mode", mode);
}, [mode]);
const toggleTheme = () => {
setMode((prevMode) => (prevMode === "light" ? "dark" : "light"));
};
return (
<ThemeModeContext.Provider value={{ mode, toggleTheme }}>
{children}
</ThemeModeContext.Provider>
);
};
// Hook pour utiliser le contexte du thème
export const useThemeMode = () => {
const context = useContext(ThemeModeContext);
if (context === undefined) {
throw new Error("useThemeMode must be used within a ThemeModeProvider");
}
return context;
};
|