import { useCallback, useEffect, useMemo, useState } from 'react'; import { api, formatCredits, centsJson, toCentsBigInt } from '../api'; import ImageField from './ImageField'; const emptyCase = { name: '', price: 100, imageUrl: '', active: true }; export default function AdminCases() { const [cases, setCases] = useState([]); const [error, setError] = useState(''); const [query, setQuery] = useState(''); const [caseForm, setCaseForm] = useState(emptyCase); const [editingId, setEditingId] = useState(null); const [edit, setEdit] = useState(null); const load = useCallback(async () => { const data = await api.adminCases(); setCases(data.cases); }, []); useEffect(() => { load().catch((err) => setError(err.message)); }, [load]); const filtered = useMemo(() => { const q = query.trim().toLowerCase(); if (!q) return cases; return cases.filter((c) => c.name.toLowerCase().includes(q)); }, [cases, query]); const startEdit = (c) => { setEditingId(c.id); setEdit({ name: c.name, price: c.price, imageUrl: c.imageUrl || '', active: c.active, }); }; return (
{cases.length} crates · create, enable, price & art