import Link from 'next/link'; import { DragEvent, useState } from 'react'; import { useRouter } from 'next/navigation'; import { Button } from '@headlessui/react'; import { PDFIcon, EPUBIcon, FileIcon } from '@/components/icons/Icons'; import { LoadingSpinner } from '@/components/Spinner'; import { DocumentListDocument } from '@/types/documents'; interface DocumentListItemProps { doc: DocumentListDocument; onDelete: (doc: DocumentListDocument) => void; dragEnabled?: boolean; onDragStart?: (doc: DocumentListDocument) => void; onDragEnd?: () => void; onDragOver?: (e: DragEvent, doc: DocumentListDocument) => void; onDragLeave?: () => void; onDrop?: (e: DragEvent, doc: DocumentListDocument) => void; isDropTarget?: boolean; } export function DocumentListItem({ doc, onDelete, dragEnabled = true, onDragStart, onDragEnd, onDragOver, onDragLeave, onDrop, isDropTarget = false, }: DocumentListItemProps) { const [loading, setLoading] = useState(false); const router = useRouter(); // Only allow drag and drop interactions for documents not in folders const isDraggable = dragEnabled && !doc.folderId; const allowDropTarget = !doc.folderId; const handleDocumentClick = (e: React.MouseEvent) => { e.preventDefault(); setLoading(true); router.push(`/${doc.type}/${encodeURIComponent(doc.id)}`); }; return (
onDragStart?.(doc)} onDragEnd={onDragEnd} onDragOver={(e) => allowDropTarget && onDragOver?.(e, doc)} onDragLeave={() => allowDropTarget && onDragLeave?.()} onDrop={(e) => allowDropTarget && onDrop?.(e, doc)} className={` w-full ${allowDropTarget && isDropTarget ? 'ring-2 ring-accent bg-primary/10' : ''} bg-background rounded-lg p-2 shadow hover:shadow-md transition-shadow relative `} > {loading && (
)}
{doc.type === 'pdf' ? : doc.type === 'epub' ? : }

{doc.name}

{(doc.size / 1024 / 1024).toFixed(2)} MB

); }