import SettingsIcon from "@mui/icons-material/Settings"; import { Backdrop, Box, Button, IconButton, Paper } from "@mui/material"; import { useNavigate } from "@tanstack/react-router"; import { useCallback, useEffect, useState } from "react"; import FileUpload from "react-material-file-upload"; import { socket } from "../socket"; import { CircularProgressWithLabel } from "./CircularProgressWithLabel"; export default function UploadPage() { const [files, setFiles] = useState([]); const [pageId, setPageId] = useState(null); const [loadingState, setLoadingState] = useState(null); const fileTypes = ["pdf"]; const navigate = useNavigate(); const uploadFile = useCallback(async () => { const formData = new FormData(); formData.append("file", files[0]); const response = await fetch("http://localhost:5050/api/pitch_book", { method: "POST", body: formData, }); if (response.ok) { console.log("File uploaded successfully"); const data = await response.json(); setPageId(data.id.toString()); setLoadingState(5); } else { console.error("Failed to upload file"); } }, [files]); const onConnection = useCallback(() => { console.log("connected"); }, []); const onProgress = useCallback( (progress: { id: number; progress: number }) => { if (pageId === progress.id.toString()) { setLoadingState(progress.progress); if (progress.progress === 100) { setPageId(null); setLoadingState(null); navigate({ to: "/extractedResult/$pitchBook", params: { pitchBook: progress.id.toString() }, }); } } }, [pageId, navigate], ); useEffect(() => { socket.on("connect", onConnection); socket.on("progress", onProgress); return () => { socket.off("connect", onConnection); socket.off("progress", onProgress); }; }, [onConnection, onProgress]); useEffect(() => { return () => { setPageId(null); setLoadingState(null); }; }, []); return ( <> ({ color: "#fff", zIndex: theme.zIndex.drawer + 1 })} open={pageId !== null && loadingState !== null && loadingState < 100} > navigate({ to: "/config" })}> ); }