import { Head, router } from '@inertiajs/react'; import { Plus } from 'lucide-react'; import { useState } from 'react'; import type { PaginationState } from '@/components/data-table'; import { DataTable } from '@/components/data-table'; import { DeleteConfirmDialog } from '@/components/delete-confirm-dialog'; import { FilterPopover } from '@/components/filter-popover'; import { PageHeader } from '@/components/page-header'; import { Button } from '@/components/ui/button'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select'; import { useServerTable } from '@/hooks/use-server-table'; import { destroy, create as employeeCreate, edit as employeeEdit, index as employeeIndex, toggleActive, resetPassword as resetPasswordRoute, } from '@/routes/admin/hr/employees'; import type { Employee } from './columns'; import { createEmployeeColumns } from './columns'; type Props = { employees: { data: Employee[]; current_page: number; last_page: number; per_page: number; total: number; }; filters: { employment_status?: string; is_active?: string; gender?: string; }; }; export default function EmployeeIndex({ employees, filters }: Props) { const [deleting, setDeleting] = useState(null); const [resetPasswordTarget, setResetPasswordTarget] = useState(null); const pagination: PaginationState = { current_page: employees.current_page, last_page: employees.last_page, per_page: employees.per_page, total: employees.total, }; const { search, filterOpen, setFilterOpen, handlePageChange, handlePerPageChange, handleSearchChange, applyFilter, clearFilters, } = useServerTable({ route: () => employeeIndex.url(), pagination, filters, }); function handleDelete() { if (!deleting) { return; } router.delete(destroy.url(deleting.id), { onSuccess: () => setDeleting(null), }); } function handleResetPassword() { if (!resetPasswordTarget) { return; } router.post( resetPasswordRoute.url(resetPasswordTarget.id), {}, { onSuccess: () => setResetPasswordTarget(null), }, ); } const columns = createEmployeeColumns({ handleEdit: (employee) => { window.location.href = employeeEdit.url(employee.id); }, handleDeleteClick: (employee) => setDeleting(employee), handleResetPassword: (employee) => setResetPasswordTarget(employee), toggleActiveUrl: (id) => toggleActive.url(id), }); const filterToolbar = (
); return ( <>
Tambah } /> { if (!open) { setDeleting(null); } }} title="Hapus Pegawai" description={(employee) => `Apakah Anda yakin ingin menghapus pegawai "${employee.user_profile?.full_name}"? Tindakan ini tidak dapat dibatalkan.` } onConfirm={handleDelete} /> { if (!open) { setResetPasswordTarget(null); } }} title="Reset Kata Sandi" description={(employee) => `Apakah Anda yakin ingin mereset kata sandi pegawai "${employee.user_profile?.full_name}" ke kata sandi default?` } confirmLabel="Reset" variant="default" onConfirm={handleResetPassword} />
); }