// @ts-nocheck import { useEffect, useRef, useState } from "react"; import clsx from "clsx"; import Masonry from "masonry-layout"; import { useAppSelector } from "@/app/store"; import FileBox from "@/components/FileBox"; import useExpiredResMap from "@/hooks/useExpiredResMap"; import Filter from "./Filter"; import Search from "./Search"; import View from "./View"; const checkFilter = (data, filter, channelMessage) => { let selected = true; const { mid, from_uid, properties } = data; const { name: nameFilter, from: fromFilter, channel: channelFilter } = filter; const name = properties ? properties.name : ""; if (fromFilter && fromFilter != from_uid) { selected = false; } if (channelFilter && channelMessage[channelFilter].findIndex((id) => id == mid) == -1) { selected = false; } if (nameFilter) { let str = ["", ...nameFilter.toLowerCase(), ""].join(".*"); let reg = new RegExp(str); if (!reg.test(name)) { selected = false; } } return selected; }; let msnry: Masonry | null; function ResourceManagement() { const { isExpired } = useExpiredResMap(); const listContainerRef = useRef(); const [filter, setFilter] = useState({}); const { message, view, channelMessage, fileMsgs } = useAppSelector((store) => { return { fileMsgs: store.fileMessage, message: store.message, channelMessage: store.channelMessage, view: store.ui.fileListView }; }); const updateFilter = (data) => { setFilter((prev) => { return { ...prev, ...data }; }); }; const handleUpdateSearch = (val) => { setFilter((prev) => { return { ...prev, name: val }; }); }; useEffect(() => { if (view == "grid" && listContainerRef) { const container = listContainerRef.current; if (!container) return; const cWidth = container.getBoundingClientRect().width - 16 * 2; const count = Math.floor(cWidth / 368); const leftWidth = cWidth % 368; const gutter = Math.max(Math.floor(leftWidth / (count - 1)), 8); // console.log("gutter", gutter, cWidth, count, leftWidth); msnry = new Masonry(container, { // options fitWidth: true, gutter, itemSelector: ".grid-box" // columnWidth: 200 }); } else { if (msnry) { msnry.destroy(); } } }, [view, filter]); // const fileMessages = fileMsgs.filter((id) => { // const data = message[id]; // if (!data) return false; // const { content, thumbnail } = data; // let url = thumbnail || content; // console.log("ff fitler", url, isExpired(url)); // return !isExpired(url); // }); return (
{fileMsgs.map((id) => { const data = message[id]; if (!data) return null; const isSelected = checkFilter(data, filter, channelMessage); // 过滤掉不存在的用户 // const fromUser = userData[data.from_uid]; if (!isSelected) return null; const { mid, thumbnail, content, created_at, from_uid, properties } = data; const { name, content_type, size } = properties ?? {}; const url = thumbnail || content; if (isExpired(url)) return null; return (
); })}
); } export default ResourceManagement;