@@ -170,8 +170,14 @@ export const CourseExperimental: FC<ICourseExperimentalProps> = (props) => {
170170 . forEach ( x => taskSolutionsMap . set ( x . id ! , x . solution ! ) )
171171 }
172172
173- const showWarningsForEntity = ( entity : HomeworkViewModel | HomeworkTaskViewModel ) =>
174- isMentor && ( entity . publicationDateNotSet || entity . hasDeadline && entity . deadlineDateNotSet )
173+ const showWarningsForEntity = ( entity : HomeworkViewModel | HomeworkTaskViewModel , isHomework : boolean ) => {
174+ if ( ! isMentor ) return false
175+ if ( entity . publicationDateNotSet || entity . hasDeadline && entity . deadlineDateNotSet ) return true
176+
177+ if ( ! isHomework ) return false
178+ const result = validateTestGrouping ( entity )
179+ return result !== true && result . hasErrors
180+ }
175181
176182 const renderHomeworkStatus = ( homework : HomeworkViewModel & { isModified ?: boolean , hasErrors ?: boolean } ) => {
177183 const hasErrors = homework . id ! < 0 && ( homework . hasErrors || homework . tasks ! . some ( ( t : HomeworkTaskViewModel & {
@@ -181,7 +187,7 @@ export const CourseExperimental: FC<ICourseExperimentalProps> = (props) => {
181187 return < div style = { { fontSize : 16 } } > < ErrorIcon fontSize = "small" color = { "error" } /> < br /> </ div >
182188 if ( homework . isModified )
183189 return < div style = { { fontSize : 16 } } > < EditIcon fontSize = "small" color = { "primary" } /> < br /> </ div >
184- return showWarningsForEntity ( homework ) && < div style = { { fontSize : 16 } } > ⚠️< br /> </ div >
190+ return showWarningsForEntity ( homework , true ) && < div style = { { fontSize : 16 } } > ⚠️< br /> </ div >
185191 }
186192
187193 const renderTaskStatus = ( task : HomeworkTaskViewModel & { isModified ?: boolean , hasErrors ?: boolean } ) => {
@@ -204,7 +210,7 @@ export const CourseExperimental: FC<ICourseExperimentalProps> = (props) => {
204210 }
205211 if ( task . hasErrors ) return < ErrorIcon fontSize = "small" color = { "error" } />
206212 if ( task . isModified ) return < EditIcon fontSize = "small" color = { "primary" } />
207- return showWarningsForEntity ( task ) ? (
213+ return showWarningsForEntity ( task , false ) ? (
208214 < Typography color = { task . isDeferred ? "textSecondary" : "textPrimary" } >
209215 < TimelineDot variant = "outlined" style = { warningTimelineDotStyle } > ⚠️</ TimelineDot >
210216 </ Typography >
@@ -223,6 +229,19 @@ export const CourseExperimental: FC<ICourseExperimentalProps> = (props) => {
223229 selectedItem : { id : homework . id ! , isHomework : true } ,
224230 } )
225231
232+ const validateTestGrouping = ( homework : HomeworkViewModel ) => {
233+ if ( ! homework . tags ! . includes ( TestTag ) ) return true
234+
235+ const groupingTag = homework . tags ! . find ( x => ! DefaultTags . includes ( x ) )
236+ if ( groupingTag === undefined ) return true
237+
238+ const groupedHomeworks = homeworks . filter ( x => x . tags ! . includes ( TestTag ) && x . tags ! . includes ( groupingTag ) )
239+ if ( groupedHomeworks . length === 1 ) return true
240+
241+ const keys = new Set ( groupedHomeworks . map ( h => h . tasks ! . map ( t => t . maxRating ) . join ( ";" ) ) )
242+ return { groupingTag : groupingTag , hasErrors : keys . size === 1 }
243+ }
244+
226245 const getDatesAlert = ( entity : HomeworkViewModel | HomeworkTaskViewModel , isHomework : boolean ) => {
227246 if ( entity . publicationDateNotSet ) {
228247 return (
@@ -276,25 +295,19 @@ export const CourseExperimental: FC<ICourseExperimentalProps> = (props) => {
276295 )
277296 }
278297 const getGroupingAlert = ( homework : HomeworkViewModel ) => {
279- if ( ! homework . tags ! . includes ( TestTag ) ) return null
280-
281- const groupingTag = homework . tags ! . find ( x => ! DefaultTags . includes ( x ) )
282- if ( groupingTag === undefined ) return null
283-
284- const groupedHomeworks = homeworks . filter ( x => x . tags ! . includes ( TestTag ) && x . tags ! . includes ( groupingTag ) )
285- if ( groupedHomeworks . length === 1 ) return null
286-
287- const keys = new Set ( groupedHomeworks . map ( h => h . tasks ! . map ( t => t . maxRating ) . join ( ";" ) ) )
288- if ( keys . size === 1 ) return < Alert severity = "success"
289- action = {
290- < Button
291- fullWidth
292- color = "inherit"
293- size = "small"
294- onClick = { ( ) => setShowOnlyGroupedTest ( groupingTag ) }
295- >
296- Задания
297- </ Button > } >
298+ const result = validateTestGrouping ( homework )
299+ if ( result === true ) return null
300+ const { hasErrors, groupingTag} = result
301+ if ( ! hasErrors ) return < Alert severity = "success"
302+ action = {
303+ < Button
304+ fullWidth
305+ color = "inherit"
306+ size = "small"
307+ onClick = { ( ) => setShowOnlyGroupedTest ( groupingTag ) }
308+ >
309+ Задания
310+ </ Button > } >
298311 Работа сгруппирована по ключу '< b > { groupingTag } </ b > '.
299312 </ Alert >
300313
0 commit comments