Fixed a typo in the records
This commit is contained in:
@@ -27,7 +27,7 @@ import { mapBy, redirect, serialize } from "@/utils";
|
||||
import { getEntitiesWithRoles } from "@/utils/entities.be";
|
||||
import { checkAccess } from "@/utils/permissions";
|
||||
import { getGroups, getGroupsByEntities } from "@/utils/groups.be";
|
||||
import { getGradingSystemByEntity } from "@/utils/grading.be";
|
||||
import { getGradingSystemByEntities, getGradingSystemByEntity } from "@/utils/grading.be";
|
||||
import { Grading } from "@/interfaces";
|
||||
import { EntityWithRoles } from "@/interfaces/entity";
|
||||
import CardList from "@/components/High/CardList";
|
||||
@@ -44,9 +44,10 @@ export const getServerSideProps = withIronSessionSsr(async ({ req, res }) => {
|
||||
const entities = await getEntitiesWithRoles(checkAccess(user, ["admin", "developer"]) ? undefined : entityIDs)
|
||||
const users = await (checkAccess(user, ["admin", "developer"]) ? getUsers() : getEntitiesUsers(mapBy(entities, 'id')))
|
||||
const assignments = await (checkAccess(user, ["admin", "developer"]) ? getAssignments() : getEntitiesAssignments(mapBy(entities, 'id')))
|
||||
const gradingSystems = await getGradingSystemByEntities(mapBy(entities, 'id'))
|
||||
|
||||
return {
|
||||
props: serialize({ user, users, assignments, entities }),
|
||||
props: serialize({ user, users, assignments, entities, gradingSystems }),
|
||||
};
|
||||
}, sessionOptions);
|
||||
|
||||
@@ -57,11 +58,12 @@ interface Props {
|
||||
users: User[];
|
||||
assignments: Assignment[];
|
||||
entities: EntityWithRoles[]
|
||||
gradingSystems: Grading[]
|
||||
}
|
||||
|
||||
const MAX_TRAINING_EXAMS = 10;
|
||||
|
||||
export default function History({ user, users, assignments, entities }: Props) {
|
||||
export default function History({ user, users, assignments, entities, gradingSystems }: Props) {
|
||||
const router = useRouter();
|
||||
const [statsUserId, setStatsUserId, training, setTraining] = useRecordStore((state) => [
|
||||
state.selectedUser,
|
||||
@@ -165,6 +167,7 @@ export default function History({ user, users, assignments, entities }: Props) {
|
||||
<StatsGridItem
|
||||
key={uuidv4()}
|
||||
stats={dateStats}
|
||||
gradingSystems={gradingSystems}
|
||||
timestamp={timestamp}
|
||||
user={user}
|
||||
assignments={assignments}
|
||||
|
||||
@@ -1,51 +1,51 @@
|
||||
import {useEffect, useState} from "react";
|
||||
import {useRouter} from "next/router";
|
||||
import { useEffect, useState } from "react";
|
||||
import { useRouter } from "next/router";
|
||||
import axios from "axios";
|
||||
import {Tab} from "@headlessui/react";
|
||||
import {AiOutlineFileSearch} from "react-icons/ai";
|
||||
import {MdOutlinePlaylistAddCheckCircle, MdOutlineSelfImprovement} from "react-icons/md";
|
||||
import {BsChatLeftDots} from "react-icons/bs";
|
||||
import { Tab } from "@headlessui/react";
|
||||
import { AiOutlineFileSearch } from "react-icons/ai";
|
||||
import { MdOutlinePlaylistAddCheckCircle, MdOutlineSelfImprovement } from "react-icons/md";
|
||||
import { BsChatLeftDots } from "react-icons/bs";
|
||||
import Button from "@/components/Low/Button";
|
||||
import clsx from "clsx";
|
||||
import Exercise from "@/training/Exercise";
|
||||
import TrainingScore from "@/training/TrainingScore";
|
||||
import {ITrainingContent, ITrainingTip} from "@/training/TrainingInterfaces";
|
||||
import { ITrainingContent, ITrainingTip } from "@/training/TrainingInterfaces";
|
||||
import formatTip from "@/training/FormatTip";
|
||||
import {Stat, User} from "@/interfaces/user";
|
||||
import { Stat, User } from "@/interfaces/user";
|
||||
import Head from "next/head";
|
||||
import Layout from "@/components/High/Layout";
|
||||
import {ToastContainer} from "react-toastify";
|
||||
import {withIronSessionSsr} from "iron-session/next";
|
||||
import {shouldRedirectHome} from "@/utils/navigation.disabled";
|
||||
import {sessionOptions} from "@/lib/session";
|
||||
import { ToastContainer } from "react-toastify";
|
||||
import { withIronSessionSsr } from "iron-session/next";
|
||||
import { shouldRedirectHome } from "@/utils/navigation.disabled";
|
||||
import { sessionOptions } from "@/lib/session";
|
||||
import qs from "qs";
|
||||
import StatsGridItem from "@/components/Medium/StatGridItem";
|
||||
import useExamStore from "@/stores/examStore";
|
||||
import {usePDFDownload} from "@/hooks/usePDFDownload";
|
||||
import { usePDFDownload } from "@/hooks/usePDFDownload";
|
||||
import useAssignments from "@/hooks/useAssignments";
|
||||
import useUsers from "@/hooks/useUsers";
|
||||
import Dropdown from "@/components/Dropdown";
|
||||
import InfiniteCarousel from "@/components/InfiniteCarousel";
|
||||
import {LuExternalLink} from "react-icons/lu";
|
||||
import {uniqBy} from "lodash";
|
||||
import {getExamById} from "@/utils/exams";
|
||||
import {convertToUserSolutions} from "@/utils/stats";
|
||||
import {sortByModule} from "@/utils/moduleUtils";
|
||||
import { LuExternalLink } from "react-icons/lu";
|
||||
import { uniqBy } from "lodash";
|
||||
import { getExamById } from "@/utils/exams";
|
||||
import { convertToUserSolutions } from "@/utils/stats";
|
||||
import { sortByModule } from "@/utils/moduleUtils";
|
||||
import { requestUser } from "@/utils/api";
|
||||
import { redirect, serialize } from "@/utils";
|
||||
|
||||
export const getServerSideProps = withIronSessionSsr(async ({req, res}) => {
|
||||
export const getServerSideProps = withIronSessionSsr(async ({ req, res }) => {
|
||||
const user = await requestUser(req, res)
|
||||
if (!user) return redirect("/login")
|
||||
|
||||
if (shouldRedirectHome(user)) redirect("/")
|
||||
|
||||
return {
|
||||
props: serialize({user}),
|
||||
props: serialize({ user }),
|
||||
};
|
||||
}, sessionOptions);
|
||||
|
||||
const TrainingContent: React.FC<{user: User}> = ({user}) => {
|
||||
const TrainingContent: React.FC<{ user: User }> = ({ user }) => {
|
||||
// Record stuff
|
||||
const setExams = useExamStore((state) => state.setExams);
|
||||
const setShowSolutions = useExamStore((state) => state.setShowSolutions);
|
||||
@@ -59,11 +59,11 @@ const TrainingContent: React.FC<{user: User}> = ({user}) => {
|
||||
const [loading, setLoading] = useState(true);
|
||||
const [trainingTips, setTrainingTips] = useState<ITrainingTip[]>([]);
|
||||
const [currentTipIndex, setCurrentTipIndex] = useState(0);
|
||||
const {assignments} = useAssignments({});
|
||||
const {users} = useUsers();
|
||||
const { assignments } = useAssignments({});
|
||||
const { users } = useUsers();
|
||||
|
||||
const router = useRouter();
|
||||
const {id} = router.query;
|
||||
const { id } = router.query;
|
||||
|
||||
useEffect(() => {
|
||||
const fetchTrainingContent = async () => {
|
||||
@@ -84,14 +84,14 @@ const TrainingContent: React.FC<{user: User}> = ({user}) => {
|
||||
return statResponse.data;
|
||||
}),
|
||||
);
|
||||
return {...exam, stats};
|
||||
return { ...exam, stats };
|
||||
}),
|
||||
),
|
||||
};
|
||||
|
||||
const tips = await axios.get<ITrainingTip[]>("/api/training/walkthrough", {
|
||||
params: {ids: trainingContent.tip_ids},
|
||||
paramsSerializer: (params) => qs.stringify(params, {arrayFormat: "repeat"}),
|
||||
params: { ids: trainingContent.tip_ids },
|
||||
paramsSerializer: (params) => qs.stringify(params, { arrayFormat: "repeat" }),
|
||||
});
|
||||
|
||||
const processedTips = tips.data.map(formatTip);
|
||||
@@ -121,7 +121,7 @@ const TrainingContent: React.FC<{user: User}> = ({user}) => {
|
||||
return getExamById(stat.module, stat.exam);
|
||||
});
|
||||
|
||||
const {timeSpent, inactivity} = stats[0];
|
||||
const { timeSpent, inactivity } = stats[0];
|
||||
|
||||
Promise.all(examPromises).then((exams) => {
|
||||
if (exams.every((x) => !!x)) {
|
||||
@@ -177,6 +177,7 @@ const TrainingContent: React.FC<{user: User}> = ({user}) => {
|
||||
{trainingContent.exams.map((exam, examIndex) => (
|
||||
<StatsGridItem
|
||||
key={`exam-${examIndex}`}
|
||||
gradingSystems={[]}
|
||||
width="380px"
|
||||
height="150px"
|
||||
examNumber={examIndex + 1}
|
||||
@@ -252,7 +253,7 @@ const TrainingContent: React.FC<{user: User}> = ({user}) => {
|
||||
{trainingContent.weak_areas.map((x, index) => (
|
||||
<Tab
|
||||
key={index}
|
||||
className={({selected}) =>
|
||||
className={({ selected }) =>
|
||||
clsx(
|
||||
"text-[#53B2F9] pb-2 border-b-2",
|
||||
"focus:outline-none",
|
||||
|
||||
Reference in New Issue
Block a user