github.com/quickfeed/quickfeed@v0.0.0-20240507093252-ed8ca812a09c/public/src/components/submissions/SubmissionInfo.tsx (about) 1 import React from "react" 2 import { assignmentStatusText, getFormattedTime, getPassedTestsCount, isApproved, isManuallyGraded } from "../../Helpers" 3 import { Assignment, Submission } from "../../../proto/qf/types_pb" 4 import { useAppState } from "../../overmind" 5 6 type SubmissionInfoProps = { 7 submission: Submission 8 assignment: Assignment 9 } 10 11 const SubmissionInfo = ({ submission, assignment }: SubmissionInfoProps) => { 12 const state = useAppState() 13 const enrollment = state.selectedEnrollment ?? state.enrollmentsByCourseID[assignment.CourseID.toString()] 14 const buildInfo = submission.BuildInfo 15 const delivered = getFormattedTime(buildInfo?.SubmissionDate) 16 const built = getFormattedTime(buildInfo?.BuildDate) 17 const executionTime = buildInfo ? `${buildInfo.ExecTime / BigInt(1000)} seconds` : "" 18 19 const className = isApproved(submission) ? "passed" : "failed" 20 return ( 21 <table className="table table-curved table-striped"> 22 <thead className="thead-dark"> 23 <tr> 24 <th colSpan={2}>Lab information</th> 25 <th>{assignment.name}</th> 26 </tr> 27 </thead> 28 <tbody> 29 <tr> 30 <td colSpan={2} className={className}> 31 Status 32 </td> 33 <td>{assignmentStatusText(assignment, submission)}</td> 34 </tr> 35 <tr> 36 <td colSpan={2}>Delivered</td> 37 <td>{delivered}</td> 38 </tr> 39 <tr> 40 <td colSpan={2}>Built</td> 41 <td>{built}</td> 42 </tr> 43 { 44 // Only render row if submission has an approved date 45 submission.approvedDate ? ( 46 <tr> 47 <td colSpan={2}>Approved</td> 48 <td>{getFormattedTime(submission.approvedDate)}</td> 49 </tr> 50 ) : null 51 } 52 <tr> 53 <td colSpan={2}>Deadline</td> 54 <td>{getFormattedTime(assignment.deadline)}</td> 55 </tr> 56 57 {!isManuallyGraded(assignment) ? ( 58 <tr> 59 <td colSpan={2}>Tests Passed</td> 60 <td>{getPassedTestsCount(submission.Scores)}</td> 61 </tr> 62 ) : null} 63 <tr> 64 <td colSpan={2}>Execution time</td> 65 <td>{executionTime}</td> 66 </tr> 67 <tr> 68 <td colSpan={2}>Slip days</td> 69 <td>{enrollment.slipDaysRemaining}</td> 70 </tr> 71 </tbody> 72 </table> 73 ) 74 } 75 76 export default SubmissionInfo