Improved the way a teacher views the assignments

This commit is contained in:
Tiago Ribeiro
2023-11-09 12:34:56 +00:00
parent 536c1dfab3
commit 19624e97bd
3 changed files with 309 additions and 22 deletions

View File

@@ -23,6 +23,7 @@ import Select from "react-select";
import useGroups from "@/hooks/useGroups";
import {shouldRedirectHome} from "@/utils/navigation.disabled";
import useAssignments from "@/hooks/useAssignments";
import {uuidv4} from "@firebase/util";
export const getServerSideProps = withIronSessionSsr(({req, res}) => {
const user = req.session.user;
@@ -57,7 +58,7 @@ export const getServerSideProps = withIronSessionSsr(({req, res}) => {
export default function History({user}: {user: User}) {
const [statsUserId, setStatsUserId] = useState<string | undefined>(user.id);
const [groupedStats, setGroupedStats] = useState<{[key: string]: Stat[]}>();
const [filter, setFilter] = useState<"months" | "weeks" | "days">();
const [filter, setFilter] = useState<"months" | "weeks" | "days" | "assignments">();
const {assignments} = useAssignments({});
const {users} = useUsers();
@@ -73,16 +74,19 @@ export default function History({user}: {user: User}) {
useEffect(() => {
if (stats && !isStatsLoading) {
console.log(stats);
setGroupedStats(groupByDate(stats));
}
}, [stats, isStatsLoading]);
const toggleFilter = (value: "months" | "weeks" | "days") => {
const toggleFilter = (value: "months" | "weeks" | "days" | "assignments") => {
setFilter((prev) => (prev === value ? undefined : value));
};
const filterStatsByDate = (stats: {[key: string]: Stat[]}) => {
if (filter) {
console.log(filter);
if (filter && filter !== "assignments") {
const filterDate = moment()
.subtract({[filter as string]: 1})
.format("x");
@@ -95,6 +99,19 @@ export default function History({user}: {user: User}) {
return filteredStats;
}
if (filter && filter === "assignments") {
const filteredStats: {[key: string]: Stat[]} = {};
Object.keys(stats).forEach((timestamp) => {
if (stats[timestamp].map((s) => s.assignment === undefined).includes(false))
filteredStats[timestamp] = [...stats[timestamp].filter((s) => !!s.assignment)];
});
console.log(filteredStats);
return filteredStats;
}
return stats;
};
@@ -234,7 +251,7 @@ export default function History({user}: {user: User}) {
return (
<>
<div
key={timestamp}
key={uuidv4()}
className={clsx(
"flex flex-col gap-4 border border-mti-gray-platinum p-4 cursor-pointer rounded-xl transition ease-in-out duration-300 -md:hidden",
correct / total >= 0.7 && "hover:border-mti-purple",
@@ -246,7 +263,7 @@ export default function History({user}: {user: User}) {
{content}
</div>
<div
key={timestamp}
key={uuidv4()}
className={clsx(
"flex flex-col gap-4 border border-mti-gray-platinum p-4 cursor-pointer rounded-xl transition ease-in-out duration-300 -md:tooltip md:hidden",
correct / total >= 0.7 && "hover:border-mti-purple",
@@ -309,6 +326,15 @@ export default function History({user}: {user: User}) {
)}
</div>
<div className="flex gap-4 w-full justify-center xl:justify-end">
<button
className={clsx(
"bg-mti-purple-ultralight text-mti-purple px-4 py-2 rounded-full hover:text-white hover:bg-mti-purple-light",
"transition duration-300 ease-in-out",
filter === "assignments" && "!bg-mti-purple-light !text-white",
)}
onClick={() => toggleFilter("assignments")}>
Assignments
</button>
<button
className={clsx(
"bg-mti-purple-ultralight text-mti-purple px-4 py-2 rounded-full hover:text-white hover:bg-mti-purple-light",