import { useState, useEffect } from "react"; import axios from "axios"; import { Header } from "./components/Header"; import { Sidebar } from "./components/Sidebar"; import { UploadSection } from "./components/UploadSection"; import { ResultsPanel } from "./components/ResultsPanel"; import { Footer } from "./components/Footer"; import { ProgressBar } from "./components/progressbar"; export function App() { // ---------------------------- // State Management // ---------------------------- const [selectedTest, setSelectedTest] = useState("cytology"); const [uploadedImage, setUploadedImage] = useState(null); const [selectedModel, setSelectedModel] = useState(""); const [apiResult, setApiResult] = useState(null); const [showResults, setShowResults] = useState(false); const [currentStep, setCurrentStep] = useState(0); const [loading, setLoading] = useState(false); // ---------------------------- // Progress bar logic // ---------------------------- useEffect(() => { if (showResults) setCurrentStep(2); else if (uploadedImage) setCurrentStep(1); else setCurrentStep(0); }, [uploadedImage, showResults]); // ---------------------------- // Reset logic — new test // ---------------------------- useEffect(() => { setCurrentStep(0); setShowResults(false); setUploadedImage(null); setSelectedModel(""); setApiResult(null); }, [selectedTest]); // ---------------------------- // Analyze handler (Backend call) // ---------------------------- const handleAnalyze = async () => { if (!uploadedImage || !selectedModel) { alert("Please select a model and upload an image first!"); return; } setLoading(true); setShowResults(false); setApiResult(null); try { // Convert Base64 → File const blob = await fetch(uploadedImage).then((r) => r.blob()); const file = new File([blob], "input.jpg", { type: blob.type }); const formData = new FormData(); formData.append("file", file); formData.append("analysis_type", selectedTest); formData.append("model_name", selectedModel); // POST to backend const baseURL = import.meta.env.MODE === "development" ? "http://127.0.0.1:8000" : window.location.origin; const res = await axios.post(`${baseURL}/predict/`, formData, { headers: { "Content-Type": "multipart/form-data" }, }); setApiResult(res.data); setShowResults(true); } catch (err) { console.error("❌ Error during inference:", err); alert("Error analyzing the image. Check backend logs."); } finally { setLoading(false); } }; // ---------------------------- // Layout // ---------------------------- return (
{/* Upload & Model Selection */} {/* Results Panel */} {showResults && ( )}
); }