import { useState, useEffect, useCallback } from "react"; import { getDocuments, clearMemory, getWorkspaces } from "./api"; import Sidebar from "./components/Sidebar"; import ChatArea from "./components/ChatArea"; import { MAINTENANCE_MODE, MAINTENANCE_MESSAGE } from "./config"; function App() { const [documents, setDocuments] = useState([]); const [evalLog, setEvalLog] = useState([]); const [briefing, setBriefing] = useState(null); const [suggestedQuestion, setSuggestedQuestion] = useState(""); const [currentWorkspace, setCurrentWorkspace] = useState("default"); const [workspaces, setWorkspaces] = useState(["default"]); const [filterDocs, setFilterDocs] = useState([]); useEffect(() => { getDocuments(currentWorkspace).then((d) => setDocuments(d.documents || [])); getWorkspaces().then((d) => setWorkspaces(d.workspaces || ["default"])); }, [currentWorkspace]); // Reset filter when workspace changes useEffect(() => { setFilterDocs([]); }, [currentWorkspace]); async function handleNewConversation() { await clearMemory(); setEvalLog([]); setBriefing(null); setSuggestedQuestion(""); window.location.reload(); } async function handleWorkspaceChange(ws) { setCurrentWorkspace(ws); setBriefing(null); setSuggestedQuestion(""); setEvalLog([]); } const handleSuggestedQuestionUsed = useCallback(() => setSuggestedQuestion(""), []); function handleFilterChange(docName) { setFilterDocs((prev) => prev.includes(docName) ? prev.filter((d) => d !== docName) : [...prev, docName] ); } return (
{/* Maintenance overlay — controlled by src/config.js */} {MAINTENANCE_MODE && (

Under Maintenance

{MAINTENANCE_MESSAGE}

)}

Prism

Document Intelligence

setFilterDocs([])} /> setEvalLog((prev) => [...prev, entry])} hasDocuments={documents.length > 0} suggestedQuestion={suggestedQuestion} onSuggestedQuestionUsed={handleSuggestedQuestionUsed} currentWorkspace={currentWorkspace} filterDocs={filterDocs} onFilterClear={() => setFilterDocs([])} />
); } export default App;