'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
}
/>
>
);
}