presenton/servers/nextjs/app/custom-layout/hooks/useFileUpload.ts

39 lines
No EOL
925 B
TypeScript

import { useState, useCallback } from "react";
import { toast } from "sonner";
export const useFileUpload = () => {
const [selectedFile, setSelectedFile] = useState<File | null>(null);
const handleFileSelect = useCallback(
(event: React.ChangeEvent<HTMLInputElement>) => {
const file = event.target.files?.[0];
if (!file) return;
// Validate file type
if (!file.name.toLowerCase().endsWith(".pptx")) {
toast.error("Please select a valid PPTX file");
return;
}
// Validate file size (50MB limit)
const maxSize = 50 * 1024 * 1024; // 50MB
if (file.size > maxSize) {
toast.error("File size must be less than 50MB");
return;
}
setSelectedFile(file);
},
[]
);
const removeFile = useCallback(() => {
setSelectedFile(null);
}, []);
return {
selectedFile,
handleFileSelect,
removeFile,
};
};