From 158a5d82a236c74f4e312a68825d26fe59864ece Mon Sep 17 00:00:00 2001 From: Alex Mickelson Date: Fri, 20 Sep 2024 15:57:40 -0600 Subject: [PATCH] updates to calendar --- .../course/[courseName]/calendar/day/Day.tsx | 8 +- .../{DraggableListItem.tsx => ItemInDay.tsx} | 7 +- .../context/DraggingContextProvider.tsx | 2 + .../[courseName]/modules/ExpandableModule.tsx | 73 +++++++++++++------ 4 files changed, 60 insertions(+), 30 deletions(-) rename nextjs/src/app/course/[courseName]/calendar/day/{DraggableListItem.tsx => ItemInDay.tsx} (93%) diff --git a/nextjs/src/app/course/[courseName]/calendar/day/Day.tsx b/nextjs/src/app/course/[courseName]/calendar/day/Day.tsx index e09e472..f098f12 100644 --- a/nextjs/src/app/course/[courseName]/calendar/day/Day.tsx +++ b/nextjs/src/app/course/[courseName]/calendar/day/Day.tsx @@ -10,7 +10,7 @@ import { useLocalCourseSettingsQuery } from "@/hooks/localCourse/localCoursesHoo import { getDayOfWeek } from "@/models/local/localCourse"; import { getLectureUrl } from "@/services/urlUtils"; import DropTargetStyling from "../../../../../components/DropTargetStyling"; -import { DraggableListItem } from "./DraggableListItem"; +import { ItemInDay } from "./ItemInDay"; import { useTodaysItems } from "./useTodaysItems"; export default function Day({ day, month }: { day: string; month: number }) { @@ -49,7 +49,7 @@ export default function Day({ day, month }: { day: string; month: number }) {
{todaysAssignments.map( ({ assignment, moduleName, status, message }) => ( - ( - ))} {todaysPages.map(({ page, moduleName, status, message }) => ( - , dropModuleName: string) => { console.log("dropping on module"); const rawData = e.dataTransfer.getData("draggableItem"); + if (!rawData) return; const itemBeingDragged: DraggableItem = JSON.parse(rawData); if (itemBeingDragged) { @@ -97,6 +98,7 @@ export default function DraggingContextProvider({ const itemDropOnDay = useCallback( (e: DragEvent, day: string) => { const rawData = e.dataTransfer.getData("draggableItem"); + if (!rawData) return; const itemBeingDragged: DraggableItem = JSON.parse(rawData); if (itemBeingDragged) { diff --git a/nextjs/src/app/course/[courseName]/modules/ExpandableModule.tsx b/nextjs/src/app/course/[courseName]/modules/ExpandableModule.tsx index 73dde3c..a24d02a 100644 --- a/nextjs/src/app/course/[courseName]/modules/ExpandableModule.tsx +++ b/nextjs/src/app/course/[courseName]/modules/ExpandableModule.tsx @@ -23,7 +23,7 @@ import NewItemForm from "./NewItemForm"; import { ModuleCanvasStatus } from "./ModuleCanvasStatus"; import ClientOnly from "@/components/ClientOnly"; import ExpandIcon from "../../../../components/icons/ExpandIcon"; -import { useDraggingContext } from "../context/draggingContext"; +import { DraggableItem, useDraggingContext } from "../context/draggingContext"; import DropTargetStyling from "../../../../components/DropTargetStyling"; import Link from "next/link"; import { getModuleItemUrl } from "@/services/urlUtils"; @@ -45,7 +45,6 @@ export default function ExpandableModule({ ); const { data: quizzes } = useQuizzesQueries(moduleName, quizNames); const { data: pages } = usePagesQueries(moduleName, pageNames); - const { courseName } = useCourseContext(); const [expanded, setExpanded] = useState(false); @@ -121,28 +120,13 @@ export default function ExpandableModule({ )}
- {moduleItems.map(({ type, item }) => { - const date = getDateFromString(item.dueAt); - - return ( - -
- {date && getDateOnlyMarkdownString(date)} -
- - {item.name} - -
- ); - })} + {moduleItems.map(({ type, item }) => ( + + ))}
@@ -150,3 +134,44 @@ export default function ExpandableModule({ ); } + +function ExpandableModuleItem({ + type, + item, + moduleName, +}: { + type: "assignment" | "quiz" | "page"; + item: IModuleItem; + moduleName: string; +}) { + const { courseName } = useCourseContext(); + const date = getDateFromString(item.dueAt); + const { dragStart } = useDraggingContext(); + + return ( + +
+ {date && getDateOnlyMarkdownString(date)} +
+ { + const draggableItem: DraggableItem = { + type, + item, + sourceModuleName: moduleName, + }; + e.dataTransfer.setData( + "draggableItem", + JSON.stringify(draggableItem) + ); + dragStart(); + }} + > + {item.name} + +
+ ); +}