"use client"; import { useState } from "react"; import { useRouter } from "next/navigation"; 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 { createMelody, updateMelody } from "@/app/admin/(protected)/melodies/actions"; import { melodySchema, type MelodyInput } from "@/lib/validations/melody"; type CategoryOption = { id: string; nameAr: string; nameEn: string }; type MelodyFormProps = { mode: "create" | "edit"; melodyId?: string; categories: CategoryOption[]; defaultValues: MelodyInput; }; const statusLabels: Record = { DRAFT: "Draft", PUBLISHED: "Published", ARCHIVED: "Archived", }; export default function MelodyForm({ mode, melodyId, categories, defaultValues }: MelodyFormProps) { const router = useRouter(); const [serverError, setServerError] = useState(null); const form = useForm({ resolver: zodResolver(melodySchema), defaultValues }); const onSubmit = async (values: MelodyInput) => { setServerError(null); const result = mode === "create" ? await createMelody(values) : await updateMelody(melodyId ?? "", values); if (result.error) { setServerError(result.error); return; } router.push("/admin/melodies"); router.refresh(); }; return (
( Status )} /> ( Melody category )} />
( Slug )} />
( English title )} /> ( Arabic title )} />
( English description