@@ -11,6 +11,8 @@ import {LoadingButton} from "@mui/lab";
1111import TaskPublicationAndDeadlineDates from "../Common/TaskPublicationAndDeadlineDates" ;
1212import DeletionConfirmation from "../DeletionConfirmation" ;
1313import ActionOptionsUI from "../Common/ActionOptions" ;
14+ import { BonusTag , isBonusWork , isTestWork , TestTag } from "@/components/Common/HomeworkTags" ;
15+ import Lodash from "lodash" ;
1416
1517interface 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