import React, { useState, useEffect, useContext } from 'react'; import { FaArrowLeft, FaUtensils } from "react-icons/fa"; import { useNavigate } from 'react-router-dom'; import { OrderContext } from './OrderContext'; import styles from '../../css/ShoppingCartCss/delivery-details-style.module.css'; const DeliveryDetails = () => { const { isOrderInProgress, isOrderFinished, orderStatus, orderId, startOrder, checkOrderStatus } = useContext(OrderContext); const [address, setAddress] = useState(''); const [addressNumber, setAddressNumber] = useState(''); const [addressFloor, setAddressFloor] = useState(''); const [phoneNumber, setPhoneNumber] = useState(''); const [isLoading, setIsLoading] = useState(false); const [inputsDisabled, setInputsDisabled] = useState(false); const [showModal, setShowModal] = useState(false); const navigate = useNavigate(); const [itemsWithQuantities, setItemsWithQuantities] = useState([]); useEffect(() => { const storedCart = localStorage.getItem('cart'); if (storedCart) { setItemsWithQuantities(JSON.parse(storedCart)); } const storedFullAddress = localStorage.getItem('address'); const storedPhoneNumber = localStorage.getItem('phoneNumber'); if (storedFullAddress) { const [addr, number, floor] = storedFullAddress.split(';'); setAddress(addr.trim()); setAddressNumber(number.trim()); setAddressFloor(floor.trim()); } if (storedPhoneNumber) { setPhoneNumber(storedPhoneNumber.trim()); } }, []); useEffect(() => { if (isOrderInProgress && orderId) { setInputsDisabled(true); } }, [isOrderInProgress, orderId]); useEffect(() => { if (orderId) { const intervalId = setInterval(() => { checkOrderStatus(orderId); }, 1000); return () => clearInterval(intervalId); } }, [orderId, checkOrderStatus]); const handleSubmit = () => { if (orderId || isOrderInProgress) { return; } setIsLoading(true); setShowModal(true); const fullAddress = `${address}; ${addressNumber}; ${addressFloor}`; const order = { address: fullAddress, isFinished: false, }; saveOrderAndProducts(order, itemsWithQuantities); }; const saveOrderAndProducts = (order, items) => { fetch("http://localhost:8080/api/orders", { method: "POST", headers: { "Content-Type": "application/json", "Authorization": `Bearer ${localStorage.getItem('token')}` }, body: JSON.stringify(order) }) .then(response => response.json()) .then(savedOrder => { if (!savedOrder || !savedOrder.id) { throw new Error("Order was not saved correctly."); } startOrder(savedOrder.id); const productOrders = items.map(item => ({ orderId: savedOrder.id, productId: item.id, quantity: item.grams, deliveryPersonId: null, })); return fetch("http://localhost:8080/api/productOrders", { method: "POST", headers: { "Content-Type": "application/json", "Authorization": `Bearer ${localStorage.getItem('token')}` }, body: JSON.stringify(productOrders) }).then(() => savedOrder.id); }) .then(orderId => { setIsLoading(false); checkOrderStatus(orderId); }) .catch(error => { console.error("Error saving order or product orders:", error); setIsLoading(false); }); }; return (
{item.name}
{item.grams} grams (In Recipe: {item.measurement})
{orderStatus}
)} {showModal && (Your order is being processed. Please wait for a delivery person to accept the order.