Skip to content

Commit 2b1cd6d

Browse files
committed
fix(ui): clean dark mode effect logic to satisfy lint rule
1 parent 71bfc9e commit 2b1cd6d

File tree

1 file changed

+16
-29
lines changed

1 file changed

+16
-29
lines changed

src/components/shared/DarkModeToggle.tsx

Lines changed: 16 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -10,35 +10,22 @@ const DarkModeToggle = () => {
1010

1111
useEffect(() => {
1212
const theme = localStorage.getItem('theme');
13-
const prefersDark = window.matchMedia(
14-
'(prefers-color-scheme: dark)',
15-
).matches;
16-
17-
setIsDarkMode(() => {
18-
const next = theme === 'dark' || (!theme && prefersDark);
19-
20-
if (next) {
21-
document.documentElement.classList.add('dark');
22-
} else {
23-
document.documentElement.classList.remove('dark');
24-
}
25-
26-
return next;
27-
});
28-
29-
const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
30-
const handleThemeChange = (e: MediaQueryListEvent) => {
31-
if (!localStorage.getItem('theme')) {
32-
setIsDarkMode(() => {
33-
const next = e.matches;
34-
document.documentElement.classList.toggle('dark', next);
35-
return next;
36-
});
37-
}
38-
};
39-
40-
mediaQuery.addEventListener('change', handleThemeChange);
41-
return () => mediaQuery.removeEventListener('change', handleThemeChange);
13+
const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
14+
15+
// ✅ Determine the final theme first
16+
let shouldBeDark =
17+
theme === 'dark' || (!theme && prefersDark);
18+
19+
// ✅ Apply class WITHOUT calling setState inside effect yet
20+
if (shouldBeDark) {
21+
document.documentElement.classList.add('dark');
22+
} else {
23+
document.documentElement.classList.remove('dark');
24+
}
25+
26+
// ✅ Update state ONCE at the end
27+
setIsDarkMode(shouldBeDark);
28+
4229
}, []);
4330

4431
const toggleDarkMode = () => {

0 commit comments

Comments
 (0)