1- import { useEffect , useState , useCallback , useRef , useMemo , } from 'react' ;
1+ import { useEffect , useState , useCallback , useRef , useMemo } from 'react' ;
22import { useDispatch , useSelector } from 'react-redux' ;
33import { fetchProducts } from '../../store/productSlice' ;
44import SEO from '../../components/SEO' ;
@@ -18,11 +18,13 @@ export default function Products() {
1818 const observer = useRef ( ) ;
1919
2020 const [ displayedCount , setDisplayedCount ] = useState ( 12 ) ;
21-
21+
2222 // Get max price from products
2323 const maxProductPrice = useMemo ( ( ) => {
2424 if ( ! allProducts || allProducts . length === 0 ) return 100 ;
25- const prices = allProducts . map ( p => Number ( p . price || 0 ) ) . filter ( p => ! isNaN ( p ) && p > 0 ) ;
25+ const prices = allProducts
26+ . map ( ( p ) => Number ( p . price || 0 ) )
27+ . filter ( ( p ) => ! isNaN ( p ) && p > 0 ) ;
2628 return Math . ceil ( Math . max ( ...prices ) ) || 100 ;
2729 } , [ allProducts ] ) ;
2830
@@ -45,9 +47,8 @@ export default function Products() {
4547 return allProducts . filter ( ( p ) => {
4648 const price = Number ( p . price || 0 ) ;
4749 if ( Number . isNaN ( price ) ) return false ;
48-
49- if ( price < minPrice || price > maxPrice ) return false ;
5050
51+ if ( price < minPrice || price > maxPrice ) return false ;
5152
5253 if ( filters . garageSaleOnly ) {
5354 // consider sale fields: sale > 0 or onSale flag
@@ -102,10 +103,12 @@ export default function Products() {
102103 keywords = "sports nutrition, supplements, protein powder, pre-workout, fitness products, CoreX Nutrition"
103104 />
104105
105- < main className = { `min-h-screen bg-[#F7FAFF] ${ isFilterOpen ? 'relative' : '' } ` } >
106+ < main
107+ className = { `min-h-screen bg-[#F7FAFF] ${ isFilterOpen ? 'relative' : '' } ` }
108+ >
106109 { /* Filter Panel Backdrop - covers entire viewport including header */ }
107110 { isFilterOpen && (
108- < div
111+ < div
109112 className = "fixed inset-0 bg-black/60 backdrop-blur-sm transition-opacity duration-300"
110113 style = { { zIndex : 9998 } }
111114 onClick = { ( ) => setIsFilterOpen ( false ) }
@@ -130,7 +133,10 @@ export default function Products() {
130133 < section className = "max-w-6xl mx-auto px-4 sm:px-6 lg:px-8 py-8" >
131134 < div className = "flex flex-col sm:flex-row sm:justify-between sm:items-center gap-4" >
132135 { /* Left: All Filters button (full width on mobile) */ }
133- < button onClick = { ( ) => setIsFilterOpen ( true ) } className = "w-full sm:w-auto flex items-center justify-center gap-2 bg-transparent text-gray-700 px-4 py-2 sm:px-6 sm:py-3 rounded-lg font-medium border border-gray-300 hover:border-blue-500 hover:text-blue-600 hover:bg-blue-50 transition-all duration-300 cursor-pointer" >
136+ < button
137+ onClick = { ( ) => setIsFilterOpen ( true ) }
138+ className = "w-full sm:w-auto flex items-center justify-center gap-2 bg-transparent text-gray-700 px-4 py-2 sm:px-6 sm:py-3 rounded-lg font-medium border border-gray-300 hover:border-blue-500 hover:text-blue-600 hover:bg-blue-50 transition-all duration-300 cursor-pointer"
139+ >
134140 < span className = "hidden sm:inline" > All Filters</ span >
135141 < span className = "sm:hidden" > Filters</ span >
136142 < svg
@@ -162,15 +168,22 @@ export default function Products() {
162168 // Supported backend keys: feature (default), a-z, z-a, price_asc, price_desc, rating_asc, rating_desc
163169 let sortKey = 'feature' ;
164170 if ( field === 'title' && order === 'asc' ) sortKey = 'a-z' ;
165- else if ( field === 'title' && order === 'desc' ) sortKey = 'z-a' ;
166- else if ( field === 'price' && order === 'asc' ) sortKey = 'price_asc' ;
167- else if ( field === 'price' && order === 'desc' ) sortKey = 'price_desc' ;
168- else if ( field === 'rating' && order === 'asc' ) sortKey = 'rating_asc' ;
169- else if ( field === 'rating' && order === 'desc' ) sortKey = 'rating_desc' ;
171+ else if ( field === 'title' && order === 'desc' )
172+ sortKey = 'z-a' ;
173+ else if ( field === 'price' && order === 'asc' )
174+ sortKey = 'price_asc' ;
175+ else if ( field === 'price' && order === 'desc' )
176+ sortKey = 'price_desc' ;
177+ else if ( field === 'rating' && order === 'asc' )
178+ sortKey = 'rating_asc' ;
179+ else if ( field === 'rating' && order === 'desc' )
180+ sortKey = 'rating_desc' ;
170181 else sortKey = 'feature' ;
171182
172183 // Fetch products from backend with sort
173- dispatch ( fetchProducts ( { page : 1 , limit : 1000 , sort : sortKey } ) ) ;
184+ dispatch (
185+ fetchProducts ( { page : 1 , limit : 1000 , sort : sortKey } )
186+ ) ;
174187 } }
175188 />
176189 </ div >
@@ -223,9 +236,7 @@ export default function Products() {
223236 />
224237 { hasMoreProducts && (
225238 < div className = "flex justify-center mt-8" >
226- < div className = "text-gray-500" >
227- Loading more...
228- </ div >
239+ < div className = "text-gray-500" > Loading more...</ div >
229240 </ div >
230241 ) }
231242 </ >
0 commit comments