import { useEffect, useState } from 'react'; import PropTypes from 'prop-types'; import { Utils } from '../../../utils/utils'; import { seafileAPI } from '../../../utils/seafile-api'; import toaster from '../../toast'; import { MetadataDetailsProvider } from '../../../metadata'; import { Repo } from '../../../models'; import { MetadataStatusProvider } from '../../../hooks'; import Details from './details'; import LibDetail from '../../dirent-detail/lib-details'; import './index.css'; const SearchedItemDetails = ({ repoID, path, dirent }) => { const [repoInfo, setRepoInfo] = useState(null); const [direntDetail, setDirentDetail] = useState(null); useEffect(() => { seafileAPI.getRepoInfo(repoID).then(res => { const repo = new Repo(res.data); setRepoInfo(repo); }).catch(error => { const errMessage = Utils.getErrorMsg(error); toaster.danger(errMessage); }); }, [repoID]); useEffect(() => { const controller = new AbortController(); const fetchData = async () => { if (!repoID || !path || !dirent || dirent.isLib) { setDirentDetail(null); return; } try { const res = await seafileAPI[dirent.type === 'file' ? 'getFileInfo' : 'getDirInfo']( repoID, path, { signal: controller.signal } ); setDirentDetail(res.data); } catch (error) { if (error.name !== 'AbortError') { const errMessage = Utils.getErrorMsg(error); toaster.danger(errMessage); } } }; const timer = setTimeout(fetchData, 200); return () => { controller.abort(); clearTimeout(timer); }; }, [repoID, repoInfo, path, dirent]); if (!repoInfo) return; if (dirent.isLib) { return (