import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; import { EmptyState } from '@/components/ui/empty-state'; import { Input } from '@/components/ui/input'; import { Pagination } from '@/components/ui/pagination'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table'; import AppLayout from '@/layouts/app-layout'; import { type BreadcrumbItem } from '@/types'; import { Head, Link, usePage } from '@inertiajs/react'; import { PlusIcon, PencilIcon, Trash2Icon } from 'lucide-react'; import { useEffect, useState } from 'react'; import { Toaster, toast } from 'sonner'; import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger, } from '@/components/ui/alert-dialog'; interface Insurance { id: string; code: string; name: string; phone_number: string | null; contact_person: string | null; coverage_percentage: number; agreement_period: string; is_active: boolean; created_at: string; } interface PageProps { insurances: { data: Insurance[]; links: Array<{ url: string | null; label: string; active: boolean; }>; }; status?: string; } const breadcrumbs: BreadcrumbItem[] = [ { title: 'Dashboard', href: '/dashboard' }, { title: 'Asuransi', href: '/insurances' }, ]; export default function InsuranceIndex() { const { insurances, status } = usePage().props; const [searchTerm, setSearchTerm] = useState(''); const [filteredInsurances, setFilteredInsurances] = useState(insurances.data); useEffect(() => { if (status) { toast.success(status); } }, [status]); useEffect(() => { const results = insurances.data.filter(insurance => Object.values(insurance).some( value => value && value.toString().toLowerCase().includes(searchTerm.toLowerCase()) ) ); setFilteredInsurances(results); }, [searchTerm, insurances.data]); return (

Data Asuransi

setSearchTerm(e.target.value)} />
{filteredInsurances.length === 0 ? ( Tambah Asuransi } /> ) : ( <>
Kode Nama Asuransi Kontak Coverage Periode Perjanjian Status Aksi {filteredInsurances.map((insurance) => ( {insurance.code} {insurance.name} {insurance.contact_person || '-'} {insurance.phone_number && (
{insurance.phone_number}
)}
{insurance.coverage_percentage}% {insurance.agreement_period} {insurance.is_active ? 'Aktif' : 'Non-Aktif'} Apakah Anda yakin? Data asuransi akan dihapus permanen. Tindakan ini tidak dapat dibatalkan. Batal Hapus
))}
{insurances.links.length > 3 && (
)} )}
); }