"use client"; import { useCallback, useEffect, useState } from "react"; import { formatMessage } from "@/lib/i18n/shared"; import { useDict } from "@/components/i18n/LocaleProvider"; import type { DishSuggestion } from "@/lib/types"; export default function SuggestionReview() { const dict = useDict(); const [items, setItems] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [info, setInfo] = useState(null); const [busyId, setBusyId] = useState(null); const load = useCallback(async () => { const res = await fetch("/api/dish-suggestions"); if (!res.ok) setError(formatMessage(dict.suggestions.loadError, { message: String(res.status) })); else setItems(await res.json()); setLoading(false); }, [dict]); useEffect(() => { load(); }, [load]); async function accept(item: DishSuggestion) { setBusyId(item.id); setError(null); setInfo(null); const res = await fetch(`/api/dish-suggestions/${item.id}/accept`, { method: "POST" }); if (!res.ok) { setError(formatMessage(dict.suggestions.actionError, { message: String(res.status) })); setBusyId(null); return; } setInfo(dict.suggestions.accepted); setBusyId(null); await load(); } async function reject(item: DishSuggestion) { if (!window.confirm(formatMessage(dict.suggestions.confirmReject, { name: item.name }))) return; setBusyId(item.id); setError(null); setInfo(null); const res = await fetch(`/api/dish-suggestions/${item.id}`, { method: "DELETE" }); if (!res.ok) { setError(formatMessage(dict.suggestions.actionError, { message: String(res.status) })); } else { setInfo(dict.suggestions.rejected); } setBusyId(null); await load(); } return (

{dict.suggestions.reviewTitle}

{error && (

{error}

)} {info &&

{info}

} {loading ? (

{dict.common.loading}

) : (
    {items.map((item) => (
  • {item.name} {item.description && ( {item.description} )} {formatMessage(dict.suggestions.submittedOn, { date: new Date(item.created_at).toLocaleDateString(dict.dateLocale), })}
  • ))} {items.length === 0 && (
  • {dict.suggestions.reviewEmpty}
  • )}
)}
); }