"use client" import { useState, useCallback, useRef, type DragEvent } from "react" import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger, } from "@/components/ui/dialog" import { Button } from "@/components/ui/button" import { Progress } from "@/components/ui/progress" import { useUpload } from "@/hooks/use-upload" import { UploadIcon } from "lucide-react" interface UploadDialogProps { onComplete?: () => void children?: React.ReactNode } export function UploadDialog({ onComplete, children }: UploadDialogProps) { const [open, setOpen] = useState(false) const [isDragging, setIsDragging] = useState(false) const inputRef = useRef(null) const { uploads, isUploading, upload } = useUpload(() => { onComplete?.() setOpen(false) }) const handleFiles = useCallback( (files: FileList | null) => { if (!files || files.length === 0) return upload(Array.from(files)) }, [upload], ) const onDrop = useCallback( (e: DragEvent) => { e.preventDefault() setIsDragging(false) handleFiles(e.dataTransfer.files) }, [handleFiles], ) const onDragOver = useCallback((e: DragEvent) => { e.preventDefault() setIsDragging(true) }, []) const onDragLeave = useCallback(() => setIsDragging(false), []) return ( {children ?? ( )} Upload Photos
inputRef.current?.click()} className={`flex cursor-pointer flex-col items-center justify-center gap-2 rounded-lg border-2 border-dashed p-8 transition-colors ${isDragging ? "border-primary bg-primary/5" : "border-muted-foreground/25 hover:border-muted-foreground/50"}`} >

Drag & drop files here, or click to browse

handleFiles(e.target.files)} />
{uploads.length > 0 && (
{uploads.map((u) => (
{u.file}
))}
)} {isUploading && (

Uploading...

)}
) }