kenny
Initial commit
a2b51e3
import { useState } from "react";
export default function FileUpload({
onUploadSuccess,
}: {
onUploadSuccess: () => void;
}) {
const [uploading, setUploading] = useState(false);
const handleFileUpload = async (e: React.ChangeEvent<HTMLInputElement>) => {
const file = e.target.files?.[0];
if (!file) return;
setUploading(true);
const formData = new FormData();
formData.append("file", file);
try {
const response = await fetch(
`${process.env.NEXT_PUBLIC_API_URL}/upload`,
{
method: "POST",
body: formData,
}
);
if (!response.ok) throw new Error("Upload failed");
onUploadSuccess();
} catch (error) {
console.error("Upload error:", error);
} finally {
setUploading(false);
}
};
return (
<div className="w-full max-w-md">
<label className="flex flex-col items-center p-4 border-2 border-dashed rounded-lg cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-900">
<span className="text-sm mb-2">
{uploading ? "Uploading..." : "Upload PDF"}
</span>
<input
type="file"
className="hidden"
accept=".pdf"
onChange={handleFileUpload}
disabled={uploading}
/>
</label>
</div>
);
}