From 77a22b3ab35584c8fda5564b4eef0e22eaa6b9e3 Mon Sep 17 00:00:00 2001 From: Joao Ramos Date: Sat, 22 Jun 2024 00:16:30 +0100 Subject: [PATCH] Added a screen to display the desired levels for the students of a specific corporate --- src/dashboards/Admin.tsx | 28 +++++ src/dashboards/CorporateStudentsLevels.tsx | 140 +++++++++++++++++++++ 2 files changed, 168 insertions(+) create mode 100644 src/dashboards/CorporateStudentsLevels.tsx diff --git a/src/dashboards/Admin.tsx b/src/dashboards/Admin.tsx index 96d1cfb2..85939403 100644 --- a/src/dashboards/Admin.tsx +++ b/src/dashboards/Admin.tsx @@ -25,6 +25,7 @@ import IconCard from "./IconCard"; import useFilterStore from "@/stores/listFilterStore"; import { useRouter } from "next/router"; import usePaymentStatusUsers from "@/hooks/usePaymentStatusUsers"; +import CorporateStudentsLevels from "./CorporateStudentsLevels"; interface Props { user: User; @@ -293,6 +294,26 @@ export default function AdminDashboard({ user }: Props) { ); }; + const CorporateStudentsLevelsHelper = () => { + return ( + <> +
+
setPage("")} + className="flex gap-2 items-center text-mti-purple-light cursor-pointer hover:text-mti-purple-dark transition ease-in-out duration-300" + > + + Back +
+

+ Corporate Students Levels +

+
+ + + ); + }; + const DefaultDashboard = () => ( <>
@@ -393,6 +414,12 @@ export default function AdminDashboard({ user }: Props) { label="Content Management System (CMS)" color="green" /> + setPage("corporatestudentslevels")} + Icon={BsPersonFill} + label="Corporate Students Levels" + color="purple" + />
@@ -681,6 +708,7 @@ export default function AdminDashboard({ user }: Props) { {page === "inactiveCountryManagers" && } {page === "paymentdone" && } {page === "paymentpending" && } + {page === "corporatestudentslevels" && } {page === "" && } ); diff --git a/src/dashboards/CorporateStudentsLevels.tsx b/src/dashboards/CorporateStudentsLevels.tsx new file mode 100644 index 00000000..698c06ae --- /dev/null +++ b/src/dashboards/CorporateStudentsLevels.tsx @@ -0,0 +1,140 @@ +import React from "react"; +import useUsers from "@/hooks/useUsers"; +import useGroups from "@/hooks/useGroups"; +import { User } from "@/interfaces/user"; +import Select from "@/components/Low/Select"; +import ProgressBar from "@/components/Low/ProgressBar"; +import { + BsBook, + BsClipboard, + BsHeadphones, + BsMegaphone, + BsPen, +} from "react-icons/bs"; +import { MODULE_ARRAY } from "@/utils/moduleUtils"; +import { capitalize } from "lodash"; +import { getLevelLabel } from "@/utils/score"; + +const Card = ({ user }: { user: User }) => { + return ( +
+
+

{user.name}

+
+
+ {MODULE_ARRAY.map((module) => { + const desiredLevel = user.desiredLevels[module] || 9; + const level = user.levels[module] || 0; + return ( +
+
+
+ {module === "reading" && ( + + )} + {module === "listening" && ( + + )} + {module === "writing" && ( + + )} + {module === "speaking" && ( + + )} + {module === "level" && ( + + )} +
+
+ + {capitalize(module)} + +
+ {module === "level" && ( + + English Level: {getLevelLabel(level).join(" / ")} + + )} + {module !== "level" && ( +
+ Level {level} / Level 9 + Desired Level: {desiredLevel} +
+ )} +
+
+
+
+ +
+
+ ); + })} +
+
+ ); +}; + +const CorporateStudentsLevels = () => { + const { users } = useUsers(); + const { groups } = useGroups(); + + const corporateUsers = users.filter((u) => u.type === "corporate") as User[]; + const [corporateId, setCorporateId] = React.useState(""); + const corporate = + corporateUsers.find((u) => u.id === corporateId) || corporateUsers[0]; + + const groupsFromCorporate = corporate + ? groups.filter((g) => g.admin === corporate.id) + : []; + + const groupsParticipants = groupsFromCorporate + .flatMap((g) => g.participants) + .reduce((accm: User[], p) => { + const user = users.find((u) => u.id === p) as User; + if (user) { + return [...accm, user]; + } + return accm; + }, []); + + return ( + <> +