'use client' import { useState } from 'react' import { useTranslations, useLocale } from 'next-intl' import type { NewsItem } from '@/lib/admin-news' export function AdminNewsManager({ initialNews }: { initialNews: NewsItem[] }) { const t = useTranslations('Admin') const locale = useLocale() const [news, setNews] = useState(initialNews) const [titulo, setTitulo] = useState('') const [contenido, setContenido] = useState('') const [enlace, setEnlace] = useState('') const [busy, setBusy] = useState(false) const [error, setError] = useState(null) async function create(e: React.FormEvent) { e.preventDefault() if (busy || !titulo.trim() || !contenido.trim()) return setBusy(true) setError(null) try { const res = await fetch('/api/admin/news', { method: 'POST', headers: { 'Content-Type': 'application/json' }, credentials: 'same-origin', body: JSON.stringify({ titulo, contenido, enlace }), }) const data: { success?: boolean; id?: number } = await res.json() if (data.success && data.id) { setNews([{ id: data.id, titulo, fecha: new Date().toISOString(), enlace: enlace || null }, ...news]) setTitulo('') setContenido('') setEnlace('') } else setError(t('genericError')) } catch { setError(t('genericError')) } finally { setBusy(false) } } async function remove(id: number) { if (!confirm(t('confirmDelete'))) return const res = await fetch(`/api/admin/news/${id}`, { method: 'DELETE', credentials: 'same-origin' }) const data: { success?: boolean } = await res.json() if (data.success) setNews(news.filter((n) => n.id !== id)) } const field = 'w-full rounded border border-amber-900/60 bg-[#2c1e14] px-3 py-2' return (
setTitulo(e.target.value)} placeholder={t('newsTitle')} maxLength={200} className={field} />