import { useDraggable, useDroppable } from "@dnd-kit/core"; import clsx from "clsx"; import { MdClose, MdDelete, MdDragIndicator } from "react-icons/md"; import { CSS } from "@dnd-kit/utilities"; import { useEffect, useState } from "react"; import ConfirmDeleteBtn from "../../Shared/ConfirmDeleteBtn"; interface BlankProps { id: number; module: string; variant: "text" | "bank"; isSelected?: boolean; isDragging?: boolean; onSelect?: (id: number) => void; onRemove?: (id: number) => void; disabled?: boolean; } export const Blank: React.FC = ({ id, module, variant, isSelected, isDragging, onSelect, onRemove, disabled, }) => { const { attributes, listeners, setNodeRef, transform } = useDraggable({ id: `${variant}-blank-${id}`, disabled: disabled || variant !== "text", }); const style = transform ? { transform: CSS.Translate.toString(transform), transition: 'none', zIndex: 999, position: 'relative' as const, touchAction: 'none', } : { transition: 'transform 0.2s cubic-bezier(0.25, 1, 0.5, 1)', touchAction: 'none', position: 'relative' as const, }; const handleClick = (e: React.MouseEvent) => { if (variant === "bank" && !disabled && onSelect) { onSelect(id); } }; const dragProps = variant === "text" ? { ...attributes, ...listeners, } : {}; return (
{variant === "text" && ( {isSelected ? : } )} {id} {onRemove && !isDragging && ( onRemove(id)} size="md" position="top-right" className="-translate-y-2 translate-x-1.5" /> )}
); }; export const DropZone: React.FC<{ index: number, module: string; }> = ({ index, module }) => { const { setNodeRef, isOver } = useDroppable({ id: `drop-${index}`, }); return ( ); };