All files / src/components/UploadFile/hooks useLocalUpload.tsx

0% Statements 0/28
0% Branches 0/4
0% Functions 0/10
0% Lines 0/27

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67                                                                                                                                     
import { useFileUploadContext } from "../FileUploadContext";
import { FileUploadStatus } from "../types";
 
const useLocalUpload = () => {
  const { setSnackbarFiles, onUploadProgress } = useFileUploadContext();
 
  const uploadFile = (file: File) => {
    const customFile = fileParser(file);
    setSnackbarFiles([customFile]);
 
    // Simulate a local upload with a promise
    const uploadPromise = new Promise((resolve) => {
      const totalSteps = 100;
      let currentStep = 0;
 
      const interval = setInterval(() => {
        currentStep += 2;
        onUploadProgress({ fileId: file.name, progress: currentStep });
 
        if (currentStep >= totalSteps) {
          clearInterval(interval);
          resolve(undefined);
        }
      }, 50);
    });
 
    uploadPromise;
  };
 
  const updateCustomFile = (status: FileUploadStatus, fileId: string) => {
    setSnackbarFiles((prev) =>
      prev.map((f) => {
        if (f.id === fileId) {
          return {
            ...f,
            status,
          };
        }
        return f;
      }),
    );
  };
 
  const onUploadSuccess = (fileId: string) =>
    updateCustomFile(FileUploadStatus.UPLOADED, fileId);
 
  const onUploadError = (fileId: string) =>
    updateCustomFile(FileUploadStatus.FAILED, fileId);
 
  return {
    uploadFile,
    onUploadSuccess,
    onUploadError,
  };
};
 
export default useLocalUpload;
 
const fileParser = (file: File) => ({
  id: file.name,
  name: file.name,
  size: file.size,
  status: "Uploading...",
  uploadProgress: 0,
  canBeDeleted: false,
});