import React from "react"; import { useQuery } from "@tanstack/react-query"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { BarChart, Bar, PieChart, Pie, Cell, LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, Legend, ResponsiveContainer } from "recharts"; import { Users, Monitor, UserPlus, Globe, Building2, Network, AlertCircle, Activity, Loader2 } from "lucide-react"; import { DashboardLayout } from "@/layouts/dashboard-layout"; interface DashboardSummary { userCount: number; computerCount: number; groupCount: number; sitesCount: number; domainsCount: number; subnetsCount: number; message?: string; } export default function MainDashboardPage() { // Fetch summary data const { data: summary, isLoading: summaryLoading } = useQuery({ queryKey: ['/api/dashboard-summary'], retry: false }); // Fetch Users Data const { data: usersData, isLoading: usersLoading } = useQuery<{data: any[]}>({ queryKey: ['/api/user-dashboard-data'], retry: false }); // Fetch Computers Data const { data: computersData, isLoading: computersLoading } = useQuery<{data: any[]}>({ queryKey: ['/api/computer-dashboard-data'], retry: false }); // Fetch Groups Data const { data: groupsData, isLoading: groupsLoading } = useQuery<{data: any[]}>({ queryKey: ['/api/group-dashboard-data'], retry: false }); const isLoading = summaryLoading || usersLoading || computersLoading || groupsLoading; const usersByOU = React.useMemo(() => { if (!usersData?.data) return []; // Group users by organizational unit const ouGroups: Record = {}; usersData.data.forEach(user => { const ou = user.organizationalUnit || 'None'; ouGroups[ou] = (ouGroups[ou] || 0) + 1; }); // Convert to array format for charts return Object.entries(ouGroups).map(([name, value]) => ({ name, value })); }, [usersData]); const computersByOS = React.useMemo(() => { if (!computersData?.data) return []; // Group computers by operating system const osGroups: Record = {}; computersData.data.forEach(computer => { const os = computer.operatingSystem || 'Unknown'; osGroups[os] = (osGroups[os] || 0) + 1; }); // Convert to array format for charts return Object.entries(osGroups).map(([name, value]) => ({ name, value })); }, [computersData]); const COLORS = ['#0088FE', '#00C49F', '#FFBB28', '#FF8042', '#A569BD', '#5DADE2', '#F4D03F']; return ( {isLoading ? (
Loading dashboard data...
) : ( <> {/* Summary Cards */}
Users
{summary?.userCount || 0}

Total active users

Computers
{summary?.computerCount || 0}

Total computers

Groups
{summary?.groupCount || 0}

Total groups

Domains
{summary?.domainsCount || 0}

Total domains

Sites
{summary?.sitesCount || 0}

Total sites

Subnets
{summary?.subnetsCount || 0}

Total subnets

{/* Charts */}
Users by Organizational Unit Distribution of users across organizational units {usersByOU.length > 0 ? ( `${name}: ${(percent * 100).toFixed(0)}%`} outerRadius={80} fill="#8884d8" dataKey="value" > {usersByOU.map((entry, index) => ( ))} ) : (
No data available
)}
Computers by Operating System Distribution of computer operating systems {computersByOS.length > 0 ? ( ) : (
No data available
)}
{/* Recent Activity */} Recent Activity Most recent changes in your Active Directory environment
{/* This would show recent audit logs */}
View detailed logs in the Audit Logs section
)}
); }