"use client"; import { useState } from "react"; import { useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import { FormControl, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form"; import { Input } from "@/components/ui/input"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import AdminForm from "@/components/admin/admin-form"; import FileUpload from "@/components/admin/file-upload"; import { createProject, updateProject } from "@/app/admin/(protected)/projects/actions"; import { projectSchema, type ProjectInput } from "@/lib/validations/project"; import { useRouter } from "next/navigation"; type CategoryOption = { id: string; nameAr: string; nameEn: string; }; type ProjectFormProps = { mode: "create" | "edit"; projectId?: string; categories: CategoryOption[]; defaultValues: ProjectInput; }; const typeLabels: Record = { PORTFOLIO: "Portfolio", APP: "App", WEBSITE: "Website", DESIGN: "Design", }; const statusLabels: Record = { DRAFT: "Draft", PUBLISHED: "Published", ARCHIVED: "Archived", }; function parseList(value: string) { return value .split(/\r?\n|,/) .map((item) => item.trim()) .filter(Boolean); } export default function ProjectForm({ mode, projectId, categories, defaultValues }: ProjectFormProps) { const router = useRouter(); const [serverError, setServerError] = useState(null); const form = useForm({ resolver: zodResolver(projectSchema), defaultValues, }); const projectType = form.watch("type"); const onSubmit = async (values: ProjectInput) => { setServerError(null); const result = mode === "create" ? await createProject(values) : await updateProject(projectId ?? "", values); if (result.error) { setServerError(result.error); return; } router.push("/admin/projects"); router.refresh(); }; return (
( Project type )} /> ( Status )} />
( Slug )} />
( English title )} /> ( Arabic title )} />
( English summary )} /> ( Arabic summary )} />
( English description