import { DataTable } from '@/components/data-table'; import { Head } from '@inertiajs/react'; import { Sparkles, Trash2 } from 'lucide-react'; import { DeleteConfirmation } from '@/components/modal/delete-confirmation'; import { Button } from '@/components/ui/button'; import { Card, CardContent } from '@/components/ui/card'; import type { Payroll } from '@/types'; import type { PaginatedData } from '@/types/pagination'; import { PayrollCard } from '@/components/cards/payroll-card'; import { usePermission } from '@/hooks/use-permission'; import { usePayrollIndex } from './hooks/use-payroll-index'; import { getColumns } from './partials/columns'; import { PayrollFormModal } from './partials/payroll-form-modal'; export default function PayrollIndex({ payrolls, currentMonthPayrolls, }: { payrolls: PaginatedData; currentMonthPayrolls: Payroll[]; }) { const { hasPermission } = usePermission(); const { isFormOpen, selectedPayroll, isDeleteDialogOpen, isBulkDeleteDialogOpen, payrollToDelete, rowsToDelete, rowSelection, isGenerating, setRowSelection, setRowsToDelete, setIsDeleteDialogOpen, setIsBulkDeleteDialogOpen, onGenerate, onEdit, onDelete, confirmDelete, confirmBulkDelete, onTogglePaid, closeForm, } = usePayrollIndex(); const columns = getColumns({ onEdit, onDelete, onTogglePaid }).filter( (col) => col.id !== 'actions' || hasPermission('Edit:PayrollAdjustment') || hasPermission('Delete:Payroll'), ); return (

Penggajian

{hasPermission('Generate:Payroll') && ( )}
{currentMonthPayrolls.length > 0 && (
{currentMonthPayrolls.map((payroll) => ( { if ( hasPermission('Edit:PayrollAdjustment') ) { onEdit(payroll); } }} /> ))}
)} { setRowsToDelete(rows); setIsBulkDeleteDialogOpen(true); }, icon: Trash2, variant: 'destructive', }, ] : [] } /> {/* Single Delete Confirmation */} Tindakan ini tidak dapat dibatalkan. Penggajian{' '} {payrollToDelete?.period_month_formatted} {' '} akan dihapus secara permanen dan stok akan dikembalikan. } onDelete={confirmDelete} /> {/* Bulk Delete Confirmation */} Tindakan ini tidak dapat dibatalkan.{' '} {rowsToDelete.length} item yang terpilih akan dihapus secara permanen. } onDelete={confirmBulkDelete} />
); } PayrollIndex.layout = { breadcrumbs: [ { title: 'Keuangan', }, ], };