"use client"; import { useState, useCallback } from "react"; import { Alert, Toast, ArchiveButton, ConfirmDialog } from "@/src/Components/UI"; import { ORDER_STATUS_MAP } from "@/src/Components/Order/OrderDetailModel"; import { OrderTable } from "@/src/Components/Order/OrderTable"; import { ArchivedOrdersModal } from "@/src/Components/Order/archive/ArchivedOrdersModal"; import { useOrders } from "@/src/hooks/useOrder"; import type { CreateOrderPayload, Order, UpdateOrderPayload } from "@/src/types/order"; import { OrderFormModal , OrderDetailPanel} from "@/src/Components/Order"; // ── Page Component ─────────────────────────────────────────────────────── export default function OrderComponent() { const { orders, loading, error, total, pages, page, search, statusFilter, setPage, handleSearch, handleStatusFilter, clearError, createOrder, updateOrder, deleteOrder, notification, reload, } = useOrders(); // ── Panel / modal state — same three-state shape as DriversPage // (selected id for the detail panel, "new" | Order | null for the // form modal, Order | null for the delete modal). ─────────────────── const [selectedOrderId, setSelectedOrderId] = useState(null); const [formOrder, setFormOrder] = useState(null); const [deleteTarget, setDeleteTarget] = useState(null); const [deleting, setDeleting] = useState(false); // Bumped after a successful edit/status-change to force the detail panel // to re-fetch — same trick as DriversPage's panelRefreshKey. const [panelRefreshKey, setPanelRefreshKey] = useState(0); // Archive browser modal open/closed const [archiveOpen, setArchiveOpen] = useState(false); // ── Handlers ───────────────────────────────────────────────────────── const handleEdit = useCallback((order: Order) => { setSelectedOrderId(null); setFormOrder(order); }, []); const handleDelete = useCallback((order: Order) => { setSelectedOrderId(null); setDeleteTarget(order); }, []); // ── Notifications: create/update success or failure surfaces as a // toast via useOrders()' notify() — see useOrders.ts createOrder / // updateOrder. Field-level / request errors additionally render // inside the form modal itself via its own . ──────────────── const handleFormSubmit = useCallback( async ( payload: CreateOrderPayload | UpdateOrderPayload, isNew: boolean, ): Promise => { let ok: boolean; if (isNew) { ok = await createOrder(payload as CreateOrderPayload); } else { const id = (formOrder as Order).id; ok = await updateOrder(id, payload as UpdateOrderPayload); // Re-fetch detail panel so updated fields are visible immediately if (ok && selectedOrderId) setPanelRefreshKey((k) => k + 1); } return ok; }, [formOrder, createOrder, updateOrder, selectedOrderId], ); // ── Notification: status change made from the detail panel bubbles up // here and fires the same success toast the table-level actions use, // keeping feedback consistent regardless of where the action started. ── const handleStatusChanged = useCallback(() => { setPanelRefreshKey((k) => k + 1); reload(); }, [reload]); const handleConfirmDelete = useCallback(async () => { if (!deleteTarget) return; setDeleting(true); const ok = await deleteOrder(deleteTarget.id); setDeleting(false); if (ok) setDeleteTarget(null); }, [deleteTarget, deleteOrder]); // ── Render ─────────────────────────────────────────────────────────── return ( <>
{/* ── Header ── */}

إدارة الشحنات

الطلبات

إجمالي{" "} {total}{" "} طلب مسجل

{/* Status filter — ported from app/dashboard/orders/page.tsx */} {/* Search */}