Skip to content

Commit 00c338c

Browse files
committed
fix: replace theme provider usage with custom hook for dark mode detection
1 parent 7df8e13 commit 00c338c

File tree

2 files changed

+35
-3
lines changed

2 files changed

+35
-3
lines changed

frontend/src/components/canvas-view.tsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ import {
5252
import { database } from "../../wailsjs/go/models";
5353
import { useSystemInfo } from "@/hooks/use-system-info";
5454
import { cn } from "@/lib/utils";
55-
import { useTheme } from "./theme-provider";
55+
import { useIsDarkTheme } from "@/hooks/use-is-dark-theme";
5656

5757
interface CanvasViewProps {
5858
project: database.Project;
@@ -65,8 +65,7 @@ const initialEdges: Edge[] = [];
6565
function CanvasEditor({ project, onBack }: CanvasViewProps) {
6666
const { _ } = useLingui();
6767
const { systemInfo } = useSystemInfo();
68-
const { theme } = useTheme();
69-
const isDarkMode = theme === "dark";
68+
const isDarkMode = useIsDarkTheme();
7069
const [name, setName] = useState(project.name);
7170
const [isChatOpen, setIsChatOpen] = useState(false);
7271
const [chatMessage, setChatMessage] = useState("");
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import { useEffect, useState } from "react";
2+
import { useTheme } from "@/components/theme-provider";
3+
4+
export function useIsDarkTheme() {
5+
const { theme } = useTheme();
6+
const [isDark, setIsDark] = useState(() => {
7+
if (theme === "dark") return true;
8+
if (theme === "light") return false;
9+
return window.matchMedia("(prefers-color-scheme: dark)").matches;
10+
});
11+
12+
useEffect(() => {
13+
if (theme !== "system") {
14+
setIsDark(theme === "dark");
15+
return;
16+
}
17+
18+
// Handle system theme changes
19+
const mediaQuery = window.matchMedia("(prefers-color-scheme: dark)");
20+
const handleChange = (e: MediaQueryListEvent) => {
21+
setIsDark(e.matches);
22+
};
23+
24+
setIsDark(mediaQuery.matches);
25+
mediaQuery.addEventListener("change", handleChange);
26+
27+
return () => {
28+
mediaQuery.removeEventListener("change", handleChange);
29+
};
30+
}, [theme]);
31+
32+
return isDark;
33+
}

0 commit comments

Comments
 (0)