@@ -20,7 +20,7 @@ import { prettyPrintDateTime, fullWordPrintDate } from "../../../utils/date.util
2020
2121import { useLocation } from 'react-router-dom' ;
2222import Scoreboard from '../assignments/scoreboard' ;
23- // import DragDropFile from 'components/utils/dragDropFile'
23+ import DragDropFile from 'components/utils/dragDropFile'
2424
2525const AssignmentDetailPage = ( ) => {
2626 const [ setAlert ] = useActionless ( SET_ALERT )
@@ -38,6 +38,7 @@ const AssignmentDetailPage = () => {
3838 const [ assignment , setAssignment ] = useState < Assignment > ( )
3939 const [ course , setCourse ] = useState < Course > ( )
4040 const [ notClickable , setNotClickable ] = useState ( true ) ;
41+ const [ hasFileProblem , setHasFileProblem ] = useState ( false ) ;
4142
4243
4344
@@ -60,8 +61,13 @@ const AssignmentDetailPage = () => {
6061 const courses = await RequestService . get < Course > ( `/api/courses/${ courseId } ` )
6162 setCourse ( courses )
6263
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 )
6571
6672 const submissionsReq = await RequestService . get < Submission [ ] > ( `/api/course/${ courseId } /assignment/${ assignmentId } /submissions/` )
6773 submissionsReq . sort ( ( a , b ) => ( Date . parse ( b . createdAt ?? '' ) - Date . parse ( a . createdAt ?? '' ) ) )
@@ -81,10 +87,6 @@ const AssignmentDetailPage = () => {
8187
8288 // const containerAutograder = (await RequestService.get<ContainerAutoGrader[]>(`/api/course/${courseId}/assignment/${assignmentId}/container-auto-graders`)).pop() ?? null
8389 // setContainerAutograder(containerAutograder)
84-
85-
86-
87-
8890 } catch ( err : any ) {
8991 setError ( err )
9092 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 = () => {
118120 [ key ] : res
119121 } ;
120122 } ) ;
121- }
123+ }
122124 else {
123125 setFormData ( prevState => ( {
124126 ...prevState ,
@@ -128,8 +130,8 @@ const AssignmentDetailPage = () => {
128130 } ;
129131
130132
131- const handleFileChange = ( e : React . ChangeEvent < HTMLInputElement > ) => {
132- setFile ( e . target . files ?. item ( 0 ) )
133+ const handleFileChange = ( file : File ) => {
134+ setFile ( file )
133135 }
134136
135137 const handleCheckboxChange = ( ) => {
@@ -159,7 +161,7 @@ const AssignmentDetailPage = () => {
159161 submission . append ( 'courseId' , courseId )
160162 submission . append ( 'content' , JSON . stringify ( contentField ) )
161163 submission . append ( 'files' , file )
162-
164+
163165
164166 response = await RequestService . postMultipart ( `/api/course/${ courseId } /assignment/${ assignmentId } /submissions` , submission ) ;
165167 } else {
@@ -191,14 +193,14 @@ const AssignmentDetailPage = () => {
191193 return false ;
192194 } ;
193195
194- handleFileChange ;
196+ // handleFileChange;
195197
196198
197199 return (
198200 < PageWrapper >
199201 < 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 >
202204 </ div >
203205
204206 < div className = { styles . details } >
@@ -241,11 +243,15 @@ const AssignmentDetailPage = () => {
241243 </ div >
242244
243245 < 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+ ) }
249255
250256 < div className = { styles . problems_list } >
251257 < h2 > Problems</ h2 >
@@ -271,29 +277,29 @@ const AssignmentDetailPage = () => {
271277 </ div >
272278 </ div >
273279
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+ } } >
282288 < div >
283289 < div className = { styles . submissionHeading } > { `Submission ${ submissions . length - index } ` } </ div >
284290 < div className = { styles . submissionTime } > { `Submitted at: ${ submission . createdAt && prettyPrintDateTime ( submission . createdAt ) } ` } </ div >
285291 </ div >
286- </ div >
287- ) ) }
292+ </ div >
293+ ) ) }
288294
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 } />
292298
293- </ div >
294- ) }
295- </ div >
296- </ div > }
299+ </ div >
300+ ) }
301+ </ div >
302+ </ div > }
297303
298304 </ PageWrapper >
299305 )
0 commit comments