"use client"; import { usePagesQueries } from "@/hooks/localCourse/pageHooks"; import { IModuleItem } from "@/models/local/IModuleItem"; import { getDateFromString, getDateFromStringOrThrow, getDateOnlyMarkdownString, } from "@/models/local/timeUtils"; import { Fragment } from "react"; import Modal, { useModal } from "../../../../components/Modal"; import NewItemForm from "./NewItemForm"; import { ModuleCanvasStatus } from "./ModuleCanvasStatus"; import ClientOnly from "@/components/ClientOnly"; import ExpandIcon from "../../../../components/icons/ExpandIcon"; import { DraggableItem, useDraggingContext, } from "../context/drag/draggingContext"; import Link from "next/link"; import { getModuleItemUrl } from "@/services/urlUtils"; import { useCourseContext } from "../context/courseContext"; import { Expandable } from "../../../../components/Expandable"; import { useDragStyleContext } from "../context/drag/dragStyleContext"; import { useQuizzesQueries } from "@/hooks/localCourse/quizHooks"; import { useAssignmentNamesQuery } from "@/hooks/localCourse/assignmentHooks"; import { trpc } from "@/services/serverFunctions/trpcClient"; export default function ExpandableModule({ moduleName, }: { moduleName: string; }) { const { itemDropOnModule } = useDraggingContext(); const { courseName } = useCourseContext(); const [assignmentNames] = useAssignmentNamesQuery(moduleName); const [assignments] = trpc.useSuspenseQueries((t) => assignmentNames.map((assignmentName) => t.assignment.getAssignment({ courseName, moduleName, assignmentName }) ) ); const [quizzes] = useQuizzesQueries(moduleName); const [pages] = usePagesQueries(moduleName); const modal = useModal(); const moduleItems: { type: "assignment" | "quiz" | "page"; item: IModuleItem; }[] = (assignments ?? []) .map( ( a ): { type: "assignment" | "quiz" | "page"; item: IModuleItem; } => ({ type: "assignment", item: a, }) ) .concat(quizzes.map((q) => ({ type: "quiz", item: q }))) .concat(pages.map((p) => ({ type: "page", item: p }))) .sort( (a, b) => getDateFromStringOrThrow( a.item.dueAt, "item due date in expandable module" ).getTime() - getDateFromStringOrThrow( b.item.dueAt, "item due date in expandable module" ).getTime() ); return (