import React, { useState } from 'react'; import './SubmissionsPage.css'; import { useNavigate } from 'react-router-dom'; import { getData } from './GradingResults'; export let newRubric = null; export const getRubric = (rubric) => { newRubric = rubric } function SubmissionsPage() { const [submissions, setSubmissions] = useState([]); const [isGrading, setIsGrading] = useState(false); const navigate = useNavigate(); const handleFileUpload = (event) => { const files = Array.from(event.target.files); const newSubmissions = files.map(file => ({ file, name: file.name, pennId: '', id: Math.random().toString(36).substr(2, 9) })); setSubmissions(prev => [...prev, ...newSubmissions]); }; const updatePennId = (id, pennId) => { setSubmissions(prev => prev.map(sub => sub.id === id ? { ...sub, pennId } : sub ) ); }; const removeSubmission = (id) => { setSubmissions(prev => prev.filter(sub => sub.id !== id)); }; const handleGrading = async () => { console.log('Grading submissions...'); console.log(newRubric); setIsGrading(true); // Here you would handle the grading process // For each submission: { file, pennId } try { const createFormData = new FormData(); const rubricFile = new Blob([newRubric], { type: 'text/plain' }); createFormData.append('files', new File([rubricFile], 'rubric.txt')); const createUrl = "/create"; try { const response = await fetch(createUrl, { method: 'POST', body: createFormData, }); if (!response.ok) { throw new Error('Network response was not ok'); } const submissionId = await response.json(); console.log('Submission Id: ', submissionId); const submitUrl = `/submit?id=${submissionId}`; const submitFormData = new FormData(); submissions.forEach(submission => { submitFormData.append('pennId', submission.pennId); submitFormData.append('files', submission.file); }); try { const response = await fetch(submitUrl, { method: 'POST', body: submitFormData, }); if (!response.ok) { throw new Error('Network response was not ok'); } const data = await response.json(); console.log('Grading result:', data); getData(data); } catch (error) { console.error('Error during grading:', error); } // After grading is complete, navigate to results page navigate('/results'); } catch (error) { console.error('Error creating submission id', error); } } catch (error) { console.error('Grading failed:', error); } finally { setIsGrading(false); } }; const isReadyToGrade = submissions.length > 0 && submissions.every(sub => sub.pennId.trim().length > 0); return (
Please enter PennID for all submissions
)}