import { IModuleItem } from "@/models/local/IModuleItem"; import { getModuleItemUrl } from "@/services/urlUtils"; import Link from "next/link"; import { ReactNode, useEffect, useRef, useState } from "react"; import { useCourseContext } from "../../context/courseContext"; import { useDraggingContext, DraggableItem, } from "../../context/draggingContext"; import { createPortal } from "react-dom"; import ClientOnly from "@/components/ClientOnly"; import { useDragStyleContext } from "../../context/dragStyleContext"; export function ItemInDay({ type, moduleName, status, item, message, }: { type: "assignment" | "page" | "quiz"; status: "localOnly" | "incomplete" | "published"; moduleName: string; item: IModuleItem; message: ReactNode; }) { const { courseName } = useCourseContext(); const { setIsDragging } = useDragStyleContext(); const linkRef = useRef(null); const [tooltipVisible, setTooltipVisible] = useState(false); return (
{ const draggableItem: DraggableItem = { type, item, sourceModuleName: moduleName, }; e.dataTransfer.setData( "draggableItem", JSON.stringify(draggableItem) ); setIsDragging(true) }} onMouseEnter={() => setTooltipVisible(true)} onMouseLeave={() => setTooltipVisible(false)} ref={linkRef} > {item.name}
); } const Tooltip: React.FC<{ message: ReactNode; targetRef: React.RefObject; visible: boolean; }> = ({ message, targetRef, visible }) => { const rect = targetRef.current?.getBoundingClientRect(); return createPortal( , document.body ); };