"use client"; import { usePagesQueries } from "@/features/local/pages/pageHooks"; import { IModuleItem } from "@/models/local/IModuleItem"; import { getDateFromString, getDateFromStringOrThrow, getDateOnlyMarkdownString, } from "@/models/local/utils/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 { useTRPC } from "@/services/serverFunctions/trpcClient"; import { useSuspenseQueries } from "@tanstack/react-query"; import { useAssignmentNamesQuery } from "@/features/local/assignments/assignmentHooks"; export default function ExpandableModule({ moduleName, }: { moduleName: string; }) { const trpc = useTRPC(); const { itemDropOnModule } = useDraggingContext(); const { courseName } = useCourseContext(); const { data: assignmentNames } = useAssignmentNamesQuery(moduleName); const assignmentsQueries = useSuspenseQueries({ queries: assignmentNames.map((assignmentName) => trpc.assignment.getAssignment.queryOptions({ courseName, moduleName, assignmentName, }) ), }); const assignments = assignmentsQueries.map((result) => result.data); const { data: quizzes } = useQuizzesQueries(moduleName); const { data: 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 (