Initial Falah Mobile rebuild — all 7 blocks complete
- Auth system (login/register/profile) - Nur AI chat with persona system - Souq marketplace with FLH economy - Forum community with Shariah moderation - Wallet & FLH top-up - Premium/Pro tier upgrade with Polar.sh - Halal Monitor with map & bookmarks - Home dashboard with daily verse & streaks - Health endpoints Next.js 16.2.7, Prisma v5 SQLite, JWT auth, Tailwind CSS v4
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
"use client";
|
||||
|
||||
import { useAuth } from "@/lib/AuthContext";
|
||||
import Link from "next/link";
|
||||
import { usePathname } from "next/navigation";
|
||||
import {
|
||||
Bot,
|
||||
ShoppingBag,
|
||||
MessageCircle,
|
||||
Wallet,
|
||||
User,
|
||||
} from "lucide-react";
|
||||
|
||||
const navItems = [
|
||||
{ href: "/nur", label: "Nur", icon: Bot },
|
||||
{ href: "/souq", label: "Souq", icon: ShoppingBag },
|
||||
{ href: "/", label: "Home", icon: null, isHome: true },
|
||||
{ href: "/forum", label: "Forum", icon: MessageCircle },
|
||||
{ href: "/wallet", label: "Wallet", icon: Wallet },
|
||||
{ href: "/profile", label: "Profile", icon: User },
|
||||
];
|
||||
|
||||
export default function BottomNav() {
|
||||
const pathname = usePathname();
|
||||
|
||||
return (
|
||||
<nav className="fixed bottom-0 left-0 right-0 z-50 bg-[#0a0a0f]/95 backdrop-blur-md border-t border-gray-800/60"
|
||||
style={{ paddingBottom: "env(safe-area-inset-bottom, 0px)", height: "calc(64px + env(safe-area-inset-bottom, 0px))" }}>
|
||||
<div className="flex items-stretch h-16 max-w-lg mx-auto">
|
||||
{navItems.map((item) => {
|
||||
const isActive = pathname === item.href || pathname.startsWith(item.href + "/");
|
||||
const Icon = item.icon;
|
||||
const isHome = item.isHome;
|
||||
|
||||
if (isHome) {
|
||||
return (
|
||||
<Link
|
||||
key={item.href}
|
||||
href="/"
|
||||
className="flex-1 flex items-center justify-center"
|
||||
>
|
||||
<div className={`w-10 h-10 rounded-full flex items-center justify-center transition-all ${
|
||||
pathname === "/"
|
||||
? "bg-[#D4AF37] text-[#0a0a0f]"
|
||||
: "bg-gray-800/60 text-gray-500"
|
||||
}`}>
|
||||
<svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor">
|
||||
<path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/>
|
||||
</svg>
|
||||
</div>
|
||||
</Link>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<Link
|
||||
key={item.href}
|
||||
href={item.href}
|
||||
className="flex-1 flex flex-col items-center justify-center gap-0.5 transition-opacity active:opacity-60"
|
||||
>
|
||||
{Icon && (
|
||||
<Icon
|
||||
size={20}
|
||||
className={isActive ? "text-[#D4AF37]" : "text-gray-600"}
|
||||
/>
|
||||
)}
|
||||
<span className={`text-[10px] font-medium ${
|
||||
isActive ? "text-[#D4AF37]" : "text-gray-600"
|
||||
}`}>
|
||||
{item.label}
|
||||
</span>
|
||||
</Link>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
</nav>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user