diff --git a/src/dashboards/AssignmentCard.tsx b/src/dashboards/AssignmentCard.tsx index 1d5d4792..36fa5a43 100644 --- a/src/dashboards/AssignmentCard.tsx +++ b/src/dashboards/AssignmentCard.tsx @@ -7,7 +7,7 @@ import {calculateBandScore} from "@/utils/score"; import clsx from "clsx"; import moment from "moment"; import {useState} from "react"; -import {BsBook, BsHeadphones, BsMegaphone, BsPen} from "react-icons/bs"; +import {BsBook, BsClipboard, BsHeadphones, BsMegaphone, BsPen} from "react-icons/bs"; interface Props { onClick?: () => void; @@ -57,11 +57,13 @@ export default function AssignmentCard({id, name, assigner, startDate, endDate, module === "listening" && "bg-ielts-listening", module === "writing" && "bg-ielts-writing", module === "speaking" && "bg-ielts-speaking", + module === "level" && "bg-ielts-level", )}> {module === "reading" && } {module === "listening" && } {module === "writing" && } {module === "speaking" && } + {module === "level" && } {calculateAverageModuleScore(module) > -1 && ( {calculateAverageModuleScore(module).toFixed(1)} )} diff --git a/src/dashboards/AssignmentCreator.tsx b/src/dashboards/AssignmentCreator.tsx index 7e172b7c..08b29b90 100644 --- a/src/dashboards/AssignmentCreator.tsx +++ b/src/dashboards/AssignmentCreator.tsx @@ -3,7 +3,7 @@ import Modal from "@/components/Modal"; import {Module} from "@/interfaces"; import clsx from "clsx"; import {useState} from "react"; -import {BsBook, BsCheckCircle, BsHeadphones, BsMegaphone, BsPen} from "react-icons/bs"; +import {BsBook, BsCheckCircle, BsClipboard, BsHeadphones, BsMegaphone, BsPen, BsXCircle} from "react-icons/bs"; import {generate} from "random-words"; import {capitalize} from "lodash"; import useUsers from "@/hooks/useUsers"; @@ -99,59 +99,96 @@ export default function AssignmentCreator({isCreating, assignment, assigner, gro return (
-
+
toggleModule("reading")} + onClick={!selectedModules.includes("level") ? () => toggleModule("reading") : undefined} className={clsx( "w-52 relative max-w-xs flex items-center bg-mti-white-alt transition duration-300 ease-in-out border p-5 rounded-xl gap-8 cursor-pointer", + "lg:col-span-2", selectedModules.includes("reading") ? "border-mti-purple-light" : "border-mti-gray-platinum", )}>
Reading - {!selectedModules.includes("reading") &&
} + {!selectedModules.includes("reading") && !selectedModules.includes("level") && ( +
+ )} + {selectedModules.includes("level") && } {selectedModules.includes("reading") && }
toggleModule("listening")} + onClick={!selectedModules.includes("level") ? () => toggleModule("listening") : undefined} className={clsx( "w-52 relative max-w-xs flex items-center bg-mti-white-alt transition duration-300 ease-in-out border p-5 rounded-xl gap-8 cursor-pointer", + "lg:col-span-2", selectedModules.includes("listening") ? "border-mti-purple-light" : "border-mti-gray-platinum", )}>
Listening - {!selectedModules.includes("listening") &&
} + {!selectedModules.includes("listening") && !selectedModules.includes("level") && ( +
+ )} + {selectedModules.includes("level") && } {selectedModules.includes("listening") && }
toggleModule("writing")} + onClick={!selectedModules.includes("level") ? () => toggleModule("writing") : undefined} className={clsx( - "w-52 relative max-w-xs flex lg:flex-row-reverse items-center bg-mti-white-alt transition duration-300 ease-in-out border p-5 rounded-xl gap-8 cursor-pointer", + "w-52 relative max-w-xs flex items-center bg-mti-white-alt transition duration-300 ease-in-out border p-5 rounded-xl gap-8 cursor-pointer", + "lg:col-span-2", selectedModules.includes("writing") ? "border-mti-purple-light" : "border-mti-gray-platinum", )}> -
+
- Writing - {!selectedModules.includes("writing") &&
} + Writing + {!selectedModules.includes("writing") && !selectedModules.includes("level") && ( +
+ )} + {selectedModules.includes("level") && } {selectedModules.includes("writing") && }
toggleModule("speaking")} + onClick={!selectedModules.includes("level") ? () => toggleModule("speaking") : undefined} className={clsx( - "w-52 relative max-w-xs flex lg:flex-row-reverse items-center bg-mti-white-alt transition duration-300 ease-in-out border p-5 rounded-xl gap-8 cursor-pointer", + "w-52 relative max-w-xs flex items-center bg-mti-white-alt transition duration-300 ease-in-out border p-5 rounded-xl gap-8 cursor-pointer", + "lg:col-span-3", selectedModules.includes("speaking") ? "border-mti-purple-light" : "border-mti-gray-platinum", )}> -
- +
+
- Speaking - {!selectedModules.includes("speaking") &&
} + Speaking + {!selectedModules.includes("speaking") && !selectedModules.includes("level") && ( +
+ )} + {selectedModules.includes("level") && } {selectedModules.includes("speaking") && }
+
toggleModule("level") + : undefined + } + className={clsx( + "w-52 relative max-w-xs flex items-center bg-mti-white-alt transition duration-300 ease-in-out border p-5 rounded-xl gap-8 cursor-pointer", + "lg:col-span-3", + selectedModules.includes("level") ? "border-mti-purple-light" : "border-mti-gray-platinum", + )}> +
+ +
+ Level + {!selectedModules.includes("level") && selectedModules.length === 0 && ( +
+ )} + {!selectedModules.includes("level") && selectedModules.length > 0 && } + {selectedModules.includes("level") && } +
setName(e)} defaultValue={name} label="Assignment Name" required /> diff --git a/src/dashboards/AssignmentView.tsx b/src/dashboards/AssignmentView.tsx index f88b598c..4bd73762 100644 --- a/src/dashboards/AssignmentView.tsx +++ b/src/dashboards/AssignmentView.tsx @@ -10,7 +10,7 @@ import {sortByModule} from "@/utils/moduleUtils"; import {calculateBandScore} from "@/utils/score"; import {convertToUserSolutions} from "@/utils/stats"; import clsx from "clsx"; -import {uniqBy} from "lodash"; +import {capitalize, uniqBy} from "lodash"; import moment from "moment"; import {useRouter} from "next/router"; import {BsBook, BsClipboard, BsHeadphones, BsMegaphone, BsPen} from "react-icons/bs"; @@ -239,9 +239,10 @@ export default function AssignmentView({isOpen, assignment, onClose}: Props) {
{assignment?.exams.map(({module}) => (
- {MODULE_ARRAY.map((module) => ( -
e.module).includes("reading") - ? "bg-ielts-reading" - : "bg-mti-black/40"), - module === "listening" && - (assignment.exams.map((e) => e.module).includes("listening") - ? "bg-ielts-listening" - : "bg-mti-black/40"), - module === "writing" && - (assignment.exams.map((e) => e.module).includes("writing") - ? "bg-ielts-writing" - : "bg-mti-black/40"), - module === "speaking" && - (assignment.exams.map((e) => e.module).includes("speaking") - ? "bg-ielts-speaking" - : "bg-mti-black/40"), - )}> - {module === "reading" && } - {module === "listening" && } - {module === "writing" && } - {module === "speaking" && } -
- ))} + {assignment.exams + .map((e) => e.module) + .sort(sortByModuleName) + .map((module) => ( +
+ {module === "reading" && } + {module === "listening" && } + {module === "writing" && } + {module === "speaking" && } + {module === "level" && } +
+ ))}
{!assignment.results.map((r) => r.user).includes(user.id) && ( <>