mirror of
https://github.com/alexmickelson/canvasManagement.git
synced 2026-03-25 23:28:33 -06:00
71 lines
2.2 KiB
TypeScript
71 lines
2.2 KiB
TypeScript
import { IModuleItem } from "@/features/local/modules/IModuleItem";
|
|
import { getModuleItemUrl } from "@/services/urlUtils";
|
|
import Link from "next/link";
|
|
import { ReactNode, useRef, useState } from "react";
|
|
import { useCourseContext } from "../../context/courseContext";
|
|
import { DraggableItem } from "../../context/drag/draggingContext";
|
|
import ClientOnly from "@/components/ClientOnly";
|
|
import { useDragStyleContext } from "../../context/drag/dragStyleContext";
|
|
import { Tooltip } from "../../../../../components/Tooltip";
|
|
|
|
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<HTMLAnchorElement>(null);
|
|
const [tooltipVisible, setTooltipVisible] = useState(false);
|
|
return (
|
|
<div className={" relative group "}>
|
|
<Link
|
|
href={getModuleItemUrl(courseName, moduleName, type, item.name)}
|
|
shallow={true}
|
|
className={
|
|
" border rounded-sm sm:px-1 sm:mx-1 break-words mb-1 truncate sm:text-wrap text-nowrap " +
|
|
" bg-slate-800 " +
|
|
" block " +
|
|
(status === "localOnly" && " text-slate-500 border-slate-600 ") +
|
|
(status === "incomplete" && " border-rose-900 ") +
|
|
(status === "published" && " border-green-800 ")
|
|
}
|
|
role="button"
|
|
draggable="true"
|
|
onDragStart={(e) => {
|
|
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}
|
|
</Link>
|
|
<ClientOnly>
|
|
<Tooltip
|
|
message={message}
|
|
targetRef={linkRef}
|
|
visible={tooltipVisible && status === "incomplete"}
|
|
/>
|
|
</ClientOnly>
|
|
</div>
|
|
);
|
|
}
|