"use client"; import { useEffect, useState } from "react"; import { useSearchParams } from "next/navigation"; import { useAuth } from "@/src/app/providers/auth-provider"; import { useDocumentManagementStore } from "@/features/document-management/model/store"; import { useFolderManagementStore } from "@/features/folder-management/model/store"; import { useDocumentStore } from "@/entities/document/model/store"; import { useFolderStore } from "@/entities/folder/model/store"; import { Spinner } from "@/shared/ui/spinner"; import { Header, CreateInput, FolderView, RootView } from "@/widgets/documents"; import { Button } from "@/shared/ui/button"; import { Plus, Folder } from "lucide-react"; import { DocumentsPageSkeleton } from "@/shared/ui/skeleton"; const DocumentsPage = () => { const { user } = useAuth(); const searchParams = useSearchParams(); const currentFolderId = searchParams?.get('folder'); // Use management stores for operations const documentManagement = useDocumentManagementStore(); const folderManagement = useFolderManagementStore(); // Use entity stores for state const documentStore = useDocumentStore(); const folderStore = useFolderStore(); const documents = documentStore.documents; const folders = folderStore.folders; const isLoading = documentStore.isLoading || folderStore.isLoading; // Destructure specific functions const { fetchDocuments, createDocument } = documentManagement; const { fetchFolders, createFolder } = folderManagement; const [isCreatingFolder, setIsCreatingFolder] = useState(false); const [newFolderName, setNewFolderName] = useState(''); const [refreshKey, setRefreshKey] = useState(0); // Fetch initial data useEffect(() => { fetchDocuments(); fetchFolders(); }, []); // eslint-disable-line react-hooks/exhaustive-deps const handleCreateFolder = async () => { if (!newFolderName.trim()) return; const newFolder = await createFolder(newFolderName, currentFolderId); if (newFolder) { setNewFolderName(''); setIsCreatingFolder(false); // Refresh data to show the new folder fetchFolders(); if (currentFolderId) { setRefreshKey(prev => prev + 1); } } }; const handleCreateDocumentFromHeader = async () => { await createDocument(currentFolderId); if (currentFolderId) { setRefreshKey(prev => prev + 1); } }; const handleNavigateToFolder = (folderId: string) => { window.history.pushState({}, '', `/documents?folder=${folderId}`); window.dispatchEvent(new Event('popstate')); }; const handleGoBack = () => { window.history.back(); }; const handleFolderDeleted = () => { // Refresh folders list fetchFolders(); fetchDocuments(); // Force refresh if we're in a folder view if (currentFolderId) { setRefreshKey(prev => prev + 1); } }; // Show loading skeleton while data is being fetched if (isLoading) { return (
setIsCreatingFolder(true)} onCreateDocument={handleCreateDocumentFromHeader} />
); } return (
{/* Header */}
setIsCreatingFolder(true)} onCreateDocument={handleCreateDocumentFromHeader} /> {/* Create folder input - shown when creating from header */} {isCreatingFolder && (
{ setIsCreatingFolder(false); setNewFolderName(''); }} />
)} {/* Main content - Desktop layout */}
{currentFolderId ? ( ) : ( setIsCreatingFolder(true)} onNavigateToFolder={handleNavigateToFolder} onFolderDeleted={handleFolderDeleted} variant="desktop" /> )}
{/* Mobile layout */}
{/* Create folder input */} {isCreatingFolder && ( { setIsCreatingFolder(false); setNewFolderName(''); }} /> )} {/* Content */} {currentFolderId ? ( ) : ( setIsCreatingFolder(true)} onNavigateToFolder={handleNavigateToFolder} onFolderDeleted={handleFolderDeleted} variant="mobile" /> )}
); }; export default DocumentsPage;