'use client'; import { useCallback, useState } from 'react'; import { Layers, Plus } from 'lucide-react'; import { PageHeader } from '@/components/page-header'; import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, } from '@/components/ui/alert-dialog'; import { Button } from '@/components/ui/button'; import type { Project } from '@/types'; import { ProjectDialog } from './components/ProjectDialog'; import { ProjectTable } from './components/ProjectTable'; import { useProjectColumns } from './components/ProjectColumns'; import { useProjectFilters } from './hooks/useProjectFilters'; import { useProjectForm } from './hooks/useProjectForm'; import { useDeleteProjectMutation, useProjectsQuery, } from './hooks/useProjectQueries'; export default function ProjectPage() { const [isDialogOpen, setIsDialogOpen] = useState(false); const [projectToDelete, setProjectToDelete] = useState(null); const { skip, setSkip, limit, setLimit } = useProjectFilters(); const projectsQuery = useProjectsQuery({ skip, limit }); const deleteProjectMutation = useDeleteProjectMutation(); const projectForm = useProjectForm({ onSaved: () => setIsDialogOpen(false), }); const { register, onSubmit, openCreate: prepareCreateProject, openEdit: prepareEditProject, resetForm, projectId, errors, isSubmitted, canSubmit, isSaving, } = projectForm; const openCreate = useCallback(() => { prepareCreateProject(); setIsDialogOpen(true); }, [prepareCreateProject]); const openEdit = useCallback( (project: Project) => { prepareEditProject(project); setIsDialogOpen(true); }, [prepareEditProject], ); const handleDialogOpenChange = useCallback( (open: boolean) => { setIsDialogOpen(open); if (!open) { resetForm(); } }, [resetForm], ); const deleteProject = useCallback( (project: Project) => { setProjectToDelete(project); }, [], ); const handleDeleteDialogOpenChange = useCallback((open: boolean) => { if (!open) { setProjectToDelete(null); } }, []); const confirmDeleteProject = useCallback(() => { if (!projectToDelete) return; deleteProjectMutation.mutate(projectToDelete, { onSettled: () => setProjectToDelete(null), }); }, [deleteProjectMutation, projectToDelete]); const columns = useProjectColumns(); const projects = projectsQuery.data?.items ?? []; const total = projectsQuery.data?.totalItems ?? 0; return ( <>
Add Project } />
Delete project? This will permanently delete{' '} {projectToDelete?.name} . This action cannot be undone. Cancel Delete ); }