packages/antd/src/hooks/useFileUploadState/index.ts
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;
}
});
};