import { cn } from "@/lib/utils" import { Tables } from "@/supabase/types" import { ContentType } from "@/types" import { IconChevronDown, IconChevronRight } from "@tabler/icons-react" import { FC, useRef, useState } from "react" import { DeleteFolder } from "./delete-folder" import { UpdateFolder } from "./update-folder" interface FolderProps { folder: Tables<"folders"> contentType: ContentType children: React.ReactNode onUpdateFolder: (itemId: string, folderId: string | null) => void } export const Folder: FC = ({ folder, contentType, children, onUpdateFolder }) => { const itemRef = useRef(null) const [isDragOver, setIsDragOver] = useState(false) const [isExpanded, setIsExpanded] = useState(false) const [isHovering, setIsHovering] = useState(false) const handleDragEnter = (e: React.DragEvent) => { e.preventDefault() setIsDragOver(true) } const handleDragLeave = (e: React.DragEvent) => { e.preventDefault() setIsDragOver(false) } const handleDragOver = (e: React.DragEvent) => { e.preventDefault() setIsDragOver(true) } const handleDrop = (e: React.DragEvent) => { e.preventDefault() setIsDragOver(false) const itemId = e.dataTransfer.getData("text/plain") onUpdateFolder(itemId, folder.id) } const handleKeyDown = (e: React.KeyboardEvent) => { if (e.key === "Enter") { e.stopPropagation() itemRef.current?.click() } } const handleClick = (e: React.MouseEvent) => { setIsExpanded(!isExpanded) } return (
setIsHovering(true)} onMouseLeave={() => setIsHovering(false)} >
{isExpanded ? ( ) : ( )}
{folder.name}
{isHovering && (
{ e.stopPropagation() e.preventDefault() }} className="ml-2 flex space-x-2" >
)}
{isExpanded && (
{children}
)}
) }