Exam generation rework, batch user tables, fastapi endpoint switch
This commit is contained in:
46
src/components/ExamEditor/Exercises/TrueFalse/validation.ts
Normal file
46
src/components/ExamEditor/Exercises/TrueFalse/validation.ts
Normal file
@@ -0,0 +1,46 @@
|
||||
import { AlertItem } from "../Shared/Alert";
|
||||
|
||||
const validateTrueFalseQuestions = (
|
||||
questions: {
|
||||
id: string;
|
||||
prompt: string;
|
||||
solution?: string;
|
||||
}[],
|
||||
setAlerts: React.Dispatch<React.SetStateAction<AlertItem[]>>
|
||||
): boolean => {
|
||||
let hasErrors = false;
|
||||
|
||||
const emptyPrompts = questions.filter(q => !q.prompt.trim());
|
||||
if (emptyPrompts.length > 0) {
|
||||
hasErrors = true;
|
||||
setAlerts(prev => {
|
||||
const filteredAlerts = prev.filter(alert => !alert.tag?.startsWith('empty-prompt'));
|
||||
return [...filteredAlerts, ...emptyPrompts.map(q => ({
|
||||
variant: "error" as const,
|
||||
tag: `empty-prompt-${q.id}`,
|
||||
description: `Question ${q.id} has an empty prompt`
|
||||
}))];
|
||||
});
|
||||
} else {
|
||||
setAlerts(prev => prev.filter(alert => !alert.tag?.startsWith('empty-prompt')));
|
||||
}
|
||||
|
||||
const missingSolutions = questions.filter(q => q.solution === undefined);
|
||||
if (missingSolutions.length > 0) {
|
||||
hasErrors = true;
|
||||
setAlerts(prev => {
|
||||
const filteredAlerts = prev.filter(alert => !alert.tag?.startsWith('missing-solution'));
|
||||
return [...filteredAlerts, ...missingSolutions.map(q => ({
|
||||
variant: "error" as const,
|
||||
tag: `missing-solution-${q.id}`,
|
||||
description: `Question ${q.id} is missing a solution`
|
||||
}))];
|
||||
});
|
||||
} else {
|
||||
setAlerts(prev => prev.filter(alert => !alert.tag?.startsWith('missing-solution')));
|
||||
}
|
||||
|
||||
return !hasErrors;
|
||||
};
|
||||
|
||||
export default validateTrueFalseQuestions;
|
||||
Reference in New Issue
Block a user