| import React, { useState } from "react"; | |
| import ChatInterface from "./components/ChatInterface"; | |
| const API_BASE_URL = process.env.REACT_APP_API_BASE_URL || ""; | |
| console.log("API_BASE_URL:", API_BASE_URL); | |
| const App: React.FC = () => { | |
| const [pipelineId, setPipelineId] = useState<string | null>(null); | |
| const handleFileUpload = async (file: File) => { | |
| const formData = new FormData(); | |
| formData.append("file", file); | |
| const url = `${API_BASE_URL}/api/upload`; | |
| console.log("Uploading file to:", url); | |
| try { | |
| const response = await fetch(url, { | |
| method: "POST", | |
| body: formData, | |
| }); | |
| if (!response.ok) { | |
| const errorData = await response.json().catch(() => ({})); | |
| throw new Error(errorData.detail || "Upload failed"); | |
| } | |
| const data = await response.json(); | |
| console.log("Upload response:", data); | |
| setPipelineId(data.pipeline_id); | |
| } catch (error) { | |
| console.error("Error uploading file:", error); | |
| throw error; | |
| } | |
| }; | |
| return ( | |
| <div className="min-h-screen bg-gray-900"> | |
| <header className="bg-gray-800 border-b border-gray-700"> | |
| <div className="max-w-7xl mx-auto py-4 px-4"> | |
| <h1 className="text-2xl font-bold text-white">Document Q&A Chat</h1> | |
| </div> | |
| </header> | |
| <main className="max-w-7xl mx-auto"> | |
| <ChatInterface | |
| pipelineId={pipelineId} | |
| onFileUpload={handleFileUpload} | |
| /> | |
| </main> | |
| </div> | |
| ); | |
| }; | |
| export default App; | |