52 lines
1.8 KiB
TypeScript
52 lines
1.8 KiB
TypeScript
"use client";
|
|
|
|
import * as React from "react";
|
|
import { KPICards } from "@/components/dashboard/kpis";
|
|
import { FileTypesChart } from "@/components/dashboard/charts/file-types-chart";
|
|
import { ActivityChart } from "@/components/dashboard/charts/activity-chart";
|
|
import { TopTags } from "@/components/dashboard/charts/top-tags";
|
|
import { VectorPanel } from "@/components/dashboard/vector-panel";
|
|
import { useRouter } from "next/navigation";
|
|
import { Button } from "@/components/ui/button";
|
|
|
|
export default function DashboardPage() {
|
|
const router = useRouter();
|
|
|
|
function handleDrillSearch(tag: string) {
|
|
// For now, surface a hint; in a future PR we can wire a tag filter to the search API directly from the dashboard
|
|
// Here we just navigate to the home page; the user can use the global search input
|
|
alert(`Search for tag: ${tag}. Use the global search box on the home page.`);
|
|
router.push("/");
|
|
}
|
|
|
|
return (
|
|
<div className="h-screen flex flex-col">
|
|
<header className="border-b p-3 flex items-center gap-3">
|
|
<div className="text-lg font-semibold">Dashboard</div>
|
|
<div className="ml-auto">
|
|
<Button variant="outline" onClick={() => router.push("/")}>Open Explorer</Button>
|
|
</div>
|
|
</header>
|
|
|
|
<main className="p-3 flex-1 overflow-auto">
|
|
<div className="space-y-3">
|
|
{/* KPIs */}
|
|
<KPICards />
|
|
|
|
{/* Charts row */}
|
|
<div className="grid grid-cols-1 lg:grid-cols-2 gap-3">
|
|
<FileTypesChart />
|
|
<ActivityChart />
|
|
</div>
|
|
|
|
{/* Tags + Vector Panel */}
|
|
<div className="grid grid-cols-1 lg:grid-cols-2 gap-3">
|
|
<TopTags onDrillSearch={handleDrillSearch} />
|
|
<VectorPanel />
|
|
</div>
|
|
</div>
|
|
</main>
|
|
</div>
|
|
);
|
|
}
|