import {Descending, Section, SortSettings, Term} from "../../interfaces"; import Card from "react-bootstrap/Card"; import DashboardCard from "./DashboardCard"; import AssignmentsTable, {AssignmentsTableColumn} from "../tables/AssignmentsTable"; import {useMemo, useState} from "react"; import SortSelect from "../input/SortSelect"; import OffcanvasDashboardCard from "./OffcanvasDashboardCard"; type MissingAssignmentCardsProps = { sections: Section[], term: Term | null } const assignmentsTableColumns = [AssignmentsTableColumn.CLASSNAME, AssignmentsTableColumn.NAME, AssignmentsTableColumn.DUEDATE]; export default function MissingAssignmentCard({sections, term}: MissingAssignmentCardsProps) { const [offcanvasSort, setOffcanvasSort] = useState>({ order: Descending, by: AssignmentsTableColumn.DUEDATE }); const missingAssignments = useMemo(() => sections .map(s => s.assignments) // Get assignments from sections .flat(1) // Turn array of arrays of assignments into an array of assignments .filter(a => a.score?.missing) // Filter for only missing assignments .sort((a, b) => a.dueDate.getTime() - b.dueDate.getTime()) // Sort by due date , [sections]); // Get 5 assignments with the most recent due date const assignmentsToDisplay = useMemo(() => missingAssignments .sort((a, b) => b.dueDate.getTime() - a.dueDate.getTime()) .slice(0, 5) , [missingAssignments]); // Show button that displays list of all missing assignments (in offcanvas element) const includeOffcanvas = missingAssignments.length > 5; const cardBody = useMemo(() => term === null ? <> No missing assignments

And I bet you're not Missing school either.

: <> {`${missingAssignments.length} missing assignment${missingAssignments.length === 1 ? '' : 's'} in ${term.title}`} {missingAssignments.length === 0 ?

No missing assignments! Nice job try-hard!

: } , [assignmentsToDisplay, term, missingAssignments]); return includeOffcanvas ? }>{cardBody} : {cardBody} };