"use client"; import { useCallback, useEffect, useMemo, useState } from "react"; import { createClient } from "@/lib/supabase/client"; import { formatMessage } from "@/lib/i18n/shared"; import { useDict } from "@/components/i18n/LocaleProvider"; import type { DishSuggestion } from "@/lib/types"; export default function SuggestionReview() { const supabase = useMemo(() => createClient(), []); 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 { data, error } = await supabase .from("dish_suggestions") .select("*") .order("created_at", { ascending: false }); if (error) setError(formatMessage(dict.suggestions.loadError, { message: error.message })); else setItems(data as DishSuggestion[]); setLoading(false); }, [supabase, dict]); useEffect(() => { load(); }, [load]); async function accept(item: DishSuggestion) { setBusyId(item.id); setError(null); setInfo(null); const { error: insertError } = await supabase.from("dishes").insert({ name: item.name, price: 0, }); if (insertError) { setError( formatMessage(dict.suggestions.actionError, { message: insertError.message }) ); setBusyId(null); return; } const { error: deleteError } = await supabase .from("dish_suggestions") .delete() .eq("id", item.id); if (deleteError) { setError( formatMessage(dict.suggestions.actionError, { message: deleteError.message }) ); 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 { error } = await supabase.from("dish_suggestions").delete().eq("id", item.id); if (error) { setError(formatMessage(dict.suggestions.actionError, { message: error.message })); } 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}
  • )}
)}
); }