'use client'; import { useState } from 'react'; import { Eye, Clock, Copy, AlertTriangle, ChevronDown, ChevronRight } from 'lucide-react'; import { useQuality, useContradictions } from '@/hooks/useMemories'; interface QualityPanelProps { project?: string; } function Section({ icon: Icon, title, count, children, }: { icon: React.ComponentType<{ className?: string; size?: number }>; title: string; count: number; children: React.ReactNode; }) { const [expanded, setExpanded] = useState(false); return (
{expanded &&
{children}
}
); } export function QualityPanel({ project }: QualityPanelProps) { const { data: quality } = useQuality(project); const { data: contradictionsData } = useContradictions(project); const neverAccessed = quality?.neverAccessed; const stale = quality?.stale; const duplicates = quality?.duplicates; const contradictions = contradictionsData?.contradictions ?? []; return (
{neverAccessed?.items?.length ? ( neverAccessed.items.map((item, i) => (
{String(item.title || 'Untitled')} {item.created_at ? ( {String(item.created_at).slice(0, 10)} ) : null}
)) ) : (
None found
)}
{stale?.items?.length ? ( stale.items.map((item, i) => { const score = Number(item.decayed_score ?? 0); const color = score < 0.3 ? 'text-red-400' : score < 0.5 ? 'text-amber-400' : 'text-slate-400'; return (
{score.toFixed(2)} {String(item.title || 'Untitled')}
); }) ) : (
None found
)}
{duplicates?.items?.length ? ( duplicates.items.map((item, i) => (
{String(item.title_a || 'Untitled')} {String(item.title_b || 'Untitled')}
)) ) : (
None found
)}
{contradictions.length ? ( contradictions.map((c, i) => (
{c.score.toFixed(2)} {c.memoryATitle} {c.memoryBTitle}
{c.reason &&
{c.reason}
}
)) ) : (
None found
)}
); }