'use client'; import { useForm } from 'react-hook-form'; import { zodResolver } from '@hookform/resolvers/zod'; import * as z from 'zod'; import { useUpdateProject } from '@/lib/hooks/use-projects'; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '@/components/ui/dialog'; import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, } from '@/components/ui/form'; import { Input } from '@/components/ui/input'; import { Button } from '@/components/ui/button'; import type { Project } from '@/types/project'; import { toast } from 'sonner'; const updateProjectSchema = z.object({ name: z .string() .min(1, 'Project name is required') .max(200, 'Project name cannot exceed 200 characters'), description: z .string() .max(2000, 'Description cannot exceed 2000 characters'), }); type UpdateProjectFormData = z.infer; interface EditProjectDialogProps { project: Project; open: boolean; onOpenChange: (open: boolean) => void; } export function EditProjectDialog({ project, open, onOpenChange, }: EditProjectDialogProps) { const updateProject = useUpdateProject(project.id); const form = useForm({ resolver: zodResolver(updateProjectSchema), defaultValues: { name: project.name, description: project.description, }, }); const onSubmit = async (data: UpdateProjectFormData) => { try { await updateProject.mutateAsync(data); toast.success('Project updated successfully'); onOpenChange(false); } catch (error) { toast.error('Failed to update project'); console.error('Update error:', error); } }; return ( Edit Project Update project details. Changes will be saved immediately.
( Project Name The name of your project. )} /> ( Description A brief description for your project. )} />
); }