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;