Updated the grading system to work based on entities

This commit is contained in:
Tiago Ribeiro
2024-11-22 15:36:21 +00:00
parent f301001ebe
commit 50bbb0dacf
14 changed files with 236 additions and 484 deletions

View File

@@ -6,28 +6,28 @@ import useAssignments from "@/hooks/useAssignments";
import useGradingSystem from "@/hooks/useGrading";
import useInvites from "@/hooks/useInvites";
import useFilterRecordsByUser from "@/hooks/useFilterRecordsByUser";
import useUsers, { userHashStudent, userHashTeacher, userHashCorporate} from "@/hooks/useUsers";
import {Invite} from "@/interfaces/invite";
import {Assignment} from "@/interfaces/results";
import {CorporateUser, MasterCorporateUser, Stat, User} from "@/interfaces/user";
import useUsers, { userHashStudent, userHashTeacher, userHashCorporate } from "@/hooks/useUsers";
import { Invite } from "@/interfaces/invite";
import { Assignment } from "@/interfaces/results";
import { CorporateUser, MasterCorporateUser, Stat, User } from "@/interfaces/user";
import useExamStore from "@/stores/examStore";
import {getExamById} from "@/utils/exams";
import {getUserCorporate} from "@/utils/groups";
import {countExamModules, countFullExams, MODULE_ARRAY, sortByModule, sortByModuleName} from "@/utils/moduleUtils";
import {getGradingLabel, getLevelLabel, getLevelScore} from "@/utils/score";
import {averageScore, groupBySession} from "@/utils/stats";
import {CreateOrderActions, CreateOrderData, OnApproveActions, OnApproveData, OrderResponseBody} from "@paypal/paypal-js";
import {PayPalButtons} from "@paypal/react-paypal-js";
import { getExamById } from "@/utils/exams";
import { getUserCorporate } from "@/utils/groups";
import { countExamModules, countFullExams, MODULE_ARRAY, sortByModule, sortByModuleName } from "@/utils/moduleUtils";
import { getGradingLabel, getLevelLabel, getLevelScore } from "@/utils/score";
import { averageScore, groupBySession } from "@/utils/stats";
import { CreateOrderActions, CreateOrderData, OnApproveActions, OnApproveData, OrderResponseBody } from "@paypal/paypal-js";
import { PayPalButtons } from "@paypal/react-paypal-js";
import axios from "axios";
import clsx from "clsx";
import {capitalize} from "lodash";
import { capitalize } from "lodash";
import moment from "moment";
import Link from "next/link";
import {useRouter} from "next/router";
import {useEffect, useMemo, useState} from "react";
import {BsArrowRepeat, BsBook, BsClipboard, BsFileEarmarkText, BsHeadphones, BsMegaphone, BsPen, BsPencil, BsStar} from "react-icons/bs";
import {toast} from "react-toastify";
import {activeAssignmentFilter} from "@/utils/assignments";
import { useRouter } from "next/router";
import { useEffect, useMemo, useState } from "react";
import { BsArrowRepeat, BsBook, BsClipboard, BsFileEarmarkText, BsHeadphones, BsMegaphone, BsPen, BsPencil, BsStar } from "react-icons/bs";
import { toast } from "react-toastify";
import { activeAssignmentFilter } from "@/utils/assignments";
import ModuleBadge from "@/components/ModuleBadge";
import useSessions from "@/hooks/useSessions";
@@ -36,15 +36,14 @@ interface Props {
linkedCorporate?: CorporateUser | MasterCorporateUser;
}
export default function StudentDashboard({user, linkedCorporate}: Props) {
const {gradingSystem} = useGradingSystem();
const {sessions} = useSessions(user.id);
const {data: stats} = useFilterRecordsByUser<Stat[]>(user.id, !user?.id);
const {assignments, isLoading: isAssignmentsLoading, reload: reloadAssignments} = useAssignments({assignees: user?.id});
const {invites, isLoading: isInvitesLoading, reload: reloadInvites} = useInvites({to: user.id});
export default function StudentDashboard({ user, linkedCorporate }: Props) {
const { sessions } = useSessions(user.id);
const { data: stats } = useFilterRecordsByUser<Stat[]>(user.id, !user?.id);
const { assignments, isLoading: isAssignmentsLoading, reload: reloadAssignments } = useAssignments({ assignees: user?.id });
const { invites, isLoading: isInvitesLoading, reload: reloadInvites } = useInvites({ to: user.id });
const {users: teachers} = useUsers(userHashTeacher);
const {users: corporates} = useUsers(userHashCorporate);
const { users: teachers } = useUsers(userHashTeacher);
const { users: corporates } = useUsers(userHashCorporate);
const users = useMemo(() => [...teachers, ...corporates], [teachers, corporates]);
const router = useRouter();
@@ -235,7 +234,6 @@ export default function StudentDashboard({user, linkedCorporate}: Props) {
<div className="flex w-full justify-between">
<span className="text-sm font-bold md:font-extrabold">{capitalize(module)}</span>
<span className="text-mti-gray-dim text-sm font-normal">
{module === "level" && !!gradingSystem && `English Level: ${getGradingLabel(level, gradingSystem.steps)}`}
{module !== "level" && `Level ${level} / Level 9 (Desired Level: ${desiredLevel})`}
</span>
</div>