import React, { useState, useEffect } from 'react'; import { useMediaQuery, Box, Typography, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, Paper, IconButton, Skeleton, CircularProgress, Button } from '@mui/material'; import { useTheme } from '@mui/material/styles'; import ArrowBackIosNewIcon from '@mui/icons-material/ArrowBackIosNew'; import ArrowForwardIosIcon from '@mui/icons-material/ArrowForwardIos'; import authService from '../../../../services/authService'; import { useRestaurant } from "../../../../contexts/RestaurantContext"; import CartDetails from './CartDetails'; import CartView from './CartView'; const SimplePagination = ({ currentPage, pageCount, onChange }) => { const theme = useTheme(); const handlePrev = () => { if (currentPage > 1) onChange(currentPage - 1); }; const handleNext = () => { if (currentPage < pageCount) onChange(currentPage + 1); }; const { restaurantId } = useRestaurant(); return ( {currentPage} = pageCount} sx={{ borderRadius: '8px', backgroundColor: '#FFECE0', '&:hover': { backgroundColor: '#FFD6B5' }, color: theme.palette.primary.main, '&.Mui-disabled': { color: '#ccc', backgroundColor: '#FFF5E6' }, }} > ); }; const Orders = ({ adminId }) => { const theme = useTheme(); const isMobile = useMediaQuery(theme.breakpoints.down('sm')); const { restaurantId } = useRestaurant(); const [ordersData, setOrdersData] = useState([]); const [loading, setLoading] = useState(true); const [selectedCart, setSelectedCart] = useState(null); const [cartLoading, setCartLoading] = useState(false); const [showCartView, setShowCartView] = useState(false); const [currentPage, setCurrentPage] = useState(1); const itemsPerPage = 6; // ────────────── Fetch Orders ────────────── useEffect(() => { const fetchOrders = async () => { setLoading(true); try { const result = await authService.getCart(); if (result.success) { console.log(Array.isArray(result.data) ? result.data : []); setOrdersData(Array.isArray(result.data) ? result.data : []); } else { console.error(result.message); setOrdersData([]); } } catch (error) { console.error('Failed to fetch orders:', error); setOrdersData([]); } setLoading(false); }; fetchOrders(); }, []); // ────────────── Row Click ────────────── const handleRowClick = async (cartId) => { setCartLoading(true); try { const result = await authService.getCartById(cartId); if (result.success) setSelectedCart(result.data); else console.error(result.message); } catch (error) { console.error('Failed to fetch cart details:', error); } setCartLoading(false); }; const handleCartUpdated = (updatedCart) => { setOrdersData(prev => prev.map(cart => cart.id === updatedCart.id ? updatedCart : cart) ); setSelectedCart(null); }; const handleCloseCartDetails = () => { setSelectedCart(null); }; const handleAddOrder = (newOrder) => { setOrdersData(prev => [newOrder, ...prev]); }; const pageCount = Math.ceil(ordersData.length / itemsPerPage); const paginatedOrders = ordersData.slice( (currentPage - 1) * itemsPerPage, currentPage * itemsPerPage ); if (cartLoading) { return ( ); } if (selectedCart) { return ( ); } if (showCartView) { return ( setShowCartView(false)} onSend={handleAddOrder} onCartCreated={(newCart) => { setOrdersData(prev => [newCart, ...prev]); setShowCartView(false); }} adminId={adminId} /> ); } // ────────────── Main Orders Table ────────────── return ( Cart Cart ID Total Price Created At Items Count Action {loading ? Array.from({ length: itemsPerPage }).map((_, idx) => ( )) : ( <> {paginatedOrders.map(order => { const attributes = order?.attributes || {}; const relationships = order?.relationships || {}; const cartItems = relationships?.cartItems || relationships?.cart_items || []; return ( handleRowClick(order.id)} > {order?.id || '--'} {attributes?.totalPrice ?? attributes?.total_price ?? '0.00'} {attributes?.createdAt ? new Date(attributes.createdAt).toLocaleString() : '--'} {cartItems.length} ); })} {paginatedOrders.length < itemsPerPage && Array.from({ length: itemsPerPage - paginatedOrders.length }).map((_, idx) => ( )) } )}
Showing {(currentPage - 1) * itemsPerPage + 1} - {Math.min(currentPage * itemsPerPage, ordersData.length)} of {ordersData.length}
); }; export default Orders;