'use client'; import { useState, useEffect } from 'react'; import { ArrowLeft, Save, Trash2 } from 'lucide-react'; import { Button } from '@/components/ui/button'; import Link from 'next/link'; import { useRouter } from 'next/navigation'; import { DynamicFieldRenderer } from '../DynamicFieldRenderer'; interface ContentType { id: string; name: string; apiIdentifier: string; description?: string | null; fields: Field[]; } interface Field { id: string; label: string; apiIdentifier: string; type: string; isRequired: boolean; } interface ContentEntry { id: string; data: any; status: string; createdAt: string; updatedAt: string; contentType: ContentType; } interface EditContentEntryPageProps { entry: ContentEntry; } export function EditContentEntryPage({ entry }: EditContentEntryPageProps) { const [formData, setFormData] = useState>(entry.data || {}); const [status, setStatus] = useState(entry.status); const [isSaving, setIsSaving] = useState(false); const [isDeleting, setIsDeleting] = useState(false); const router = useRouter(); const handleFieldChange = (fieldId: string, value: any) => { setFormData(prev => ({ ...prev, [fieldId]: value })); }; const handleSave = async (saveStatus: string = status) => { setIsSaving(true); try { const response = await fetch(`/api/content-types/${entry.contentType.apiIdentifier}/entries/${entry.id}`, { method: 'PUT', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ data: formData, status: saveStatus }), }); if (response.ok) { router.push(`/admin/dashboard/content-types/${entry.contentType.apiIdentifier}/content`); } else { throw new Error('Error al actualizar la entrada'); } } catch (error) { console.error('Error updating entry:', error); alert('Error al actualizar la entrada'); } finally { setIsSaving(false); } }; const handleDelete = async () => { if (!confirm('¿Estás seguro de que quieres eliminar esta entrada? Esta acción no se puede deshacer.')) { return; } setIsDeleting(true); try { const response = await fetch(`/api/content-types/${entry.contentType.apiIdentifier}/entries/${entry.id}`, { method: 'DELETE' }); if (response.ok) { router.push(`/admin/dashboard/content-types/${entry.contentType.apiIdentifier}/content`); } else { throw new Error('Error al eliminar la entrada'); } } catch (error) { console.error('Error deleting entry:', error); alert('Error al eliminar la entrada'); } finally { setIsDeleting(false); } }; const validateForm = () => { const requiredFields = entry.contentType.fields.filter(field => field.isRequired); return requiredFields.every(field => { const value = formData[field.apiIdentifier]; return value !== undefined && value !== null && value !== ''; }); }; const isFormValid = validateForm(); return (
{/* Header */}

Editar {entry.contentType.name}

Modifica los campos de esta entrada

{/* Meta info */}
Creado: {new Date(entry.createdAt).toLocaleString()} • Actualizado: {new Date(entry.updatedAt).toLocaleString()}
{/* Actions */}
{/* Form */}
{entry.contentType.fields.map(field => (
handleFieldChange(field.apiIdentifier, value)} /> {field.isRequired && !formData[field.apiIdentifier] && (

Este campo es obligatorio

)}
))}
); }