Files
projectbrain-Public/src/features/knowledge/pages/KnowledgeVault.tsx
T

28 lines
3.3 KiB
TypeScript

"use client";
import { useParams } from "react-router-dom";
import { BookOpen, Clock, ShieldCheck } from "lucide-react";
import { Badge, Card, CardContent, CardDescription, CardHeader, CardTitle, PageHeader } from "@/components/ui";
import { getKnowledgeForProject } from "@/shared/lib/projectbrainSelectors";
import { projectBrainClientMode } from "@/shared/api/projectBrainClient";
import { ProjectKnowledgeCenter } from "@/features/knowledge/components/ProjectKnowledgeCenter";
const decayVariant = (status?: string) => status === "fresh" ? "default" : status === "watch" ? "secondary" : status === "stale" || status === "obsolete" ? "destructive" : "outline";
const decayLabel = (status?: string) => status === "fresh" ? "Actueel" : status === "watch" ? "Controleren" : status === "stale" ? "Verouderd" : status === "obsolete" ? "Niet meer geldig" : "Onbekend";
const KnowledgeVault = () => {
const { projectId } = useParams();
if (projectBrainClientMode === "real" && projectId) return <div className="space-y-6"><PageHeader title="Project Knowledge" subtitle="De actuele projectwaarheid eerst; bronnen, geheugen en context blijven ondersteunend bewijs." /><ProjectKnowledgeCenter projectId={projectId} /></div>;
const knowledge = projectId ? getKnowledgeForProject(projectId) : [];
const fresh = knowledge.filter((item) => item.decayStatus === "fresh").length;
const watch = knowledge.filter((item) => item.decayStatus === "watch" || item.decayStatus === "stale").length;
return <div className="space-y-6">
<PageHeader title="Project Knowledge" subtitle="Lokale voorbeeldweergave van projectkennis. Productiewaarheid is pas bewezen in live backendmodus." />
<div className="grid gap-3 sm:grid-cols-3"><Card><CardContent className="p-4"><p className="text-2xl font-semibold">{knowledge.length}</p><p className="text-xs text-muted-foreground">kennisitems</p></CardContent></Card><Card><CardContent className="p-4"><p className="text-2xl font-semibold">{fresh}</p><p className="text-xs text-muted-foreground">actueel</p></CardContent></Card><Card><CardContent className="p-4"><p className="text-2xl font-semibold">{watch}</p><p className="text-xs text-muted-foreground">controleren</p></CardContent></Card></div>
<Card><CardHeader><CardTitle className="flex items-center gap-2"><BookOpen size={18} />Voorbeeldkennis</CardTitle><CardDescription>Deze fallback toont geen productieclaim en bevat geen losstaande contextpack-workflow.</CardDescription></CardHeader><CardContent className="grid gap-3 md:grid-cols-2">{knowledge.map((item) => <div key={item.id} className="rounded-lg border p-3"><div className="flex items-start justify-between gap-2"><p className="font-semibold">{item.title}</p><Badge variant={decayVariant(item.decayStatus)}>{decayLabel(item.decayStatus)}</Badge></div><p className="mt-1 text-sm text-muted-foreground">{item.summary}</p><div className="mt-2 flex flex-wrap gap-2 text-xs text-muted-foreground"><span className="inline-flex items-center gap-1"><ShieldCheck size={12} />{item.confidence}% zekerheid</span><span className="inline-flex items-center gap-1"><Clock size={12} />{item.lastUpdated}</span></div></div>)}{!knowledge.length ? <p className="text-sm text-muted-foreground">Geen lokale voorbeeldkennis beschikbaar.</p> : null}</CardContent></Card>
</div>;
};
export default KnowledgeVault;