"use client"; import { useState, useTransition } from "react"; import { Feature } from "@prisma/client"; import { Plus, Edit2, Trash2, X, Save } from "lucide-react"; import * as Icons from "lucide-react"; import { loadMockFeatures, addFeature, updateFeature, deleteFeature } from "@/app/actions/features"; export default function FeaturesClient({ features }: { features: Feature[] }) { const [isModalOpen, setIsModalOpen] = useState(false); const [editingFeature, setEditingFeature] = useState(null); const [isPending, startTransition] = useTransition(); const [error, setError] = useState(null); const openAddModal = () => { setEditingFeature(null); setError(null); setIsModalOpen(true); }; const openEditModal = (feature: Feature) => { setEditingFeature(feature); setError(null); setIsModalOpen(true); }; const closeModal = () => { setIsModalOpen(false); setEditingFeature(null); setError(null); }; const handleDelete = (id: number) => { if (confirm("Bu özelliği silmek istediğinize emin misiniz?")) { startTransition(async () => { const result = await deleteFeature(id); if (result.error) { alert(result.error); } }); } }; const handleSubmit = async (formData: FormData) => { setError(null); if (editingFeature) { formData.append("id", editingFeature.id.toString()); const result = await updateFeature(null, formData); if (result.error) { setError(result.error); } else { closeModal(); } } else { const result = await addFeature(null, formData); if (result.error) { setError(result.error); } else { closeModal(); } } }; const renderIcon = (iconName: string) => { const IconComponent = (Icons as any)[iconName]; if (!IconComponent) return
; return ; }; return ( <>

Özellikler

{features.length === 0 ? (
Henüz özellik eklenmemiş. Sağ üstten yeni ekleyebilir veya örnek verileri yükleyebilirsiniz.
) : (
{features.map(feat => ( ))}
İkon Ana Başlık Alt Başlık Dil Sıra İşlemler
{renderIcon(feat.icon)} {feat.label} {feat.sub} {feat.lang} {feat.order}
)} {/* Modal */} {isModalOpen && (

{editingFeature ? "Özellik Düzenle" : "Yeni Özellik Ekle"}

{error && (
{error}
)}

Geçerli ikon isimleri: Wind, Anchor, Utensils, BedDouble, Sun, vb.

)} ); }