import { useState, useEffect } from 'react' import { AnimatePresence, motion } from 'framer-motion' import { Home, FileText, Search, Code, Settings, Shield, ArrowLeft, Rocket, Dna, BookOpen, } from 'lucide-react' import Dashboard from './Dashboard.jsx' import FileDetail from './FileDetail.jsx' import FileIntelligence from './FileIntelligence.jsx' import FileDossier from './FileDossier.jsx' import FormulasPanel from './FormulasPanel.jsx' import QueryPanel from './QueryPanel.jsx' import APIPanel from './APIPanel.jsx' import SettingsPanel from './SettingsPanel.jsx' import PipelinePanel from './PipelinePanel.jsx' import { useContextMenu } from './ContextMenu.jsx' const API_BASE = '' const navItems = [ { id: 'dashboard', label: 'Dashboard', icon: Home }, { id: 'files', label: 'Files', icon: FileText }, { id: 'intel', label: 'Intelligence', icon: Dna }, { id: 'dossier', label: 'Dossier', icon: FileText }, { id: 'formulas', label: 'Formulas', icon: BookOpen }, { id: 'query', label: 'Query', icon: Search }, { id: 'pipeline', label: 'Pipeline', icon: Rocket }, { id: 'api', label: 'API', icon: Code }, { id: 'settings', label: 'Settings', icon: Settings }, ] export default function CommandCenter({ activePanel, setActivePanel, onExit, selectedFileId, setSelectedFileId }) { const { openNavMenu } = useContextMenu() const [health, setHealth] = useState(null) const [fileCount, setFileCount] = useState(0) useEffect(() => { const poll = async () => { try { const hRes = await fetch(`${API_BASE}/health`) const h = await hRes.json() setHealth(h) setFileCount(h.files_registered ?? 0) } catch { setHealth({ status: 'error' }) } } poll() const id = setInterval(poll, 10000) return () => clearInterval(id) }, []) const isLive = health?.status === 'ok' const renderPanel = () => { switch (activePanel) { case 'dashboard': return { setSelectedFileId(id); setActivePanel('files') }} /> case 'files': return setSelectedFileId(null)} /> case 'intel': return { setSelectedFileId(null); setActivePanel('dashboard') }} /> case 'dossier': return selectedFileId ? { setSelectedFileId(null); setActivePanel('dashboard') }} /> : { setSelectedFileId(id); setActivePanel('dossier') }} /> case 'formulas': return case 'query': return case 'pipeline': return case 'api': return case 'settings': return default: return { setSelectedFileId(id); setActivePanel('files') }} /> } } return (
{/* Sidebar */}
{/* Logo */}
J
Jorki {isLive ? 'LIVE' : 'OFF'}
{/* Nav */} {/* Bottom — real status only */}
{isLive ? 'Verified' : 'Unverified'} {health?.version ? `v${health.version}` : '—'}
{/* Main content */}
{/* Top bar — real data only */}

{navItems.find(n => n.id === activePanel)?.label || 'Dashboard'}

{fileCount} files
{isLive ? 'Space Live' : 'Space Down'}
{/* Panel content */}
{renderPanel()}
) } function FileSelector({ onFileSelect }) { const [files, setFiles] = useState([]) useEffect(() => { fetch(`${API_BASE}/files`).then(r => r.json()).then(d => setFiles(d.files || [])).catch(() => { }) }, []) return (
Select a file to view dossier
{files.length === 0 ? (
No files indexed. Upload from Dashboard.
) : (
{files.map(f => ( ))}
)}
) }