ENCOA-274

This commit is contained in:
Carlos-Mesquita
2024-12-11 15:28:38 +00:00
parent 7538392e44
commit efba1939e5
12 changed files with 344 additions and 130 deletions

View File

@@ -8,7 +8,6 @@ import { useRouter } from "next/router";
import { usePersistentExamStore } from "@/stores/exam";
import openDetachedTab from "@/utils/popout";
import { WritingExam, WritingExercise } from "@/interfaces/exam";
import { v4 } from "uuid";
import axios from "axios";
import { playSound } from "@/utils/sound";
import { toast } from "react-toastify";
@@ -25,7 +24,8 @@ const WritingSettings: React.FC = () => {
isPrivate,
sections,
focusedSection,
type
type,
academic_url
} = useExamEditorStore((store) => store.modules["writing"]);
const states = sections.flatMap((s) => s.state) as WritingExercise[];
@@ -58,8 +58,16 @@ const WritingSettings: React.FC = () => {
const openTab = () => {
setExam({
exercises: sections.map((s) => {
exercises: sections.map((s, index) => {
const exercise = s.state as WritingExercise;
if (type === "academic" && index == 0 && academic_url) {
console.log("Added the URL");
exercise["attachment"] = {
url: academic_url,
description: "Visual Information"
}
}
return {
...exercise,
intro: s.settings.currentIntro,
@@ -79,36 +87,68 @@ const WritingSettings: React.FC = () => {
openDetachedTab("popout?type=Exam&module=writing", router)
}
const submitWriting = () => {
const exam: WritingExam = {
exercises: sections.map((s) => {
const exercise = s.state as WritingExercise;
return {
...exercise,
intro: localSettings.currentIntro,
category: localSettings.category
};
}),
minTimer,
module: "writing",
id: title,
isDiagnostic: false,
variant: undefined,
difficulty,
private: isPrivate,
type: type!
};
const submitWriting = async () => {
if (title === "") {
toast.error("Enter a title for the exam!");
return;
}
try {
let firebase_url = undefined;
if (type === "academic" && academic_url) {
const formData = new FormData();
const sectionMap = new Map<number, string>();
const fetchedBlob = await fetch(academic_url);
const blob = await fetchedBlob.blob();
formData.append('file', blob);
sectionMap.set(1, academic_url);
axios
.post(`/api/exam/reading`, exam)
.then((result) => {
playSound("sent");
toast.success(`Submitted Exam ID: ${result.data.id}`);
})
.catch((error) => {
console.log(error);
toast.error(error.response.data.error || "Something went wrong while submitting, please try again later.");
})
const response = await axios.post('/api/storage', formData, {
params: {
directory: 'writing_attachments'
},
headers: {
'Content-Type': 'multipart/form-data'
}
});
firebase_url = response.data.urls[1];
}
const exam: WritingExam = {
exercises: sections.map((s) => {
const exercise = s.state as WritingExercise;
if (exercise.sectionId == 1 && firebase_url) {
exercise["attachment"] = {
url: firebase_url,
description: "Visual Information"
}
}
return {
...exercise,
intro: localSettings.currentIntro,
category: localSettings.category
};
}),
minTimer,
module: "writing",
id: title,
isDiagnostic: false,
variant: undefined,
difficulty,
private: isPrivate,
type: type!
};
const result = await axios.post(`/api/exam/writing`, exam)
playSound("sent");
toast.success(`Submitted Exam ID: ${result.data.id}`);
} catch (error: any) {
console.error('Error submitting exam:', error);
toast.error(
"Something went wrong while submitting, please try again later."
);
}
}
return (