"use client" import { useState } from "react" import { useRouter } from "next/navigation" import { useForm, type Resolver } from "react-hook-form" import { zodResolver } from "@hookform/resolvers/zod" import * as z from "zod" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Textarea } from "@/components/ui/textarea" import { Checkbox } from "@/components/ui/checkbox" import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, } from "@/components/ui/form" import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" import { toast } from "sonner" import { Loader2 } from "lucide-react" import { ImageUpload } from "@/components/ui/image-upload" import { createSlider, updateSlider } from "@/app/(dashboard)/dashboard/sliders/actions" const sliderSchema = z.object({ title: z.string().min(2, "Başlık en az 2 karakter olmalıdır"), description: z.string().optional(), image_url: z.string().min(1, "Görsel yüklemek zorunludur"), link: z.string().optional(), order: z.coerce.number().default(0), is_active: z.boolean().default(true), }) type SliderFormValues = z.infer interface Slider { id: string title: string description: string | null image_url: string link: string | null order: number | null is_active: boolean | null } interface SliderFormProps { initialData?: Slider } export function SliderForm({ initialData }: SliderFormProps) { const router = useRouter() const [loading, setLoading] = useState(false) const form = useForm({ resolver: zodResolver(sliderSchema) as Resolver, defaultValues: initialData ? { title: initialData.title, description: initialData.description || "", image_url: initialData.image_url, link: initialData.link || "", order: initialData.order || 0, is_active: initialData.is_active ?? true, } : { title: "", description: "", image_url: "", link: "", order: 0, is_active: true, }, }) async function onSubmit(data: SliderFormValues) { setLoading(true) try { let result if (initialData) { result = await updateSlider(initialData.id, data) } else { result = await createSlider(data) } if (result.error) { toast.error(result.error) return } toast.success(initialData ? "Slider güncellendi" : "Slider oluşturuldu") router.push("/dashboard/sliders") router.refresh() } catch { toast.error("Bir sorun oluştu.") } finally { setLoading(false) } } return ( {initialData ? "Slider Düzenle" : "Yeni Slider Ekle"}
( Görsel field.onChange("")} disabled={loading} /> )} />
( Başlık )} /> ( Sıralama Düşük numara önce gösterilir (0, 1, 2...) )} />
( Açıklama