diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index 8e8a441..aada74e 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -6,6 +6,7 @@ import About from "./pages/About"; import Shop from "./pages/Shop"; import NotFoundPage from "./pages/NotFoundPage"; import Contact from "./pages/Contact"; +import Cart from "./pages/Cart"; const PrivateRoute = ({ children }) => { const token = localStorage.getItem("token"); @@ -26,6 +27,14 @@ export default function App() { } /> } /> } /> + + + + } + /> } /> diff --git a/frontend/src/api/index.js b/frontend/src/api/index.js index cc51a59..a357a28 100644 --- a/frontend/src/api/index.js +++ b/frontend/src/api/index.js @@ -38,3 +38,8 @@ export const updateItem = (id, itemData) => export const deleteItem = (id) => axios.delete(`${API_URL}/items/${id}`); export const getAllCategories = () => axios.get(`${API_URL}/getCategories`) + +export const getCart = () => axios.get(`${API_URL}/cart/`); +export const addToCart = (data) => axios.post(`${API_URL}/cart/`, data) +export const updateCartItem = (id, data) => axios.post(`${API_URL}/cart/${id}`, data) +export const removeFromCart = (id) => axios.post(`${API_URL}/cart/${id}`) diff --git a/frontend/src/pages/Cart.jsx b/frontend/src/pages/Cart.jsx new file mode 100644 index 0000000..f9ec8c3 --- /dev/null +++ b/frontend/src/pages/Cart.jsx @@ -0,0 +1,56 @@ +import { useState, useEffect } from "react"; +import PageLayout from "../components/PageLayout"; +import { getCart } from "../api/index"; +export default function Cart() { + const [items, setItems] = useState([]); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + + useEffect(() => { + getCart() + .then((res) => { + setItems(res.data); + }) + .catch(() => setError("Не удалось загрузить товары")) + .finally(() => setLoading(false)); + }, []); + + const total = items.reduce((sum, ci) => sum + ci.quantity * ci.item.price, 0); + + if (loading) { + return ( + + Загрузка товаров + + ); + } + return ( + + + + Корзина + + {error && {error}} + {items.length === 0 ? ( + Корзина пуста + ) : ( + + {items.map((ci) => ( + + {ci.item.name} + + {ci.quanitity} x {ci.item.price} ={" "} + {ci.quantity * ci.item.price} + + + ))} + Итого: {total}р. + + )} + + + ); +}
Загрузка товаров
{error}
Корзина пуста