UNPKG

@paroicms/front-media-gallery

Version:

Basic media gallery react component for Paroi CMS.

50 lines (47 loc) 1.72 kB
import { useCallback, useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; import { HiDotsHorizontal } from "react-icons/hi"; import filePlaceholder from "../../assets/images/file-placeholder.jpeg"; import pdfPlaceholder from "../../assets/images/pdf-placeholder.png"; export default function UploadingGalleryItem({ localMedia, progress, onAbort, }) { const { t } = useTranslation(); const [localUrl, setLocalUrl] = useState(); const revokeUrl = useCallback(() => { localUrl && URL.revokeObjectURL(localUrl); }, [localUrl]); useEffect(() => { if (/^image/.test(localMedia.type)) { setLocalUrl(URL.createObjectURL(localMedia)); } else { if (/pdf/.test(localMedia.type)) { setLocalUrl(pdfPlaceholder); } else { setLocalUrl(filePlaceholder); } } }, []); useEffect(() => { return () => revokeUrl(); }, [revokeUrl]); return (<div className="Media"> {onAbort && (<div className="Media-dropdown"> <button className="Media-dropdownBtn" type="button"> <HiDotsHorizontal /> </button> <div className="Media-content"> <li onClick={onAbort} onKeyUp={onAbort}> {t("frontMediaGallery.cancelUpload")} </li> </div> </div>)} <div className="Media-image"> <img src={localUrl} alt={localMedia.name}/> </div> <div className="Media-progress"> <div className="progress" style={{ width: `${progress}%` }}/> <div className="progressValue">{progress}%</div> </div> </div>); }