import { useEffect, useMemo, useState } from 'react'; import Head from 'next/head'; import { AdminLayout } from '../../../components/AdminLayout'; import { useAdminApi } from '../../../hooks/useAdminApi'; const LOCAL_TOKEN_KEY = 'fullmoon_admin_token'; export default function AdminMenu() { const [token, setToken] = useState(''); const [products, setProducts] = useState([]); const [categories, setCategories] = useState([]); const [isEditing, setIsEditing] = useState(false); const [formState, setFormState] = useState(initialProductState); useEffect(() => { if (typeof window !== 'undefined') { const stored = window.localStorage.getItem(LOCAL_TOKEN_KEY); if (stored) { setToken(stored); } } }, []); const { request, loading, error } = useAdminApi(token); useEffect(() => { if (!token) return; async function loadData() { try { const [productsData, categoriesData] = await Promise.all([ request('/api/commerce/admin/products/'), request('/api/commerce/admin/categories/'), ]); setProducts(productsData); setCategories(categoriesData); } catch (err) { console.error(err); } } loadData(); }, [token, request]); const featuredProducts = useMemo( () => products.filter((product) => product.is_featured), [products] ); const handleSubmit = async (event) => { event.preventDefault(); try { const payload = buildPayload(formState); const url = isEditing ? `/api/commerce/admin/products/${formState.id}/` : '/api/commerce/admin/products/'; const method = isEditing ? 'PUT' : 'POST'; const saved = await request(url, { method, body: JSON.stringify(payload), }); setProducts((prev) => { if (isEditing) { return prev.map((product) => (product.id === saved.id ? saved : product)); } return [saved, ...prev]; }); resetForm(); } catch (err) { console.error(err); } }; const handleEdit = (product) => { setIsEditing(true); setFormState(mapProductToForm(product)); window.scrollTo({ top: 0, behavior: 'smooth' }); }; const handleDelete = async (productId) => { if (!window.confirm('Delete this product?')) return; try { await request(`/api/commerce/admin/products/${productId}/`, { method: 'DELETE', }); setProducts((prev) => prev.filter((product) => product.id !== productId)); } catch (err) { console.error(err); } }; const resetForm = () => { setIsEditing(false); setFormState(initialProductState); }; if (!token) { return ; } return ( <> Menu · Admin · Full Moon Bakehouse
Create offering

{isEditing ? 'Update product' : 'Publish new product'}

Add breads, bagels, sweets, and weekly specials. Quantities decrement automatically with each order so you never oversell.