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