import capitalize from "../../utils/capitalize"; import React, { memo, useMemo, useRef, useState } from "react"; import ContextMenu from "../ContextMenu/ContextMenu"; import classNames from "classnames"; import { getFileColor, getFileExtension } from "../../utils/files"; import { useContextMenu } from "../../hooks/contextMenu"; import mobilecheck from "../../utils/mobileCheck"; import { FileInterface } from "../../types/file"; import { useAppDispatch, useAppSelector } from "../../hooks/store"; import { setMainSelect, setMultiSelectMode, setPopupSelect, } from "../../reducers/selected"; import PlayButtonIcon from "../../icons/PlayIcon"; import dayjs from "dayjs"; import getBackendURL from "../../utils/getBackendURL"; import ClockIcon from "../../icons/ClockIcon"; interface QuickAccessItemProps { file: FileInterface; } const QuickAccessItem = memo((props: QuickAccessItemProps) => { const { file } = props; const elementSelected = useAppSelector((state) => { if (state.selected.mainSection.type !== "quick-item") return false; return state.selected.mainSection.id === file._id; }); const elementMultiSelected = useAppSelector((state) => { if (!state.selected.multiSelectMode) return false; const selected = state.selected.multiSelectMap[file._id]; return selected && selected.type === "quick-item"; }); const multiSelectMode = useAppSelector( (state) => state.selected.multiSelectMode ); const thumbnailURL = `${getBackendURL()}/file-service/thumbnail/${ file.metadata.thumbnailID }`; const hasThumbnail = file.metadata.hasThumbnail; const [thumbnailLoaded, setThumbnailLoaded] = useState(false); const dispatch = useAppDispatch(); const lastSelected = useRef(0); const { onContextMenu, closeContextMenu, onTouchStart, onTouchMove, onTouchEnd, clickStopPropagation, ...contextMenuState } = useContextMenu(); const fileExtension = getFileExtension(file.filename); const imageColor = getFileColor(file.filename); const formattedDate = useMemo( () => dayjs(file.uploadDate).format("MM/DD/YY hh:mma"), [file.uploadDate] ); const formattedFilename = capitalize(file.filename); const quickItemClick = (e: React.MouseEvent) => { const multiSelectKey = e.metaKey || e.ctrlKey; if (multiSelectMode || multiSelectKey) { dispatch( setMultiSelectMode([ { type: "quick-item", id: file._id, file: file, folder: null, }, ]) ); return; } const currentDate = Date.now(); if (!elementSelected) { // dispatch(startSetSelectedItem(file._id, true, true)); dispatch( setMainSelect({ file, id: file._id, type: "quick-item", folder: null }) ); lastSelected.current = Date.now(); return; } const isMobile = mobilecheck(); if (isMobile || currentDate - lastSelected.current < 1500) { dispatch(setPopupSelect({ type: "quick-item", file })); } lastSelected.current = Date.now(); }; return (
{contextMenuState.selected && (
)}
{hasThumbnail && (
setThumbnailLoaded(true)} /> {file.metadata.isVideo && (
)}
)} {!thumbnailLoaded && ( <>

{fileExtension}

)}

{formattedFilename}

{formattedDate}

); }); export default QuickAccessItem;