@@ -15,19 +15,20 @@ import {
15
15
Repository ,
16
16
SelfReviewSettings ,
17
17
SubmissionWithGraderResultsAndReview ,
18
- UserRole
18
+ UserRole ,
19
+ AutograderWithAssignment
19
20
} from "@/utils/supabase/DatabaseTypes" ;
20
21
import { Alert , Box , Flex , Heading , HStack , Link , Skeleton , Table } from "@chakra-ui/react" ;
21
22
import { TZDate } from "@date-fns/tz" ;
22
23
import { CrudFilter , useList } from "@refinedev/core" ;
23
- import { differenceInDays , format } from "date-fns" ;
24
+ import { differenceInDays , format , secondsToHours } from "date-fns" ;
24
25
import { useParams } from "next/navigation" ;
25
26
import { useEffect , useMemo , useRef } from "react" ;
26
27
import { CommitHistoryDialog } from "./commitHistory" ;
27
28
import ManageGroupWidget from "./manageGroupWidget" ;
28
29
29
30
export default function AssignmentPage ( ) {
30
- const { course_id, assignment_id } = useParams ( ) ;
31
+ const { course_id, assignment_id, id } = useParams ( ) ;
31
32
const { private_profile_id } = useClassProfiles ( ) ;
32
33
const { role : enrollment } = useClassProfiles ( ) ;
33
34
const { assignment } = useAssignmentController ( ) ;
@@ -54,6 +55,11 @@ export default function AssignmentPage() {
54
55
}
55
56
return filters ;
56
57
} , [ assignment_id , assignmentGroup , private_profile_id ] ) ;
58
+ const autograderFilters = useMemo ( ( ) => {
59
+ const filters : CrudFilter [ ] = [ ] ;
60
+ filters . push ( { field : "id" , operator : "eq" , value : assignment_id } ) ;
61
+ return filters ;
62
+ } , [ assignment_id ] ) ;
57
63
const { data : submissionsData } = useList < SubmissionWithGraderResultsAndReview > ( {
58
64
resource : "submissions" ,
59
65
meta : {
@@ -72,7 +78,27 @@ export default function AssignmentPage() {
72
78
]
73
79
} ) ;
74
80
81
+ const { data : autograderData } = useList < AutograderWithAssignment > ( {
82
+ resource : "autograder" ,
83
+ meta : {
84
+ select : "*" ,
85
+ order : "created_at, { ascending: false }"
86
+ } ,
87
+ pagination : {
88
+ pageSize : 1000
89
+ } ,
90
+ filters : autograderFilters ,
91
+ sorters : [
92
+ {
93
+ field : "created_at" ,
94
+ order : "desc"
95
+ }
96
+ ]
97
+ } ) ;
98
+
75
99
const submissions = submissionsData ?. data ;
100
+ const autograder = autograderData ?. data ;
101
+
76
102
const review_settings = assignment . assignment_self_review_settings ;
77
103
const timeZone = course ?. time_zone || "America/New_York" ;
78
104
@@ -84,18 +110,20 @@ export default function AssignmentPage() {
84
110
const daysUntilDue = assignment . due_date ? differenceInDays ( new Date ( assignment . due_date ) , new Date ( ) ) : null ;
85
111
const isGroupAssignment = assignment . group_config !== "individual" ;
86
112
const hasSubmissions = ( submissions ?. length ?? 0 ) > 0 ;
87
-
88
113
trackEvent ( "assignment_viewed" , {
89
114
assignment_id : Number ( assignment_id ) ,
90
115
course_id : Number ( course_id ) ,
91
116
is_group_assignment : isGroupAssignment ,
92
117
days_until_due : daysUntilDue ,
93
118
has_submissions : hasSubmissions ,
94
- assignment_slug : assignment . slug
119
+ assignment_slug : assignment . slug
95
120
} ) ;
96
121
}
97
122
} , [ assignment , course_id , assignment_id , submissions , trackEvent ] ) ; // Include all values used inside
98
123
124
+ const submissionsPeriod = secondsToHours ( autograder ?. [ 0 ] . max_submissions_period_secs ) ;
125
+ const maxSubmissions = autograder ?. [ 0 ] . max_submissions_count ;
126
+
99
127
if ( ! assignment ) {
100
128
return < Skeleton height = "40" width = "100%" /> ;
101
129
}
@@ -135,7 +163,18 @@ export default function AssignmentPage() {
135
163
return sm . is_active ;
136
164
} ) }
137
165
/>
138
-
166
+ { submissionsPeriod > 0 ? (
167
+ < Box w = "925px" >
168
+ < Alert . Root status = "info" flexDirection = "column" size = "md" >
169
+ < Alert . Title > Submission Limit for this assignment</ Alert . Title >
170
+ < Alert . Description >
171
+ This assignment has a submission limit of { maxSubmissions } submissions per every { submissionsPeriod } hour(s).
172
+ </ Alert . Description >
173
+ </ Alert . Root >
174
+ </ Box >
175
+ ) : (
176
+ < > </ >
177
+ ) }
139
178
< Heading size = "md" > Submission History</ Heading >
140
179
< CommitHistoryDialog
141
180
assignment = { assignment }
0 commit comments