import QuickAccess from "../QuickAccess/QuickAccess"; import Folders from "../Folders/Folders"; import { useFiles, useQuickFiles, useUploader } from "../../hooks/files"; import { useInfiniteScroll } from "../../hooks/infiniteScroll"; import Files from "../Files/Files"; import { memo, useCallback, useEffect, useRef, useState } from "react"; import Spinner from "../Spinner/Spinner"; import { useAppDispatch, useAppSelector } from "../../hooks/store"; import { useParams } from "react-router-dom"; import classNames from "classnames"; import { useDragAndDrop } from "../../hooks/utils"; import MultiSelectBar from "../MultiSelectBar/MultiSelectBar"; import { useFolders } from "../../hooks/folders"; const DataForm = memo( ({ scrollDivRef }: { scrollDivRef: React.RefObject }) => { const { fetchNextPage: filesFetchNextPage, isFetchingNextPage, data: fileList, isLoading: isLoadingFiles, } = useFiles(); const { isLoading: isLoadingFolders } = useFolders(); const { isLoading: isLoadingQuickItems } = useQuickFiles(); const dispatch = useAppDispatch(); const { sentinelRef, reachedIntersect } = useInfiniteScroll(); const [initialLoad, setInitialLoad] = useState(true); const params = useParams(); const { uploadFiles } = useUploader(); const navigationMap = useAppSelector((state) => { return state.selected.navigationMap[window.location.pathname]; }); const isLoading = isLoadingFiles || isLoadingFolders || isLoadingQuickItems; useEffect(() => { if (initialLoad) { setInitialLoad(false); return; } else if (!fileList) { return; } if (reachedIntersect && !isFetchingNextPage) { filesFetchNextPage(); } }, [reachedIntersect, initialLoad, isFetchingNextPage]); useEffect(() => { if (!isLoading && navigationMap) { scrollDivRef.current?.scrollTo(0, navigationMap.scrollTop); } else if (!isLoading) { scrollDivRef.current?.scrollTo(0, 0); } }, [isLoading, navigationMap, window.location.pathname]); const addFile = useCallback( (files: FileList) => { uploadFiles(files); }, [params.id] ); const { isDraggingFile, onDragDropEvent, onDragEvent, onDragEnterEvent, stopDrag, } = useDragAndDrop(addFile); return (
{!isLoading && (
)} {isLoading && (
)} {/* @ts-ignore */}
{/* TODO: Change this spinner name */} {isFetchingNextPage && (
)}
); } ); export default DataForm;