import { Replay, Stop } from '@mui/icons-material';
import HighlightOff from '@mui/icons-material/HighlightOff';
import { Avatar, IconButton } from '@mui/material';
import Box from '@mui/material/Box';
import CircularProgress from '@mui/material/CircularProgress';
import Grid from '@mui/material/Grid';
import { useRetry } from '@rpldy/retry-hooks';
import { PreviewComponentProps } from '@rpldy/upload-preview/types';
import {
useAbortItem,
useItemAbortListener,
useItemErrorListener,
useItemFinishListener,
useItemProgressListener,
} from '@rpldy/uploady';
import React, { memo, useCallback, useState } from 'react';
import PhotoPreview from './PhotoPreview';
const STATUS = {
PROGRESS: 'PROGRESS',
DONE: 'DONE',
ABORTED: 'ABORTED',
ERROR: 'ERROR',
};
const DeleteIcon = ({ onClick }: { onClick: () => void }) => (
);
const CircularProgressWithButtons = (props: any) => {
const { value, height, itemState, onAbortItem, onDeleteItem, onRetryItem } =
props;
return (
{itemState === STATUS.ERROR || itemState === STATUS.ABORTED ? (
) : (
)}
);
};
const PhotoUploadQueue = memo((props: PreviewComponentProps) => {
const [progress, setProgress] = useState(0);
const [itemState, setItemState] = useState('');
const [imageId, setImageId] = useState('');
const [isDeleted, setIsDeleted] = useState(false);
const retry = useRetry();
const abortItem = useAbortItem();
const {
id,
name,
url,
previewHeight,
previewPadding,
imageIdList,
deletedImageIdList,
handleErrorImage,
} = props;
const onAbortItem = useCallback(() => {
abortItem(id);
}, [id, abortItem]);
const onDeleteItem = () => {
setIsDeleted(true);
if (imageId) {
handleErrorImage(imageId);
}
};
const onRetryItem = () => {
retry(id);
};
useItemProgressListener((item) => {
if (item.completed > progress) {
setProgress(item.completed);
setItemState(item.completed === 100 ? STATUS.DONE : STATUS.PROGRESS);
}
}, id);
useItemAbortListener(() => {
setItemState(STATUS.ABORTED);
}, id);
useItemErrorListener((item) => {
if (item.uploadResponse?.data?.data?.id) {
setImageId(item.uploadResponse.data.data.id);
}
setItemState(STATUS.ERROR);
}, id);
useItemFinishListener((item) => {
setImageId(item.uploadResponse.data.data.id);
}, id);
if (
(itemState === STATUS.DONE && imageIdList.includes(imageId)) ||
deletedImageIdList.includes(imageId) ||
isDeleted
) {
return null;
}
return (
);
});
export default PhotoUploadQueue;