import UploadFile from "../../components/Modals/ManageWorkspace/Documents/UploadFile"; import PreLoader from "@/components/Preloader"; import { memo, useEffect, useState } from "react"; import FolderRow from "../../components/Modals/ManageWorkspace/Documents/Directory/FileRow"; import System from "@/models/system"; import { MagnifyingGlass, Plus, Trash } from "@phosphor-icons/react"; import Document from "@/models/document"; import showToast from "@/utils/toast"; import FolderSelectionPopup from "../../components/Modals/ManageWorkspace/Documents/Directory/FolderSelectionPopup"; import MoveToFolderIcon from "../../components/Modals/ManageWorkspace/Documents/Directory/MoveToFolderIcon"; import { useModal } from "@/hooks/useModal"; import NewFolderModal from "../../components/Modals/ManageWorkspace/Documents/Directory/NewFolderModal"; import debounce from "lodash.debounce"; import { filterFileSearchResults } from "../../components/Modals/ManageWorkspace/Documents/Directory/utils"; // import ContextMenu from "../../components/Modals/ManageWorkspace/Documents/Directory/ContextMenu"; import { Tooltip } from "react-tooltip"; import { safeJsonParse } from "@/utils/request"; import { data } from "autoprefixer"; function Directory({ files, setFiles, loading, setLoading, workspace, fetchKeys, selectedItems, setSelectedItems, setHighlightWorkspace, moveToWorkspace, setLoadingMessage, loadingMessage, }) { const [amountSelected, setAmountSelected] = useState(0); const [showFolderSelection, setShowFolderSelection] = useState(false); const [searchTerm, setSearchTerm] = useState(""); const [dataTo, setFDataTo] = useState([]); const [show, setShow] = useState(false); const { isOpen: isFolderModalOpen, openModal: openFolderModal, closeModal: closeFolderModal, } = useModal(); // const [contextMenu, setContextMenu] = useState({ // visible: false, // x: 0, // y: 0, // }); useEffect(() => { async function fetchUsers() { const nodata = await System.localFiles(); const em0 = nodata.items[0].items const em1 = nodata.items[1].items const em2 = nodata.items[2].items const em = [...em0,...em1,...em2] setFDataTo(em) console.log(2222,nodata); } fetchUsers(); }, []); const deleteFiles = async (event) => { event.stopPropagation(); if ( !window.confirm( "Are you sure you want to delete these files and folders?\nThis will remove the files from the system and remove them from any existing workspaces automatically.\nThis action is not reversible." ) ) { return false; } try { const toRemove = []; const foldersToRemove = []; for (const itemId of Object.keys(selectedItems)) { for (const folder of files.items) { const foundItem = folder.items.find((file) => file.id === itemId); if (foundItem) { toRemove.push(`${folder.name}/${foundItem.name}`); break; } } } for (const folder of files.items) { if (folder.name === "custom-documents") { continue; } if (isSelected(folder.id, folder)) { foldersToRemove.push(folder.name); } } setLoading(true); setLoadingMessage( `Removing ${toRemove.length} documents and ${foldersToRemove.length} folders. Please wait.` ); await System.deleteDocuments(toRemove); for (const folderName of foldersToRemove) { await System.deleteFolder(folderName); } await fetchKeys(true); setSelectedItems({}); } catch (error) { console.error("Failed to delete files and folders:", error); } finally { setLoading(false); setSelectedItems({}); } }; const toggleSelection = (item) => { setSelectedItems((prevSelectedItems) => { const newSelectedItems = { ...prevSelectedItems }; if (item.type === "folder") { // select all files in the folder if (newSelectedItems[item.name]) { delete newSelectedItems[item.name]; item.items.forEach((file) => delete newSelectedItems[file.id]); } else { newSelectedItems[item.name] = true; item.items.forEach((file) => (newSelectedItems[file.id] = true)); } } else { // single file selections if (newSelectedItems[item.id]) { delete newSelectedItems[item.id]; } else { newSelectedItems[item.id] = true; } } return newSelectedItems; }); }; // check if item is selected based on selectedItems state const isSelected = (id, item) => { if (item && item.type === "folder") { if (!selectedItems[item.name]) { return false; } return item.items.every((file) => selectedItems[file.id]); } return !!selectedItems[id]; }; const moveToFolder = async (folder) => { const toMove = []; for (const itemId of Object.keys(selectedItems)) { for (const currentFolder of files.items) { const foundItem = currentFolder.items.find( (file) => file.id === itemId ); if (foundItem) { toMove.push({ ...foundItem, folderName: currentFolder.name }); break; } } } setLoading(true); setLoadingMessage(`Moving ${toMove.length} documents. Please wait.`); const { success, message } = await Document.moveToFolder( toMove, folder.name ); if (!success) { showToast(`Error moving files: ${message}`, "error"); setLoading(false); return; } if (success && message) { // show info if some files were not moved due to being embedded showToast(message, "info"); } else { showToast(`Successfully moved ${toMove.length} documents.`, "success"); } await fetchKeys(true); setSelectedItems({}); setLoading(false); }; const handleSearch = debounce((e) => { const searchValue = e.target.value; setSearchTerm(searchValue); }, 500); const filteredFiles =filterFileSearchResults(files, searchTerm) // console.log(114545,filteredFiles); const handleContextMenu = (event) => { event.preventDefault(); // setContextMenu({ visible: true, x: event.clientX, y: event.clientY }); }; const closeContextMenu = () => { // setContextMenu({ visible: false, x: 0, y: 0 }); }; // 点击显示隐藏 const bindUrl = () =>{ setShow(!show) console.log(show); } // 返回首页 const bindHome = () =>{ window.location = '/' } return ( <>
Name
{loadingMessage}
暂无文件
{data.title}
Date: {data.date}
Type: {data.extension}