1
+ import { useMutation } from '@apollo/client' ;
2
+ import { Formik } from 'formik' ;
3
+ import { Form , Button } from 'react-bootstrap' ;
4
+ import { EDIT_QUESTION_GRADE } from '../../../queries/grade' ;
1
5
import { AnswerFieldsFragment , QuestionOption } from '../../../__generated__/types' ;
2
6
3
7
function renderQuestionOptions (
@@ -37,6 +41,7 @@ function McBlock({
37
41
cssKey,
38
42
studentAnswer,
39
43
points,
44
+ studentId,
40
45
} : {
41
46
title : string ;
42
47
question : string ;
@@ -45,27 +50,89 @@ function McBlock({
45
50
cssKey : number ;
46
51
points : number ;
47
52
studentAnswer : AnswerFieldsFragment | undefined ;
53
+ studentId : string ;
48
54
} ) {
55
+ const [ editQuestionGrade ] = useMutation ( EDIT_QUESTION_GRADE ) ;
56
+
49
57
return (
50
58
< div className = { `${ cssKey % 2 === 1 ? 'white ' : 'gray ' } row` } >
51
- < div className = "col-md-6 text-center py-5 mx-auto" >
52
- < h3 className = "text-left mb-3" > { title } </ h3 >
53
- < div className = "question-container p-4 shadow w-100" >
54
- < p className = "text-left" > { question } </ p >
55
- < span className = "text-left" >
56
- { `${ studentAnswer ?. pointsAwarded ? studentAnswer . pointsAwarded : 0 } / ${ points } ` }
57
- </ span >
58
- < span />
59
- < br />
60
- < div className = "mx-4" >
61
- { renderQuestionOptions (
62
- options ,
63
- answers ,
64
- studentAnswer ?. answer ? studentAnswer . answer : '-1'
65
- ) }
59
+ < Formik
60
+ initialValues = { {
61
+ student : studentId ,
62
+ questionId : studentAnswer ?. questionId ,
63
+ pointsAwarded : studentAnswer ?. pointsAwarded || 0 ,
64
+ teacherComment : studentAnswer ?. teacherComment || '' ,
65
+ } }
66
+ onSubmit = { ( values , { setSubmitting } ) => {
67
+ setTimeout ( ( ) => {
68
+ setSubmitting ( false ) ;
69
+ editQuestionGrade ( {
70
+ variables : {
71
+ answerGradeInput : {
72
+ student : values . student ,
73
+ questionId : values . questionId ,
74
+ pointsAwarded : values . pointsAwarded ,
75
+ teacherComment : values . teacherComment ,
76
+ } ,
77
+ } ,
78
+ } )
79
+ . then ( ( data ) => {
80
+ alert ( 'Question Grade Change Submitted.' ) ;
81
+ location . reload ( ) ;
82
+ } )
83
+ . catch ( ( error ) => {
84
+ alert ( error ) ;
85
+ location . reload ( ) ;
86
+ } ) ;
87
+ } , 400 ) ;
88
+ } }
89
+ >
90
+ { ( { values, handleChange, handleBlur, handleSubmit } ) => (
91
+ < div className = "col-md-6 text-center py-5 mx-auto" >
92
+ < Form onSubmit = { handleSubmit } >
93
+ < div className = "text-right" >
94
+ < Button type = "submit" > Submit Changes</ Button >
95
+ </ div >
96
+ < h3 className = "text-left mb-3" > { title } </ h3 >
97
+ < div className = "question-container p-4 shadow w-100" >
98
+ < p className = "text-left" > { question } </ p >
99
+ < div className = "d-inline-block" >
100
+ < Form . Control
101
+ as = "input"
102
+ type = "number"
103
+ value = { values . pointsAwarded }
104
+ bsCustomPrefix = "d-inline"
105
+ id = "pointsAwarded"
106
+ onChange = { handleChange }
107
+ onBlur = { handleBlur }
108
+ />
109
+ < Form . Text
110
+ as = "h4"
111
+ className = "w-25 text-left right"
112
+ > { ` / ${ points } ` } </ Form . Text >
113
+ </ div >
114
+ < Form . Control
115
+ as = "textarea"
116
+ onChange = { handleChange }
117
+ onBlur = { handleBlur }
118
+ id = "teacherComment"
119
+ placeholder = "Awaiting feedback..."
120
+ value = { values . teacherComment }
121
+ rows = { 1 }
122
+ />
123
+ < br />
124
+ < div className = "mx-4" >
125
+ { renderQuestionOptions (
126
+ options ,
127
+ answers ,
128
+ studentAnswer ?. answer ? studentAnswer . answer : '-1'
129
+ ) }
130
+ </ div >
131
+ </ div >
132
+ </ Form >
66
133
</ div >
67
- </ div >
68
- </ div >
134
+ ) }
135
+ </ Formik >
69
136
</ div >
70
137
) ;
71
138
}
0 commit comments