import { useEffect, useMemo, useState } from "react"; import { useAppDispatch, useAppSelector } from "../../hooks/store"; import { downloadFileAPI } from "../../api/filesAPI"; import CloseIcon from "../../icons/CloseIcon"; import ActionsIcon from "../../icons/ActionsIcon"; import { useContextMenu } from "../../hooks/contextMenu"; import ContextMenu from "../ContextMenu/ContextMenu"; import { resetPopupSelect } from "../../reducers/selected"; import { getFileColor, getFileExtension } from "../../utils/files"; import bytes from "bytes"; import dayjs from "dayjs"; import LockIcon from "../../icons/LockIcon"; import OneIcon from "../../icons/OneIcon"; import PublicIcon from "../../icons/PublicIcon"; import StorageIcon from "../../icons/StorageIcon"; import CalendarIcon from "../../icons/CalendarIcon"; import DownloadIcon from "../../icons/DownloadIcon"; import { toast } from "react-toastify"; const FileInfoPopup = () => { const file = useAppSelector((state) => state.selected.popupModal.file)!; const dispatch = useAppDispatch(); const { onContextMenu, closeContextMenu, onTouchStart, onTouchMove, onTouchEnd, clickStopPropagation, ...contextMenuState } = useContextMenu(); const [animate, setAnimate] = useState(false); const fileExtension = getFileExtension(file.filename, 3); const imageColor = getFileColor(file.filename); const formattedDate = useMemo( () => dayjs(file.uploadDate).format("MM/DD/YYYY hh:mma"), [file.uploadDate] ); const fileSize = bytes(file.metadata.size); const closePhotoViewer = () => { setAnimate(false); setTimeout(() => dispatch(resetPopupSelect()), 200); }; const downloadItem = () => { downloadFileAPI(file._id); }; const outterWrapperClick = (e: React.MouseEvent) => { if ( (e.target as HTMLDivElement).id !== "outer-wrapper" || contextMenuState.selected ) { return; } setAnimate(false); setTimeout(() => dispatch(resetPopupSelect()), 200); }; const permissionText = (() => { if (file.metadata.linkType === "one") { return `Temporary`; } else if (file.metadata.linkType === "public") { return "Public"; } else { return "Private"; } })(); const copyName = () => { navigator.clipboard.writeText(file.filename); toast.success("Filename Copied"); }; useEffect(() => { setAnimate(true); }, []); useEffect(() => { const handleBack = () => { dispatch(resetPopupSelect()); }; window.addEventListener("popstate", handleBack); return () => { window.removeEventListener("popstate", handleBack); }; }, []); return (
{contextMenuState.selected && (
)}
{fileExtension}

{file.filename}

File details

{!file.metadata.linkType && } {file.metadata.linkType === "one" && ( )} {file.metadata.linkType === "public" && ( )}

{permissionText}

{fileSize}

{formattedDate}

); }; export default FileInfoPopup;