'use client' import { useState } from 'react' import { useTranslations } from 'next-intl' import type { VoteSite } from '@/lib/admin-votes' export function AdminVotesManager({ initial }: { initial: VoteSite[] }) { const t = useTranslations('Admin') const [sites, setSites] = useState(initial) const [form, setForm] = useState({ name: '', url: '', imageUrl: '', points: '1' }) const [busy, setBusy] = useState(false) function upd(k: string, v: string) { setForm((f) => ({ ...f, [k]: v })) } async function create(e: React.FormEvent) { e.preventDefault() if (busy || !form.name.trim() || !form.url.trim()) return setBusy(true) try { const res = await fetch('/api/admin/votes', { method: 'POST', headers: { 'Content-Type': 'application/json' }, credentials: 'same-origin', body: JSON.stringify({ ...form, points: Number(form.points) }), }) const data: { success?: boolean; id?: number } = await res.json() if (data.success && data.id) { setSites([ ...sites, { id: data.id, name: form.name, url: form.url, image_url: form.imageUrl, points: Number(form.points) }, ]) setForm({ name: '', url: '', imageUrl: '', points: '1' }) } } finally { setBusy(false) } } async function remove(id: number) { if (!confirm(t('confirmDelete'))) return const res = await fetch(`/api/admin/votes/${id}`, { method: 'DELETE', credentials: 'same-origin' }) if ((await res.json()).success) setSites(sites.filter((s) => s.id !== id)) } return (
{t('noVotes')}
) : (|
{s.name}
{s.points} PV ยท {s.url} |