Skip to content

Commit 6550218

Browse files
authored
Merge pull request #2639 from Ri2-4/main
Fix: rating filter now shows only exact star matches across categories
2 parents f0231c6 + 5f6de2b commit 6550218

19 files changed

+86
-105
lines changed

src/User/components/Popular_Categories/Filters.jsx

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -40,15 +40,15 @@ function Filters({
4040
onChange={(e) => setPriceFilter(e.target.value)}
4141
/>
4242
{/* Filter section for Rating */}
43-
<FilterSection
44-
title="Rating"
45-
options={["1", "2", "3", "4", "5"]}
46-
onChange={(e) => {
47-
const value = parseInt(e.target.value, 10); //converting into int from decimal
48-
setRatingFilter(Number.isNaN(value) ? 0.00 : value); //applying condition for rating or higher
49-
}
50-
}
51-
/>
43+
<FilterSection
44+
title="Rating"
45+
options={["1", "2", "3", "4", "5"]}
46+
onChange={(e) => {
47+
const value = parseInt(e.target.value, 10);
48+
setRatingFilter(Number.isNaN(value) ? null : value); // null means "All"
49+
}}
50+
/>
51+
5252
</div>
5353
</aside>
5454
);

src/User/pages/Latest_in_the_Market/ArtSupplies.jsx

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import ProductGrid from "../../components/Popular_Categories/ProductGrid";
44
import toast from "react-hot-toast";
55
import axios from "axios";
66
import { Helmet } from "react-helmet-async";
7+
import { normalizeAndFilterByRating } from "../../utils/productFilters";
8+
79

810

911

@@ -35,7 +37,7 @@ function ArtSupplies() {
3537
image: product.images[0] || "",
3638
discountPercentage: product.discountPercentage,
3739
rating: {
38-
rate: product.rating,
40+
rate: Math.round(product.rating),
3941
count: product.reviews ? product.reviews.length : 0,
4042
},
4143
}));
@@ -72,11 +74,8 @@ function ArtSupplies() {
7274
(product) => product.price <= parseInt(priceFilter)
7375
);
7476
}
75-
if (ratingFilter) {
76-
updatedProducts = updatedProducts.filter(
77-
(product) => Math.round(product.rating.rate) >= ratingFilter
78-
);
79-
}
77+
updatedProducts = normalizeAndFilterByRating(updatedProducts, ratingFilter);
78+
8079
setFilteredProducts(updatedProducts);
8180
};
8281

src/User/pages/Latest_in_the_Market/BambooProducts.jsx

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import ProductGrid from "../../components/Popular_Categories/ProductGrid";
44
import toast from "react-hot-toast";
55
import axios from "axios";
66
import { Helmet } from "react-helmet-async";
7+
import { normalizeAndFilterByRating } from "../../utils/productFilters";
78

89

910

@@ -35,7 +36,7 @@ function BambooProducts() {
3536
image: product.images[0] || "",
3637
discountPercentage: product.discountPercentage,
3738
rating: {
38-
rate: product.rating,
39+
rate: Math.round(product.rating),
3940
count: product.reviews ? product.reviews.length : 0,
4041
},
4142
}));
@@ -72,11 +73,8 @@ function BambooProducts() {
7273
(product) => product.price <= parseInt(priceFilter)
7374
);
7475
}
75-
if (ratingFilter) {
76-
updatedProducts = updatedProducts.filter(
77-
(product) => Math.round(product.rating.rate) >= ratingFilter
78-
);
79-
}
76+
updatedProducts = normalizeAndFilterByRating(updatedProducts, ratingFilter);
77+
8078
setFilteredProducts(updatedProducts);
8179
};
8280

src/User/pages/Latest_in_the_Market/CeramicDinnerware.jsx

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import ProductGrid from "../../components/Popular_Categories/ProductGrid";
44
import toast from "react-hot-toast";
55
import axios from "axios";
66
import { Helmet } from "react-helmet-async";
7+
import { normalizeAndFilterByRating } from "../../utils/productFilters";
78

89

910

@@ -35,7 +36,7 @@ function CeramicDinnerware() {
3536
image: product.images[0] || "",
3637
discountPercentage: product.discountPercentage,
3738
rating: {
38-
rate: product.rating,
39+
rate: Math.round(product.rating),
3940
count: product.reviews ? product.reviews.length : 0,
4041
},
4142
}));
@@ -72,11 +73,8 @@ function CeramicDinnerware() {
7273
(product) => product.price <= parseInt(priceFilter)
7374
);
7475
}
75-
if (ratingFilter) {
76-
updatedProducts = updatedProducts.filter(
77-
(product) => Math.round(product.rating.rate) >= ratingFilter
78-
);
79-
}
76+
updatedProducts = normalizeAndFilterByRating(updatedProducts, ratingFilter);
77+
8078
setFilteredProducts(updatedProducts);
8179
};
8280

src/User/pages/Latest_in_the_Market/HandMadeSoaps.jsx

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import ProductGrid from "../../components/Popular_Categories/ProductGrid";
44
import toast from "react-hot-toast";
55
import axios from "axios";
66
import { Helmet } from "react-helmet-async";
7+
import { normalizeAndFilterByRating } from "../../utils/productFilters";
78

89

910

@@ -34,7 +35,7 @@ function HandMadeSoaps() {
3435
image: product.images[0] || "",
3536
discountPercentage: product.discountPercentage,
3637
rating: {
37-
rate: product.rating,
38+
rate: Math.round(product.rating),
3839
count: product.reviews ? product.reviews.length : 0,
3940
},
4041
}));
@@ -71,11 +72,8 @@ function HandMadeSoaps() {
7172
(product) => product.price <= parseInt(priceFilter)
7273
);
7374
}
74-
if (ratingFilter) {
75-
updatedProducts = updatedProducts.filter(
76-
(product) => Math.round(product.rating.rate) >= ratingFilter
77-
);
78-
}
75+
updatedProducts = normalizeAndFilterByRating(updatedProducts, ratingFilter);
76+
7977
setFilteredProducts(updatedProducts);
8078
};
8179

src/User/pages/Latest_in_the_Market/NaturalCosmetics.jsx

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import ProductGrid from "../../components/Popular_Categories/ProductGrid";
44
import toast from "react-hot-toast";
55
import axios from "axios";
66
import { Helmet } from "react-helmet-async";
7+
import { normalizeAndFilterByRating } from "../../utils/productFilters";
78

89

910

@@ -35,7 +36,7 @@ function NaturalCosmetics() {
3536
image: product.images[0] || "",
3637
discountPercentage: product.discountPercentage,
3738
rating: {
38-
rate: product.rating,
39+
rate: Math.round(product.rating),
3940
count: product.reviews ? product.reviews.length : 0,
4041
},
4142
}));
@@ -72,11 +73,8 @@ function NaturalCosmetics() {
7273
(product) => product.price <= parseInt(priceFilter)
7374
);
7475
}
75-
if (ratingFilter) {
76-
updatedProducts = updatedProducts.filter(
77-
(product) => Math.round(product.rating.rate) >= ratingFilter
78-
);
79-
}
76+
updatedProducts = normalizeAndFilterByRating(updatedProducts, ratingFilter);
77+
8078
setFilteredProducts(updatedProducts);
8179
};
8280

src/User/pages/Latest_in_the_Market/OrganicSoaps.jsx

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import ProductGrid from "../../components/Popular_Categories/ProductGrid";
44
import toast from "react-hot-toast";
55
import axios from "axios";
66
import { Helmet } from "react-helmet-async";
7+
import { normalizeAndFilterByRating } from "../../utils/productFilters";
78

89

910

@@ -35,7 +36,7 @@ function OrganicSoaps() {
3536
image: product.images[0] || "",
3637
discountPercentage: product.discountPercentage,
3738
rating: {
38-
rate: product.rating,
39+
rate: Math.round(product.rating),
3940
count: product.reviews ? product.reviews.length : 0,
4041
},
4142
}));
@@ -72,11 +73,8 @@ function OrganicSoaps() {
7273
(product) => product.price <= parseInt(priceFilter)
7374
);
7475
}
75-
if (ratingFilter) {
76-
updatedProducts = updatedProducts.filter(
77-
(product) => Math.round(product.rating.rate) >= ratingFilter
78-
);
79-
}
76+
updatedProducts = normalizeAndFilterByRating(updatedProducts, ratingFilter);
77+
8078
setFilteredProducts(updatedProducts);
8179
};
8280

src/User/pages/Latest_in_the_Market/OrganicTea.jsx

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import ProductGrid from "../../components/Popular_Categories/ProductGrid";
44
import toast from "react-hot-toast";
55
import axios from "axios";
66
import { Helmet } from "react-helmet-async";
7+
import { normalizeAndFilterByRating } from "../../utils/productFilters";
8+
79

810

911

@@ -34,7 +36,7 @@ function OrganicTea() {
3436
image: product.images[0] || "",
3537
discountPercentage: product.discountPercentage,
3638
rating: {
37-
rate: product.rating,
39+
rate: Math.round(product.rating),
3840
count: product.reviews ? product.reviews.length : 0,
3941
},
4042
}));
@@ -71,11 +73,8 @@ function OrganicTea() {
7173
(product) => product.price <= parseInt(priceFilter)
7274
);
7375
}
74-
if (ratingFilter) {
75-
updatedProducts = updatedProducts.filter(
76-
(product) => Math.round(product.rating.rate) >= ratingFilter
77-
);
78-
}
76+
updatedProducts = normalizeAndFilterByRating(updatedProducts, ratingFilter);
77+
7978
setFilteredProducts(updatedProducts);
8079
};
8180

src/User/pages/Latest_in_the_Market/StorageBaskets.jsx

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import ProductGrid from "../../components/Popular_Categories/ProductGrid";
44
import toast from "react-hot-toast";
55
import axios from "axios";
66
import { Helmet } from "react-helmet-async";
7+
import { normalizeAndFilterByRating } from "../../utils/productFilters";
78

89

910

@@ -34,7 +35,7 @@ function StorageBaskets() {
3435
image: product.images[0] || "",
3536
discountPercentage: product.discountPercentage,
3637
rating: {
37-
rate: product.rating,
38+
rate: Math.round(product.rating),
3839
count: product.reviews ? product.reviews.length : 0,
3940
},
4041
}));
@@ -71,11 +72,8 @@ function StorageBaskets() {
7172
(product) => product.price <= parseInt(priceFilter)
7273
);
7374
}
74-
if (ratingFilter) {
75-
updatedProducts = updatedProducts.filter(
76-
(product) => Math.round(product.rating.rate) >= ratingFilter
77-
);
78-
}
75+
updatedProducts = normalizeAndFilterByRating(updatedProducts, ratingFilter);
76+
7977
setFilteredProducts(updatedProducts);
8078
};
8179

src/User/pages/Popular_Categories/Beauty-Wellness.jsx

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import ProductGrid from "../../components/Popular_Categories/ProductGrid";
44
import toast from "react-hot-toast";
55
import axios from "axios";
66
import { Helmet } from "react-helmet-async";
7+
import { normalizeAndFilterByRating } from "../../utils/productFilters";
8+
79

810

911
function BeautyWellness() {
@@ -32,7 +34,7 @@ function BeautyWellness() {
3234
image: product.images[0] || "",
3335
discountPercentage: product.discountPercentage,
3436
rating: {
35-
rate: product.rating,
37+
rate: Math.round(product.rating),
3638
count: product.reviews ? product.reviews.length : 0,
3739
},
3840
}));
@@ -69,11 +71,8 @@ function BeautyWellness() {
6971
(product) => product.price <= parseInt(priceFilter)
7072
);
7173
}
72-
if (ratingFilter) {
73-
updatedProducts = updatedProducts.filter(
74-
(product) => Math.round(product.rating.rate) >= ratingFilter
75-
);
76-
}
74+
updatedProducts = normalizeAndFilterByRating(updatedProducts, ratingFilter);
75+
7776
setFilteredProducts(updatedProducts);
7877
};
7978

0 commit comments

Comments
 (0)