@@ -18,8 +18,8 @@ interface Props {
1818const ManualGradeModal = ( { open, onClose, submissionScore, assignmentProblems, submissionProblemScores } : Props ) => {
1919 const [ setAlert ] = useActionless ( SET_ALERT )
2020 const { assignmentId, courseId } = useParams < { assignmentId : string , courseId : string } > ( )
21- const [ problemScores , setProblemScores ] = useState ( { } )
22-
21+ const [ problemScores , setProblemScores ] = useState < Record < string , any > > ( { } )
22+
2323 const [ formData , setFormData ] = useState ( {
2424 submissionId : submissionScore ?. submissionId ,
2525 score : submissionScore ?. score ,
@@ -29,24 +29,31 @@ const ManualGradeModal = ({ open, onClose, submissionScore, assignmentProblems,
2929
3030 const handleManualGrade = async ( ) => {
3131 const updateProblemScoreURL = `/course/${ courseId } /assignment/${ assignmentId } /submission-problem-scores`
32-
32+
3333 // set releasedAt to now in ISO 8601 format
3434 setFormData ( prevState => ( { ...prevState , [ "releasedAt" ] : new Date ( ) . toISOString ( ) } ) )
3535
36- // update problem scores
37- for ( const problem of assignmentProblems ) {
36+
37+ // update problem scores if changed
38+ for ( const [ id , scoreData ] of Object . entries ( problemScores ) ) {
39+ const problemID = Number ( id . split ( "_" ) [ 1 ] )
40+
3841 // get corresponding score if exists
3942 const correspondingScore = submissionProblemScores . find (
40- ( scoreItem ) => scoreItem . assignmentProblemId === problem . id
43+ ( scoreItem ) => scoreItem . assignmentProblemId === problemID
4144 ) ;
4245
46+ scoreData [ "releasedAt" ] = new Date ( ) . toISOString ( )
47+
4348 if ( correspondingScore ) {
4449 // put request to update score
45- await RequestService . put ( updateProblemScoreURL , problemScores )
50+ console . log ( "SUBMISSION SCOREDATA" , scoreData )
51+ await RequestService . put ( `${ updateProblemScoreURL } /${ problemID } ` , scoreData )
4652
4753 } else {
4854 // post request to create new score
49- await RequestService . post ( updateProblemScoreURL , problemScores )
55+ console . log ( "NO SUBMISSION SCOREDATA" , scoreData )
56+ await RequestService . post ( updateProblemScoreURL , scoreData )
5057 }
5158
5259 }
@@ -77,7 +84,27 @@ const ManualGradeModal = ({ open, onClose, submissionScore, assignmentProblems,
7784 }
7885
7986 const handleProblemChange = ( e : React . ChangeEvent < HTMLInputElement > ) => {
87+ const { id, value } = e . target ; // Get the input's id and value
88+ const scoreValue = Number ( value ) ; // Convert the score to a number
89+
90+ setProblemScores ( prevScores => {
91+ const updatedScores : any = { ...prevScores } ;
8092
93+ // if key exists
94+ if ( updatedScores [ id ] ) {
95+ // update score for existing problem
96+ updatedScores [ id ] . score = scoreValue ;
97+ } else {
98+ // add a new problem score entry
99+ updatedScores [ id ] = {
100+ submissionId : submissionScore ?. submissionId ,
101+ assignmentProblemId : Number ( id . split ( "_" ) [ 1 ] ) ,
102+ score : scoreValue ,
103+ } ;
104+ }
105+
106+ return updatedScores ; // Return the updated scores object
107+ } ) ;
81108 }
82109
83110 return (
@@ -90,8 +117,12 @@ const ManualGradeModal = ({ open, onClose, submissionScore, assignmentProblems,
90117
91118 return (
92119 < div key = { problemItem . id } className = "input-group" >
93- < label > { problemItem . problemName } </ label >
94- < input type = "number" value = { Number ( correspondingScore ? correspondingScore . score : 0 ) } onChange = { handleProblemChange } />
120+ < label htmlFor = { "problem_" + problemItem . id ?. toString ( ) } > { problemItem . problemName } </ label >
121+ < input type = "number"
122+ id = { "problem_" + problemItem . id ?. toString ( ) }
123+ placeholder = { String ( correspondingScore ? correspondingScore . score : "unanswered" ) }
124+ onChange = { handleProblemChange }
125+ />
95126 </ div >
96127 ) ;
97128 } ) }
0 commit comments