"use client"; import { ArrowRight, BarChart3, MessageSquare, Settings, Shield, TrendingUp, Users, Zap, } from "lucide-react"; import { useRouter } from "next/navigation"; import { type FC, useCallback, useEffect, useMemo, useState } from "react"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { authClient } from "@/lib/auth/client"; const DashboardPage: FC = () => { const { data, isPending } = authClient.useSession(); const router = useRouter(); const [loading, setLoading] = useState(true); useEffect(() => { // Once session is loaded, redirect appropriately if (!isPending && !data?.session) { router.push("/auth/sign-in"); } else if (!isPending && data?.session) { setLoading(false); } }, [isPending, data, router]); // Memoize navigation cards - only recalculates when user role changes const navigationCards = useMemo(() => { const baseCards = [ { title: "Analytics Overview", description: "View comprehensive metrics, charts, and insights from your chat sessions", icon: , href: "/dashboard/overview", variant: "primary" as const, features: ["Real-time metrics", "Interactive charts", "Trend analysis"], adminOnly: false, }, { title: "Session Browser", description: "Browse, search, and analyze individual conversation sessions", icon: , href: "/dashboard/sessions", variant: "success" as const, features: ["Session search", "Conversation details", "Export data"], adminOnly: false, }, ]; if (data?.user?.role === "admin") { return [ ...baseCards, { title: "Company Settings", description: "Configure company settings, integrations, and API connections", icon: , href: "/dashboard/company", variant: "warning" as const, features: [ "API configuration", "Integration settings", "Data management", ], adminOnly: true, }, { title: "User Management", description: "Invite team members and manage user accounts and permissions", icon: , href: "/dashboard/users", variant: "default" as const, features: ["User invitations", "Role management", "Access control"], adminOnly: true, }, ]; } return baseCards; }, [data?.user?.role]); // Memoize class getter functions const getCardClasses = useCallback((variant: string) => { switch (variant) { case "primary": return "border-primary/20 bg-linear-to-br from-primary/5 to-primary/10 hover:from-primary/10 hover:to-primary/15"; case "success": return "border-green-200 bg-linear-to-br from-green-50 to-green-100 hover:from-green-100 hover:to-green-150 dark:border-green-800 dark:from-green-950 dark:to-green-900"; case "warning": return "border-amber-200 bg-linear-to-br from-amber-50 to-amber-100 hover:from-amber-100 hover:to-amber-150 dark:border-amber-800 dark:from-amber-950 dark:to-amber-900"; default: return "border-border bg-linear-to-br from-card to-muted/20 hover:from-muted/30 hover:to-muted/40"; } }, []); const getIconClasses = useCallback((variant: string) => { switch (variant) { case "primary": return "bg-primary/10 text-primary border-primary/20"; case "success": return "bg-green-100 text-green-600 border-green-200 dark:bg-green-900 dark:text-green-400 dark:border-green-800"; case "warning": return "bg-amber-100 text-amber-600 border-amber-200 dark:bg-amber-900 dark:text-amber-400 dark:border-amber-800"; default: return "bg-muted text-muted-foreground border-border"; } }, []); // Navigate handler to avoid creating new functions on each render const handleNavigate = useCallback( (href: string) => { router.push(href); }, [router] ); if (loading) { return (

Loading dashboard...

); } return (
{/* Welcome Header */}

Welcome back, {data?.user?.name || "User"}!

{data?.user?.role}

Choose a section below to explore your analytics dashboard

Secure Dashboard
{/* Navigation Cards */}
{navigationCards.map((card) => ( handleNavigate(card.href)} > {/* Subtle gradient overlay */}
{card.icon}
{card.title} {card.adminOnly && ( Admin )}

{card.description}

{/* Features List */}
{card.features.map((feature) => (
{feature}
))}
{/* Action Button */}
))}
{/* Quick Stats */} Quick Stats
Real-time

Data updates

Secure

Data protection

Advanced

Analytics

); }; export default DashboardPage;