Skip to content

Commit 1a6a6c7

Browse files
feat: disable dev mode on mobile and add notification
1 parent 26aa039 commit 1a6a6c7

1 file changed

Lines changed: 42 additions & 3 deletions

File tree

client/src/components/Navigation.tsx

Lines changed: 42 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { useMode } from "@/context/ModeContext";
33
import { Button } from "@/components/ui/button";
44
import { Sheet, SheetContent, SheetTrigger } from "@/components/ui/sheet";
55
import { Menu, Download, ChevronDown, Terminal } from "lucide-react";
6-
6+
import { useToast } from "@/hooks/use-toast";
77

88
const navItems = [
99
{ href: "#home", label: "Home" },
@@ -15,10 +15,37 @@ const navItems = [
1515
];
1616

1717
export function Navigation() {
18-
const { toggleMode } = useMode();
18+
const { mode, toggleMode, setMode } = useMode();
1919
const [activeSection, setActiveSection] = useState("home");
2020
const [isScrolled, setIsScrolled] = useState(false);
21+
const { toast } = useToast();
22+
23+
// Check for mobile and disable dev mode
24+
useEffect(() => {
25+
const checkMobile = () => {
26+
if (window.innerWidth < 768) { // md breakpoint
27+
if (mode === 'developer') {
28+
setMode('normal');
29+
}
30+
31+
// Show toast only once per session or on load if checking for mobile
32+
// To avoid spamming, we might want to check a session ref, but for now simple is fine check
33+
const hasNotified = sessionStorage.getItem('mobile-dev-mode-notified');
34+
if (!hasNotified) {
35+
toast({
36+
title: "Developer Mode Unavailable",
37+
description: "This portfolio has a Developer Mode. If you want to try it, please visit on a laptop/PC. It's not available on mobile for better DX.",
38+
duration: 5000,
39+
});
40+
sessionStorage.setItem('mobile-dev-mode-notified', 'true');
41+
}
42+
}
43+
};
2144

45+
checkMobile();
46+
window.addEventListener('resize', checkMobile);
47+
return () => window.removeEventListener('resize', checkMobile);
48+
}, [mode, setMode, toast]);
2249

2350
useEffect(() => {
2451
const handleScroll = () => {
@@ -51,6 +78,18 @@ export function Navigation() {
5178
}
5279
};
5380

81+
const handleModeToggle = () => {
82+
if (window.innerWidth < 768) {
83+
toast({
84+
title: "Desktop Only Feature",
85+
description: "Developer Mode is only available on larger screens for the best experience.",
86+
variant: "destructive",
87+
});
88+
return;
89+
}
90+
toggleMode();
91+
};
92+
5493
// Normal Mode Navigation
5594
return (
5695
<nav className={`fixed top-0 w-full z-50 transition-all duration-300 ${isScrolled
@@ -84,7 +123,7 @@ export function Navigation() {
84123
<div className="flex items-center space-x-3 md:space-x-4">
85124
{/* Dev Mode Toggle */}
86125
<button
87-
onClick={() => toggleMode()}
126+
onClick={handleModeToggle}
88127
className="p-2 text-neutral-400 hover:text-white hover:bg-neutral-800 rounded-md transition-all duration-300"
89128
title="Switch to Developer Mode"
90129
>

0 commit comments

Comments
 (0)