@@ -20,7 +20,7 @@ import { prettyPrintDateTime, fullWordPrintDate } from "../../../utils/date.util
20
20
21
21
import { useLocation } from 'react-router-dom' ;
22
22
import Scoreboard from '../assignments/scoreboard' ;
23
- // import DragDropFile from 'components/utils/dragDropFile'
23
+ import DragDropFile from 'components/utils/dragDropFile'
24
24
25
25
const AssignmentDetailPage = ( ) => {
26
26
const [ setAlert ] = useActionless ( SET_ALERT )
@@ -38,6 +38,7 @@ const AssignmentDetailPage = () => {
38
38
const [ assignment , setAssignment ] = useState < Assignment > ( )
39
39
const [ course , setCourse ] = useState < Course > ( )
40
40
const [ notClickable , setNotClickable ] = useState ( true ) ;
41
+ const [ hasFileProblem , setHasFileProblem ] = useState ( false ) ;
41
42
42
43
43
44
@@ -60,8 +61,13 @@ const AssignmentDetailPage = () => {
60
61
const courses = await RequestService . get < Course > ( `/api/courses/${ courseId } ` )
61
62
setCourse ( courses )
62
63
63
- const assignmentProblemsReq = await RequestService . get < AssignmentProblem [ ] > ( `/api/course/${ courseId } /assignment/${ assignmentId } /assignment-problems/` )
64
- setAssignmentProblems ( assignmentProblemsReq )
64
+ let assignmentProblemsReq = await RequestService . get < AssignmentProblem [ ] > ( `/api/course/${ courseId } /assignment/${ assignmentId } /assignment-problems/` )
65
+
66
+ const hasFile = assignmentProblemsReq . some ( problem => problem . metadata . type === "File" )
67
+ setHasFileProblem ( hasFile )
68
+
69
+ const filteredProblems = assignmentProblemsReq . filter ( problem => problem . metadata . type !== "File" )
70
+ setAssignmentProblems ( filteredProblems )
65
71
66
72
const submissionsReq = await RequestService . get < Submission [ ] > ( `/api/course/${ courseId } /assignment/${ assignmentId } /submissions/` )
67
73
submissionsReq . sort ( ( a , b ) => ( Date . parse ( b . createdAt ?? '' ) - Date . parse ( a . createdAt ?? '' ) ) )
@@ -81,10 +87,6 @@ const AssignmentDetailPage = () => {
81
87
82
88
// const containerAutograder = (await RequestService.get<ContainerAutoGrader[]>(`/api/course/${courseId}/assignment/${assignmentId}/container-auto-graders`)).pop() ?? null
83
89
// setContainerAutograder(containerAutograder)
84
-
85
-
86
-
87
-
88
90
} catch ( err : any ) {
89
91
setError ( err )
90
92
const message = "Submission past due date" //Array.isArray(err) ? err.map((e) => `${e.param} ${e.msg}`).join(', ') : err.message
@@ -118,7 +120,7 @@ const AssignmentDetailPage = () => {
118
120
[ key ] : res
119
121
} ;
120
122
} ) ;
121
- }
123
+ }
122
124
else {
123
125
setFormData ( prevState => ( {
124
126
...prevState ,
@@ -128,8 +130,8 @@ const AssignmentDetailPage = () => {
128
130
} ;
129
131
130
132
131
- const handleFileChange = ( e : React . ChangeEvent < HTMLInputElement > ) => {
132
- setFile ( e . target . files ?. item ( 0 ) )
133
+ const handleFileChange = ( file : File ) => {
134
+ setFile ( file )
133
135
}
134
136
135
137
const handleCheckboxChange = ( ) => {
@@ -159,7 +161,7 @@ const AssignmentDetailPage = () => {
159
161
submission . append ( 'courseId' , courseId )
160
162
submission . append ( 'content' , JSON . stringify ( contentField ) )
161
163
submission . append ( 'files' , file )
162
-
164
+
163
165
164
166
response = await RequestService . postMultipart ( `/api/course/${ courseId } /assignment/${ assignmentId } /submissions` , submission ) ;
165
167
} else {
@@ -191,14 +193,14 @@ const AssignmentDetailPage = () => {
191
193
return false ;
192
194
} ;
193
195
194
- handleFileChange ;
196
+ // handleFileChange;
195
197
196
198
197
199
return (
198
200
< PageWrapper >
199
201
< div className = { styles . header } >
200
- < h1 style = { { gridColumnStart :2 } } > Submit Assignment</ h1 >
201
- < button style = { { marginLeft :'auto' } } className = 'btnPrimary' onClick = { ( ) => { history . push ( `/course/${ courseId } ` ) } } > Back to Course</ button >
202
+ < h1 style = { { gridColumnStart : 2 } } > Submit Assignment</ h1 >
203
+ < button style = { { marginLeft : 'auto' } } className = 'btnPrimary' onClick = { ( ) => { history . push ( `/course/${ courseId } ` ) } } > Back to Course</ button >
202
204
</ div >
203
205
204
206
< div className = { styles . details } >
@@ -241,11 +243,15 @@ const AssignmentDetailPage = () => {
241
243
</ div >
242
244
243
245
< div className = { styles . problems_section } >
244
-
245
- { /* <div className={styles.file_upload}>
246
- <h4 className={styles.problem_header}>File Upload:</h4>
247
- <DragDropFile handleFile={(e) => {console.log(e)}} />
248
- </div> */ }
246
+ { /* conditionally render file upload */ }
247
+ { hasFileProblem && (
248
+ < div className = { styles . file_upload } >
249
+ < h4 className = { styles . problem_header } > File Upload:</ h4 >
250
+ < DragDropFile handleFile = { handleFileChange } />
251
+ < span style = { { margin : '15px 0' , marginRight : '10px' } } > { file ?. name } </ span >
252
+ { file && ( < button className = "btnDelete" onClick = { ( ) => setFile ( null ) } > Remove Files</ button > ) }
253
+ </ div >
254
+ ) }
249
255
250
256
< div className = { styles . problems_list } >
251
257
< h2 > Problems</ h2 >
@@ -271,29 +277,29 @@ const AssignmentDetailPage = () => {
271
277
</ div >
272
278
</ div >
273
279
274
-
275
- { submissions . length !== 0 &&
276
- < div >
277
- < div className = { styles . submissionsContainer } >
278
- { submissions . map ( ( submission , index ) => (
279
- < div className = { styles . submissionCard } key = { index } onClick = { ( ) => {
280
- history . push ( `/course/${ courseId } /assignment/${ assignmentId } /submission/${ submission . id } ` )
281
- } } >
280
+
281
+ { submissions . length !== 0 &&
282
+ < div >
283
+ < div className = { styles . submissionsContainer } >
284
+ { submissions . map ( ( submission , index ) => (
285
+ < div className = { styles . submissionCard } key = { index } onClick = { ( ) => {
286
+ history . push ( `/course/${ courseId } /assignment/${ assignmentId } /submission/${ submission . id } ` )
287
+ } } >
282
288
< div >
283
289
< div className = { styles . submissionHeading } > { `Submission ${ submissions . length - index } ` } </ div >
284
290
< div className = { styles . submissionTime } > { `Submitted at: ${ submission . createdAt && prettyPrintDateTime ( submission . createdAt ) } ` } </ div >
285
291
</ div >
286
- </ div >
287
- ) ) }
292
+ </ div >
293
+ ) ) }
288
294
289
- { showScoreboard && (
290
- < div className = { styles . scoreboardContainer } >
291
- < Scoreboard courseId = { courseId } assignmentId = { assignmentId } />
295
+ { showScoreboard && (
296
+ < div className = { styles . scoreboardContainer } >
297
+ < Scoreboard courseId = { courseId } assignmentId = { assignmentId } />
292
298
293
- </ div >
294
- ) }
295
- </ div >
296
- </ div > }
299
+ </ div >
300
+ ) }
301
+ </ div >
302
+ </ div > }
297
303
298
304
</ PageWrapper >
299
305
)
0 commit comments