@@ -11,6 +11,8 @@ import {LoadingButton} from "@mui/lab";
11
11
import TaskPublicationAndDeadlineDates from "../Common/TaskPublicationAndDeadlineDates" ;
12
12
import DeletionConfirmation from "../DeletionConfirmation" ;
13
13
import ActionOptionsUI from "../Common/ActionOptions" ;
14
+ import { BonusTag , isBonusWork , isTestWork , TestTag } from "@/components/Common/HomeworkTags" ;
15
+ import Lodash from "lodash" ;
14
16
15
17
interface IEditTaskMetadataState {
16
18
hasDeadline : boolean | undefined ;
@@ -25,6 +27,7 @@ const CourseTaskEditor: FC<{
25
27
speculativeTask : HomeworkTaskViewModel & { isModified ?: boolean , hasErrors ?: boolean } ,
26
28
speculativeHomework : HomeworkViewModel ,
27
29
onUpdate : ( update : { task : HomeworkTaskViewModel , isDeleted ?: boolean , isSaved ?: boolean } ) => void ,
30
+ getAllHomeworks : ( ) => HomeworkViewModel [ ] ,
28
31
toEditHomework : ( ) => void ,
29
32
} > = ( props ) => {
30
33
const [ taskData , setTaskData ] = useState < {
@@ -87,6 +90,8 @@ const CourseTaskEditor: FC<{
87
90
const [ handleSubmitLoading , setHandleSubmitLoading ] = useState ( false ) ;
88
91
const [ editOptions , setEditOptions ] = useState < ActionOptions > ( { sendNotification : false } )
89
92
93
+ const [ ratingSuggestion , setRatingSuggestion ] = useState < number | undefined > ( undefined )
94
+
90
95
const publicationDate = metadata ?. publicationDate || homework . publicationDate
91
96
92
97
useEffect ( ( ) => {
@@ -106,6 +111,29 @@ const CourseTaskEditor: FC<{
106
111
setHasErrors ( ! title || maxRating <= 0 || metadata ?. hasErrors === true )
107
112
} , [ title , maxRating , metadata ?. hasErrors ] )
108
113
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
+
109
137
const handleSubmit = async ( e : any ) => {
110
138
e . preventDefault ( )
111
139
setHandleSubmitLoading ( true )
@@ -143,7 +171,7 @@ const CourseTaskEditor: FC<{
143
171
return (
144
172
< CardContent >
145
173
< 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 } } >
147
175
< Grid item xs = { 8 } >
148
176
< TextField
149
177
required
@@ -161,11 +189,13 @@ const CourseTaskEditor: FC<{
161
189
</ Grid >
162
190
< Grid item >
163
191
< TextField
192
+ size = { "small" }
164
193
required
165
194
fullWidth
166
195
error = { maxRating <= 0 || maxRating > 100 }
167
196
style = { { width : '90px' } }
168
197
label = "Баллы"
198
+ helperText = { maxRating === ratingSuggestion ? "Вычислено" : undefined }
169
199
variant = "outlined"
170
200
margin = "normal"
171
201
type = "number"
@@ -275,6 +305,7 @@ const CourseTaskExperimental: FC<{
275
305
onMount : ( ) => void ,
276
306
onUpdate : ( x : { task : HomeworkTaskViewModel , isDeleted ?: boolean } ) => void
277
307
toEditHomework : ( ) => void ,
308
+ getAllHomeworks : ( ) => HomeworkViewModel [ ] ,
278
309
} > = ( props ) => {
279
310
const { task, homework} = props
280
311
const [ showEditMode , setShowEditMode ] = useState ( false )
@@ -301,6 +332,7 @@ const CourseTaskExperimental: FC<{
301
332
}
302
333
props . onUpdate ( updateFix )
303
334
} }
335
+ getAllHomeworks = { props . getAllHomeworks }
304
336
toEditHomework = { props . toEditHomework }
305
337
/>
306
338
}
0 commit comments