diff --git a/app/[locale]/layout.tsx b/app/[locale]/layout.tsx
index 6c2a9e7..fb720a0 100644
--- a/app/[locale]/layout.tsx
+++ b/app/[locale]/layout.tsx
@@ -5,6 +5,7 @@ import { ThemeProvider } from "@/providers/theme-provider";
import MountedProvider from "@/providers/mounted.provider";
import { Toaster } from "@/components/ui/toaster";
import { Toaster as SonnerToaster } from "@/components/ui/sonner";
+
const inter = Inter({
subsets: ["latin"],
display: 'swap',
@@ -74,10 +75,10 @@ export default async function RootLayout({
/>
-
+
-
+
{children}
diff --git a/app/layout.tsx b/app/layout.tsx
index a5dccd6..1f471dd 100644
--- a/app/layout.tsx
+++ b/app/layout.tsx
@@ -1,13 +1,4 @@
import type { Metadata } from "next";
-import { Inter } from "next/font/google";
-import "./[locale]/globals.css";
-
-const inter = Inter({
- subsets: ["latin"],
- display: 'swap',
- preload: true,
- fallback: ['system-ui', 'arial']
-});
export const metadata: Metadata = {
title: "NetidHub",
@@ -20,11 +11,5 @@ export default function RootLayout({
}: {
children: React.ReactNode;
}) {
- return (
-
-
- {children}
-
-
- );
+ return children;
}
diff --git a/components/auto-redirect.tsx b/components/auto-redirect.tsx
index 6aae662..c347b1f 100644
--- a/components/auto-redirect.tsx
+++ b/components/auto-redirect.tsx
@@ -1,12 +1,19 @@
'use client';
-import { useEffect } from 'react';
+import { useEffect, useState } from 'react';
import { useRouter } from '@/components/navigation';
export default function AutoRedirect() {
const router = useRouter();
+ const [mounted, setMounted] = useState(false);
useEffect(() => {
+ setMounted(true);
+ }, []);
+
+ useEffect(() => {
+ if (!mounted) return;
+
// Get current pathname without locale
const pathname = window.location.pathname;
const segments = pathname.split('/').filter(Boolean);
@@ -20,7 +27,7 @@ export default function AutoRedirect() {
const newPath = `/in${pathname}`;
router.replace(newPath);
}
- }, [router]);
+ }, [mounted, router]);
return null;
}
diff --git a/components/client-only.tsx b/components/client-only.tsx
new file mode 100644
index 0000000..2218223
--- /dev/null
+++ b/components/client-only.tsx
@@ -0,0 +1,22 @@
+"use client";
+
+import { useEffect, useState } from "react";
+
+interface ClientOnlyProps {
+ children: React.ReactNode;
+ fallback?: React.ReactNode;
+}
+
+export default function ClientOnly({ children, fallback = null }: ClientOnlyProps) {
+ const [hasMounted, setHasMounted] = useState(false);
+
+ useEffect(() => {
+ setHasMounted(true);
+ }, []);
+
+ if (!hasMounted) {
+ return <>{fallback}>;
+ }
+
+ return <>{children}>;
+}
diff --git a/components/partials/header/locale-switcher.tsx b/components/partials/header/locale-switcher.tsx
index 810be89..b727034 100644
--- a/components/partials/header/locale-switcher.tsx
+++ b/components/partials/header/locale-switcher.tsx
@@ -15,6 +15,7 @@ import {
} from "@/components/ui/select";
import Image from "next/image";
import Cookies from "js-cookie";
+import ClientOnly from "@/components/client-only";
export const getLanguage = (): string | null => {
if (typeof window === "undefined") return null;
@@ -35,8 +36,15 @@ export default function LocalSwitcher() {
const [selectedLang, setSelectedLang] = useState("in");
const searchParams = useSearchParams();
const [hasInitialized, setHasInitialized] = useState(false);
+ const [mounted, setMounted] = useState(false);
useEffect(() => {
+ setMounted(true);
+ }, []);
+
+ useEffect(() => {
+ if (!mounted) return;
+
const storedLang = getLanguage();
let joinParam = "";
@@ -67,7 +75,7 @@ export default function LocalSwitcher() {
}
setHasInitialized(true);
}
- }, []);
+ }, [mounted]);
const onSelectChange = (nextLocale: string) => {
setLanguage(nextLocale);
@@ -77,53 +85,77 @@ export default function LocalSwitcher() {
});
};
return (
-
+ }>
+
+ {/*
+
+
+ Ar
+
+ */}
+
+
+
);
}
diff --git a/components/partials/header/theme-switcher.tsx b/components/partials/header/theme-switcher.tsx
index 3168ea5..1c2c78f 100644
--- a/components/partials/header/theme-switcher.tsx
+++ b/components/partials/header/theme-switcher.tsx
@@ -9,6 +9,7 @@ import { Moon, Sun } from "lucide-react";
import { Check } from "lucide-react";
import { cn } from "@/lib/utils";
import { Icon } from "@/components/ui/icon";
+import ClientOnly from "@/components/client-only";
const ThemeButton = () => {
const { theme, setTheme } = useTheme();
@@ -69,4 +70,15 @@ const ThemeButton = () => {
);
};
-export default ThemeButton;
+export default function ThemeSwitcher() {
+ return (
+
+
+ Toggle theme
+
+ }>
+
+
+ );
+}