github.com/quickfeed/quickfeed@v0.0.0-20240507093252-ed8ca812a09c/public/src/components/ManageSubmissionStatus.tsx (about)

     1  import React from "react"
     2  import { Submission_Status } from "../../proto/qf/types_pb"
     3  import { Color, isManuallyGraded } from "../Helpers"
     4  import { useActions, useAppState } from "../overmind"
     5  import { ButtonType } from "./admin/Button"
     6  import DynamicButton from "./DynamicButton"
     7  
     8  const ManageSubmissionStatus = (): JSX.Element => {
     9      const actions = useActions()
    10      const state = useAppState()
    11      const assignment = state.selectedAssignment
    12  
    13      const [rebuilding, setRebuilding] = React.useState(false)
    14      const [updating, setUpdating] = React.useState<Submission_Status>(Submission_Status.NONE)
    15  
    16  
    17      const handleRebuild = async () => {
    18          if (rebuilding) { return } // Don't allow multiple rebuilds at once
    19          setRebuilding(true)
    20          await actions.rebuildSubmission({ owner: state.submissionOwner, submission: state.selectedSubmission })
    21          setRebuilding(false)
    22      }
    23  
    24      const handleSetStatus = async (status: Submission_Status) => {
    25          if (updating !== Submission_Status.NONE) { return } // Don't allow multiple updates at once
    26          setUpdating(status)
    27          await actions.updateSubmission({ owner: state.submissionOwner, submission: state.selectedSubmission, status })
    28          setUpdating(Submission_Status.NONE)
    29      }
    30  
    31      const getButtonType = (status: Submission_Status): ButtonType => {
    32          if (state.selectedSubmission?.status === status) {
    33              return ButtonType.BUTTON
    34          }
    35          return ButtonType.OUTLINE
    36      }
    37  
    38      return (
    39          <div className="row m-auto">
    40              <DynamicButton
    41                  text="Approve"
    42                  color={Color.GREEN}
    43                  type={getButtonType(Submission_Status.APPROVED)}
    44                  className="col mr-2"
    45                  onClick={() => handleSetStatus(Submission_Status.APPROVED)}
    46              />
    47              <DynamicButton
    48                  text="Revision"
    49                  color={Color.YELLOW}
    50                  type={getButtonType(Submission_Status.REVISION)}
    51                  className="col mr-2"
    52                  onClick={() => handleSetStatus(Submission_Status.REVISION)}
    53              />
    54              <DynamicButton
    55                  text="Reject"
    56                  color={Color.RED}
    57                  type={getButtonType(Submission_Status.REJECTED)}
    58                  className="col mr-2"
    59                  onClick={() => handleSetStatus(Submission_Status.REJECTED)}
    60              />
    61              {assignment && !isManuallyGraded(assignment) && (
    62                  <DynamicButton
    63                      text={rebuilding ? "Rebuilding..." : "Rebuild"}
    64                      color={Color.BLUE}
    65                      type={ButtonType.OUTLINE}
    66                      className="col mr-2"
    67                      onClick={handleRebuild}
    68                  />
    69              )}
    70          </div>
    71      )
    72  }
    73  
    74  export default ManageSubmissionStatus