import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger, } from '@/components/ui/alert-dialog'; 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 { PencilIcon, PlusIcon, Trash2Icon } from 'lucide-react'; import { useEffect, useState } from 'react'; import { Toaster, toast } from 'sonner'; interface Registration { id: string; registration_number: string; patient_name: string; employee_name: string; service_room_name: string; registration_type: string; patient_type: string; registration_datetime: string; discharge_datetime: string | null; status: string; payment_status: string; is_active: boolean; created_at: string; } interface PageProps { registrations: { data: Registration[]; links: Array<{ url: string | null; label: string; active: boolean; }>; }; status?: string; } const breadcrumbs: BreadcrumbItem[] = [ { title: 'Dashboard', href: '/dashboard' }, { title: 'Registrasi', href: '/registrations' }, ]; export default function RegistrationIndex() { const { registrations, status } = usePage().props; const [searchTerm, setSearchTerm] = useState(''); const [filteredRegistrations, setFilteredRegistrations] = useState(registrations.data); useEffect(() => { if (status) { toast.success(status); } }, [status]); useEffect(() => { const results = registrations.data.filter((registration) => Object.values(registration).some((value) => value && value.toString().toLowerCase().includes(searchTerm.toLowerCase())), ); setFilteredRegistrations(results); }, [searchTerm, registrations.data]); const getStatusBadgeVariant = (status: string) => { switch (status) { case 'completed': return 'default'; case 'cancelled': return 'destructive'; case 'in_progress': return 'warning'; default: return 'outline'; } }; const getPaymentStatusBadgeVariant = (status: string) => { switch (status) { case 'paid': return 'default'; case 'unpaid': return 'destructive'; case 'partial': return 'warning'; case 'insurance_cover': return 'success'; default: return 'outline'; } }; const getRegistrationTypeBadgeVariant = (type: string) => { switch (type) { case 'Rawat Inap': return 'purple'; case 'UGD': return 'red'; default: return 'blue'; } }; return (

Data Registrasi Pasien

setSearchTerm(e.target.value)} />
{filteredRegistrations.length === 0 ? ( Tambah Registrasi } /> ) : ( <>
No. Registrasi Nama Pasien Petugas Ruangan Jenis Tanggal Masuk Status Pembayaran Aksi {filteredRegistrations.map((registration) => ( {registration.registration_number} {registration.patient_name} {registration.employee_name} {registration.service_room_name} {registration.registration_type} {new Date(registration.registration_datetime).toLocaleDateString('id-ID', { day: '2-digit', month: 'short', year: 'numeric', hour: '2-digit', minute: '2-digit', })} {registration.status.replace('_', ' ')} {registration.payment_status.replace('_', ' ')} Apakah Anda yakin? Data registrasi akan dihapus permanen. Tindakan ini tidak dapat dibatalkan. Batal Hapus ))}
{registrations.links.length > 3 && (
)} )}
); }