49 lines
1.1 KiB
TypeScript
49 lines
1.1 KiB
TypeScript
import type { TimelineDragData } from "@/timeline/drag";
|
|
|
|
const MIME_TYPE = "application/x-timeline-drag";
|
|
let lastDragData: TimelineDragData | null = null;
|
|
|
|
export function setDragData({
|
|
dataTransfer,
|
|
dragData,
|
|
}: {
|
|
dataTransfer: DataTransfer;
|
|
dragData: TimelineDragData;
|
|
}): void {
|
|
dataTransfer.setData(MIME_TYPE, JSON.stringify(dragData));
|
|
dataTransfer.setData("text/plain", JSON.stringify(dragData));
|
|
lastDragData = dragData;
|
|
}
|
|
|
|
export function getDragData({
|
|
dataTransfer,
|
|
}: {
|
|
dataTransfer: DataTransfer;
|
|
}): TimelineDragData | null {
|
|
const data = dataTransfer.getData(MIME_TYPE);
|
|
if (data) return JSON.parse(data) as TimelineDragData;
|
|
|
|
const textData = dataTransfer.getData("text/plain");
|
|
if (textData) {
|
|
try {
|
|
return JSON.parse(textData) as TimelineDragData;
|
|
} catch {
|
|
return lastDragData;
|
|
}
|
|
}
|
|
|
|
return lastDragData;
|
|
}
|
|
|
|
export function hasDragData({
|
|
dataTransfer,
|
|
}: {
|
|
dataTransfer: DataTransfer;
|
|
}): boolean {
|
|
return dataTransfer.types.includes(MIME_TYPE) || lastDragData !== null;
|
|
}
|
|
|
|
export function clearDragData(): void {
|
|
lastDragData = null;
|
|
}
|