From 3233c35836586e0acb8fd72625c9912ba4de9135 Mon Sep 17 00:00:00 2001 From: Ridham Khandar Date: Fri, 22 Aug 2025 20:58:59 +0530 Subject: [PATCH] fix: board not found flicker on reloading public boards (#149) * fix: board not found flicker on reloading public boards * fix: using netx-theme's ThemeProvider * chore: installing next-theme * fix: theme issue on landing page * fix: image theme hydration issue --- apps/web/package.json | 1 + apps/web/src/components/Dashboard.tsx | 6 ++--- apps/web/src/components/SideNavigation.tsx | 6 ++--- apps/web/src/components/ThemeToggle.tsx | 11 ++++----- apps/web/src/components/UserMenu.tsx | 16 ++++++------- apps/web/src/pages/_app.tsx | 12 +++++----- apps/web/src/views/home/components/Layout.tsx | 6 ++--- apps/web/src/views/home/index.tsx | 23 +++++++++++++------ apps/web/src/views/public/board/index.tsx | 8 +++---- apps/web/tailwind.config.ts | 1 + pnpm-lock.yaml | 3 +++ 11 files changed, 53 insertions(+), 40 deletions(-) diff --git a/apps/web/package.json b/apps/web/package.json index df9d7353..72310484 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -49,6 +49,7 @@ "next": "^15.3.4", "next-logger": "^5.0.1", "next-runtime-env": "^1.7.2", + "next-themes": "^0.4.6", "nextjs-cors": "^2.2.0", "pino": "^9.6.0", "posthog-js": "^1.254.0", diff --git a/apps/web/src/components/Dashboard.tsx b/apps/web/src/components/Dashboard.tsx index 7d94eca8..461bc5cb 100644 --- a/apps/web/src/components/Dashboard.tsx +++ b/apps/web/src/components/Dashboard.tsx @@ -10,7 +10,7 @@ import { authClient } from "@kan/auth/client"; import { useClickOutside } from "~/hooks/useClickOutside"; import { useModal } from "~/providers/modal"; -import { useTheme } from "~/providers/theme"; +import { useTheme } from "next-themes"; import { WorkspaceProvider } from "~/providers/workspace"; import FeedbackModal from "./FeedbackModal"; import Modal from "./modal"; @@ -41,7 +41,7 @@ export default function Dashboard({ rightPanel, hasRightPanel = false, }: DashboardProps) { - const theme = useTheme(); + const { theme } = useTheme(); const { modalContentType } = useModal(); const { data: session, isPending: sessionLoading } = authClient.useSession(); @@ -90,7 +90,7 @@ export default function Dashboard({ } }); - const isDarkMode = theme.activeTheme === "dark"; + const isDarkMode = theme === "dark"; return ( <> diff --git a/apps/web/src/components/SideNavigation.tsx b/apps/web/src/components/SideNavigation.tsx index 8eddc299..fe18ae7a 100644 --- a/apps/web/src/components/SideNavigation.tsx +++ b/apps/web/src/components/SideNavigation.tsx @@ -18,7 +18,7 @@ import settingsIconLight from "~/assets/settings-light.json"; import ReactiveButton from "~/components/ReactiveButton"; import UserMenu from "~/components/UserMenu"; import WorkspaceMenu from "~/components/WorkspaceMenu"; -import { useTheme } from "~/providers/theme"; +import { useTheme } from "next-themes"; interface SideNavigationProps { user: UserType; @@ -59,9 +59,9 @@ export default function SideNavigation({ const { pathname } = router; - const { activeTheme } = useTheme(); + const { theme, resolvedTheme } = useTheme(); - const isDarkMode = activeTheme === "dark"; + const isDarkMode = resolvedTheme === "dark"; const navigation = [ { diff --git a/apps/web/src/components/ThemeToggle.tsx b/apps/web/src/components/ThemeToggle.tsx index 623b8263..c24edd3e 100644 --- a/apps/web/src/components/ThemeToggle.tsx +++ b/apps/web/src/components/ThemeToggle.tsx @@ -1,23 +1,22 @@ import { CgDarkMode } from "react-icons/cg"; - -import { useTheme } from "~/providers/theme"; +import { useTheme } from "next-themes"; const ThemeToggle = () => { - const { themePreference, switchTheme } = useTheme(); + const { theme, setTheme } = useTheme(); const toggleTheme = () => { - switchTheme(themePreference === "light" ? "dark" : "light"); + setTheme(theme === "light" ? "dark" : "light"); }; return ( diff --git a/apps/web/src/components/UserMenu.tsx b/apps/web/src/components/UserMenu.tsx index c79127f4..14727cd0 100644 --- a/apps/web/src/components/UserMenu.tsx +++ b/apps/web/src/components/UserMenu.tsx @@ -10,7 +10,7 @@ import { authClient } from "@kan/auth/client"; import { useIsMobile } from "~/hooks/useMediaQuery"; import { useModal } from "~/providers/modal"; -import { useTheme } from "~/providers/theme"; +import { useTheme } from "next-themes"; import { getAvatarUrl } from "~/utils/helpers"; interface UserMenuProps { @@ -29,7 +29,7 @@ export default function UserMenu({ onCloseSideNav, }: UserMenuProps) { const router = useRouter(); - const { themePreference, switchTheme } = useTheme(); + const { theme, setTheme } = useTheme(); const { openModal } = useModal(); const isMobile = useIsMobile(); @@ -127,12 +127,12 @@ export default function UserMenu({