"use client" import { useState } from "react" import { useForm } from "react-hook-form" import { zodResolver } from "@hookform/resolvers/zod" import * as z from "zod" import { Button } from "@/components/ui/button" import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, } from "@/components/ui/form" import { Input } from "@/components/ui/input" import { Textarea } from "@/components/ui/textarea" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select" import { useRouter } from "next/navigation" import { toast } from "sonner" import { Loader2 } from "lucide-react" const productSchema = z.object({ name: z.string().min(2, "Ürün adı en az 2 karakter olmalıdır"), category: z.string().min(1, "Kategori seçiniz"), description: z.string().optional(), price: z.coerce.number().min(0, "Fiyat 0'dan küçük olamaz"), image_url: z.string().optional(), }) type ProductFormValues = z.infer import { createProduct, updateProduct } from "@/app/(dashboard)/dashboard/products/actions" // Define the shape of data coming from Supabase interface Product { id: number name: string category: string description: string | null price: number image_url: string | null created_at: string } interface ProductFormProps { initialData?: Product } export function ProductForm({ initialData }: ProductFormProps) { const router = useRouter() const [loading, setLoading] = useState(false) const form = useForm({ resolver: zodResolver(productSchema) as any, defaultValues: initialData ? { name: initialData.name, category: initialData.category, description: initialData.description || "", price: initialData.price, image_url: initialData.image_url || "", } : { name: "", category: "", description: "", price: 0, image_url: "", }, }) async function onSubmit(data: ProductFormValues) { try { setLoading(true) let result if (initialData) { result = await updateProduct(initialData.id, data) } else { result = await createProduct(data) } if (!result.success) { toast.error(result.error || "Bir hata oluştu") return } toast.success(initialData ? "Ürün güncellendi" : "Ürün başarıyla oluşturuldu") router.push("/dashboard/products") router.refresh() } catch { toast.error("Bir aksilik oldu") } finally { setLoading(false) } } return (
( Ürün Adı )} />
( Kategori )} /> ( Fiyat (₺) )} />
( Görsel URL (Opsiyonel) Ürün görseli için şimdilik dış bağlantı kullanın. )} /> ( Açıklama