Updated the Writing to work with another format

This commit is contained in:
Tiago Ribeiro
2023-08-07 23:39:29 +01:00
parent 7e9e28f134
commit 3fee4292f1
3 changed files with 35 additions and 8 deletions

View File

@@ -7,7 +7,18 @@ import Button from "../Low/Button";
import {Dialog, Transition} from "@headlessui/react"; import {Dialog, Transition} from "@headlessui/react";
import useExamStore from "@/stores/examStore"; import useExamStore from "@/stores/examStore";
export default function Writing({id, prompt, info, type, wordCounter, attachment, userSolutions, onNext, onBack}: WritingExercise & CommonProps) { export default function Writing({
id,
prompt,
prefix,
suffix,
type,
wordCounter,
attachment,
userSolutions,
onNext,
onBack,
}: WritingExercise & CommonProps) {
const [isModalOpen, setIsModalOpen] = useState(false); const [isModalOpen, setIsModalOpen] = useState(false);
const [inputText, setInputText] = useState(userSolutions.length === 1 ? userSolutions[0].solution : ""); const [inputText, setInputText] = useState(userSolutions.length === 1 ? userSolutions[0].solution : "");
const [isSubmitEnabled, setIsSubmitEnabled] = useState(false); const [isSubmitEnabled, setIsSubmitEnabled] = useState(false);
@@ -68,7 +79,14 @@ export default function Writing({id, prompt, info, type, wordCounter, attachment
)} )}
<div className="flex flex-col h-full w-full gap-9 mb-20"> <div className="flex flex-col h-full w-full gap-9 mb-20">
<div className="flex flex-col w-full gap-7 bg-mti-gray-smoke rounded-xl py-8 pb-12 px-16"> <div className="flex flex-col w-full gap-7 bg-mti-gray-smoke rounded-xl py-8 pb-12 px-16">
<span>{info}</span> <span>
{prefix.split("\\n").map((line) => (
<>
{line}
<br />
</>
))}
</span>
<span className="font-semibold"> <span className="font-semibold">
{prompt.split("\\n").map((line, index) => ( {prompt.split("\\n").map((line, index) => (
<Fragment key={index}> <Fragment key={index}>
@@ -89,7 +107,12 @@ export default function Writing({id, prompt, info, type, wordCounter, attachment
<div className="w-full h-full flex flex-col gap-4"> <div className="w-full h-full flex flex-col gap-4">
<span> <span>
You should write {wordCounter.type === "min" ? "at least" : "at most"} {wordCounter.limit} words. {suffix.split("\\n").map((line) => (
<>
{line}
<br />
</>
))}
</span> </span>
<textarea <textarea
className="w-full h-full min-h-[148px] cursor-text px-7 py-8 input border-2 border-mti-gray-platinum bg-white rounded-3xl" className="w-full h-full min-h-[148px] cursor-text px-7 py-8 input border-2 border-mti-gray-platinum bg-white rounded-3xl"

View File

@@ -77,7 +77,8 @@ export interface Evaluation {
export interface WritingExercise { export interface WritingExercise {
id: string; id: string;
type: "writing"; type: "writing";
info: string; //* The information about the task, like the amount of time they should spend on it prefix: string; //* The information about the task, like the amount of time they should spend on it
suffix: string;
prompt: string; //* The context given to the user containing what they should write about prompt: string; //* The context given to the user containing what they should write about
wordCounter: WordCounter; //* The minimum or maximum amount of words that should be written wordCounter: WordCounter; //* The minimum or maximum amount of words that should be written
attachment?: { attachment?: {

View File

@@ -4,6 +4,7 @@ import {app} from "@/firebase";
import {getFirestore, collection, getDocs, query, where} from "firebase/firestore"; import {getFirestore, collection, getDocs, query, where} from "firebase/firestore";
import {withIronSessionApiRoute} from "iron-session/next"; import {withIronSessionApiRoute} from "iron-session/next";
import {sessionOptions} from "@/lib/session"; import {sessionOptions} from "@/lib/session";
import {shuffle} from "lodash";
const db = getFirestore(app); const db = getFirestore(app);
@@ -22,9 +23,11 @@ async function handler(req: NextApiRequest, res: NextApiResponse) {
const snapshot = await getDocs(q); const snapshot = await getDocs(q);
res.status(200).json( res.status(200).json(
shuffle(
snapshot.docs.map((doc) => ({ snapshot.docs.map((doc) => ({
id: doc.id, id: doc.id,
...doc.data(), ...doc.data(),
})), })),
),
); );
} }