From 2bb6618e66884bda5ea327af4158a4322e1bd81d Mon Sep 17 00:00:00 2001 From: aserrador Date: Fri, 23 Jan 2026 15:51:37 -0500 Subject: [PATCH] feat: Add filter products --- src/pages/catalog/Catalog.tsx | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/src/pages/catalog/Catalog.tsx b/src/pages/catalog/Catalog.tsx index 9efdd61..397edc1 100644 --- a/src/pages/catalog/Catalog.tsx +++ b/src/pages/catalog/Catalog.tsx @@ -1,5 +1,5 @@ import { ProductCards } from "./components"; -import { useEffect, useState } from "react"; +import React, { useEffect, useMemo, useState } from "react"; import type { Product, ProductLine } from "../../types"; import Order from "./components/order/Order"; import styles from "./Catalog.module.css"; @@ -8,9 +8,10 @@ import styles from "./Catalog.module.css"; const Catalog = () => { const [products, setProducts] = useState([]); const [productLines, setProductLines] = useState([]); + const [filterText, setFilterText] = useState(""); useEffect(() => { - async function fetchProducts(){ + async function fetchProducts() { try{ const response = await fetch("http://localhost:8010/api/v1/products"); const data = await response.json(); @@ -22,7 +23,7 @@ const Catalog = () => { fetchProducts(); }, []); - function addProductLine(product: Product, quantity: number){ + function addProductLine(product: Product, quantity: number): void{ const newProductLine: ProductLine = { id: Date.now(), product: product, @@ -34,10 +35,30 @@ const Catalog = () => { setProductLines([...productLines, newProductLine]); } + const filteredProducts = useMemo(() => + filterText.trim() + ? products.filter(p => + p.name.toLowerCase().includes(filterText.toLowerCase()) + ) + : products, + [products, filterText] + ); + return (
- +
+
e.preventDefault()}> + setFilterText(event.target.value)}/> + +
+
+