From 5d10e6564dfecda1de7160a84d45f45c32e8b3f4 Mon Sep 17 00:00:00 2001 From: Tiago Ribeiro Date: Wed, 28 Aug 2024 12:27:26 +0100 Subject: [PATCH] Only shows results for an assignments that has been released --- src/components/Medium/StatGridItem.tsx | 26 +++++++++++++------------- src/exams/Finish.tsx | 18 ++++++++++++++++-- src/interfaces/results.ts | 2 +- src/pages/(exam)/ExamPage.tsx | 1 + 4 files changed, 31 insertions(+), 16 deletions(-) diff --git a/src/components/Medium/StatGridItem.tsx b/src/components/Medium/StatGridItem.tsx index 7d0edfcd..3470b20c 100644 --- a/src/components/Medium/StatGridItem.tsx +++ b/src/components/Medium/StatGridItem.tsx @@ -4,17 +4,17 @@ import clsx from "clsx"; import {Stat, User} from "@/interfaces/user"; import {Module} from "@/interfaces"; import ai_usage from "@/utils/ai.detection"; -import { calculateBandScore } from "@/utils/score"; -import moment from 'moment'; -import { Assignment } from '@/interfaces/results'; -import { uuidv4 } from "@firebase/util"; -import { useRouter } from "next/router"; -import { uniqBy } from "lodash"; -import { sortByModule } from "@/utils/moduleUtils"; -import { convertToUserSolutions } from "@/utils/stats"; -import { getExamById } from "@/utils/exams"; -import { Exam, UserSolution } from '@/interfaces/exam'; -import ModuleBadge from '../ModuleBadge'; +import {calculateBandScore} from "@/utils/score"; +import moment from "moment"; +import {Assignment} from "@/interfaces/results"; +import {uuidv4} from "@firebase/util"; +import {useRouter} from "next/router"; +import {uniqBy} from "lodash"; +import {sortByModule} from "@/utils/moduleUtils"; +import {convertToUserSolutions} from "@/utils/stats"; +import {getExamById} from "@/utils/exams"; +import {Exam, UserSolution} from "@/interfaces/exam"; +import ModuleBadge from "../ModuleBadge"; const formatTimestamp = (timestamp: string | number) => { const time = typeof timestamp === "string" ? parseInt(timestamp) : timestamp; @@ -262,7 +262,7 @@ const StatsGridItem: React.FC = ({ key={uuidv4()} className={clsx( "flex flex-col justify-between gap-4 border border-mti-gray-platinum p-4 cursor-pointer rounded-xl transition ease-in-out duration-300 -md:hidden", - isDisabled && "grayscale tooltip", + (isDisabled || (!!assignment && !assignment.released)) && "grayscale tooltip", correct / total >= 0.7 && "hover:border-mti-purple", correct / total >= 0.3 && correct / total < 0.7 && "hover:border-mti-red", correct / total < 0.3 && "hover:border-mti-rose", @@ -276,7 +276,7 @@ const StatsGridItem: React.FC = ({ ...(width !== undefined && {width}), ...(height !== undefined && {height}), }} - data-tip="This exam is still being evaluated..." + data-tip={isDisabled ? "This exam is still being evaluated..." : "This exam is still locked by its assigner..."} role="button"> {content} diff --git a/src/exams/Finish.tsx b/src/exams/Finish.tsx index 7ce9396c..56ce9a07 100644 --- a/src/exams/Finish.tsx +++ b/src/exams/Finish.tsx @@ -11,6 +11,7 @@ import {useRouter} from "next/router"; import {Fragment, useEffect, useState} from "react"; import { BsArrowCounterclockwise, + BsBan, BsBook, BsClipboard, BsClipboardFill, @@ -27,6 +28,7 @@ import Modal from "@/components/Modal"; import {UserSolution} from "@/interfaces/exam"; import ai_usage from "@/utils/ai.detection"; import useGradingSystem from "@/hooks/useGrading"; +import {Assignment} from "@/interfaces/results"; interface Score { module: Module; @@ -45,10 +47,11 @@ interface Props { }; solutions: UserSolution[]; isLoading: boolean; + assignment?: Assignment; onViewResults: (moduleIndex?: number) => void; } -export default function Finish({user, scores, modules, information, solutions, isLoading, onViewResults}: Props) { +export default function Finish({user, scores, modules, information, solutions, isLoading, assignment, onViewResults}: Props) { const [selectedModule, setSelectedModule] = useState(modules[0]); const [selectedScore, setSelectedScore] = useState(scores.find((x) => x.module === modules[0])!); const [isExtraInformationOpen, setIsExtraInformationOpen] = useState(false); @@ -209,7 +212,18 @@ export default function Finish({user, scores, modules, information, solutions, i )} - {!isLoading && ( + {assignment && !assignment.released && ( +
+ {/* */} + + + This exam has not yet been released by its assigner. +
+ You can check it later on your records page when it is released! +
+
+ )} + {!isLoading && false && (
{moduleResultText(selectedModule, bandScore)}
diff --git a/src/interfaces/results.ts b/src/interfaces/results.ts index dcb04183..f14c0481 100644 --- a/src/interfaces/results.ts +++ b/src/interfaces/results.ts @@ -33,4 +33,4 @@ export interface Assignment { start?: boolean; } -export type AssignmentWithCorporateId = Assignment & { corporateId: string }; +export type AssignmentWithCorporateId = Assignment & {corporateId: string}; diff --git a/src/pages/(exam)/ExamPage.tsx b/src/pages/(exam)/ExamPage.tsx index 7b0169e0..ad18ed05 100644 --- a/src/pages/(exam)/ExamPage.tsx +++ b/src/pages/(exam)/ExamPage.tsx @@ -459,6 +459,7 @@ export default function ExamPage({page}: Props) { user={user!} modules={selectedModules} solutions={userSolutions} + assignment={assignment} information={{ timeSpent, inactivity: totalInactivity,