import {AnimatePresence, m} from 'framer-motion'; import React, {useEffect, useRef, useState} from 'react'; import {ProgressCircle} from '@common/ui/progress/progress-circle'; import {useShareableLinkPage} from '../../queries/use-shareable-link-page'; import {FilePreviewDialog} from '@common/uploads/preview/file-preview-dialog'; import {DialogTrigger} from '@common/ui/overlays/dialog/dialog-trigger'; import clsx from 'clsx'; import {DriveEntry} from '../../../files/drive-entry'; import {FolderPreviewFileGrid} from './folder-preview-file-grid'; import {useLinkPageStore} from '../link-page-store'; import {FolderPreviewFileTable} from './folder-preview-file-table'; import {useNavigateToSubfolder} from './use-navigate-to-subfolder'; import {useLocation} from 'react-router-dom'; import {opacityAnimation} from '@common/ui/animation/opacity-animation'; import {AdHost} from '@common/admin/ads/ad-host'; interface FolderPreviewChildrenProps { className?: string; } export function FolderPreviewFileView({className}: FolderPreviewChildrenProps) { const {pathname} = useLocation(); const navigateToSubfolder = useNavigateToSubfolder(); const [activePreviewIndex, setActivePreviewIndex] = useState(); const viewMode = useLinkPageStore(s => s.viewMode); const sentinelRef = useRef(null); const { link, entries, isFetchingNextPage, hasNextPage, fetchNextPage, isPlaceholderData, } = useShareableLinkPage(); // close preview modal on back/forward navigation useEffect(() => { setActivePreviewIndex(undefined); }, [pathname]); useEffect(() => { const sentinelEl = sentinelRef.current; if (!sentinelEl) return; const observer = new IntersectionObserver(([entry]) => { if (entry.isIntersecting && hasNextPage) { fetchNextPage(); } }); observer.observe(sentinelEl); return () => { observer.unobserve(sentinelEl); }; }, [hasNextPage, fetchNextPage]); if (!link || isPlaceholderData) { return (
); } const handlePreview = (entry: DriveEntry, index: number) => { if (entry.type === 'folder') { navigateToSubfolder(entry.hash); } else { setActivePreviewIndex(index); } }; const folderEntries = entries || []; return ( <>
{viewMode === 'grid' ? ( ) : ( )} {isFetchingNextPage && ( )}
setActivePreviewIndex(undefined)} > ); }