'use client'; import { useCallback, useState } from 'react'; import { Package as PackageIcon, Plus } from 'lucide-react'; import { PageHeader } from '@/components/page-header'; import { Button } from '@/components/ui/button'; import type { Package } from '@/types'; import { PackageDialog } from './components/PackageDialog'; import { PackageTable } from './components/PackageTable'; import { usePackageColumns } from './components/PackageColumns'; import { usePackageFilters } from './hooks/usePackageFilters'; import { usePackageForm } from './hooks/usePackageForm'; import { useDeletePackageMutation, usePackagesQuery, useProjectOptionsQuery, } from './hooks/usePackageQueries'; export default function PackagePage() { const [isDialogOpen, setIsDialogOpen] = useState(false); const { skip, setSkip, limit, setLimit } = usePackageFilters(); const packagesQuery = usePackagesQuery({ skip, limit }); const projectsQuery = useProjectOptionsQuery(); const deletePackageMutation = useDeletePackageMutation(); const packageForm = usePackageForm({ onSaved: () => setIsDialogOpen(false), }); const { register, onSubmit, openCreate: prepareCreatePackage, openEdit: prepareEditPackage, resetForm, packageId, projectId, setProjectId, errors, isSubmitted, canSubmit, isSaving, } = packageForm; const openCreate = useCallback(() => { prepareCreatePackage(); setIsDialogOpen(true); }, [prepareCreatePackage]); const openEdit = useCallback( (pkg: Package) => { prepareEditPackage(pkg); setIsDialogOpen(true); }, [prepareEditPackage], ); const handleDialogOpenChange = useCallback( (open: boolean) => { setIsDialogOpen(open); if (!open) { resetForm(); } }, [resetForm], ); const deletePackage = useCallback( (pkg: Package) => { if (!confirm(`Are you sure you want to delete package "${pkg.name}"?`)) { return; } deletePackageMutation.mutate(pkg); }, [deletePackageMutation], ); const projects = projectsQuery.data?.items ?? []; const packages = packagesQuery.data?.items ?? []; const total = packagesQuery.data?.totalItems ?? 0; const columns = usePackageColumns(projects); return ( <>
Add New Package } />
); }