Skip to content

Commit 04d89e7

Browse files
committed
TaskExperimental: автоматическое вычисление максимального балла по задаче
1 parent 9ee824d commit 04d89e7

File tree

2 files changed

+34
-2
lines changed

2 files changed

+34
-2
lines changed

hwproj.front/src/components/Courses/CourseExperimental.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -340,7 +340,7 @@ export const CourseExperimental: FC<ICourseExperimentalProps> = (props) => {
340340
}
341341
}))
342342
}}
343-
toEditHomework={() => toEditHomework(homework!)}/>
343+
toEditHomework={() => toEditHomework(homework!)} getAllHomeworks={() => homeworks}/>
344344
{!props.isMentor && props.isStudentAccepted && < CardActions>
345345
<Link
346346
style={{color: '#212529'}}

hwproj.front/src/components/Tasks/CourseTaskExperimental.tsx

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ import {LoadingButton} from "@mui/lab";
1111
import TaskPublicationAndDeadlineDates from "../Common/TaskPublicationAndDeadlineDates";
1212
import DeletionConfirmation from "../DeletionConfirmation";
1313
import ActionOptionsUI from "../Common/ActionOptions";
14+
import {BonusTag, isBonusWork, isTestWork, TestTag} from "@/components/Common/HomeworkTags";
15+
import Lodash from "lodash";
1416

1517
interface IEditTaskMetadataState {
1618
hasDeadline: boolean | undefined;
@@ -25,6 +27,7 @@ const CourseTaskEditor: FC<{
2527
speculativeTask: HomeworkTaskViewModel & { isModified?: boolean, hasErrors?: boolean },
2628
speculativeHomework: HomeworkViewModel,
2729
onUpdate: (update: { task: HomeworkTaskViewModel, isDeleted?: boolean, isSaved?: boolean }) => void,
30+
getAllHomeworks: () => HomeworkViewModel[],
2831
toEditHomework: () => void,
2932
}> = (props) => {
3033
const [taskData, setTaskData] = useState<{
@@ -87,6 +90,8 @@ const CourseTaskEditor: FC<{
8790
const [handleSubmitLoading, setHandleSubmitLoading] = useState(false);
8891
const [editOptions, setEditOptions] = useState<ActionOptions>({sendNotification: false})
8992

93+
const [ratingSuggestion, setRatingSuggestion] = useState<number | undefined>(undefined)
94+
9095
const publicationDate = metadata?.publicationDate || homework.publicationDate
9196

9297
useEffect(() => {
@@ -106,6 +111,29 @@ const CourseTaskEditor: FC<{
106111
setHasErrors(!title || maxRating <= 0 || metadata?.hasErrors === true)
107112
}, [title, maxRating, metadata?.hasErrors])
108113

114+
useEffect(() => {
115+
if (!isNewTask) return
116+
const tags = props.speculativeHomework.tags!
117+
const isTest = tags.includes(TestTag)
118+
const isBonus = tags.includes(BonusTag)
119+
120+
const ratingCandidate = Lodash(props.getAllHomeworks()
121+
.map(h => h.tasks![0])
122+
.filter(x => {
123+
if (x === undefined) return false
124+
const xIsTest = isTestWork(x)
125+
const xIsBonus = isBonusWork(x)
126+
return x.id! > 0 && (isTest && xIsTest || isBonus && xIsBonus || !isTest && !isBonus && !xIsTest && !xIsBonus)
127+
}))
128+
.map(x => x.maxRating!)
129+
.groupBy(x => [x])
130+
.entries()
131+
.sortBy(x => x[1].length).last()?.[1][0]
132+
133+
setRatingSuggestion(ratingCandidate)
134+
setMaxRating(ratingCandidate || maxRating)
135+
}, [props.speculativeTask.tags])
136+
109137
const handleSubmit = async (e: any) => {
110138
e.preventDefault()
111139
setHandleSubmitLoading(true)
@@ -143,7 +171,7 @@ const CourseTaskEditor: FC<{
143171
return (
144172
<CardContent>
145173
<Grid container xs={"auto"} spacing={1} direction={"row"} justifyContent={"space-between"}
146-
alignItems={"start"} alignContent={"start"} style={{marginTop: -20}}>
174+
alignItems={"center"} alignContent={"start"} style={{marginTop: -20}}>
147175
<Grid item xs={8}>
148176
<TextField
149177
required
@@ -161,11 +189,13 @@ const CourseTaskEditor: FC<{
161189
</Grid>
162190
<Grid item>
163191
<TextField
192+
size={"small"}
164193
required
165194
fullWidth
166195
error={maxRating <= 0 || maxRating > 100}
167196
style={{width: '90px'}}
168197
label="Баллы"
198+
helperText={maxRating === ratingSuggestion ? "Вычислено" : undefined}
169199
variant="outlined"
170200
margin="normal"
171201
type="number"
@@ -275,6 +305,7 @@ const CourseTaskExperimental: FC<{
275305
onMount: () => void,
276306
onUpdate: (x: { task: HomeworkTaskViewModel, isDeleted?: boolean }) => void
277307
toEditHomework: () => void,
308+
getAllHomeworks: () => HomeworkViewModel[],
278309
}> = (props) => {
279310
const {task, homework} = props
280311
const [showEditMode, setShowEditMode] = useState(false)
@@ -301,6 +332,7 @@ const CourseTaskExperimental: FC<{
301332
}
302333
props.onUpdate(updateFix)
303334
}}
335+
getAllHomeworks={props.getAllHomeworks}
304336
toEditHomework={props.toEditHomework}
305337
/>
306338
}

0 commit comments

Comments
 (0)