pankod/refine

View on GitHub
packages/antd/src/hooks/useFileUploadState/index.ts

Summary

Maintainability
A
0 mins
Test Coverage
import { useCallback, useMemo, useState } from "react";
import { UploadChangeParam } from "antd/lib/upload";

export type UseFileUploadStateType = () => {
  isLoading: boolean;
  onChange: (info: UploadChangeParam) => void;
};

export const useFileUploadState: UseFileUploadStateType = () => {
  const [isLoading, setIsloading] = useState(false);

  const onChange = useCallback((info: UploadChangeParam) => {
    const fileListLoadings = mapStatusToLoading(info.fileList);

    if (fileListLoadings.includes(true)) {
      setIsloading(true);
    } else {
      setIsloading(false);
    }
  }, []);

  return useMemo(() => ({ isLoading, onChange }), [isLoading]);
};

const mapStatusToLoading = (files: UploadChangeParam["fileList"]) => {
  return files.map((file) => {
    switch (file.status) {
      case "uploading":
        return true;
      default:
        return false;
    }
  });
};