39 lines
No EOL
925 B
TypeScript
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,
|
|
};
|
|
};
|