import axios from "axios"; import React, { useContext, useEffect, useReducer } from "react"; import { Link, useNavigate, useParams } from "react-router-dom"; import LoadingBox from "../components/LoadingBox"; import MessageBox from "../components/MessageBox"; import { Store } from "../Store"; import { getError } from "../components/utils"; import { Helmet } from "react-helmet-async"; import Row from "react-bootstrap/Row"; import Card from "react-bootstrap/Card"; import Col from "react-bootstrap/Col"; import ListGroup from "react-bootstrap/ListGroup"; import Button from "react-bootstrap/Button"; import { toast } from "react-toastify"; function reducer(state, action) { switch (action.type) { case "FETCH_REQUEST": return { ...state, loading: true, error: "" }; case "FETCH_SUCCESS": return { ...state, loading: false, order: action.payload, error: "" }; case "FETCH_FAIL": return { ...state, loading: false, error: action.payload }; default: return state; } } export default function OrderScreen() { const { state } = useContext(Store); const { userInfo } = state; const params = useParams(); const { id: orderId } = params; const navigate = useNavigate(); const [{ loading, error, order }, dispatch] = useReducer(reducer, { loading: true, order: {}, error: "", }); useEffect(() => { const fetchOrder = async () => { try { dispatch({ type: "FETCH_REQUEST" }); const { data } = await axios.get(`/api/orders/${orderId}`, { headers: { authorization: `Bearer ${userInfo.token}` }, }); dispatch({ type: "FETCH_SUCCESS", payload: data }); } catch (err) { dispatch({ type: "FETCH_FAIL", payload: getError(err) }); } }; if (!userInfo) { return navigate("/login"); } if (!order._id || (order._id && order._id !== orderId)) { fetchOrder(); } }, [order, userInfo, orderId, navigate]); const confirmOrderHandler = async () => { let isConfirmed = true; let _id = order._id; try { const { data } = await axios.put("/api/orders/action", { isConfirmed, _id, }); toast.success("Нарачката е потврдена"); } catch (err) { dispatch({ type: "FETCH_FAIL" }); toast.error("Грешка"); } }; const sendOrderHandler = async () => { let isShipped = true; let shippedAt = Date(); let _id = order._id; try { const { data } = await axios.put("/api/orders/action", { isShipped, shippedAt, _id, }); toast.success("Нарачката е испратена"); } catch (err) { dispatch({ type: "FETCH_FAIL" }); toast.error("Грешка"); } }; const finishOrderHandler = async () => { let isDelivered = true; let deliveredAt = Date(); let _id = order._id; try { if (order.isPaid) { const { data } = await axios.put("/api/orders/action", { isDelivered, deliveredAt, _id, }); } else { let isPaid = true; let paidAt = Date(); const { data } = await axios.put("/api/orders/action", { _id, isDelivered, deliveredAt, isPaid, paidAt, }); } toast.success("Нарачката е пристигната"); } catch (err) { dispatch({ type: "FETCH_FAIL" }); toast.error("Грешка"); } }; return loading ? ( ) : error ? ( {error} ) : (
Нарачка {orderId}

Нарачка {orderId}

Испорака Име: {order.shippingAddress.fullName}
Адреса: {order.shippingAddress.address}, {order.shippingAddress.city},{order.shippingAddress.postalCode}, {order.shippingAddress.country}
Телефон: {order.contactNumber}
Плаќање Начин:{" "} {order.paymentMethod === "Karticka" ? "Со платежна картичка" : "Во готово при достава"} {order.isPaid ? ( Платено на {order.paidAt} ) : ( Не е платено )} Продукти {order.orderItems.map((item) => (
{item.name} {item.name}
{item.quantity} {item.price} ден
))}
Нарачка Продукти: {order.itemsPrice.toFixed(2)} ден Испорака: {order.shippingPrice.toFixed(2)} ден Вкупно {order.totalPrice.toFixed(2)} ден Акции
); }