import Combobox from '@/components/combobox'; import InputError from '@/components/input-error'; import LoadingButton from '@/components/loading-button'; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger } from '@/components/ui/dialog'; import { Label } from '@/components/ui/label'; import { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group'; import { ScrollArea } from '@/components/ui/scroll-area'; import { SharedData } from '@/types/global'; import { useForm, usePage } from '@inertiajs/react'; import { useState } from 'react'; interface Props { type: 'course' | 'exam'; title: string; handler: React.ReactNode; } export interface EnrollmentProps extends SharedData { users: User[]; exams: Exam[]; courses: Course[]; prices: string[]; enrollments: Pagination; } const EnrollmentModal = ({ type, title, handler }: Props) => { const [open, setOpen] = useState(false); const { users, exams, courses, prices, translate } = usePage().props; const { input, button } = translate; const { data, setData, post, reset, errors, processing } = useForm({ user_id: '', exam_id: '', course_id: '', enrollment_type: 'free', }); // Handle form submission const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); if (type === 'exam') { post(route('exam-enrollments.store'), { onSuccess: () => { reset(); setOpen(false); }, }); } else { post(route('enrollments.store'), { onSuccess: () => { reset(); setOpen(false); }, }); } }; const transformedUsers = users.map((user) => ({ label: user.name, value: user.id as string, })); const transformedExams = type === 'exam' ? exams.map((exam) => ({ label: exam.title, value: exam.id as string, })) : []; const transformedCourses = type === 'course' ? courses.map((course) => ({ label: course.title, value: course.id as string, })) : []; return ( {handler} {title}
setData('user_id', selected.value)} />
setData(type === 'exam' ? 'exam_id' : 'course_id', selected.value)} />
setData('enrollment_type', value)} > {prices.map((price) => (
))}
{button.submit}
); }; export default EnrollmentModal;