import { Avatar, Box, Skeleton, Tooltip } from "@mui/material"; import { BlockIconContainer, BottomParent, IconsBox, NameContainer, VideoCard, VideoCardName, VideoCardTitle, FileContainer, VideoUploadDate, } from "./FileList-styles.tsx"; import EditIcon from "@mui/icons-material/Edit"; import { blockUser, setEditFile, Video, } from "../../state/features/fileSlice.ts"; import BlockIcon from "@mui/icons-material/Block"; import AttachFileIcon from "@mui/icons-material/AttachFile"; import { formatBytes } from "../FileContent/FileContent.tsx"; import { formatDate } from "../../utils/time.ts"; import React, { useState } from "react"; import { useDispatch, useSelector } from "react-redux"; import { RootState } from "../../state/store.ts"; import { useNavigate } from "react-router-dom"; import { getIconsFromObject } from "../../constants/Categories/CategoryFunctions.ts"; interface FileListProps { files: Video[]; } export const FileList = ({ files }: FileListProps) => { const hashMapFiles = useSelector( (state: RootState) => state.file.hashMapFiles ); const [showIcons, setShowIcons] = useState(null); const username = useSelector((state: RootState) => state.auth?.user?.name); const dispatch = useDispatch(); const navigate = useNavigate(); const blockUserFunc = async (user: string) => { if (user === "Q-Share") return; try { const response = await qortalRequest({ action: "ADD_LIST_ITEMS", list_name: "blockedNames", items: [user], }); if (response === true) { dispatch(blockUser(user)); } } catch (error) {} }; return ( {files.map((file: any, index: number) => { const existingFile = hashMapFiles[file?.id]; let hasHash = false; let fileObj = file; if (existingFile) { fileObj = existingFile; hasHash = true; } const icon = getIconsFromObject(fileObj); return ( setShowIcons(fileObj.id)} onMouseLeave={() => setShowIcons(null)} > {hasHash ? ( <> {fileObj?.user === username && ( { dispatch(setEditFile(fileObj)); }} /> )} { blockUserFunc(fileObj?.user); }} /> { navigate(`/share/${fileObj?.user}/${fileObj?.id}`); }} sx={{ height: "100%", width: "100%", display: "flex", gap: "25px", flexDirection: "row", justifyContent: "space-between", }} > {icon ? ( ) : ( )} {formatBytes( fileObj?.files.reduce( (acc, cur) => acc + (cur?.size || 0), 0 ) )} {fileObj.title} { e.stopPropagation(); navigate(`/channel/${fileObj?.user}`); }} > {fileObj?.user} {fileObj?.created && ( {formatDate(fileObj.created)} )} ) : ( )} ); })} ); };