import React, {useState} from "react"; import {useAuthContext} from "../../configurations/AuthContext"; import {Button, Grid, Typography} from "@mui/material"; import {useLoaderData, useLocation, useNavigate} from "react-router-dom"; import EditRestorantModal from "../../components/modals/restorant-modal"; import CreateEditMenuItemModal from "../../components/modals/menu-item-modal"; import MenuItemCard from "../../components/cards/menu-item-card"; import {CreateOrder, GetOrder, OrderDomainToDtoMapper, OrderStatus, UpdateOrder} from "../../services/order-service"; import {UserRole} from "../../services/user-service"; import {ShoppingCart} from "@mui/icons-material"; import RestaurantPhoto from "../../assets/images/restoran.png"; import PaymentModal from "../../components/modals/payment-modal"; const RestorantDetails = ({id}) => { const {isAuthorized, loggedUserRole, ownershipChanges} = useAuthContext(); const {restorant, activeOrder} = useLoaderData(); const [openUpdateModal, setOpenUpdateModal] = useState(false); const [openMenuItemModal, setOpenMenuItemModal] = useState(false); const [openPaymentModal, setOpenPaymentModal] = useState(false); const navigate = useNavigate(); const location = useLocation(); let initialStateNaracka = { potrosuvacId: loggedUserRole?.roleId, status: OrderStatus.PendingUserApproval, menuItems: [] } const [naracka, setNaracka] = useState(OrderDomainToDtoMapper(activeOrder) ?? initialStateNaracka) const [activeOrderForPayment, setActiveOrderForPayment] = useState(activeOrder) const handleAddRemoveToNaracka = async (menuItem) => { const existingMenuItem = naracka.menuItems.find(item => item.menuItemId === menuItem.menuItemId); if (existingMenuItem) { // If the menu item exists, update its quantity await setNaracka(prevState => ({ ...prevState, menuItems: prevState.menuItems.map(item => { if (item.menuItemId === menuItem.menuItemId) { return {...item, quantity: menuItem.quantity}; } return item; }) })); } else { // If the menu item doesn't exist, add it to the naracka await setNaracka(prevState => ({ ...prevState, menuItems: [...prevState.menuItems, menuItem] })); } }; const handleNarackaSubmit = async (status) => { setNaracka({...naracka, [status]: status}); if (loggedUserRole.activeOwnershipId && activeOrder) { await UpdateOrder(activeOrder.id, naracka); if (status === OrderStatus.PendingAdminApproval) { setOpenPaymentModal(true); } return; } let orderId = await CreateOrder(naracka); ownershipChanges(orderId); if (status === OrderStatus.PendingAdminApproval) { let order = await GetOrder(orderId); setActiveOrderForPayment(order); setOpenPaymentModal(true); } else { navigate(0); } window.alert(`Your Order with Id #${orderId} is ready`); } const handleCreateMenuItem = () => { navigate(location.pathname); setOpenMenuItemModal(false) } return (restorant && {restorant.ime} {restorant.lokacija} , {restorant.rabotnoVreme} {/**/} {/* {restorant.rabotnoVreme}*/} {/**/} Manager: {restorant.manager?.korisnik?.username} {loggedUserRole?.role === UserRole.Potrosuvac && naracka.menuItems?.length > 0 && naracka.menuItems?.some(x => x.quantity > 0) && < > < Button onClick={() => handleNarackaSubmit(OrderStatus.PendingUserApproval)}>Add to Cart } {(isAuthorized(restorant?.manager?.id) || loggedUserRole?.role === UserRole.Admin) && } { restorant.menuItems && restorant.menuItems.length > 0 && restorant.menuItems.map((menuItem) => ( x.menuItemId === menuItem.id)?.quantity} restorant={restorant} itemchange={handleAddRemoveToNaracka}/> )) } { openUpdateModal && setOpenUpdateModal(false)}/> } { openMenuItemModal && } { openPaymentModal && { setOpenPaymentModal(false); navigate(0); }}/> } ) } export default RestorantDetails;