Exam generation rework, batch user tables, fastapi endpoint switch

This commit is contained in:
Carlos-Mesquita
2024-11-04 23:29:14 +00:00
parent a2bc997e8f
commit 15c9c4d4bd
148 changed files with 11348 additions and 3901 deletions

View File

@@ -0,0 +1,107 @@
import { Module } from "@/interfaces";
import { defaultSectionSettings } from "../defaults";
import { reorderExercises } from "../reorder/global";
import ExamEditorStore, { ModuleState } from "../types";
export type ModuleActions =
| { type: 'UPDATE_MODULE'; payload: { updates: Partial<ModuleState>, module?: Module } }
| { type: 'TOGGLE_SECTION'; payload: { sectionId: number; } }
| { type: 'RESET_FOCUS'; }
| { type: 'REORDER_EXERCISES' };
export const MODULE_ACTIONS = [
'UPDATE_MODULE',
'TOGGLE_SECTION',
'RESET_FOCUS',
'REORDER_EXERCISES'
];
export const moduleReducer = (
state: ExamEditorStore,
action: ModuleActions
): Partial<ExamEditorStore> => {
const currentModule = state.currentModule;
const currentModuleState = state.modules[currentModule];
const expandedSections = currentModuleState.expandedSections;
switch (action.type) {
case 'UPDATE_MODULE':
const { updates, module } = action.payload;
if (module === undefined) {
return {
modules: {
...state.modules,
[currentModule]: {
...currentModuleState,
...updates
}
}
};
} else {
return {
modules: {
...state.modules,
[module]: {
...state.modules[module],
...updates
}
}
};
}
case 'TOGGLE_SECTION':
const { sectionId } = action.payload;
const prev = currentModuleState.sections;
const updatedSections = prev.some(section => section.sectionId === sectionId)
? prev.filter(section => section.sectionId !== sectionId)
: [
...prev,
defaultSectionSettings(currentModule, sectionId)
];
const updatedCheckedSections = expandedSections.includes(sectionId)
? expandedSections.filter(i => i !== sectionId)
: [...expandedSections, sectionId];
return {
modules: {
...state.modules,
[currentModule]: {
...currentModuleState,
sections: updatedSections,
expandedSections: updatedCheckedSections
}
}
};
case 'RESET_FOCUS': {
const currentFocus = currentModuleState.focusedSection;
const updatedSections = expandedSections?.filter(id => id != currentFocus);
return {
modules: {
...state.modules,
[currentModule]: {
...currentModuleState,
expandedSections: updatedSections,
focusedSection: updatedSections[0]
}
}
}
}
case 'REORDER_EXERCISES': {
if (currentModule === "writing" || currentModule === "speaking") return state;
return {
...state,
modules: {
...state.modules,
[currentModule]: reorderExercises(currentModuleState)
}
};
}
default:
return {};
}
};