From 66cc9c6801774d94f620d05f396a1562f9d720d1 Mon Sep 17 00:00:00 2001 From: Victor Date: Thu, 4 Apr 2024 11:38:29 +0200 Subject: [PATCH] un peu mieux --- src/components/item/ItemPage.jsx | 88 +++++++++++++++++++++++--------- 1 file changed, 64 insertions(+), 24 deletions(-) diff --git a/src/components/item/ItemPage.jsx b/src/components/item/ItemPage.jsx index 80a9823..c0a7115 100644 --- a/src/components/item/ItemPage.jsx +++ b/src/components/item/ItemPage.jsx @@ -1,13 +1,15 @@ import React, { useState, useEffect } from "react"; -import axios from 'axios'; +import axios from 'axios'; // Assurez-vous que le chemin d'importation soit correct import { ItemBox } from './ItemBox'; -import { Space, DatePicker } from 'antd'; +import { Space, DatePicker, Row, Col, Select, Input, InputNumber } from 'antd'; const { RangePicker } = DatePicker; +const { Option } = Select; -const itemsPerPage = 4; -const itemsPerRow = 2; +const itemsPerPage = 8; // Nombre total d'items par page +const itemsPerRow = 4; // Nombre d'items par rangée +// Fonction pour diviser le tableau d'items en rangées const chunkArray = (arr, size) => { const chunkedArr = []; for (let i = 0; i < arr.length; i += size) { @@ -16,15 +18,18 @@ const chunkArray = (arr, size) => { return chunkedArr; }; - +// Composant d'affichage de la page export const ItemPage = () => { const [items, setItems] = useState([]); - const [filteredItems, setFilteredItems] = useState([]); + const [filteredItems, setFilteredItems] = useState([]); // State pour les items filtrés const [currentPage, setCurrentPage] = useState(1); const [filterName, setFilterName] = useState(''); const [filterPriceMin, setFilterPriceMin] = useState(''); const [filterPriceMax, setFilterPriceMax] = useState(''); const [filterDateRange, setFilterDateRange] = useState([]); + const [selectedRoom, setSelectedRoom] = useState('all'); // State pour la chambre sélectionnée + + const [rooms, setRooms] = useState([]); // State pour stocker les chambres useEffect(() => { const fetchItems = async () => { @@ -37,28 +42,43 @@ export const ItemPage = () => { console.error(error); } }; + + const fetchRooms = async () => { + try { + const response = await axios.get( + `${import.meta.env.VITE_API_URL}/room`, + ); + setRooms(response.data); + } catch (error) { + console.error(error); + } + }; fetchItems(); + fetchRooms(); }, []); useEffect(() => { + // Filtrer les éléments chaque fois que les filtres ou la chambre sélectionnée changent const filtered = items.filter(item => { - // Filtrer nom (brand / model) + // Filtrer par chambre si une chambre est sélectionnée + const matchesRoom = selectedRoom === 'all' || item.room === selectedRoom; + // Filtrer par nom (brand ou model) const matchesName = item.brand.toLowerCase().includes(filterName.toLowerCase()) || item.model.toLowerCase().includes(filterName.toLowerCase()); - // Filtre prix + // Filtrer par prix const matchesPrice = (filterPriceMin === '' || item.price >= parseFloat(filterPriceMin)) && (filterPriceMax === '' || item.price <= parseFloat(filterPriceMax)); - // Filtre date + // Filtrer par date const matchesDate = filterDateRange.length === 0 || ( new Date(item.purchaseDate) >= filterDateRange[0] && new Date(item.purchaseDate) <= filterDateRange[1] ); - return matchesName && matchesPrice && matchesDate; + return matchesRoom && matchesName && matchesPrice && matchesDate; }); setFilteredItems(filtered); - }, [items, filterName, filterPriceMin, filterPriceMax, filterDateRange]); + }, [items, selectedRoom, filterName, filterPriceMin, filterPriceMax, filterDateRange]); const handleNextPage = () => { setCurrentPage(prevPage => prevPage + 1); @@ -68,6 +88,10 @@ export const ItemPage = () => { setCurrentPage(prevPage => prevPage - 1); }; + const handleRoomChange = (value) => { + setSelectedRoom(value); + }; + const chunkedItems = chunkArray(filteredItems, itemsPerRow); const startIndex = (currentPage - 1) * (itemsPerPage / itemsPerRow); const endIndex = startIndex + (itemsPerPage / itemsPerRow); @@ -75,12 +99,23 @@ export const ItemPage = () => { return (
- setFilterName(e.target.value)} /> + {/* Ajouter des éléments d'interface utilisateur pour les filtres */} + + + + setFilterName(e.target.value)} /> + +
- setFilterPriceMin(e.target.value)} /> + setFilterPriceMin(value)} /> - - setFilterPriceMax(e.target.value)} /> + setFilterPriceMax(value)} />
{ value={filterDateRange} />
- - {rowsToDisplay.map((row, index) => ( -
- {row.map(item => ( - - ))} -
- ))} + + {/* Utiliser Row et Col pour afficher les éléments */} + + {rowsToDisplay.map((row, rowIndex) => ( + + {row.map(item => ( + + + + ))} + + ))} +
- + Page {currentPage} - +
);