From 9518eef3d478c7bb550130c4b7159b2e569e621c Mon Sep 17 00:00:00 2001 From: Julien Froidefond Date: Mon, 15 Dec 2025 10:18:24 +0100 Subject: [PATCH] Refactor ThemeProvider component: Simplify theme initialization logic by loading the theme from localStorage directly in the state hook, improving code clarity and reducing unnecessary effects. Update AdminPanel component by removing unused Link import, and fix button text encoding in EventsPageSection for proper display. --- components/admin/AdminPanel.tsx | 1 - components/events/EventsPageSection.tsx | 4 +-- contexts/ThemeContext.tsx | 38 ++++++++++++++----------- 3 files changed, 23 insertions(+), 20 deletions(-) diff --git a/components/admin/AdminPanel.tsx b/components/admin/AdminPanel.tsx index 128990e..d10df95 100644 --- a/components/admin/AdminPanel.tsx +++ b/components/admin/AdminPanel.tsx @@ -1,7 +1,6 @@ "use client"; import { useState } from "react"; -import Link from "next/link"; import UserManagement from "@/components/admin/UserManagement"; import EventManagement from "@/components/admin/EventManagement"; import FeedbackManagement from "@/components/admin/FeedbackManagement"; diff --git a/components/events/EventsPageSection.tsx b/components/events/EventsPageSection.tsx index 3eddbec..d64b4fb 100644 --- a/components/events/EventsPageSection.tsx +++ b/components/events/EventsPageSection.tsx @@ -521,7 +521,7 @@ export default function EventsPageSection({ )} {getEventStatus(event) === "LIVE" && ( )} {getEventStatus(event) === "PAST" && ( @@ -812,7 +812,7 @@ export default function EventsPageSection({ size="lg" className="w-full animate-pulse" > - Connectez-vous à Teams, c'est maintenant ! + Connectez-vous à Teams, c'est maintenant ! )} diff --git a/contexts/ThemeContext.tsx b/contexts/ThemeContext.tsx index e4b0c95..d100dfd 100644 --- a/contexts/ThemeContext.tsx +++ b/contexts/ThemeContext.tsx @@ -1,6 +1,12 @@ "use client"; -import { createContext, useContext, useEffect, useState, ReactNode } from "react"; +import { + createContext, + useContext, + useEffect, + useState, + ReactNode, +} from "react"; type Theme = "dark" | "dark-cyan"; @@ -17,27 +23,26 @@ interface ThemeProviderProps { initialTheme?: Theme; } -export function ThemeProvider({ children, initialTheme = "dark-cyan" }: ThemeProviderProps) { - const [theme, setThemeState] = useState(initialTheme); - const [mounted, setMounted] = useState(false); +export function ThemeProvider({ + children, + initialTheme = "dark-cyan", +}: ThemeProviderProps) { + const [theme, setThemeState] = useState(() => { + // Initialize theme from localStorage if available, otherwise use initialTheme + if (typeof window !== "undefined") { + const savedTheme = localStorage.getItem("theme") as Theme | null; + if (savedTheme && (savedTheme === "dark" || savedTheme === "dark-cyan")) { + return savedTheme; + } + } + return initialTheme; + }); useEffect(() => { - setMounted(true); // Apply theme class to document element document.documentElement.className = theme; }, [theme]); - useEffect(() => { - if (mounted) { - // Load theme from localStorage if available - const savedTheme = localStorage.getItem("theme") as Theme | null; - if (savedTheme && (savedTheme === "dark" || savedTheme === "dark-cyan")) { - setThemeState(savedTheme); - document.documentElement.className = savedTheme; - } - } - }, [mounted]); - const setTheme = (newTheme: Theme) => { setThemeState(newTheme); document.documentElement.className = newTheme; @@ -63,4 +68,3 @@ export function useTheme() { } return context; } -