import BlockIcon from "@mui/icons-material/Block"; import EditIcon from "@mui/icons-material/Edit"; import { Avatar, Box, Skeleton, useTheme } from "@mui/material"; import React, { useMemo, useState } from "react"; import { useDispatch, useSelector } from "react-redux"; import { useNavigate } from "react-router-dom"; import QORTicon from "../../assets/icons/CoinIcons/qort.png"; import { BountyDisplay } from "../../components/common/BountyDisplay.tsx"; import { IssueIcon, IssueIcons } from "../../components/common/IssueIcon.tsx"; import { getIconsFromObject, getnamesFromObject, } from "../../constants/Categories/CategoryFunctions.ts"; import { fontSizeExLarge } from "../../constants/Misc.ts"; import { blockUser, Issue, setEditFile, } from "../../state/features/fileSlice.ts"; import { RootState } from "../../state/store.ts"; import { BountyData } from "../../utils/qortalRequests.ts"; import { formatDate } from "../../utils/time.ts"; import { BlockIconContainer, IconsBox, IssueCard, IssueContainer, NameAndDateContainer, VideoCardName, VideoCardTitle, VideoUploadDate, } from "./IssueList-styles.tsx"; interface FileListProps { issues: Issue[]; } export const IssueList = ({ issues }: FileListProps) => { const hashMapIssues = useSelector( (state: RootState) => state.file.hashMapFiles ); const theme = useTheme(); 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-Support") return; try { const response = await qortalRequest({ action: "ADD_LIST_ITEMS", list_name: "blockedNames", items: [user], }); if (response === true) { dispatch(blockUser(user)); } } catch (error) { console.log(error); } }; const filteredIssues = useMemo(() => { return issues.filter((issue: any) => hashMapIssues[issue.id]?.isValid); }, [issues, hashMapIssues]); return ( {filteredIssues.map((issue: any, index: number) => { const existingFile = hashMapIssues[issue?.id]; let hasHash = false; let issueObj = issue; if (existingFile) { issueObj = existingFile; hasHash = true; } const bountyData: BountyData = { ...issueObj.bountyData, ...issue.bountyData, }; return ( setShowIcons(issueObj.id)} onMouseLeave={() => setShowIcons(null)} > {hasHash ? ( <> {issueObj?.user === username && ( { dispatch(setEditFile(issueObj)); }} > Edit Issue )} {issueObj?.user !== username && ( { blockUserFunc(issueObj?.user); }} > Block User )} { navigate(`/issue/${issueObj?.user}/${issueObj?.id}`); }} sx={{ height: "100%", width: "100%", display: "flex", flexDirection: "row", justifyContent: "space-between", }} >
{issueObj.title}
{issue?.feeData?.isPaid && ( )} { e.stopPropagation(); navigate(`/channel/${issueObj?.user}`); }} >
{issueObj?.user}
{issueObj?.created && ( {formatDate(issueObj.created)} )}
) : ( )}
); })}
); };