"use client"; import { useState, useRef } from "react"; import { cmsApi } from "@/lib/api"; interface FileUploadProps { onUploadComplete: (url: string) => void; currentUrl?: string; accept?: string; } export default function FileUpload({ onUploadComplete, currentUrl, accept = "video/*,audio/*" }: FileUploadProps) { const [isUploading, setIsUploading] = useState(false); const [dragActive, setDragActive] = useState(false); const fileInputRef = useRef(null); const handleUpload = async (file: File) => { setIsUploading(true); try { const result = await cmsApi.uploadAsset(file); onUploadComplete(result.url); } catch (err) { alert("Upload failed. Please try again."); console.error(err); } finally { setIsUploading(false); } }; const handleFileChange = (e: React.ChangeEvent) => { if (e.target.files && e.target.files[0]) { handleUpload(e.target.files[0]); } }; const handleDrag = (e: React.DragEvent) => { e.preventDefault(); e.stopPropagation(); if (e.type === "dragenter" || e.type === "dragover") { setDragActive(true); } else if (e.type === "dragleave") { setDragActive(false); } }; const handleDrop = (e: React.DragEvent) => { e.preventDefault(); e.stopPropagation(); setDragActive(false); if (e.dataTransfer.files && e.dataTransfer.files[0]) { handleUpload(e.dataTransfer.files[0]); } }; return (
fileInputRef.current?.click()} > {isUploading ? (
Uploading Asset...
) : ( <>
📁

Drag & drop or browse

Native video, audio files supported

)}
{currentUrl && !isUploading && (
{currentUrl}
)}
); }