From 7753dee0e0f3b7ddb5f760cfe5fc3a2440b43b16 Mon Sep 17 00:00:00 2001 From: kefflen Date: Sat, 20 Jan 2024 19:24:02 -0300 Subject: [PATCH 01/10] fix: solving problem where fetch products cause infinite request to backend --- package-lock.json | 1 + src/Components/ProductTable.jsx | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index d01ddfa..bbd664e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,6 +5,7 @@ "requires": true, "packages": { "": { + "name": "react-ecommerce", "version": "0.0.1", "dependencies": { "@headlessui/react": "^1.6.0", diff --git a/src/Components/ProductTable.jsx b/src/Components/ProductTable.jsx index ea76621..4bcff02 100644 --- a/src/Components/ProductTable.jsx +++ b/src/Components/ProductTable.jsx @@ -41,7 +41,7 @@ export default function ProductTable({ cart, updateCart }) { setProducts(body); }; fetchProducts(); - }); + }, []); return (
From ea4869ed7325a36591e3618085b0a48c5c438cd3 Mon Sep 17 00:00:00 2001 From: kefflen Date: Sat, 20 Jan 2024 19:55:09 -0300 Subject: [PATCH 02/10] fix: implementing sort by price and release date --- src/Components/ProductFilters.jsx | 5 ++++- src/Components/ProductTable.jsx | 6 ++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/Components/ProductFilters.jsx b/src/Components/ProductFilters.jsx index 0f3262a..2e6ded4 100644 --- a/src/Components/ProductFilters.jsx +++ b/src/Components/ProductFilters.jsx @@ -109,7 +109,10 @@ export default function ProductFilters({ filterOptions, setFilterOptions, sortOp {({ active }) => (
- ); + ) } From 64036991721b4f049f543a1f32f94b09f64c6931 Mon Sep 17 00:00:00 2001 From: kefflen Date: Sat, 20 Jan 2024 21:40:54 -0300 Subject: [PATCH 04/10] feat: implementing filter by color --- src/Components/ProductFilters.jsx | 13 ++++++++++++- src/Components/ProductTable.jsx | 12 ++++++++++-- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/Components/ProductFilters.jsx b/src/Components/ProductFilters.jsx index 29b5608..589b8ac 100644 --- a/src/Components/ProductFilters.jsx +++ b/src/Components/ProductFilters.jsx @@ -75,7 +75,18 @@ export default function ProductFilters({ filterOptions, setFilterOptions, sortOp { + const newColorFilterOption = filterOptions.color.map(filterOption => { + if (filterOption.label === option.label) { + return { ...filterOption, checked: e.target.checked } + } else { + return { ...filterOption, checked: false } + } + }) + console.log(newColorFilterOption) + setFilterOptions({ ...filterOptions, color: newColorFilterOption }) + }} type="checkbox" className="flex-shrink-0 h-4 w-4 border-gray-300 rounded text-black focus:ring-black" defaultChecked={option.checked} diff --git a/src/Components/ProductTable.jsx b/src/Components/ProductTable.jsx index f46d9ae..3e09f1d 100644 --- a/src/Components/ProductTable.jsx +++ b/src/Components/ProductTable.jsx @@ -34,9 +34,10 @@ export default function ProductTable({ cart, updateCart }) { const [sortOptions, setSortOptions] = useState(getDefaultSortOptions()) const activeSortOption = sortOptions.find((option) => option.current) const activePriceFilterOption = filterOptions.price.find((option) => option.checked) + const activeColorFilterOptions = filterOptions.color.find((option) => option.checked) const buildPriceQuery = () => { - let priceQuery = activeSortOption? '&': '' + let priceQuery = activeSortOption ? '&' : '' if (activePriceFilterOption) { priceQuery = `price_gte=${activePriceFilterOption.minValue}` } @@ -46,13 +47,20 @@ export default function ProductTable({ cart, updateCart }) { return priceQuery } + const buildColorQuery = () => { + let colorQuery = (activeSortOption || activePriceFilterOption) ? '&' : '' + colorQuery += `color=${activeColorFilterOptions.value}` + return colorQuery + } + useEffect(() => { let fetchProducts = async () => { console.info("Fetching Products...") const sortQuery = activeSortOption ? `&_sort=${activeSortOption.name.toLowerCase()}` : `` const priceQuery = buildPriceQuery() + const colorQuery = buildColorQuery() - let res = await fetch(`http://localhost:3001/products?${sortQuery}${priceQuery}`) + let res = await fetch(`http://localhost:3001/products?${sortQuery}${priceQuery}${colorQuery}`) let body = await res.json() console.log(priceQuery) setProducts(body) From ab924a82fc26e86fe6182612985de58f177de811 Mon Sep 17 00:00:00 2001 From: kefflen Date: Sat, 20 Jan 2024 22:27:38 -0300 Subject: [PATCH 05/10] fix: fixing error where when have not color filter cannot fetch data --- src/Components/ProductTable.jsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Components/ProductTable.jsx b/src/Components/ProductTable.jsx index 3e09f1d..134a4d7 100644 --- a/src/Components/ProductTable.jsx +++ b/src/Components/ProductTable.jsx @@ -49,7 +49,9 @@ export default function ProductTable({ cart, updateCart }) { const buildColorQuery = () => { let colorQuery = (activeSortOption || activePriceFilterOption) ? '&' : '' - colorQuery += `color=${activeColorFilterOptions.value}` + if (activeColorFilterOptions) { + colorQuery += `color=${activeColorFilterOptions.value}` + } return colorQuery } From 52d34b87f058d9f3a70273e321cefdb788907db4 Mon Sep 17 00:00:00 2001 From: kefflen Date: Sat, 20 Jan 2024 22:30:08 -0300 Subject: [PATCH 06/10] feat: implementing clear all fiters and add filters counter --- src/Components/ProductFilters.jsx | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/Components/ProductFilters.jsx b/src/Components/ProductFilters.jsx index 589b8ac..bde3dfb 100644 --- a/src/Components/ProductFilters.jsx +++ b/src/Components/ProductFilters.jsx @@ -7,6 +7,9 @@ function classNames(...classes) { } export default function ProductFilters({ filterOptions, setFilterOptions, sortOptions, setSortOptions }) { + const activePriceFilterOption = filterOptions.price.find((option) => option.checked) + const activeColorFilterOptions = filterOptions.color.find((option) => option.checked) + return (