66 lines
2.1 KiB
TypeScript
66 lines
2.1 KiB
TypeScript
import { Action } from "@/stores/examEditor/reducers";
|
|
import { ExamPart, Generating } from "@/stores/examEditor/types";
|
|
import { createSpeakingExercise } from "./speaking";
|
|
import { writingTask } from "@/stores/examEditor/sections";
|
|
import { WritingExercise } from "@/interfaces/exam";
|
|
|
|
const getResults = (results: any[], type: 'writing' | 'speaking') => {
|
|
return results.map((res) => {
|
|
if (type === 'writing') {
|
|
return {
|
|
...writingTask(res.generating === "writing_letter" ? 1 : 2),
|
|
prompt: res.result[0].prompt,
|
|
variant: res.generating === "writing_letter" ? "letter" : "essay"
|
|
} as WritingExercise;
|
|
}
|
|
return createSpeakingExercise(res);
|
|
});
|
|
};
|
|
|
|
const updates = (
|
|
results: any[],
|
|
sectionState: ExamPart,
|
|
sectionId: number,
|
|
currentModule: string,
|
|
levelGenerating: any[],
|
|
levelGenResults: any[],
|
|
type: 'writing' | 'speaking'
|
|
): Action[] => {
|
|
return [
|
|
{
|
|
type: "UPDATE_SECTION_STATE",
|
|
payload: {
|
|
sectionId,
|
|
module: "level",
|
|
update: {
|
|
exercises: [
|
|
...(sectionState as ExamPart).exercises,
|
|
...getResults(results, type)
|
|
]
|
|
}
|
|
}
|
|
},
|
|
{
|
|
type: "UPDATE_SECTION_SINGLE_FIELD",
|
|
payload: {
|
|
sectionId,
|
|
module: currentModule,
|
|
field: "levelGenerating",
|
|
value: levelGenerating?.filter(g =>
|
|
!results.flatMap(res => res.generating as Generating).includes(g)
|
|
)
|
|
}
|
|
},
|
|
{
|
|
type: "UPDATE_SECTION_SINGLE_FIELD",
|
|
payload: {
|
|
sectionId,
|
|
module: currentModule,
|
|
field: "levelGenResults",
|
|
value: levelGenResults.filter(res =>
|
|
!results.flatMap(res => res.generating as Generating).includes(res.generating)
|
|
)
|
|
}
|
|
}
|
|
] as Action[];
|
|
}; |