import { useState, useEffect } from "react"; import { getAdminOrder } from "../api"; import { useParams, useNavigate } from "react-router-dom"; // Статусы заказа — ПОДСТАВЬ свои, если в БД они другие const STATUSES = [ { value: "new", label: "Новый" }, { value: "prepared", label: "Собран" }, { value: "shipped", label: "Отправлен" }, { value: "delivered", label: "Доставлен" }, { value: "canceled", label: "Отменён" }, ]; export default function AdminOrderDetail({ orderId }) { const [order, setOrder] = useState(null); const [status, setStatus] = useState(""); const [items, setItems] = useState([]); // редактируемая копия позиций const [loading, setLoading] = useState(false); const [saving, setSaving] = useState(false); const [error, setError] = useState(""); const { id } = useParams(); const navigate = useNavigate(); // Загружаем заказ при монтировании / смене orderId useEffect(() => { setError(""); setLoading(true); getAdminOrder(id) .then((res) => { setOrder(res.data); setStatus(res.data.status); setItems((res.data.items ?? []).map((it) => ({ ...it }))); }) .catch((err) => { setError(err.response?.data?.error ?? "Не удалось загрузить заказ"); }) .finally(() => { }); }, [orderId]); function handleQuantityChange(itemId, value) { setItems((prev) => prev.map((it) => it.item_id === itemId ? { ...it, quantity: value === "" ? "" : parseFloat(value) } : it, ), ); } // Пересчёт итога на лету const total = items.reduce((sum, it) => { const q = typeof it.quantity === "number" ? it.quantity : 0; return sum + it.price * q; }, 0); if (!loading) { return
Загрузка заказа…
; } if (!order) { return (

{error || "Заказ не найден"}

); } const created = order.created_at ? new Date(order.created_at).toLocaleString("ru-RU") : ""; return (
{/* Шапка */}

Заказ #{order.order_id}

{error && (
{error}
)} {/* Мета заказа */}
{order.address && (
Адрес {order.address}
)} {created && (
Создан {created}
)} {/* Редактируемый статус */}
Статус
{/* Позиции с редактируемым весом */}
{items.map((it) => (

{it.name}

{it.price} ₽ / {it.unit}

handleQuantityChange(it.item_id, e.target.value) } className="w-20 bg-slate-700 text-white rounded-lg px-2 py-1.5 text-right outline-none focus:ring-2 focus:ring-sky-500" /> {it.unit}
{( it.price * (typeof it.quantity === "number" ? it.quantity : 0) ).toFixed(2)}{" "} ₽
))}
{/* Итог */}
Итого {total.toFixed(2)} ₽
{/* Сохранить */}
); }