"use client"; import { useState, useEffect } from 'react'; import DashboardHeader from './dashboard-header'; import StatsOverview from './stats-overview'; import ProjectGrid from './project-grid'; import ProjectGridSkeleton from './project-grid-skeleton'; import { ProjectFormSheet } from '@/components/project-form/project-form-sheet'; import { getProjects } from '@/lib/projectsService'; import { Project } from '@/types/project'; import { Skeleton } from '@/components/ui/skeleton'; export default function ProjectDashboard() { const [viewMode, setViewMode] = useState<'grid' | 'list'>('grid'); const [searchTerm, setSearchTerm] = useState(''); const [projects, setProjects] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [isCreateSheetOpen, setIsCreateSheetOpen] = useState(false); useEffect(() => { async function loadProjects() { try { setLoading(true); const data = await getProjects(); setProjects(data); setError(null); } catch (err) { console.error('Error loading projects:', err); setError('Error al cargar los proyectos'); } finally { setLoading(false); } } loadProjects(); }, []); // Handler para cuando se crea un proyecto const handleProjectCreated = (newProject: Project) => { setProjects(prevProjects => [newProject, ...prevProjects]); }; // Handler para cuando se actualiza un proyecto const handleProjectUpdated = (updatedProject: Project) => { setProjects(prevProjects => prevProjects.map(p => p.id === updatedProject.id ? updatedProject : p) ); }; // Handler para cuando se elimina un proyecto const handleProjectDeleted = (projectId: number) => { setProjects(prevProjects => prevProjects.filter(p => p.id !== projectId)); }; const filteredProjects = projects.filter(project => project.name.toLowerCase().includes(searchTerm.toLowerCase()) || project.client.toLowerCase().includes(searchTerm.toLowerCase()) || project.ref.toLowerCase().includes(searchTerm.toLowerCase()) ); if (loading) { return (
{}} viewMode={viewMode} onViewModeChange={setViewMode} onCreateProject={() => {}} />
{/* Stats skeleton */}
{Array.from({ length: 4 }).map((_, i) => (
))}
{/* Projects skeleton */}
); } if (error) { return (

{error}

); } return (
setIsCreateSheetOpen(true)} />
{/* Sheet de creación de proyecto */}
); }