import { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from '@/components/ui/dialog'; import { FormEventHandler, ReactNode, useEffect, useState } from 'react'; import { Button } from '@/components/ui/button'; import { LoaderCircle } from 'lucide-react'; import { useForm } from '@inertiajs/react'; import { Form, FormField, FormFields } from '@/components/ui/form'; import { Label } from '@/components/ui/label'; import { Input } from '@/components/ui/input'; import InputError from '@/components/ui/input-error'; import { Project } from '@/types/project'; import FormSuccessful from '@/components/form-successful'; export default function ProjectForm({ project, defaultOpen, onOpenChange, children, }: { project?: Project; defaultOpen?: boolean; onOpenChange?: (open: boolean) => void; children: ReactNode; }) { const [open, setOpen] = useState(defaultOpen || false); useEffect(() => { if (defaultOpen) { setOpen(defaultOpen); } }, [setOpen, defaultOpen]); const handleOpenChange = (open: boolean) => { setOpen(open); if (onOpenChange) { onOpenChange(open); } }; const form = useForm({ name: project?.name || '', }); const submit: FormEventHandler = (e) => { e.preventDefault(); if (project) { form.patch(route('projects.update', project.id)); return; } form.post(route('projects.store'), { onSuccess() { setOpen(false); }, }); }; return ( {children} {project ? 'Edit Project' : 'Create Project'} {project ? 'Edit the project details.' : 'Create a new project.'}
form.setData('name', e.target.value)} />
); }