From be4dac443438a6eaf63f34d6a93cdc00c469bbec Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Wed, 23 Nov 2022 10:57:58 +0700 Subject: Filter by price from and price to, optimize code component filter, fix style brand --- src/components/Filter.js | 83 ++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 69 insertions(+), 14 deletions(-) (limited to 'src/components/Filter.js') diff --git a/src/components/Filter.js b/src/components/Filter.js index cb8fd626..a07beff3 100644 --- a/src/components/Filter.js +++ b/src/components/Filter.js @@ -1,28 +1,78 @@ +import { useRouter } from "next/router"; +import { useEffect, useState } from "react"; import CloseIcon from "../icons/close.svg"; const Filter = ({ - selectedBrand, - onChangeBrand, - selectedCategory, - onChangeCategory, - brands, - categories, - isActiveFilter, + isActive, closeFilter, - onSubmit + defaultRoute, + defaultPriceFrom, + defaultPriceTo, + defaultCategory, + defaultBrand, + searchResults }) => { + const router = useRouter(); + + const [priceFrom, setPriceFrom] = useState(defaultPriceFrom); + const [priceTo, setPriceTo] = useState(defaultPriceTo); + const [selectedCategory, setSelectedCategory] = useState(defaultCategory); + const [selectedBrand, setSelectedBrand] = useState(defaultBrand); + const [categories, setCategories] = useState([]); + const [brands, setBrands] = useState([]); + + const filterRoute = () => { + let filterRoute = defaultRoute; + if (selectedBrand) filterRoute += `&brand=${selectedBrand}`; + if (selectedCategory) filterRoute += `&category=${selectedCategory}`; + if (priceFrom > 0) filterRoute += `&price_from=${priceFrom}`; + if (priceTo > 0) filterRoute += `&price_to=${priceTo}`; + return filterRoute; + } + + useEffect(() => { + const filterCategory = searchResults.facet_counts.facet_fields.category_name_str.filter((category, index) => { + if (index % 2 == 0) { + const productCountInCategory = searchResults.facet_counts.facet_fields.category_name_str[index + 1]; + if (productCountInCategory > 0) return category; + } + }); + setCategories(filterCategory); + + const filterBrand = searchResults.facet_counts.facet_fields.brand_str.filter((brand, index) => { + if (index % 2 == 0) { + const productCountInBrand = searchResults.facet_counts.facet_fields.brand_str[index + 1]; + if (productCountInBrand > 0) return brand; + } + }); + setBrands(filterBrand); + }, [searchResults]); + + const submit = (e) => { + e.preventDefault(); + closeFilter(); + router.push(filterRoute(), undefined, { scroll: false }); + } + + const reset = () => { + setSelectedBrand(''); + setSelectedCategory(''); + setPriceFrom(0); + setPriceTo(0); + } + return ( -
+

Filter Produk

-
+
- setSelectedCategory(e.target.value)}> {categories?.map((category, index) => ( @@ -31,7 +81,7 @@ const Filter = ({
- setSelectedBrand(e.target.value)}> {brands?.map((brand, index) => ( @@ -41,14 +91,19 @@ const Filter = ({
- + setPriceFrom(e.target.value)}/> - - + setPriceTo(e.target.value)}/>
+ {selectedBrand || selectedCategory || priceFrom > 0 || priceTo > 0 ? ( + + ) : ''}
) -- cgit v1.2.3