diff --git a/nextjs/src/app/course/[courseName]/calendar/CourseCalendar.tsx b/nextjs/src/app/course/[courseName]/calendar/CourseCalendar.tsx index b927341..fff51b7 100644 --- a/nextjs/src/app/course/[courseName]/calendar/CourseCalendar.tsx +++ b/nextjs/src/app/course/[courseName]/calendar/CourseCalendar.tsx @@ -28,7 +28,7 @@ export default function CourseCalendar() { min-h-0 border-4 border-gray-900 - rounded-xl + rounded-lg bg-slate-950 p-1 " diff --git a/nextjs/src/app/course/[courseName]/calendar/Day.tsx b/nextjs/src/app/course/[courseName]/calendar/Day.tsx index ee40a21..251e6bd 100644 --- a/nextjs/src/app/course/[courseName]/calendar/Day.tsx +++ b/nextjs/src/app/course/[courseName]/calendar/Day.tsx @@ -17,6 +17,7 @@ import { LocalCoursePage } from "@/models/local/page/localCoursePage"; import { useCanvasAssignmentsQuery } from "@/hooks/canvas/canvasAssignmentHooks"; import { useCanvasQuizzesQuery } from "@/hooks/canvas/canvasQuizHooks"; import { useCanvasPagesQuery } from "@/hooks/canvas/canvasPageHooks"; +import DropTargetStyling from "./DropTargetStyling"; export default function Day({ day, month }: { day: string; month: number }) { const dayAsDate = getDateFromStringOrThrow( @@ -45,40 +46,42 @@ export default function Day({ day, month }: { day: string; month: number }) { return (
itemDrop(e, day)} onDragOver={(e) => e.preventDefault()} > - -
- {todaysAssignments.map(({ assignment, moduleName, status }) => ( - - ))} - {todaysQuizzes.map(({ quiz, moduleName, status }) => ( - - ))} - {todaysPages.map(({ page, moduleName, status }) => ( - - ))} -
+ + +
+ {todaysAssignments.map(({ assignment, moduleName, status }) => ( + + ))} + {todaysQuizzes.map(({ quiz, moduleName, status }) => ( + + ))} + {todaysPages.map(({ page, moduleName, status }) => ( + + ))} +
+
); } @@ -183,6 +186,7 @@ function DraggableListItem({ item: IModuleItem; }) { const { courseName } = useCourseContext(); + const { dragStart } = useDraggingContext(); return ( {item.name} diff --git a/nextjs/src/app/course/[courseName]/calendar/DropTargetStyling.tsx b/nextjs/src/app/course/[courseName]/calendar/DropTargetStyling.tsx new file mode 100644 index 0000000..2405faa --- /dev/null +++ b/nextjs/src/app/course/[courseName]/calendar/DropTargetStyling.tsx @@ -0,0 +1,22 @@ +import React, { ReactNode } from "react"; +import { useDraggingContext } from "../context/draggingContext"; + +export default function DropTargetStyling({ + children, + draggingClassName, +}: { + children: ReactNode; + draggingClassName: string; +}) { + const { isDragging } = useDraggingContext(); + return ( +
+ {children} +
+ ); +} diff --git a/nextjs/src/app/course/[courseName]/context/DraggingContextProvider.tsx b/nextjs/src/app/course/[courseName]/context/DraggingContextProvider.tsx index a4a68e3..5817d88 100644 --- a/nextjs/src/app/course/[courseName]/context/DraggingContextProvider.tsx +++ b/nextjs/src/app/course/[courseName]/context/DraggingContextProvider.tsx @@ -1,5 +1,5 @@ "use client"; -import { ReactNode, useCallback, DragEvent } from "react"; +import { ReactNode, useCallback, DragEvent, useState } from "react"; import { DraggingContext } from "./draggingContext"; import { useUpdateQuizMutation } from "@/hooks/localCourse/quizHooks"; import { useLocalCourseSettingsQuery } from "@/hooks/localCourse/localCoursesHooks"; @@ -22,11 +22,13 @@ export default function DraggingContextProvider({ const updateAssignmentMutation = useUpdateAssignmentMutation(); const updatePageMutation = useUpdatePageMutation(); const { data: settings } = useLocalCourseSettingsQuery(); + const [isDragging, setIsDragging] = useState(false); + + const dragStart = useCallback(() => setIsDragging(true), []); const itemDrop = useCallback( (e: DragEvent, day: string | undefined) => { const rawData = e.dataTransfer.getData("draggableItem"); - // console.log(rawData); const itemBeingDragged = JSON.parse(rawData); if (itemBeingDragged && day) { @@ -66,6 +68,7 @@ export default function DraggingContextProvider({ }); } } + setIsDragging(false); function updateAssignment(dayAsDate: Date) { const previousAssignment = itemBeingDragged.item as LocalAssignment; @@ -101,6 +104,8 @@ export default function DraggingContextProvider({ {children} diff --git a/nextjs/src/app/course/[courseName]/context/draggingContext.tsx b/nextjs/src/app/course/[courseName]/context/draggingContext.tsx index bd42bfb..2899426 100644 --- a/nextjs/src/app/course/[courseName]/context/draggingContext.tsx +++ b/nextjs/src/app/course/[courseName]/context/draggingContext.tsx @@ -9,12 +9,17 @@ export interface DraggableItem { } export interface DraggingContextInterface { - itemDrop: (e: DragEvent,droppedOnDay?: string) => void; + itemDrop: (e: DragEvent, droppedOnDay?: string) => void; + isDragging: boolean; + dragStart: () => void; } const defaultDraggingValue: DraggingContextInterface = { - itemDrop: () => { }, + itemDrop: () => {}, + isDragging: false, + dragStart: () => {}, }; -export const DraggingContext = createContext(defaultDraggingValue); +export const DraggingContext = + createContext(defaultDraggingValue); export function useDraggingContext() { return useContext(DraggingContext);