import { Head, router } from '@inertiajs/react'; import { format } from 'date-fns'; import { CheckCircle2, Save, XCircle } from 'lucide-react'; import { useState } from 'react'; import { DatePicker } from '@/components/date-picker'; import { PageHeader } from '@/components/page-header'; import { Button } from '@/components/ui/button'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Label } from '@/components/ui/label'; import { index as attendanceIndex, store, } from '@/routes/admin/academic-classes/attendances'; import type { AttendanceCourseClass, AttendanceRosterEntry, AttendanceStatus, } from '@/types/attendance'; import { AttendanceStatusLabels } from '@/types/attendance'; type Props = { courseClass: AttendanceCourseClass; meetingNumber: number; roster: AttendanceRosterEntry[]; date: string | null; }; function courseClassLabel(courseClass: AttendanceCourseClass): string { const namePart = courseClass.class_name ? `${courseClass.class_name} - ` : ''; return `${namePart}${courseClass.course?.code ?? ''} ${courseClass.course?.name ?? ''}`; } export default function AttendanceSession({ courseClass, meetingNumber, roster, date, }: Props) { const [selectedDate, setSelectedDate] = useState( date ? new Date(date) : new Date(), ); const [statuses, setStatuses] = useState>( () => Object.fromEntries( roster.map((entry) => [entry.student_id, entry.status]), ), ); const [saving, setSaving] = useState(false); function setAll(status: AttendanceStatus) { setStatuses( Object.fromEntries( roster.map((entry) => [entry.student_id, status]), ), ); } function handleSave() { if (!selectedDate) { return; } setSaving(true); router.post( store([courseClass.id, meetingNumber]).url, { date: format(selectedDate, 'yyyy-MM-dd'), records: roster.map((entry) => ({ student_id: entry.student_id, status: statuses[entry.student_id], })), }, { preserveScroll: true, onFinish: () => setSaving(false), }, ); } return ( <>
Kembali } /> {courseClassLabel(courseClass)}

Pertemuan ke-{meetingNumber}

Daftar Mahasiswa

{roster.length === 0 ? (

Belum ada mahasiswa yang terdaftar di kelas ini.

) : (
{roster.map((entry) => (

{entry.student?.user?.profile ?.full_name ?? 'N/A'}

{entry.student?.student_number}

))}
)} {roster.length > 0 && (
)}
); }