From ca3a9c8aee07a595023f54aa810debbb40e2efcd Mon Sep 17 00:00:00 2001 From: Baryshev Dmitry Date: Thu, 9 Oct 2025 14:46:34 +0400 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=BF=20=D0=BF=D1=80=D0=B8=D0=BD?= =?UTF-8?q?=D1=8F=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.css | 23 +++++++++++++ src/Pages/CatalogPage.jsx | 70 +++++++++++++++++++++++++++++++++++++-- 2 files changed, 91 insertions(+), 2 deletions(-) diff --git a/src/App.css b/src/App.css index 75323f0..127a4d3 100644 --- a/src/App.css +++ b/src/App.css @@ -80,4 +80,27 @@ main { .card:hover { transform: translateY(-5px); +} + +/* Добавьте в конец файла App.css */ + +/* Стили для панели сортировки */ +.sort-panel { + background-color: #f8f9fa; + border-radius: 8px; + padding: 15px; +} + +.sort-select { + border-color: #00264d; +} + +.sort-select:focus { + border-color: #00264d; + box-shadow: 0 0 0 0.2rem rgba(0, 38, 77, 0.25); +} + +.sort-info { + background-color: #e3f2fd; + border-left: 4px solid #00264d; } \ No newline at end of file diff --git a/src/Pages/CatalogPage.jsx b/src/Pages/CatalogPage.jsx index 5ec2f78..cdde0fd 100644 --- a/src/Pages/CatalogPage.jsx +++ b/src/Pages/CatalogPage.jsx @@ -19,6 +19,23 @@ export default function CatalogPage() { } = useProducts(); const [showAddForm, setShowAddForm] = useState(false); + const [sortBy, setSortBy] = useState(''); // '' - без сортировки, 'price_asc' - по возрастанию, 'price_desc' - по убыванию + + // Функция для сортировки товаров + const getSortedProducts = () => { + const productsCopy = [...products]; + + switch (sortBy) { + case 'price_asc': + return productsCopy.sort((a, b) => parseFloat(a.price) - parseFloat(b.price)); + case 'price_desc': + return productsCopy.sort((a, b) => parseFloat(b.price) - parseFloat(a.price)); + default: + return productsCopy; + } + }; + + const sortedProducts = getSortedProducts(); const handleAddProduct = async (productData) => { try { @@ -47,6 +64,10 @@ export default function CatalogPage() { } }; + const handleSortChange = (e) => { + setSortBy(e.target.value); + }; + if (loading) { return (
@@ -83,6 +104,51 @@ export default function CatalogPage() { + {/* Панель сортировки */} +
+
+
+
+
+
+ +
+
+ +
+
+
+
+
+ + {/* Информация о сортировке */} +
+ {sortBy && ( +
+
+ + + {sortBy === 'price_asc' && 'Сортировка: от дешевых к дорогим'} + {sortBy === 'price_desc' && 'Сортировка: от дорогих к дешевым'} + {sortedProducts.length > 0 && ` (${sortedProducts.length} товаров)`} + +
+
+ )} +
+
+ {showAddForm && (
@@ -99,7 +165,7 @@ export default function CatalogPage() { {/* 3 карточки в ряд на всех экранах кроме мобильных */}
- {products.map(product => ( + {sortedProducts.map(product => ( - {products.length === 0 && !showAddForm && ( + {sortedProducts.length === 0 && !showAddForm && (

Товаров пока нет

Добавьте первый товар в каталог